diff --git a/.gitignore b/.gitignore index d4109e19..9c093e21 100644 --- a/.gitignore +++ b/.gitignore @@ -1,15 +1,52 @@ -src/*.exe +*.tar.gz + +*.exe src/myriadcoin src/myriadcoind -src/test_myriadcoin +src/myriadcoin-cli +src/test/test_myriadcoin +src/qt/test/test_myriadcoin-qt + +Makefile.in +aclocal.m4 +autom4te.cache/ +config.log +config.status +configure +src/bitcoin-config.h +src/bitcoin-config.h.in +src/build-aux/ +src/stamp-h1 +share/setup.nsi +share/qt/Info.plist + +src/qt/*.moc +src/qt/moc_*.cpp +src/qt/forms/ui_*.h + +src/qt/test/moc*.cpp + +.deps +.dirstamp .*.swp *.*~* *.bak *.rej *.orig *.o +*.o-* *.patch .myriadcoin +*.a +*.pb.cc +*.pb.h + +*.log +*.trs +*.dmg + +*.json.h +*.raw.h # Compilation and Qt preprocessor part *.qm @@ -31,4 +68,18 @@ qrc_*.cpp .DS_Store build -!src/leveldb-*/Makefile +#lcov +*.gcno +/*.info +test_bitcoin.coverage/ +total.coverage/ +coverage_percent.txt + +#build tests +linux-coverage-build +linux-build +win32-build +qa/pull-tester/run-bitcoind-for-test.sh +qa/pull-tester/build-tests.sh + +!src/leveldb*/Makefile diff --git a/COPYING b/COPYING index c410baa6..8834a3db 100644 --- a/COPYING +++ b/COPYING @@ -1,4 +1,4 @@ -Copyright (c) 2009-2013 Bitcoin Developers +Copyright (c) 2009-2013 Myriadcoin 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/INSTALL b/INSTALL index 4d931e2b..3142c47e 100644 --- a/INSTALL +++ b/INSTALL @@ -1,9 +1,5 @@ -Building Bitcoin - -See doc/readme-qt.md for instructions on building Bitcoin-Qt, -the intended-for-end-users, nice-graphical-interface, reference -implementation of Bitcoin. +Building Myriadcoin See doc/build-*.md for instructions on building bitcoind, the intended-for-services, no-graphical-interface, reference -implementation of Bitcoin. \ No newline at end of file +implementation of Myriadcoin. \ No newline at end of file diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 00000000..84465f4e --- /dev/null +++ b/Makefile.am @@ -0,0 +1,172 @@ +ACLOCAL_AMFLAGS = -I src/m4 +SUBDIRS = src +.PHONY: deploy + +GZIP_ENV="-9n" + +BITCOIND_BIN=$(top_builddir)/src/myriadcoind$(EXEEXT) +BITCOIN_QT_BIN=$(top_builddir)/src/qt/myriadcoin-qt$(EXEEXT) +BITCOIN_CLI_BIN=$(top_builddir)/src/myriadcoin-cli$(EXEEXT) +BITCOIN_WIN_INSTALLER=$(PACKAGE)-$(PACKAGE_VERSION)-win$(WINDOWS_BITS)-setup$(EXEEXT) + +OSX_APP=Myriadcoin-Qt.app +OSX_DMG=Myriadcoin-Qt.dmg +OSX_DEPLOY_SCRIPT=$(top_srcdir)/contrib/macdeploy/macdeployqtplus +OSX_FANCY_PLIST=$(top_srcdir)/contrib/macdeploy/fancy.plist +OSX_INSTALLER_ICONS=$(top_srcdir)/src/qt/res/icons/bitcoin.icns +OSX_PLIST=$(top_srcdir)/share/qt/Info.plist #not installed +OSX_QT_TRANSLATIONS = da,de,es,hu,ru,uk,zh_CN,zh_TW + +DIST_DOCS = $(wildcard doc/*.md) $(wildcard doc/release-notes/*.md) + +WINDOWS_PACKAGING = $(top_srcdir)/share/pixmaps/bitcoin.ico \ + $(top_srcdir)/share/pixmaps/nsis-header.bmp \ + $(top_srcdir)/share/pixmaps/nsis-wizard.bmp \ + $(top_srcdir)/doc/README_windows.txt + +OSX_PACKAGING = $(OSX_DEPLOY_SCRIPT) $(OSX_FANCY_PLIST) $(OSX_INSTALLER_ICONS) \ + $(top_srcdir)/contrib/macdeploy/background.png \ + $(top_srcdir)/contrib/macdeploy/DS_Store + +COVERAGE_INFO = baseline_filtered_combined.info baseline.info block_test.info \ + leveldb_baseline.info test_bitcoin_filtered.info total_coverage.info \ + baseline_filtered.info block_test_filtered.info \ + leveldb_baseline_filtered.info test_bitcoin_coverage.info test_bitcoin.info + +dist-hook: + -$(MAKE) -C $(top_distdir)/src/leveldb clean + -$(GIT) archive --format=tar HEAD -- src/version.cpp | $(AMTAR) -C $(top_distdir) -xf - + +distcheck-hook: + $(MKDIR_P) $(top_distdir)/_build/src/leveldb + cp -rf $(top_srcdir)/src/leveldb/* $(top_distdir)/_build/src/leveldb/ + -$(MAKE) -C $(top_distdir)/_build/src/leveldb clean + +distcleancheck: + @: + +$(BITCOIN_WIN_INSTALLER): $(BITCOIND_BIN) $(BITCOIN_QT_BIN) $(BITCOIN_CLI_BIN) + $(MKDIR_P) $(top_builddir)/release + STRIPPROG="$(STRIP)" $(INSTALL_STRIP_PROGRAM) $(BITCOIND_BIN) $(top_builddir)/release + STRIPPROG="$(STRIP)" $(INSTALL_STRIP_PROGRAM) $(BITCOIN_QT_BIN) $(top_builddir)/release + STRIPPROG="$(STRIP)" $(INSTALL_STRIP_PROGRAM) $(BITCOIN_CLI_BIN) $(top_builddir)/release + @test -f $(MAKENSIS) && $(MAKENSIS) $(top_builddir)/share/setup.nsi || \ + echo error: could not build $@ + +$(BITCOIND_BIN) $(BITCOIN_QT_BIN) $(BITCOIN_CLI_BIN): + make -C $(dir $@) $(notdir $@) + +$(OSX_APP)/Contents/PkgInfo: + $(MKDIR_P) $(@D) + @echo "APPL????" > $@ + +$(OSX_APP)/Contents/Resources/empty.lproj: + $(MKDIR_P) $(@D) + @touch $@ + +$(OSX_APP)/Contents/Info.plist: $(OSX_PLIST) + $(MKDIR_P) $(@D) + $(INSTALL_DATA) $< $@ + +$(OSX_APP)/Contents/Resources/bitcoin.icns: $(OSX_INSTALLER_ICONS) + $(MKDIR_P) $(@D) + $(INSTALL_DATA) $< $@ + +$(OSX_APP)/Contents/MacOS/Myriadcoin-Qt: $(BITCOIN_QT_BIN) + $(MKDIR_P) $(@D) + STRIPPROG="$(STRIP)" $(INSTALL_STRIP_PROGRAM) $< $@ + +OSX_APP_BUILT=$(OSX_APP)/Contents/PkgInfo $(OSX_APP)/Contents/Resources/empty.lproj \ + $(OSX_APP)/Contents/Resources/bitcoin.icns $(OSX_APP)/Contents/Info.plist \ + $(OSX_APP)/Contents/MacOS/Myriadcoin-Qt + +if BUILD_DARWIN +$(OSX_DMG): $(OSX_APP_BUILT) $(OSX_PACKAGING) + $(OSX_DEPLOY_SCRIPT) $(OSX_APP) -add-qt-tr $(OSX_QT_TRANSLATIONS) -dmg -fancy $(OSX_FANCY_PLIST) -verbose 2 + +else +$(OSX_DMG): $(OSX_APP_BUILT) $(OSX_PACKAGING) + INSTALLNAMETOOL=$(INSTALLNAMETOOL) OTOOL=$(OTOOL) STRIP=$(STRIP) $(OSX_DEPLOY_SCRIPT) $(OSX_APP) -add-qt-tr $(OSX_QT_TRANSLATIONS) -verbose 2 + $(MKDIR_P) dist/.background + $(INSTALL) contrib/macdeploy/background.png dist/.background + $(INSTALL) contrib/macdeploy/DS_Store dist/.DS_Store + cd dist; $(LN_S) /Applications Applications + $(GENISOIMAGE) -no-cache-inodes -l -probe -V "Myriadcoin-Qt" -no-pad -r -apple -o $@ dist +endif + +if TARGET_DARWIN +appbundle: $(OSX_APP_BUILT) +deploy: $(OSX_DMG) +endif +if TARGET_WINDOWS +deploy: $(BITCOIN_WIN_INSTALLER) +endif + +if USE_LCOV + +baseline.info: + $(LCOV) -c -i -d $(abs_builddir)/src -o $@ + +baseline_filtered.info: baseline.info + $(LCOV) -r $< "/usr/include/*" -o $@ + +leveldb_baseline.info: baseline_filtered.info + $(LCOV) -c -i -d $(abs_builddir)/src/leveldb -b $(abs_builddir)/src/leveldb -o $@ + +leveldb_baseline_filtered.info: leveldb_baseline.info + $(LCOV) -r $< "/usr/include/*" -o $@ + +baseline_filtered_combined.info: leveldb_baseline_filtered.info baseline_filtered.info + $(LCOV) -a leveldb_baseline_filtered.info -a baseline_filtered.info -o $@ + +test_bitcoin.info: baseline_filtered_combined.info + $(MAKE) -C src/ check + $(LCOV) -c -d $(abs_builddir)/src -t test_bitcoin -o $@ + $(LCOV) -z -d $(abs_builddir)/src + $(LCOV) -z -d $(abs_builddir)/src/leveldb + +test_bitcoin_filtered.info: test_bitcoin.info + $(LCOV) -r $< "/usr/include/*" -o $@ + +block_test.info: test_bitcoin_filtered.info + $(MKDIR_P) qa/tmp + -@TIMEOUT=15 qa/pull-tester/run-bitcoind-for-test.sh $(JAVA) -jar $(JAVA_COMPARISON_TOOL) qa/tmp/compTool 0 + $(LCOV) -c -d $(abs_builddir)/src --t BitcoinJBlockTest -o $@ + $(LCOV) -z -d $(abs_builddir)/src + $(LCOV) -z -d $(abs_builddir)/src/leveldb + +block_test_filtered.info: block_test.info + $(LCOV) -r $< "/usr/include/*" -o $@ + +test_bitcoin_coverage.info: baseline_filtered_combined.info test_bitcoin_filtered.info + $(LCOV) -a baseline_filtered.info -a leveldb_baseline_filtered.info -a test_bitcoin_filtered.info -o $@ + +total_coverage.info: baseline_filtered_combined.info test_bitcoin_filtered.info block_test_filtered.info + $(LCOV) -a baseline_filtered.info -a leveldb_baseline_filtered.info -a test_bitcoin_filtered.info -a block_test_filtered.info -o $@ | $(GREP) "\%" | $(AWK) '{ print substr($$3,2,50) "/" $$5 }' > coverage_percent.txt + +test_bitcoin.coverage/.dirstamp: test_bitcoin_coverage.info + $(GENHTML) -s $< -o $(@D) + @touch $@ + +total.coverage/.dirstamp: total_coverage.info + $(GENHTML) -s $< -o $(@D) + @touch $@ + +cov: test_bitcoin.coverage/.dirstamp total.coverage/.dirstamp + +endif + +if USE_COMPARISON_TOOL +check-local: + $(MKDIR_P) qa/tmp + @qa/pull-tester/run-bitcoind-for-test.sh $(JAVA) -jar $(JAVA_COMPARISON_TOOL) qa/tmp/compTool $(COMPARISON_TOOL_REORG_TESTS) +endif + +EXTRA_DIST = $(top_srcdir)/share/genbuild.sh qa/pull-tester/pull-tester.sh qa/rpc-tests $(DIST_DOCS) $(WINDOWS_PACKAGING) $(OSX_PACKAGING) + +CLEANFILES = $(OSX_DMG) $(BITCOIN_WIN_INSTALLER) + +.INTERMEDIATE: $(COVERAGE_INFO) + +clean-local: + rm -rf test_bitcoin.coverage/ total.coverage/ $(OSX_APP) diff --git a/README.md b/README.md index f7686310..42d6f629 100644 --- a/README.md +++ b/README.md @@ -1,28 +1,84 @@ -Myriadcoin integration/staging tree -=================================== +Myriadcoin Core integration/staging tree +======================================== + +http://www.myriadcoin.org + +Copyright (c) 2009-2014 Bitcoin Core Developers + +Copyright (c) 2014 Myriadcoin Core Developers -Copyright (c) 2009-2013 Bitcoin Developers, -Copyright (c) 2013-2014 Zetacoin Developers -Copyright (c) 2014 Myriadcoin Developers What is Myriadcoin? ------------------- +------------------- Myriadcoin is an experimental new digital currency that enables instant payments to anyone, anywhere in the world. Myriadcoin uses peer-to-peer technology to operate with no central authority: managing transactions and issuing money are carried -out collectively by the network. Myriadcoin is also the name of the open source +out collectively by the network. Myriadcoin Core is the name of open source software which enables the use of this currency. For more information, as well as an immediately useable, binary version of -the Myriadcoin client sofware, see https://bitcointalk.org/index.php?topic=483515.0 - -Pull Tester ------------ -All Builds and Pull Request will be automatically tested thanks to ahmed_bodi from @CryptoPools +the Myriadcoin Core software, see http://www.myriadcoin.org/ License ------- -Myriadcoin is released under the terms of the MIT license. See `COPYING` for more +Myriadcoin Core is released under the terms of the MIT license. See [COPYING](COPYING) for more information or see http://opensource.org/licenses/MIT. + +Development process +------------------- + +Developers work in their own trees, then submit pull requests when they think +their feature or bug fix is ready. + +If it is a simple/trivial/non-controversial change, then one of the Myriadcoin +development team members simply pulls it. + +If it is a *more complicated or potentially controversial* change, then the patch +submitter will be asked to start a discussion (if they haven't already) on the +[mailing list](http://sourceforge.net/mailarchive/forum.php?forum_name=bitcoin-development). + +The patch will be accepted if there is broad consensus that it is a good thing. +Developers should expect to rework and resubmit patches if the code doesn't +match the project's coding conventions (see [doc/coding.md](doc/coding.md)) or are +controversial. + +The `master` branch is regularly built and tested, but is not guaranteed to be +completely stable. [Tags](https://github.com/bitcoin/bitcoin/tags) are created +regularly to indicate new official, stable release versions of Myriadcoin. + +Development tips and tricks +--------------------------- + +**compiling for debugging** + +Run configure with the --enable-debug option, then make. Or run configure with +CXXFLAGS="-g -ggdb -O0" or whatever debug flags you need. + +**debug.log** + +If the code is behaving strangely, take a look in the debug.log file in the data directory; +error and debugging message are written there. + +The -debug=... command-line option controls debugging; running with just -debug will turn +on all categories (and give you a very large debug.log file). + +The Qt code routes qDebug() output to debug.log under category "qt": run with -debug=qt +to see it. + +**testnet and regtest modes** + +Run with the -testnet option to run with "play bitcoins" on the test network, if you +are testing multi-machine code that needs to operate across the internet. + +If you are testing something that can run on one machine, run with the -regtest option. +In regression test mode blocks can be created on-demand; see qa/rpc-tests/ for tests +that run in -regest mode. + +**DEBUG_LOCKORDER** + +Myriadcoin Core is a multithreaded application, and deadlocks or other multithreading bugs +can be very difficult to track down. Compiling with -DDEBUG_LOCKORDER (configure +CXXFLAGS="-DDEBUG_LOCKORDER -g") inserts run-time checks to keep track of what locks +are held, and adds warning to the debug.log file if inconsistencies are detected. diff --git a/autogen.sh b/autogen.sh new file mode 100755 index 00000000..5b883a6a --- /dev/null +++ b/autogen.sh @@ -0,0 +1,5 @@ +#!/bin/sh +set -e +srcdir="$(dirname $0)" +cd "$srcdir" +autoreconf --install --force diff --git a/configure.ac b/configure.ac new file mode 100644 index 00000000..fa3b4e80 --- /dev/null +++ b/configure.ac @@ -0,0 +1,701 @@ +dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N) +AC_PREREQ([2.60]) +define(_CLIENT_VERSION_MAJOR, 0) +define(_CLIENT_VERSION_MINOR, 9) +define(_CLIENT_VERSION_REVISION, 2) +define(_CLIENT_VERSION_BUILD, 1) +define(_CLIENT_VERSION_IS_RELEASE, true) +define(_COPYRIGHT_YEAR, 2014) +AC_INIT([Myriadcoin Core],[_CLIENT_VERSION_MAJOR._CLIENT_VERSION_MINOR._CLIENT_VERSION_REVISION],[info@bitcoin.org],[bitcoin]) +AC_CONFIG_AUX_DIR([src/build-aux]) +AC_CONFIG_MACRO_DIR([src/m4]) +AC_CANONICAL_HOST +AH_TOP([#ifndef BITCOIN_CONFIG_H]) +AH_TOP([#define BITCOIN_CONFIG_H]) +AH_BOTTOM([#endif //BITCOIN_CONFIG_H]) + +# This m4 will only be used if a system copy cannot be found. This is helpful +# on systems where autotools are installed but the pkg-config macros are not in +# a default location. It is currently used for building on OSX where autotools +# are preinstalled but pkg-config comes from macports or homebrew. It should +# probably be removed when building on <= 10.6 is no longer supported. +m4_include([pkg.m4]) + +dnl faketime breaks configure and is only needed for make. Disable it here. +unset FAKETIME + +if test "x${CXXFLAGS+set}" = "xset"; then + CXXFLAGS_overridden=yes +else + CXXFLAGS_overridden=no +fi + +dnl ============================================================== +dnl Setup for automake +dnl ============================================================== + +AM_INIT_AUTOMAKE([no-define subdir-objects foreign]) + +dnl faketime messes with timestamps and causes configure to be re-run. +dnl --disable-maintainer-mode can be used to bypass this. +AM_MAINTAINER_MODE([enable]) + +dnl make the compilation flags quiet unless V=1 is used +m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) + +# Enable wallet +AC_ARG_ENABLE([wallet], + [AS_HELP_STRING([--enable-wallet], + [enable wallet (default is yes)])], + [enable_wallet=$enableval], + [enable_wallet=yes]) + +AC_ARG_WITH([miniupnpc], + [AS_HELP_STRING([--with-miniupnpc], + [enable UPNP (default is yes if libminiupnpc is found)])], + [use_upnp=$withval], + [use_upnp=auto]) + +AC_ARG_ENABLE([upnp-default], + [AS_HELP_STRING([--enable-upnp-default], + [if UPNP is enabled, turn it on at startup (default is no)])], + [use_upnp_default=$enableval], + [use_upnp_default=no]) + +AC_ARG_ENABLE(tests, + AS_HELP_STRING([--enable-tests],[compile tests (default is yes)]), + [use_tests=$enableval], + [use_tests=yes]) + +AC_ARG_WITH([comparison-tool], + AS_HELP_STRING([--with-comparison-tool],[path to java comparison tool (requires --enable-tests)]), + [use_comparison_tool=$withval], + [use_comparison_tool=no]) + +AC_ARG_ENABLE([comparison-tool-reorg-tests], + AS_HELP_STRING([--enable-comparison-tool-reorg-tests],[enable expensive reorg tests in the comparison tool (default no)]), + [use_comparison_tool_reorg_tests=$enableval], + [use_comparison_tool_reorg_tests=no]) + +AC_ARG_WITH([qrencode], + [AS_HELP_STRING([--with-qrencode], + [enable QR code support (default is yes if qt is enabled and libqrencode is found)])], + [use_qr=$withval], + [use_qr=auto]) + +AC_ARG_ENABLE([hardening], + [AS_HELP_STRING([--enable-hardening], + [attempt to harden the resulting executables (default is yes)])], + [use_hardening=$enableval], + [use_hardening=yes]) + +AC_ARG_ENABLE([ccache], + [AS_HELP_STRING([--enable-ccache], + [use ccache for building (default is yes if ccache is found)])], + [use_ccache=$enableval], + [use_ccache=auto]) + +AC_ARG_ENABLE([lcov], + [AS_HELP_STRING([--enable-lcov], + [enable lcov testing (default is no)])], + [use_lcov=yes], + [use_lcov=no]) + +AC_ARG_ENABLE([glibc-back-compat], + [AS_HELP_STRING([--enable-glibc-back-compat], + [enable backwards compatibility with glibc and libstdc++])], + [use_glibc_compat=$enableval], + [use_glibc_compat=no]) + +AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], []) + + +AC_CONFIG_SRCDIR([src]) +AC_CONFIG_HEADERS([src/bitcoin-config.h]) + +dnl Checks for programs. +AC_PROG_CXX +AC_PROG_CC +AC_PROG_CPP +AC_PROG_CXXCPP +AC_PROG_INSTALL +AC_PROG_OBJC +AC_PROG_LN_S +m4_ifdef([AC_PROG_OBJCXX],[AC_PROG_OBJCXX]) +AC_PROG_MKDIR_P +AC_PROG_SED +AC_PATH_TOOL(AR, ar) +AC_PATH_TOOL(RANLIB, ranlib) +AC_PATH_TOOL(STRIP, strip) +AC_PATH_TOOL(GCOV, gcov) +AC_PATH_PROG(LCOV, lcov) +AC_PATH_PROG(JAVA, java) +AC_PATH_PROG(GENHTML, genhtml) +AC_PATH_PROG([GIT], [git]) +AC_PATH_PROG(CCACHE,ccache) +AC_PATH_PROG(XGETTEXT,xgettext) +AC_PATH_PROG(HEXDUMP,hexdump) +PKG_PROG_PKG_CONFIG + +# Enable debug +AC_ARG_ENABLE([debug], + [AS_HELP_STRING([--enable-debug], + [use debug compiler flags and macros (default is no)])], + [enable_debug=$enableval], + [enable_debug=no]) + +if test "x$enable_debug" = xyes; then + if test "x$GCC" = xyes; then + CFLAGS="-g3 -O0 -DDEBUG" + fi + + if test "x$GXX" = xyes; then + CXXFLAGS="-g3 -O0 -DDEBUG" + fi +fi + +## TODO: Remove these hard-coded paths and flags. They are here for the sake of +## compatibility with the legacy buildsystem. +## +if test "x$CXXFLAGS_overridden" = "xno"; then + CXXFLAGS="$CXXFLAGS -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter" +fi +CPPFLAGS="$CPPFLAGS -DBOOST_SPIRIT_THREADSAFE -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS" + +AC_LANG_PUSH([C++]) + +use_pkgconfig=yes +case $host in + *mingw*) + + #pkgconfig does more harm than good with MinGW + use_pkgconfig=no + + TARGET_OS=windows + AC_CHECK_LIB([mingwthrd], [main],, AC_MSG_ERROR(lib missing)) + AC_CHECK_LIB([kernel32], [main],, AC_MSG_ERROR(lib missing)) + AC_CHECK_LIB([user32], [main],, AC_MSG_ERROR(lib missing)) + AC_CHECK_LIB([gdi32], [main],, AC_MSG_ERROR(lib missing)) + AC_CHECK_LIB([comdlg32], [main],, AC_MSG_ERROR(lib missing)) + AC_CHECK_LIB([winspool], [main],, AC_MSG_ERROR(lib missing)) + AC_CHECK_LIB([winmm], [main],, AC_MSG_ERROR(lib missing)) + AC_CHECK_LIB([shell32], [main],, AC_MSG_ERROR(lib missing)) + AC_CHECK_LIB([comctl32], [main],, AC_MSG_ERROR(lib missing)) + AC_CHECK_LIB([ole32], [main],, AC_MSG_ERROR(lib missing)) + AC_CHECK_LIB([oleaut32], [main],, AC_MSG_ERROR(lib missing)) + AC_CHECK_LIB([uuid], [main],, AC_MSG_ERROR(lib missing)) + AC_CHECK_LIB([rpcrt4], [main],, AC_MSG_ERROR(lib missing)) + AC_CHECK_LIB([advapi32], [main],, AC_MSG_ERROR(lib missing)) + AC_CHECK_LIB([ws2_32], [main],, AC_MSG_ERROR(lib missing)) + AC_CHECK_LIB([mswsock], [main],, AC_MSG_ERROR(lib missing)) + AC_CHECK_LIB([shlwapi], [main],, AC_MSG_ERROR(lib missing)) + AC_CHECK_LIB([iphlpapi], [main],, AC_MSG_ERROR(lib missing)) + AC_CHECK_LIB([crypt32], [main],, AC_MSG_ERROR(lib missing)) + + AX_CHECK_LINK_FLAG([[-static]],[LDFLAGS="$LDFLAGS -static"]) + AX_CHECK_LINK_FLAG([[-static-libgcc]],[LDFLAGS="$LDFLAGS -static-libgcc"]) + AX_CHECK_LINK_FLAG([[-static-libstdc++]],[LDFLAGS="$LDFLAGS -static-libstdc++"]) + + AC_PATH_PROG([MAKENSIS], [makensis], none) + if test x$MAKENSIS = xnone; then + AC_MSG_WARN("makensis not found. Cannot create installer.") + fi + + AC_PATH_TOOL(WINDRES, windres, none) + if test x$WINDRES = xnone; then + AC_MSG_ERROR("windres not found") + fi + + CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB" + LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE" + if test "x$CXXFLAGS_overridden" = "xno"; then + CXXFLAGS="$CXXFLAGS -w" + fi + case $host in + i?86-*) WINDOWS_BITS=32 ;; + x86_64-*) WINDOWS_BITS=64 ;; + *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;; + esac + AC_SUBST(WINDOWS_BITS) + ;; + *darwin*) + TARGET_OS=darwin + LEVELDB_TARGET_FLAGS="TARGET_OS=Darwin" + if test x$cross_compiling != xyes; then + BUILD_OS=darwin + AC_CHECK_PROG([PORT],port, port) + if test x$PORT = xport; then + dnl add default macports paths + CPPFLAGS="$CPPFLAGS -isystem /opt/local/include -I/opt/local/include/db48" + LIBS="$LIBS -L/opt/local/lib -L/opt/local/lib/db48" + fi + + AC_CHECK_PROG([BREW],brew, brew) + if test x$BREW = xbrew; then + dnl add default homebrew paths + openssl_prefix=`$BREW --prefix openssl` + bdb_prefix=`$BREW --prefix berkeley-db4` + export PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH" + CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include" + LIBS="$LIBS -L$bdb_prefix/lib" + fi + else + case $build_os in + *darwin*) + BUILD_OS=darwin + ;; + *) + AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool) + AC_PATH_TOOL([OTOOL], [otool], otool) + AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage) + ;; + esac + fi + + CPPFLAGS="$CPPFLAGS -DMAC_OSX" + ;; + *) + ;; +esac + +if test x$use_comparison_tool != xno; then + AC_SUBST(JAVA_COMPARISON_TOOL, $use_comparison_tool) +fi + +if test x$use_comparison_tool_reorg_tests != xno; then + if test x$use_comparison_tool == x; then + AC_MSG_ERROR("comparison tool reorg tests but comparison tool was not specified") + fi + AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 1) +else + AC_SUBST(COMPARISON_TOOL_REORG_TESTS, 0) +fi + +if test x$use_lcov == xyes; then + if test x$LCOV == x; then + AC_MSG_ERROR("lcov testing requested but lcov not found") + fi + if test x$GCOV == x; then + AC_MSG_ERROR("lcov testing requested but gcov not found") + fi + if test x$JAVA == x; then + AC_MSG_ERROR("lcov testing requested but java not found") + fi + if test x$GENHTML == x; then + AC_MSG_ERROR("lcov testing requested but genhtml not found") + fi + if test x$use_comparison_tool == x; then + AC_MSG_ERROR("lcov testing requested but comparison tool was not specified") + fi + LCOV="$LCOV --gcov-tool=$GCOV" + AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"], + [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")]) +fi + +dnl Require little endian +AC_C_BIGENDIAN([AC_MSG_ERROR("Big Endian not supported")]) + +dnl Check for pthread compile/link requirements +AX_PTHREAD +INCLUDES="$INCLUDES $PTHREAD_CFLAGS" + +# The following macro will add the necessary defines to bitcoin-config.h, but +# they also need to be passed down to any subprojects. Pull the results out of +# the cache and add them to CPPFLAGS. +AC_SYS_LARGEFILE +# detect POSIX or GNU variant of strerror_r +AC_FUNC_STRERROR_R + +if test x$ac_cv_sys_file_offset_bits != x && + test x$ac_cv_sys_file_offset_bits != xno && + test x$ac_cv_sys_file_offset_bits != xunknown; then + CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits" +fi + +if test x$ac_cv_sys_large_files != x && + test x$ac_cv_sys_large_files != xno && + test x$ac_cv_sys_large_files != xunknown; then + CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files" +fi + +AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"]) + +if test x$use_glibc_compat != xno; then + + #__fdelt_chk's params and return type have changed from long unsigned int to long int. + # See which one is present here. + AC_MSG_CHECKING(__fdelt_chk type) + AC_TRY_COMPILE([#define __USE_FORTIFY_LEVEL 2 + #include + extern "C" long unsigned int __fdelt_warn(long unsigned int);],[], + [ fdelt_type="long unsigned int"], + [ fdelt_type="long int"]) + AC_MSG_RESULT($fdelt_type) + AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk]) + +fi + +if test x$use_hardening != xno; then + AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"]) + AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"]) + AX_CHECK_COMPILE_FLAG([-fPIE],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fPIE"]) + + AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[ + AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[ + HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE" + ]) + HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2" + ]) + + AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"]) + AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"]) + AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"]) + AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"]) + + if test x$TARGET_OS != xwindows; then + # -pie will link successfully with MinGW, but it's unsupported and leads to undeterministic binaries + AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"]) + fi + + CXXFLAGS="$CXXFLAGS $HARDENED_CXXFLAGS" + CPPFLAGS="$CPPFLAGS $HARDENED_CPPFLAGS" + LDFLAGS="$LDFLAGS $HARDENED_LDFLAGS" + OBJCXXFLAGS="$CXXFLAGS" +fi + +dnl this flag screws up non-darwin gcc even when the check fails. special-case it. +if test x$TARGET_OS = xdarwin; then + AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"]) +fi + +AC_CHECK_HEADERS([stdio.h stdlib.h unistd.h strings.h sys/types.h sys/stat.h]) + +dnl Check for MSG_NOSIGNAL +AC_MSG_CHECKING(for MSG_NOSIGNAL) +AC_TRY_COMPILE([#include ], + [ int f = MSG_NOSIGNAL; ], + [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ], + [ AC_MSG_RESULT(no)] +) + +LEVELDB_CPPFLAGS= +LIBLEVELDB= +LIBMEMENV= +AM_CONDITIONAL([EMBEDDED_LEVELDB],[true]) +AC_SUBST(LEVELDB_CPPFLAGS) +AC_SUBST(LIBLEVELDB) +AC_SUBST(LIBMEMENV) + +if test x$enable_wallet != xno; then + dnl Check for libdb_cxx only if wallet enabled + BITCOIN_FIND_BDB48 +fi + +dnl Check for libminiupnpc (optional) +if test x$use_upnp != xno; then + AC_CHECK_HEADERS( + [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h], + [AC_CHECK_LIB([miniupnpc], [main],, [have_miniupnpc=no])], + [have_miniupnpc=no] + ) +fi + +dnl Check for boost libs +AX_BOOST_BASE +AX_BOOST_SYSTEM +AX_BOOST_FILESYSTEM +AX_BOOST_PROGRAM_OPTIONS +AX_BOOST_THREAD +AX_BOOST_CHRONO + +if test x$use_tests = xyes; then + + if test x$HEXDUMP = x; then + AC_MSG_ERROR(hexdump is required for tests) + fi + + + AX_BOOST_UNIT_TEST_FRAMEWORK + + dnl Determine if -DBOOST_TEST_DYN_LINK is needed + AC_MSG_CHECKING([for dynamic linked boost test]) + TEMP_LIBS="$LIBS" + LIBS="$LIBS $BOOST_UNIT_TEST_FRAMEWORK_LIB" + TEMP_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + AC_LINK_IFELSE([AC_LANG_SOURCE([ + #define BOOST_TEST_DYN_LINK + #define BOOST_TEST_MAIN + #include + + ])], + [AC_MSG_RESULT(yes)] + [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"], + [AC_MSG_RESULT(no)]) + LIBS="$TEMP_LIBS" + CPPFLAGS="$TEMP_CPPFLAGS" +fi + +BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB" +BOOST_INCLUDES="$BOOST_CPPFLAGS" + +dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however +dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if +dnl a working version is available, else fall back to sleep. sleep was removed +dnl after 1.56. +dnl If neither is available, abort. +dnl If sleep_for is used, boost_chrono becomes a requirement. +if test x$ax_cv_boost_chrono = xyes; then +dnl Allow passing extra needed dependency libraries for boost-chrono from static gitian build +BOOST_CHRONO_LIB="$BOOST_CHRONO_LIB $BOOST_CHRONO_EXTRALIBS" + +TEMP_LIBS="$LIBS" +LIBS="$LIBS $BOOST_LIBS $BOOST_CHRONO_LIB" +TEMP_CPPFLAGS="$CPPFLAGS" +CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" +AC_TRY_LINK([ + #include + #include + ],[ + #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200) + boost::this_thread::sleep_for(boost::chrono::milliseconds(0)); + #else + choke me + #endif + ], + [boost_sleep=yes; BOOST_LIBS="$BOOST_LIBS $BOOST_CHRONO_LIB"; + AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])], + [boost_sleep=no]) +LIBS="$TEMP_LIBS" +CPPFLAGS="$TEMP_CPPFLAGS" +fi + +if test x$boost_sleep != xyes; then +TEMP_LIBS="$LIBS" +LIBS="$LIBS $BOOST_LIBS" +TEMP_CPPFLAGS="$CPPFLAGS" +CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" +AC_TRY_LINK([ + #include + #include + #include + ],[ + #if BOOST_VERSION <= 105600 + boost::this_thread::sleep(boost::posix_time::milliseconds(0)); + #else + choke me + #endif + ], + [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])], + [boost_sleep=no]) +LIBS="$TEMP_LIBS" +CPPFLAGS="$TEMP_CPPFLAGS" +fi + +if test x$boost_sleep != xyes; then + AC_MSG_ERROR(No working boost sleep implementation found. If on ubuntu 13.10 with libboost1.54-all-dev remove libboost.1.54-all-dev and use libboost1.53-all-dev) +fi + +AC_ARG_WITH([cli], + [AS_HELP_STRING([--with-cli], + [with CLI (default is yes)])], + [build_bitcoin_cli=$withval], + [build_bitcoin_cli=yes]) + +AC_ARG_WITH([daemon], + [AS_HELP_STRING([--with-daemon], + [with daemon (default is yes)])], + [build_bitcoind=$withval], + [build_bitcoind=yes]) + +BITCOIN_QT_INIT + +if test x$use_pkgconfig = xyes; then + + if test x$PKG_CONFIG == x; then + AC_MSG_ERROR(pkg-config not found.) + fi + + : #NOP + m4_ifdef( + [PKG_CHECK_MODULES], + [ + PKG_CHECK_MODULES([SSL], [libssl], [INCLUDES="$INCLUDES $SSL_CFLAGS"; LIBS="$LIBS $SSL_LIBS"], [AC_MSG_ERROR(openssl not found.)]) + PKG_CHECK_MODULES([CRYPTO], [libcrypto], [INCLUDES="$INCLUDES $CRYPTO_CFLAGS"; LIBS="$LIBS $CRYPTO_LIBS"], [AC_MSG_ERROR(libcrypto not found.)]) + BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])]) + if test x$use_qr != xno; then + BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])]) + fi + ] + ) +else + AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing)) + AC_CHECK_LIB([crypto], [main],, AC_MSG_ERROR(libcrypto missing)) + + AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),) + AC_CHECK_LIB([ssl], [main],, AC_MSG_ERROR(libssl missing)) + + BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],,BITCOIN_QT_FAIL(libprotobuf not found))) + if test x$use_qr != xno; then + BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],, [have_qrencode=no])]) + BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)]) + fi +fi + +BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path) + +AC_MSG_CHECKING([whether to build myriadcoind]) +AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes]) +AC_MSG_RESULT($build_bitcoind) + +AC_MSG_CHECKING([whether to build myriadcoin-cli]) +AM_CONDITIONAL([BUILD_BITCOIN_CLI], [test x$build_bitcoin_cli = xyes]) +AC_MSG_RESULT($build_bitcoin_cli) + +dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus +BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt4]) + +AC_LANG_POP + +if test "x$use_ccache" != "xno"; then + AC_MSG_CHECKING(if ccache should be used) + if test x$CCACHE = x; then + if test "x$use_ccache" = "xyes"; then + AC_MSG_ERROR([ccache not found.]); + else + use_ccache=no + fi + else + use_ccache=yes + CC="$ac_cv_path_CCACHE $CC" + CXX="$ac_cv_path_CCACHE $CXX" + fi + AC_MSG_RESULT($use_ccache) +fi + +dnl enable wallet +AC_MSG_CHECKING([if wallet should be enabled]) +if test x$enable_wallet != xno; then + AC_MSG_RESULT(yes) + AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions]) + +else + AC_MSG_RESULT(no) +fi + +dnl enable upnp support +AC_MSG_CHECKING([whether to build with support for UPnP]) +if test x$have_miniupnpc = xno; then + if test x$use_upnp = xyes; then + AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc") + fi + AC_MSG_RESULT(no) +else + if test x$use_upnp != xno; then + AC_MSG_RESULT(yes) + AC_MSG_CHECKING([whether to build with UPnP enabled by default]) + use_upnp=yes + upnp_setting=0 + if test x$use_upnp_default != xno; then + use_upnp_default=yes + upnp_setting=1 + fi + AC_MSG_RESULT($use_upnp_default) + AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state]) + if test x$TARGET_OS = xwindows; then + CPPFLAGS="$CPPFLAGS -DSTATICLIB" + fi + else + AC_MSG_RESULT(no) + fi +fi + +dnl these are only used when qt is enabled +if test x$bitcoin_enable_qt != xno; then + BUILD_QT=qt + dnl enable dbus support + AC_MSG_CHECKING([whether to build GUI with support for D-Bus]) + if test x$bitcoin_enable_qt_dbus != xno; then + AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in]) + fi + AC_MSG_RESULT($bitcoin_enable_qt_dbus) + + dnl enable qr support + AC_MSG_CHECKING([whether to build GUI with support for QR codes]) + if test x$have_qrencode = xno; then + if test x$use_qr == xyes; then + AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode") + fi + AC_MSG_RESULT(no) + else + if test x$use_qr != xno; then + AC_MSG_RESULT(yes) + AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in]) + use_qr=yes + else + AC_MSG_RESULT(no) + fi + fi + + if test x$XGETTEXT == x; then + AC_MSG_WARN("xgettext is required to update qt translations") + fi + + AC_MSG_CHECKING([whether to build test_myriadcoin-qt]) + if test x$use_tests$bitcoin_enable_qt_test = xyesyes; then + AC_MSG_RESULT([yes]) + BUILD_TEST_QT="test" + else + AC_MSG_RESULT([no]) + fi +fi + +AC_MSG_CHECKING([whether to build test_myriadcoin]) +if test x$use_tests = xyes; then + AC_MSG_RESULT([yes]) + BUILD_TEST="test" +else + AC_MSG_RESULT([no]) +fi + +if test "x$use_tests$build_bitcoind$use_qt" = "xnonono"; then + AC_MSG_ERROR([No targets! Please specify at least one of: --enable-cli --enable-daemon --enable-gui or --enable-tests]) +fi + +AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin]) +AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin]) +AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows]) +AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet == xyes]) +AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes]) +AM_CONDITIONAL([USE_LCOV],[test x$use_lcov == xyes]) +AM_CONDITIONAL([USE_COMPARISON_TOOL],[test x$use_comparison_tool != xno]) +AM_CONDITIONAL([USE_COMPARISON_TOOL_REORG_TESTS],[test x$use_comparison_tool_reorg_test != xno]) +AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes]) + +AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version]) +AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version]) +AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision]) +AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build]) +AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release]) +AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Version is release]) +AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR) +AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR) +AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION) +AC_SUBST(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD) +AC_SUBST(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE) +AC_SUBST(COPYRIGHT_YEAR, _COPYRIGHT_YEAR) + + +AC_SUBST(USE_UPNP) +AC_SUBST(USE_QRCODE) +AC_SUBST(INCLUDES) +AC_SUBST(BOOST_LIBS) +AC_SUBST(TESTDEFS) +AC_SUBST(LEVELDB_TARGET_FLAGS) +AC_SUBST(BUILD_TEST) +AC_SUBST(BUILD_QT) +AC_SUBST(BUILD_TEST_QT) +AC_CONFIG_FILES([Makefile src/Makefile src/test/Makefile src/qt/Makefile src/qt/test/Makefile share/setup.nsi share/qt/Info.plist]) +AC_CONFIG_FILES([qa/pull-tester/run-bitcoind-for-test.sh],[chmod +x qa/pull-tester/run-bitcoind-for-test.sh]) +AC_CONFIG_FILES([qa/pull-tester/build-tests.sh],[chmod +x qa/pull-tester/build-tests.sh]) +AC_OUTPUT diff --git a/contrib/README.md b/contrib/README.md new file mode 100644 index 00000000..92d0a343 --- /dev/null +++ b/contrib/README.md @@ -0,0 +1,60 @@ +Wallet Tools +--------------------- + +### [BitRPC](/contrib/bitrpc) ### +Allows for sending of all standard Bitcoin commands via RPC rather than as command line args. + +### [SpendFrom](/contrib/spendfrom) ### + +Use the raw transactions API to send coins received on a particular +address (or addresses). + +Repository Tools +--------------------- + +### [Developer tools](/contrib/devtools) ### +Specific tools for developers working on this repository. +Contains the script `github-merge.sh` for merging github pull requests securely and signing them using GPG. + +### [Linearize](/contrib/linearize) ### +Construct a linear, no-fork, best version of the blockchain. + +### [PyMiner](/contrib/pyminer) ### + +This is a 'getwork' CPU mining client for Bitcoin. It is pure-python, and therefore very, very slow. The purpose is to provide a reference implementation of a miner, for study. + +### [Qos](/contrib/qos) ### + +A Linux bash script that will set up tc to limit the outgoing bandwidth for connections to the Bitcoin network. This means one can have an always-on bitcoind instance running, and another local bitcoind/bitcoin-qt instance which connects to this node and receives blocks from it. + +### [Seeds](/contrib/seeds) ### +Utility to generate the pnSeed[] array that is compiled into the client. + +Build Tools and Keys +--------------------- + +### [Debian](/contrib/debian) ### +Contains files used to package bitcoind/bitcoin-qt +for Debian-based Linux systems. If you compile bitcoind/bitcoin-qt yourself, there are some useful files here. + +### [Gitian-descriptors](/contrib/gitian-descriptors) ### +Gavin's notes on getting gitian builds up and running using KVM. + +### [Gitian-downloader](/contrib/gitian-downloader) +Various PGP files of core developers. + +### [MacDeploy](/contrib/macdeploy) ### +Scripts and notes for Mac builds. + +Test and Verify Tools +--------------------- + +### [TestGen](/contrib/testgen) ### +Utilities to generate test vectors for the data-driven Bitcoin tests. + +### [Test Patches](/contrib/test-patches) ### +These patches are applied when the automated pull-tester +tests each pull and when master is tested using jenkins. + +### [Verify SF Binaries](/contrib/verifysfbinaries) ### +This script attempts to download and verify the signature file SHA256SUMS.asc from SourceForge. diff --git a/contrib/bitcoin-qt.pro b/contrib/bitcoin-qt.pro new file mode 100644 index 00000000..3a72d10f --- /dev/null +++ b/contrib/bitcoin-qt.pro @@ -0,0 +1,21 @@ +FORMS += \ + ../src/qt/forms/aboutdialog.ui \ + ../src/qt/forms/addressbookpage.ui \ + ../src/qt/forms/askpassphrasedialog.ui \ + ../src/qt/forms/coincontroldialog.ui \ + ../src/qt/forms/editaddressdialog.ui \ + ../src/qt/forms/helpmessagedialog.ui \ + ../src/qt/forms/intro.ui \ + ../src/qt/forms/openuridialog.ui \ + ../src/qt/forms/optionsdialog.ui \ + ../src/qt/forms/overviewpage.ui \ + ../src/qt/forms/receivecoinsdialog.ui \ + ../src/qt/forms/receiverequestdialog.ui \ + ../src/qt/forms/rpcconsole.ui \ + ../src/qt/forms/sendcoinsdialog.ui \ + ../src/qt/forms/sendcoinsentry.ui \ + ../src/qt/forms/signverifymessagedialog.ui \ + ../src/qt/forms/transactiondescdialog.ui \ + +RESOURCES += \ + ../src/qt/bitcoin.qrc diff --git a/contrib/bitcoind.bash-completion b/contrib/bitcoind.bash-completion index dd6c1ce8..03ef173c 100644 --- a/contrib/bitcoind.bash-completion +++ b/contrib/bitcoind.bash-completion @@ -1,5 +1,5 @@ -# bash programmable completion for bitcoind(1) -# Copyright (c) 2012 Christian von Roques +# bash programmable completion for bitcoind(1) and bitcoin-cli(1) +# Copyright (c) 2012,2014 Christian von Roques # Distributed under the MIT/X11 software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -37,9 +37,35 @@ _bitcoind() { COMPREPLY=() _get_comp_words_by_ref -n = cur prev words cword + if ((cword > 4)); then + case ${words[cword-4]} in + signrawtransaction) + COMPREPLY=( $( compgen -W "ALL NONE SINGLE ALL|ANYONECANPAY NONE|ANYONECANPAY SINGLE|ANYONECANPAY" -- "$cur" ) ) + return 0 + ;; + esac + fi + + if ((cword > 3)); then + case ${words[cword-3]} in + addmultisigaddress) + _bitcoin_accounts + return 0 + ;; + gettxout|importprivkey) + COMPREPLY=( $( compgen -W "true false" -- "$cur" ) ) + return 0 + ;; + esac + fi + if ((cword > 2)); then case ${words[cword-2]} in - listreceivedbyaccount|listreceivedbyaddress) + addnode) + COMPREPLY=( $( compgen -W "add remove onetry" -- "$cur" ) ) + return 0 + ;; + getblock|getrawtransaction|listreceivedbyaccount|listreceivedbyaddress|sendrawtransaction) COMPREPLY=( $( compgen -W "true false" -- "$cur" ) ) return 0 ;; @@ -51,11 +77,11 @@ _bitcoind() { fi case "$prev" in - backupwallet) + backupwallet|dumpwallet|importwallet) _filedir return 0 ;; - setgenerate) + getmempool|lockunspent|setgenerate) COMPREPLY=( $( compgen -W "true false" -- "$cur" ) ) return 0 ;; @@ -66,7 +92,7 @@ _bitcoind() { esac case "$cur" in - -conf=*|-pid=*|-rpcsslcertificatechainfile=*|-rpcsslprivatekeyfile=*) + -conf=*|-pid=*|-loadblock=*|-wallet=*|-rpcsslcertificatechainfile=*|-rpcsslprivatekeyfile=*) cur="${cur#*=}" _filedir return 0 @@ -103,7 +129,7 @@ _bitcoind() { esac } -complete -F _bitcoind bitcoind +complete -F _bitcoind bitcoind bitcoin-cli } # Local variables: diff --git a/contrib/bitrpc/README.md b/contrib/bitrpc/README.md new file mode 100644 index 00000000..f5ef2f04 --- /dev/null +++ b/contrib/bitrpc/README.md @@ -0,0 +1,8 @@ +### BitRPC +Allows for sending of all standard Bitcoin commands via RPC rather than as command line args. + +### Looking for Wallet Tools? +BitRPC.py is able to do the exact same thing as `walletchangepass.py` and `walletunlock.py`. Their respective commands in BitRPC.py are: + + bitrpc.py walletpassphrasechange + bitrpc.py walletpassphrase \ No newline at end of file diff --git a/contrib/bitrpc/bitrpc.py b/contrib/bitrpc/bitrpc.py index b02b2991..a84d7e34 100644 --- a/contrib/bitrpc/bitrpc.py +++ b/contrib/bitrpc/bitrpc.py @@ -1,6 +1,7 @@ from jsonrpc import ServiceProxy import sys import string +import getpass # ===== BEGIN USER SETTINGS ===== # if you do not set these you will be prompted for a password for every command @@ -10,315 +11,315 @@ rpcpass = "" if rpcpass == "": - access = ServiceProxy("http://127.0.0.1:8332") + access = ServiceProxy("http://127.0.0.1:8332") else: - access = ServiceProxy("http://"+rpcuser+":"+rpcpass+"@127.0.0.1:8332") + access = ServiceProxy("http://"+rpcuser+":"+rpcpass+"@127.0.0.1:8332") cmd = sys.argv[1].lower() if cmd == "backupwallet": - try: - path = raw_input("Enter destination path/filename: ") - print access.backupwallet(path) - except: - print "\n---An error occurred---\n" + try: + path = raw_input("Enter destination path/filename: ") + print access.backupwallet(path) + except: + print "\n---An error occurred---\n" elif cmd == "getaccount": - try: - addr = raw_input("Enter a Bitcoin address: ") - print access.getaccount(addr) - except: - print "\n---An error occurred---\n" + try: + addr = raw_input("Enter a Bitcoin address: ") + print access.getaccount(addr) + except: + print "\n---An error occurred---\n" elif cmd == "getaccountaddress": - try: - acct = raw_input("Enter an account name: ") - print access.getaccountaddress(acct) - except: - print "\n---An error occurred---\n" + try: + acct = raw_input("Enter an account name: ") + print access.getaccountaddress(acct) + except: + print "\n---An error occurred---\n" elif cmd == "getaddressesbyaccount": - try: - acct = raw_input("Enter an account name: ") - print access.getaddressesbyaccount(acct) - except: - print "\n---An error occurred---\n" + try: + acct = raw_input("Enter an account name: ") + print access.getaddressesbyaccount(acct) + except: + print "\n---An error occurred---\n" elif cmd == "getbalance": - try: - acct = raw_input("Enter an account (optional): ") - mc = raw_input("Minimum confirmations (optional): ") - try: - print access.getbalance(acct, mc) - except: - print access.getbalance() - except: - print "\n---An error occurred---\n" + try: + acct = raw_input("Enter an account (optional): ") + mc = raw_input("Minimum confirmations (optional): ") + try: + print access.getbalance(acct, mc) + except: + print access.getbalance() + except: + print "\n---An error occurred---\n" elif cmd == "getblockbycount": - try: - height = raw_input("Height: ") - print access.getblockbycount(height) - except: - print "\n---An error occurred---\n" + try: + height = raw_input("Height: ") + print access.getblockbycount(height) + except: + print "\n---An error occurred---\n" elif cmd == "getblockcount": - try: - print access.getblockcount() - except: - print "\n---An error occurred---\n" + try: + print access.getblockcount() + except: + print "\n---An error occurred---\n" elif cmd == "getblocknumber": - try: - print access.getblocknumber() - except: - print "\n---An error occurred---\n" + try: + print access.getblocknumber() + except: + print "\n---An error occurred---\n" elif cmd == "getconnectioncount": - try: - print access.getconnectioncount() - except: - print "\n---An error occurred---\n" + try: + print access.getconnectioncount() + except: + print "\n---An error occurred---\n" elif cmd == "getdifficulty": - try: - print access.getdifficulty() - except: - print "\n---An error occurred---\n" + try: + print access.getdifficulty() + except: + print "\n---An error occurred---\n" elif cmd == "getgenerate": - try: - print access.getgenerate() - except: - print "\n---An error occurred---\n" + try: + print access.getgenerate() + except: + print "\n---An error occurred---\n" elif cmd == "gethashespersec": - try: - print access.gethashespersec() - except: - print "\n---An error occurred---\n" + try: + print access.gethashespersec() + except: + print "\n---An error occurred---\n" elif cmd == "getinfo": - try: - print access.getinfo() - except: - print "\n---An error occurred---\n" + try: + print access.getinfo() + except: + print "\n---An error occurred---\n" elif cmd == "getnewaddress": - try: - acct = raw_input("Enter an account name: ") - try: - print access.getnewaddress(acct) - except: - print access.getnewaddress() - except: - print "\n---An error occurred---\n" + try: + acct = raw_input("Enter an account name: ") + try: + print access.getnewaddress(acct) + except: + print access.getnewaddress() + except: + print "\n---An error occurred---\n" elif cmd == "getreceivedbyaccount": - try: - acct = raw_input("Enter an account (optional): ") - mc = raw_input("Minimum confirmations (optional): ") - try: - print access.getreceivedbyaccount(acct, mc) - except: - print access.getreceivedbyaccount() - except: - print "\n---An error occurred---\n" + try: + acct = raw_input("Enter an account (optional): ") + mc = raw_input("Minimum confirmations (optional): ") + try: + print access.getreceivedbyaccount(acct, mc) + except: + print access.getreceivedbyaccount() + except: + print "\n---An error occurred---\n" elif cmd == "getreceivedbyaddress": - try: - addr = raw_input("Enter a Bitcoin address (optional): ") - mc = raw_input("Minimum confirmations (optional): ") - try: - print access.getreceivedbyaddress(addr, mc) - except: - print access.getreceivedbyaddress() - except: - print "\n---An error occurred---\n" + try: + addr = raw_input("Enter a Bitcoin address (optional): ") + mc = raw_input("Minimum confirmations (optional): ") + try: + print access.getreceivedbyaddress(addr, mc) + except: + print access.getreceivedbyaddress() + except: + print "\n---An error occurred---\n" elif cmd == "gettransaction": - try: - txid = raw_input("Enter a transaction ID: ") - print access.gettransaction(txid) - except: - print "\n---An error occurred---\n" + try: + txid = raw_input("Enter a transaction ID: ") + print access.gettransaction(txid) + except: + print "\n---An error occurred---\n" elif cmd == "getwork": - try: - data = raw_input("Data (optional): ") - try: - print access.gettransaction(data) - except: - print access.gettransaction() - except: - print "\n---An error occurred---\n" + try: + data = raw_input("Data (optional): ") + try: + print access.gettransaction(data) + except: + print access.gettransaction() + except: + print "\n---An error occurred---\n" elif cmd == "help": - try: - cmd = raw_input("Command (optional): ") - try: - print access.help(cmd) - except: - print access.help() - except: - print "\n---An error occurred---\n" + try: + cmd = raw_input("Command (optional): ") + try: + print access.help(cmd) + except: + print access.help() + except: + print "\n---An error occurred---\n" elif cmd == "listaccounts": - try: - mc = raw_input("Minimum confirmations (optional): ") - try: - print access.listaccounts(mc) - except: - print access.listaccounts() - except: - print "\n---An error occurred---\n" + try: + mc = raw_input("Minimum confirmations (optional): ") + try: + print access.listaccounts(mc) + except: + print access.listaccounts() + except: + print "\n---An error occurred---\n" elif cmd == "listreceivedbyaccount": - try: - mc = raw_input("Minimum confirmations (optional): ") - incemp = raw_input("Include empty? (true/false, optional): ") - try: - print access.listreceivedbyaccount(mc, incemp) - except: - print access.listreceivedbyaccount() - except: - print "\n---An error occurred---\n" + try: + mc = raw_input("Minimum confirmations (optional): ") + incemp = raw_input("Include empty? (true/false, optional): ") + try: + print access.listreceivedbyaccount(mc, incemp) + except: + print access.listreceivedbyaccount() + except: + print "\n---An error occurred---\n" elif cmd == "listreceivedbyaddress": - try: - mc = raw_input("Minimum confirmations (optional): ") - incemp = raw_input("Include empty? (true/false, optional): ") - try: - print access.listreceivedbyaddress(mc, incemp) - except: - print access.listreceivedbyaddress() - except: - print "\n---An error occurred---\n" + try: + mc = raw_input("Minimum confirmations (optional): ") + incemp = raw_input("Include empty? (true/false, optional): ") + try: + print access.listreceivedbyaddress(mc, incemp) + except: + print access.listreceivedbyaddress() + except: + print "\n---An error occurred---\n" elif cmd == "listtransactions": - try: - acct = raw_input("Account (optional): ") - count = raw_input("Number of transactions (optional): ") - frm = raw_input("Skip (optional):") - try: - print access.listtransactions(acct, count, frm) - except: - print access.listtransactions() - except: - print "\n---An error occurred---\n" + try: + acct = raw_input("Account (optional): ") + count = raw_input("Number of transactions (optional): ") + frm = raw_input("Skip (optional):") + try: + print access.listtransactions(acct, count, frm) + except: + print access.listtransactions() + except: + print "\n---An error occurred---\n" elif cmd == "move": - try: - frm = raw_input("From: ") - to = raw_input("To: ") - amt = raw_input("Amount:") - mc = raw_input("Minimum confirmations (optional): ") - comment = raw_input("Comment (optional): ") - try: - print access.move(frm, to, amt, mc, comment) - except: - print access.move(frm, to, amt) - except: - print "\n---An error occurred---\n" + try: + frm = raw_input("From: ") + to = raw_input("To: ") + amt = raw_input("Amount:") + mc = raw_input("Minimum confirmations (optional): ") + comment = raw_input("Comment (optional): ") + try: + print access.move(frm, to, amt, mc, comment) + except: + print access.move(frm, to, amt) + except: + print "\n---An error occurred---\n" elif cmd == "sendfrom": - try: - frm = raw_input("From: ") - to = raw_input("To: ") - amt = raw_input("Amount:") - mc = raw_input("Minimum confirmations (optional): ") - comment = raw_input("Comment (optional): ") - commentto = raw_input("Comment-to (optional): ") - try: - print access.sendfrom(frm, to, amt, mc, comment, commentto) - except: - print access.sendfrom(frm, to, amt) - except: - print "\n---An error occurred---\n" + try: + frm = raw_input("From: ") + to = raw_input("To: ") + amt = raw_input("Amount:") + mc = raw_input("Minimum confirmations (optional): ") + comment = raw_input("Comment (optional): ") + commentto = raw_input("Comment-to (optional): ") + try: + print access.sendfrom(frm, to, amt, mc, comment, commentto) + except: + print access.sendfrom(frm, to, amt) + except: + print "\n---An error occurred---\n" elif cmd == "sendmany": - try: - frm = raw_input("From: ") - to = raw_input("To (in format address1:amount1,address2:amount2,...): ") - mc = raw_input("Minimum confirmations (optional): ") - comment = raw_input("Comment (optional): ") - try: - print access.sendmany(frm,to,mc,comment) - except: - print access.sendmany(frm,to) - except: - print "\n---An error occurred---\n" + try: + frm = raw_input("From: ") + to = raw_input("To (in format address1:amount1,address2:amount2,...): ") + mc = raw_input("Minimum confirmations (optional): ") + comment = raw_input("Comment (optional): ") + try: + print access.sendmany(frm,to,mc,comment) + except: + print access.sendmany(frm,to) + except: + print "\n---An error occurred---\n" elif cmd == "sendtoaddress": - try: - to = raw_input("To (in format address1:amount1,address2:amount2,...): ") - amt = raw_input("Amount:") - comment = raw_input("Comment (optional): ") - commentto = raw_input("Comment-to (optional): ") - try: - print access.sendtoaddress(to,amt,comment,commentto) - except: - print access.sendtoaddress(to,amt) - except: - print "\n---An error occurred---\n" + try: + to = raw_input("To (in format address1:amount1,address2:amount2,...): ") + amt = raw_input("Amount:") + comment = raw_input("Comment (optional): ") + commentto = raw_input("Comment-to (optional): ") + try: + print access.sendtoaddress(to,amt,comment,commentto) + except: + print access.sendtoaddress(to,amt) + except: + print "\n---An error occurred---\n" elif cmd == "setaccount": - try: - addr = raw_input("Address: ") - acct = raw_input("Account:") - print access.setaccount(addr,acct) - except: - print "\n---An error occurred---\n" + try: + addr = raw_input("Address: ") + acct = raw_input("Account:") + print access.setaccount(addr,acct) + except: + print "\n---An error occurred---\n" elif cmd == "setgenerate": - try: - gen= raw_input("Generate? (true/false): ") - cpus = raw_input("Max processors/cores (-1 for unlimited, optional):") - try: - print access.setgenerate(gen, cpus) - except: - print access.setgenerate(gen) - except: - print "\n---An error occurred---\n" + try: + gen= raw_input("Generate? (true/false): ") + cpus = raw_input("Max processors/cores (-1 for unlimited, optional):") + try: + print access.setgenerate(gen, cpus) + except: + print access.setgenerate(gen) + except: + print "\n---An error occurred---\n" elif cmd == "settxfee": - try: - amt = raw_input("Amount:") - print access.settxfee(amt) - except: - print "\n---An error occurred---\n" + try: + amt = raw_input("Amount:") + print access.settxfee(amt) + except: + print "\n---An error occurred---\n" elif cmd == "stop": - try: - print access.stop() - except: - print "\n---An error occurred---\n" + try: + print access.stop() + except: + print "\n---An error occurred---\n" elif cmd == "validateaddress": - try: - addr = raw_input("Address: ") - print access.validateaddress(addr) - except: - print "\n---An error occurred---\n" + try: + addr = raw_input("Address: ") + print access.validateaddress(addr) + except: + print "\n---An error occurred---\n" elif cmd == "walletpassphrase": - try: - pwd = raw_input("Enter wallet passphrase: ") - access.walletpassphrase(pwd, 60) - print "\n---Wallet unlocked---\n" - except: - print "\n---An error occurred---\n" + try: + pwd = getpass.getpass(prompt="Enter wallet passphrase: ") + access.walletpassphrase(pwd, 60) + print "\n---Wallet unlocked---\n" + except: + print "\n---An error occurred---\n" elif cmd == "walletpassphrasechange": - try: - pwd = raw_input("Enter old wallet passphrase: ") - pwd2 = raw_input("Enter new wallet passphrase: ") - access.walletpassphrasechange(pwd, pwd2) - print - print "\n---Passphrase changed---\n" - except: - print - print "\n---An error occurred---\n" - print + try: + pwd = getpass.getpass(prompt="Enter old wallet passphrase: ") + pwd2 = getpass.getpass(prompt="Enter new wallet passphrase: ") + access.walletpassphrasechange(pwd, pwd2) + print + print "\n---Passphrase changed---\n" + except: + print + print "\n---An error occurred---\n" + print else: - print "Command not found or not supported" \ No newline at end of file + print "Command not found or not supported" diff --git a/contrib/debian/README b/contrib/debian/README deleted file mode 100644 index 1cb9b75f..00000000 --- a/contrib/debian/README +++ /dev/null @@ -1,20 +0,0 @@ -This directory contains files used to package bitcoind/bitcoin-qt -for Debian-based Linux systems. - -If you compile bitcoind/bitcoin-qt yourself, there are some -useful files here: - -bitcoin: URI support --------------------- - -bitcoin-qt.desktop (Gnome / Open Desktop) -To install: - sudo desktop-file-install bitcoin-qt.desktop - sudo update-desktop-database - -If you build yourself, you will either need to modify the paths in -the .desktop file or copy or symlink your bitcoin-qt binary to /usr/bin -and the ../../share/pixmaps/bitcoin128.png to /usr/share/pixmaps - -bitcoin-qt.protocol (KDE) - diff --git a/contrib/debian/README.md b/contrib/debian/README.md new file mode 100644 index 00000000..fab9cc23 --- /dev/null +++ b/contrib/debian/README.md @@ -0,0 +1,21 @@ + +Debian +==================== +This directory contains files used to package bitcoind/bitcoin-qt +for Debian-based Linux systems. If you compile bitcoind/bitcoin-qt yourself, there are some useful files here. + +## bitcoin: URI support ## + + +bitcoin-qt.desktop (Gnome / Open Desktop) +To install: + + sudo desktop-file-install bitcoin-qt.desktop + sudo update-desktop-database + +If you build yourself, you will either need to modify the paths in +the .desktop file or copy or symlink your bitcoin-qt binary to `/usr/bin` +and the `../../share/pixmaps/bitcoin128.png` to `/usr/share/pixmaps` + +bitcoin-qt.protocol (KDE) + diff --git a/contrib/debian/bitcoin-qt.desktop b/contrib/debian/bitcoin-qt.desktop index b2a2cef6..61e1aca6 100644 --- a/contrib/debian/bitcoin-qt.desktop +++ b/contrib/debian/bitcoin-qt.desktop @@ -4,9 +4,9 @@ Name=Bitcoin Comment=Bitcoin P2P Cryptocurrency Comment[fr]=Bitcoin, monnaie virtuelle cryptographique pair à pair Comment[tr]=Bitcoin, eşten eşe kriptografik sanal para birimi -Exec=/usr/bin/bitcoin-qt %u +Exec=bitcoin-qt %u Terminal=false Type=Application -Icon=/usr/share/pixmaps/bitcoin128.png +Icon=bitcoin128 MimeType=x-scheme-handler/bitcoin; -Categories=Office; +Categories=Office;Finance; diff --git a/contrib/debian/bitcoin-qt.install b/contrib/debian/bitcoin-qt.install index 59cacb0e..e0b32373 100644 --- a/contrib/debian/bitcoin-qt.install +++ b/contrib/debian/bitcoin-qt.install @@ -1,4 +1,4 @@ -bitcoin-qt usr/bin +usr/local/bin/bitcoin-qt usr/bin share/pixmaps/bitcoin32.xpm usr/share/pixmaps share/pixmaps/bitcoin16.xpm usr/share/pixmaps share/pixmaps/bitcoin128.png usr/share/pixmaps diff --git a/contrib/debian/bitcoind.install b/contrib/debian/bitcoind.install index 7bf74600..798ea851 100644 --- a/contrib/debian/bitcoind.install +++ b/contrib/debian/bitcoind.install @@ -1 +1,2 @@ -src/bitcoind usr/bin +usr/local/bin/bitcoind usr/bin +usr/local/bin/bitcoin-cli usr/bin diff --git a/contrib/debian/changelog b/contrib/debian/changelog index e600e467..4f22567f 100644 --- a/contrib/debian/changelog +++ b/contrib/debian/changelog @@ -1,3 +1,47 @@ +bitcoin (0.9.1-precise1) precise; urgency=medium + + * New upstream release. + * Backport pull #4019 + + -- Matt Corallo Sat, 19 Apr 2014 17:29:00 -0400 + +bitcoin (0.9.0-precise1) precise; urgency=medium + + * New upstream release. + + -- Matt Corallo Thu, 20 Mar 2014 13:10:00 -0400 + +bitcoin (0.8.6-precise1) precise; urgency=medium + + * New upstream release. + * Make .desktop paths non-fixed (suggested by prusnak@github) + + -- Matt Corallo Fri, 13 Dec 2013 13:31:00 -0400 + +bitcoin (0.8.5-precise1) precise; urgency=medium + + * New upstream release. + + -- Matt Corallo Sun, 15 Sep 2013 14:02:00 -0400 + +bitcoin (0.8.4-precise1) precise; urgency=medium + + * New upstream release. + + -- Matt Corallo Wed, 4 Sep 2013 10:25:00 -0400 + +bitcoin (0.8.3-natty1) natty; urgency=low + + * New upstream release. + + -- Matt Corallo Wed, 26 Jun 2013 00:18:00 +0100 + +bitcoin (0.8.2-natty1) natty; urgency=low + + * New upstream release. + + -- Matt Corallo Wed, 29 Mar 2013 23:23:00 +0100 + bitcoin (0.8.1-natty3) natty; urgency=low * New pixmaps diff --git a/contrib/debian/control b/contrib/debian/control index dd167ef5..9e006a70 100644 --- a/contrib/debian/control +++ b/contrib/debian/control @@ -5,6 +5,7 @@ Maintainer: Jonas Smedegaard Uploaders: Micah Anderson Build-Depends: debhelper, devscripts, + automake, bash-completion, libboost-system-dev (>> 1.35) | libboost-system1.35-dev, libdb4.8++-dev, @@ -17,7 +18,8 @@ Build-Depends: debhelper, libboost-test-dev (>> 1.35) | libboost-test1.35-dev, qt4-qmake, libqt4-dev, - libqrencode-dev + libqrencode-dev, + libprotobuf-dev, protobuf-compiler Standards-Version: 3.9.2 Homepage: http://www.bitcoin.org/ Vcs-Git: git://github.com/bitcoin/bitcoin.git @@ -34,7 +36,7 @@ Description: peer-to-peer network based digital currency - daemon check for double-spending. . Full transaction history is stored locally at each client. This - requires 2+ GB of space, slowly growing. + requires 20+ GB of space, slowly growing. . This package provides bitcoind, a combined daemon and CLI tool to interact with the daemon. @@ -50,6 +52,6 @@ Description: peer-to-peer network based digital currency - Qt GUI check for double-spending. . Full transaction history is stored locally at each client. This - requires 2+ GB of space, slowly growing. + requires 20+ GB of space, slowly growing. . This package provides Bitcoin-Qt, a GUI for Bitcoin based on Qt. diff --git a/contrib/debian/copyright b/contrib/debian/copyright index b9960491..a6ee2019 100644 --- a/contrib/debian/copyright +++ b/contrib/debian/copyright @@ -6,9 +6,9 @@ Source: http://sourceforge.net/projects/bitcoin/files/ https://github.com/bitcoin/bitcoin Files: * -Copyright: 2009-2012, Bitcoin Developers +Copyright: 2009-2012, Bitcoin Core Developers License: Expat -Comment: The Bitcoin Developers encompasses the current developers listed on bitcoin.org, +Comment: The Bitcoin Core Developers encompasses the current developers listed on bitcoin.org, as well as the numerous contributors to the project. Files: src/json/* @@ -71,7 +71,7 @@ Copyright: Bitboy (optimized for 16x16 by Wladimir van der Laan) License: PUB-DOM Comment: Site: https://bitcointalk.org/?topic=1756.0 -Files: scripts/img/reload.xcf, src/qt/res/movies/update_spinner.mng +Files: scripts/img/reload.xcf, src/qt/res/movies/*.png Copyright: Everaldo (Everaldo Coelho) License: GPL-3+ Comment: Icon Pack: Kids diff --git a/contrib/debian/manpages/bitcoin.conf.5 b/contrib/debian/manpages/bitcoin.conf.5 index eef21314..7438b4b6 100644 --- a/contrib/debian/manpages/bitcoin.conf.5 +++ b/contrib/debian/manpages/bitcoin.conf.5 @@ -37,9 +37,6 @@ You must set *rpcuser* to secure the JSON-RPC api. \fBrpcpassword=\fR\fI'password'\fR You must set *rpcpassword* to secure the JSON-RPC api. .TP -\fBrpctimeout=\fR\fI'30'\fR -How many seconds *bitcoin* will wait for a complete RPC HTTP request, after the HTTP connection is established. -.TP \fBrpcallowip=\fR\fI'192.168.1.*'\fR By default, only RPC connections from localhost are allowed. Specify as many *rpcallowip=* settings as you like to allow connections from other hosts (and you may use * as a wildcard character). .TP diff --git a/contrib/debian/rules b/contrib/debian/rules index 98bb2bba..52b357cf 100755 --- a/contrib/debian/rules +++ b/contrib/debian/rules @@ -11,23 +11,14 @@ DEB_INSTALL_MANPAGES_bitcoind += debian/manpages/* %: dh --with bash-completion $@ -override_dh_auto_build: - cd src; $(MAKE) -f makefile.unix bitcoind - $(MAKE) - override_dh_auto_clean: - if [ -f Makefile ]; then $(MAKE) clean; else rm -rf build/; rm -f bitcoin-qt; fi - cd src; $(MAKE) -f makefile.unix clean + if [ -f Makefile ]; then $(MAKE) distclean; fi + rm -rf Makefile.in aclocal.m4 configure src/Makefile.in src/bitcoin-config.h.in src/build-aux src/qt/Makefile.in src/qt/test/Makefile.in src/test/Makefile.in +# Yea, autogen should be run on the source archive, but I like doing git archive override_dh_auto_configure: - qmake bitcoin-qt.pro USE_QRCODE=1 + ./autogen.sh + ./configure override_dh_auto_test: - cd src; $(MAKE) -f makefile.unix test_bitcoin - src/test_bitcoin - -# Ensure wrapper is set executable -binary-post-install/bitcoind: - chmod +x $(cdbs_curdestdir)usr/bin/bitcoind -binary-post-install/bitcoin-qt: - chmod +x $(cdbs_curdestdir)usr/bin/bitcoin-qt + make check diff --git a/contrib/devtools/README.md b/contrib/devtools/README.md new file mode 100644 index 00000000..a57b4e56 --- /dev/null +++ b/contrib/devtools/README.md @@ -0,0 +1,83 @@ +Contents +=========== +This directory contains tools for developers working on this repository. + +github-merge.sh +================== + +A small script to automate merging pull-requests securely and sign them with GPG. + +For example: + + ./github-merge.sh bitcoin/bitcoin 3077 + +(in any git repository) will help you merge pull request #3077 for the +bitcoin/bitcoin repository. + +What it does: +* Fetch master and the pull request. +* Locally construct a merge commit. +* Show the diff that merge results in. +* Ask you to verify the resulting source tree (so you can do a make +check or whatever). +* Ask you whether to GPG sign the merge commit. +* Ask you whether to push the result upstream. + +This means that there are no potential race conditions (where a +pullreq gets updated while you're reviewing it, but before you click +merge), and when using GPG signatures, that even a compromised github +couldn't mess with the sources. + +Setup +--------- +Configuring the github-merge tool for the bitcoin repository is done in the following way: + + git config githubmerge.repository bitcoin/bitcoin + git config githubmerge.testcmd "make -j4 check" (adapt to whatever you want to use for testing) + git config --global user.signingkey mykeyid (if you want to GPG sign) + +fix-copyright-headers.py +=========================== + +Every year newly updated files need to have its copyright headers updated to reflect the current year. +If you run this script from src/ it will automatically update the year on the copyright header for all +.cpp and .h files if these have a git commit from the current year. + +For example a file changed in 2014 (with 2014 being the current year): +```// Copyright (c) 2009-2013 The Bitcoin developers``` + +would be changed to: +```// Copyright (c) 2009-2014 The Bitcoin developers``` + +symbol-check.py +================== + +A script to check that the (Linux) executables produced by gitian only contain +allowed gcc, glibc and libstdc++ version symbols. This makes sure they are +still compatible with the minimum supported Linux distribution versions. + +Example usage after a gitian build: + + find ../gitian-builder/build -type f -executable | xargs python contrib/devtools/symbol-check.py + +If only supported symbols are used the return value will be 0 and the output will be empty. + +If there are 'unsupported' symbols, the return value will be 1 a list like this will be printed: + + .../64/test_bitcoin: symbol memcpy from unsupported version GLIBC_2.14 + .../64/test_bitcoin: symbol __fdelt_chk from unsupported version GLIBC_2.15 + .../64/test_bitcoin: symbol std::out_of_range::~out_of_range() from unsupported version GLIBCXX_3.4.15 + .../64/test_bitcoin: symbol _ZNSt8__detail15_List_nod from unsupported version GLIBCXX_3.4.15 + +update-translations.py +======================= + +Run this script from the root of the repository to update all translations from transifex. +It will do the following automatically: + +- fetch all translations +- post-process them into valid and committable format +- add missing translations to the build system (TODO) + +See doc/translation-process.md for more information. + diff --git a/contrib/devtools/fix-copyright-headers.py b/contrib/devtools/fix-copyright-headers.py new file mode 100755 index 00000000..52fdc991 --- /dev/null +++ b/contrib/devtools/fix-copyright-headers.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python +''' +Run this script inside of src/ and it will look for all the files +that were changed this year that still have the last year in the +copyright headers, and it will fix the headers on that file using +a perl regex one liner. + +For example: if it finds something like this and we're in 2014 + +// Copyright (c) 2009-2013 The Bitcoin developers + +it will change it to + +// Copyright (c) 2009-2014 The Bitcoin developers + +It will do this for all the files in the folder and its children. + +Author: @gubatron +''' +import os +import time + +year = time.gmtime()[0] +last_year = year - 1 +command = "perl -pi -e 's/%s The Bitcoin/%s The Bitcoin/' %s" +listFilesCommand = "find . | grep %s" + +extensions = [".cpp",".h"] + +def getLastGitModifiedDate(filePath): + gitGetLastCommitDateCommand = "git log " + filePath +" | grep Date | head -n 1" + p = os.popen(gitGetLastCommitDateCommand) + result = "" + for l in p: + result = l + break + result = result.replace("\n","") + return result + +n=1 +for extension in extensions: + foundFiles = os.popen(listFilesCommand % extension) + for filePath in foundFiles: + filePath = filePath[1:-1] + if filePath.endswith(extension): + filePath = os.getcwd() + filePath + modifiedTime = getLastGitModifiedDate(filePath) + if len(modifiedTime) > 0 and str(year) in modifiedTime: + print n,"Last Git Modified: ", modifiedTime, " - ", filePath + os.popen(command % (last_year,year,filePath)) + n = n + 1 + + diff --git a/contrib/devtools/github-merge.sh b/contrib/devtools/github-merge.sh new file mode 100755 index 00000000..e42b71a5 --- /dev/null +++ b/contrib/devtools/github-merge.sh @@ -0,0 +1,173 @@ +#!/bin/bash + +# This script will locally construct a merge commit for a pull request on a +# github repository, inspect it, sign it and optionally push it. + +# The following temporary branches are created/overwritten and deleted: +# * pull/$PULL/base (the current master we're merging onto) +# * pull/$PULL/head (the current state of the remote pull request) +# * pull/$PULL/merge (github's merge) +# * pull/$PULL/local-merge (our merge) + +# In case of a clean merge that is accepted by the user, the local branch with +# name $BRANCH is overwritten with the merged result, and optionally pushed. + +REPO="$(git config --get githubmerge.repository)" +if [[ "d$REPO" == "d" ]]; then + echo "ERROR: No repository configured. Use this command to set:" >&2 + echo "git config githubmerge.repository /" >&2 + echo "In addition, you can set the following variables:" >&2 + echo "- githubmerge.host (default git@github.com)" >&2 + echo "- githubmerge.branch (default master)" >&2 + echo "- githubmerge.testcmd (default none)" >&2 + exit 1 +fi + +HOST="$(git config --get githubmerge.host)" +if [[ "d$HOST" == "d" ]]; then + HOST="git@github.com" +fi + +BRANCH="$(git config --get githubmerge.branch)" +if [[ "d$BRANCH" == "d" ]]; then + BRANCH="master" +fi + +TESTCMD="$(git config --get githubmerge.testcmd)" + +PULL="$1" + +if [[ "d$PULL" == "d" ]]; then + echo "Usage: $0 pullnumber [branch]" >&2 + exit 2 +fi + +if [[ "d$2" != "d" ]]; then + BRANCH="$2" +fi + +# Initialize source branches. +git checkout -q "$BRANCH" +if git fetch -q "$HOST":"$REPO" "+refs/pull/$PULL/*:refs/heads/pull/$PULL/*"; then + if ! git log -1q "refs/heads/pull/$PULL/head" >/dev/null 2>&1; then + echo "ERROR: Cannot find head of pull request #$PULL on $HOST:$REPO." >&2 + exit 3 + fi + if ! git log -1q "refs/heads/pull/$PULL/merge" >/dev/null 2>&1; then + echo "ERROR: Cannot find merge of pull request #$PULL on $HOST:$REPO." >&2 + exit 3 + fi +else + echo "ERROR: Cannot find pull request #$PULL on $HOST:$REPO." >&2 + exit 3 +fi +if git fetch -q "$HOST":"$REPO" +refs/heads/"$BRANCH":refs/heads/pull/"$PULL"/base; then + true +else + echo "ERROR: Cannot find branch $BRANCH on $HOST:$REPO." >&2 + exit 3 +fi +git checkout -q pull/"$PULL"/base +git branch -q -D pull/"$PULL"/local-merge 2>/dev/null +git checkout -q -b pull/"$PULL"/local-merge +TMPDIR="$(mktemp -d -t ghmXXXXX)" + +function cleanup() { + git checkout -q "$BRANCH" + git branch -q -D pull/"$PULL"/head 2>/dev/null + git branch -q -D pull/"$PULL"/base 2>/dev/null + git branch -q -D pull/"$PULL"/merge 2>/dev/null + git branch -q -D pull/"$PULL"/local-merge 2>/dev/null + rm -rf "$TMPDIR" +} + +# Create unsigned merge commit. +( + echo "Merge pull request #$PULL" + echo "" + git log --no-merges --topo-order --pretty='format:%h %s (%an)' pull/"$PULL"/base..pull/"$PULL"/head +)>"$TMPDIR/message" +if git merge -q --commit --no-edit --no-ff -m "$(<"$TMPDIR/message")" pull/"$PULL"/head; then + if [ "d$(git log --pretty='format:%s' -n 1)" != "dMerge pull request #$PULL" ]; then + echo "ERROR: Creating merge failed (already merged?)." >&2 + cleanup + exit 4 + fi +else + echo "ERROR: Cannot be merged cleanly." >&2 + git merge --abort + cleanup + exit 4 +fi + +# Run test command if configured. +if [[ "d$TESTCMD" != "d" ]]; then + # Go up to the repository's root. + while [ ! -d .git ]; do cd ..; done + if ! $TESTCMD; then + echo "ERROR: Running $TESTCMD failed." >&2 + cleanup + exit 5 + fi + # Show the created merge. + git diff pull/"$PULL"/merge..pull/"$PULL"/local-merge >"$TMPDIR"/diff + git diff pull/"$PULL"/base..pull/"$PULL"/local-merge + if [[ "$(<"$TMPDIR"/diff)" != "" ]]; then + echo "WARNING: merge differs from github!" >&2 + read -p "Type 'ignore' to continue. " -r >&2 + if [[ "d$REPLY" =~ ^d[iI][gG][nN][oO][rR][eE]$ ]]; then + echo "Difference with github ignored." >&2 + else + cleanup + exit 6 + fi + fi + read -p "Press 'd' to accept the diff. " -n 1 -r >&2 + echo + if [[ "d$REPLY" =~ ^d[dD]$ ]]; then + echo "Diff accepted." >&2 + else + echo "ERROR: Diff rejected." >&2 + cleanup + exit 6 + fi +else + # Verify the result. + echo "Dropping you on a shell so you can try building/testing the merged source." >&2 + echo "Run 'git diff HEAD~' to show the changes being merged." >&2 + echo "Type 'exit' when done." >&2 + bash -i + read -p "Press 'm' to accept the merge. " -n 1 -r >&2 + echo + if [[ "d$REPLY" =~ ^d[Mm]$ ]]; then + echo "Merge accepted." >&2 + else + echo "ERROR: Merge rejected." >&2 + cleanup + exit 7 + fi +fi + +# Sign the merge commit. +read -p "Press 's' to sign off on the merge. " -n 1 -r >&2 +echo +if [[ "d$REPLY" =~ ^d[Ss]$ ]]; then + if [[ "$(git config --get user.signingkey)" == "" ]]; then + echo "WARNING: No GPG signing key set, not signing. Set one using:" >&2 + echo "git config --global user.signingkey " >&2 + git commit -q --signoff --amend --no-edit + else + git commit -q --gpg-sign --amend --no-edit + fi +fi + +# Clean up temporary branches, and put the result in $BRANCH. +git checkout -q "$BRANCH" +git reset -q --hard pull/"$PULL"/local-merge +cleanup + +# Push the result. +read -p "Type 'push' to push the result to $HOST:$REPO, branch $BRANCH. " -r >&2 +if [[ "d$REPLY" =~ ^d[Pp][Uu][Ss][Hh]$ ]]; then + git push "$HOST":"$REPO" refs/heads/"$BRANCH" +fi diff --git a/contrib/devtools/symbol-check.py b/contrib/devtools/symbol-check.py new file mode 100755 index 00000000..8dd6d8f0 --- /dev/null +++ b/contrib/devtools/symbol-check.py @@ -0,0 +1,113 @@ +#!/usr/bin/python +# Copyright (c) 2014 Wladimir J. van der Laan +# Distributed under the MIT/X11 software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. +''' +A script to check that the (Linux) executables produced by gitian only contain +allowed gcc, glibc and libstdc++ version symbols. This makes sure they are +still compatible with the minimum supported Linux distribution versions. + +Example usage: + + find ../gitian-builder/build -type f -executable | xargs python contrib/devtools/symbol-check.py +''' +from __future__ import division, print_function +import subprocess +import re +import sys + +# Debian 6.0.9 (Squeeze) has: +# +# - g++ version 4.4.5 (https://packages.debian.org/search?suite=default§ion=all&arch=any&searchon=names&keywords=g%2B%2B) +# - libc version 2.11.3 (https://packages.debian.org/search?suite=default§ion=all&arch=any&searchon=names&keywords=libc6) +# - libstdc++ version 4.4.5 (https://packages.debian.org/search?suite=default§ion=all&arch=any&searchon=names&keywords=libstdc%2B%2B6) +# +# Ubuntu 10.04.4 (Lucid Lynx) has: +# +# - g++ version 4.4.3 (http://packages.ubuntu.com/search?keywords=g%2B%2B&searchon=names&suite=lucid§ion=all) +# - libc version 2.11.1 (http://packages.ubuntu.com/search?keywords=libc6&searchon=names&suite=lucid§ion=all) +# - libstdc++ version 4.4.3 (http://packages.ubuntu.com/search?suite=lucid§ion=all&arch=any&keywords=libstdc%2B%2B&searchon=names) +# +# Taking the minimum of these as our target. +# +# According to GNU ABI document (http://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html) this corresponds to: +# GCC 4.4.0: GCC_4.4.0 +# GCC 4.4.2: GLIBCXX_3.4.13, CXXABI_1.3.3 +# (glibc) GLIBC_2_11 +# +MAX_VERSIONS = { +'GCC': (4,4,0), +'CXXABI': (1,3,3), +'GLIBCXX': (3,4,13), +'GLIBC': (2,11) +} +READELF_CMD = '/usr/bin/readelf' +CPPFILT_CMD = '/usr/bin/c++filt' + +class CPPFilt(object): + ''' + Demangle C++ symbol names. + + Use a pipe to the 'c++filt' command. + ''' + def __init__(self): + self.proc = subprocess.Popen(CPPFILT_CMD, stdin=subprocess.PIPE, stdout=subprocess.PIPE) + + def __call__(self, mangled): + self.proc.stdin.write(mangled + '\n') + return self.proc.stdout.readline().rstrip() + + def close(self): + self.proc.stdin.close() + self.proc.stdout.close() + self.proc.wait() + +def read_symbols(executable, imports=True): + ''' + Parse an ELF executable and return a list of (symbol,version) tuples + for dynamic, imported symbols. + ''' + p = subprocess.Popen([READELF_CMD, '--dyn-syms', '-W', executable], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE) + (stdout, stderr) = p.communicate() + if p.returncode: + raise IOError('Could not read symbols for %s: %s' % (executable, stderr.strip())) + syms = [] + for line in stdout.split('\n'): + line = line.split() + if len(line)>7 and re.match('[0-9]+:$', line[0]): + (sym, _, version) = line[7].partition('@') + is_import = line[6] == 'UND' + if version.startswith('@'): + version = version[1:] + if is_import == imports: + syms.append((sym, version)) + return syms + +def check_version(max_versions, version): + if '_' in version: + (lib, _, ver) = version.rpartition('_') + else: + lib = version + ver = '0' + ver = tuple([int(x) for x in ver.split('.')]) + if not lib in max_versions: + return False + return ver <= max_versions[lib] + +if __name__ == '__main__': + cppfilt = CPPFilt() + retval = 0 + for filename in sys.argv[1:]: + # Check imported symbols + for sym,version in read_symbols(filename, True): + if version and not check_version(MAX_VERSIONS, version): + print('%s: symbol %s from unsupported version %s' % (filename, cppfilt(sym), version)) + retval = 1 + # Check exported symbols + for sym,version in read_symbols(filename, False): + print('%s: export of symbol %s not allowed' % (filename, cppfilt(sym))) + retval = 1 + + exit(retval) + + diff --git a/contrib/devtools/update-translations.py b/contrib/devtools/update-translations.py new file mode 100755 index 00000000..1950a426 --- /dev/null +++ b/contrib/devtools/update-translations.py @@ -0,0 +1,66 @@ +#!/usr/bin/python +# Copyright (c) 2014 Wladimir J. van der Laan +# Distributed under the MIT/X11 software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. +''' +Run this script from the root of the repository to update all translations from +transifex. +It will do the following automatically: + +- fetch all translations using the tx tool +- post-process them into valid and committable format + - remove invalid control characters + - remove location tags (makes diffs less noisy) + +TODO: +- auto-add new translations to the build system according to the translation process +- remove 'unfinished' translation items +''' +from __future__ import division, print_function +import subprocess +import re +import sys +import os + +# Name of transifex tool +TX = 'tx' +# Name of source language file +SOURCE_LANG = 'bitcoin_en.ts' +# Directory with locale files +LOCALE_DIR = 'src/qt/locale' + +def check_at_repository_root(): + if not os.path.exists('.git'): + print('No .git directory found') + print('Execute this script at the root of the repository', file=sys.stderr) + exit(1) + +def fetch_all_translations(): + if subprocess.call([TX, 'pull', '-f']): + print('Error while fetching translations', file=sys.stderr) + exit(1) + +def postprocess_translations(): + print('Postprocessing...') + for filename in os.listdir(LOCALE_DIR): + # process only language files, and do not process source language + if not filename.endswith('.ts') or filename == SOURCE_LANG: + continue + filepath = os.path.join(LOCALE_DIR, filename) + with open(filepath, 'rb') as f: + data = f.read() + # remove non-allowed control characters + data = re.sub('[\x00-\x09\x0b\x0c\x0e-\x1f]', '', data) + data = data.split('\n') + # strip locations from non-origin translation + # location tags are used to guide translators, they are not necessary for compilation + # TODO: actually process XML instead of relying on Transifex's one-tag-per-line output format + data = [line for line in data if not '\"-frandom-seed=boost1 -fPIC\" + ;" > user-config.jam + + ./bootstrap.sh --without-icu + + ./bjam toolset=gcc threadapi=pthread threading=multi variant=release link=static runtime-link=shared --user-config=user-config.jam --without-mpi --without-python -sNO_BZIP2=1 --layout=tagged --build-type=complete --prefix="$STAGING" $MAKEOPTS -d+2 install + + # post-process all generated libraries to be deterministic + # extract them to a temporary directory then re-build them deterministically + for LIB in $(find $STAGING -name \*.a); do + rm -rf $TEMPDIR && mkdir $TEMPDIR && cd $TEMPDIR + ar xv $LIB | cut -b5- > /tmp/list.txt + rm $LIB + ar crsD $LIB $(cat /tmp/list.txt) + done + # + cd "$STAGING" + find | sort | zip -X@ $OUTDIR/boost-linux${GBUILD_BITS}-1.55.0-gitian-r1.zip diff --git a/contrib/gitian-descriptors/boost-win.yml b/contrib/gitian-descriptors/boost-win.yml new file mode 100644 index 00000000..db5d6bab --- /dev/null +++ b/contrib/gitian-descriptors/boost-win.yml @@ -0,0 +1,86 @@ +--- +name: "boost" +suites: +- "precise" +architectures: +- "amd64" +packages: +- "mingw-w64" +- "g++-mingw-w64" +- "faketime" +- "zip" +reference_datetime: "2011-01-30 00:00:00" +remotes: [] +files: +- "boost_1_55_0.tar.bz2" +- "boost-mingw-gas-cross-compile-2013-03-03.patch" +script: | + # Defines + export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 + export FAKETIME=$REFERENCE_DATETIME + export TZ=UTC + INDIR=$HOME/build + TEMPDIR=$HOME/tmp + # Input Integrity Check + echo "fff00023dd79486d444c8e29922f4072e1d451fc5a4d2b6075852ead7f2b7b52 boost_1_55_0.tar.bz2" | shasum -c + echo "d2b7f6a1d7051faef3c9cf41a92fa3671d905ef1e1da920d07651a43299f6268 boost-mingw-gas-cross-compile-2013-03-03.patch" | shasum -c + + for BITS in 32 64; do # for architectures + # + INSTALLPREFIX=$HOME/staging${BITS} + BUILDDIR=$HOME/build${BITS} + if [ "$BITS" == "32" ]; then + HOST=i686-w64-mingw32 + else + HOST=x86_64-w64-mingw32 + fi + # + mkdir -p $INSTALLPREFIX $BUILDDIR + cd $BUILDDIR + # + tar --warning=no-timestamp -xjf $INDIR/boost_1_55_0.tar.bz2 + cd boost_1_55_0 + GCCVERSION=$($HOST-g++ -E -dM $(mktemp --suffix=.h) | grep __VERSION__ | cut -d ' ' -f 3 | cut -d '"' -f 2) + echo "using gcc : $GCCVERSION : $HOST-g++ + : + $HOST-windres + $HOST-ar + -frandom-seed=boost1 + $HOST-ranlib + ;" > user-config.jam + ./bootstrap.sh --without-icu + + # Workaround: Upstream boost dev refuses to include patch that would allow Free Software cross-compile toolchain to work + # This patch was authored by the Fedora package developer and ships in Fedora's mingw32-boost. + # Please obtain the exact patch that matches the above sha256sum from one of the following mirrors. + # + # Read History: https://svn.boost.org/trac/boost/ticket/7262 + # History Mirror: http://rose.makesad.us/~paulproteus/mirrors/7262%20Boost.Context%20fails%20to%20build%20using%20MinGW.html + # + # Patch: https://svn.boost.org/trac/boost/raw-attachment/ticket/7262/boost-mingw.patch + # Patch Mirror: http://wtogami.fedorapeople.org/boost-mingw-gas-cross-compile-2013-03-03.patch + # Patch Mirror: http://mindstalk.net/host/boost-mingw-gas-cross-compile-2013-03-03.patch + # Patch Mirror: http://rose.makesad.us/~paulproteus/mirrors/boost-mingw-gas-cross-compile-2013-03-03.patch + patch -p0 < $INDIR/boost-mingw-gas-cross-compile-2013-03-03.patch + + # Bug Workaround: boost-1.54.0 broke the ability to disable zlib, still broken in 1.55 + # https://svn.boost.org/trac/boost/ticket/9156 + sed -i 's^\[ ac.check-library /zlib//zlib : /zlib//zlib^^' libs/iostreams/build/Jamfile.v2 + sed -i 's^zlib.cpp gzip.cpp \]^^' libs/iostreams/build/Jamfile.v2 + + # http://statmt.org/~s0565741/software/boost_1_52_0/libs/context/doc/html/context/requirements.html + # "For cross-compiling the lib you must specify certain additional properties at bjam command line: target-os, abi, binary-format, architecture and address-model." + ./bjam toolset=gcc binary-format=pe target-os=windows threadapi=win32 address-model=$BITS threading=multi variant=release link=static runtime-link=static --user-config=user-config.jam --without-mpi --without-python -sNO_BZIP2=1 -sNO_ZLIB=1 --layout=tagged --build-type=complete --prefix="$INSTALLPREFIX" $MAKEOPTS install + # post-process all generated libraries to be deterministic + # extract them to a temporary directory then re-build them deterministically + for LIB in $(find $INSTALLPREFIX -name \*.a); do + rm -rf $TEMPDIR && mkdir $TEMPDIR && cd $TEMPDIR + $HOST-ar xv $LIB | cut -b5- > /tmp/list.txt + rm $LIB + $HOST-ar crsD $LIB $(cat /tmp/list.txt) + done + # + cd "$INSTALLPREFIX" + find | sort | zip -X@ $OUTDIR/boost-win$BITS-1.55.0-gitian-r6.zip + done # for BITS in + diff --git a/contrib/gitian-descriptors/boost-win32.yml b/contrib/gitian-descriptors/boost-win32.yml deleted file mode 100644 index 1eeb9eaa..00000000 --- a/contrib/gitian-descriptors/boost-win32.yml +++ /dev/null @@ -1,38 +0,0 @@ ---- -name: "boost" -suites: -- "lucid" -architectures: -- "i386" -packages: -- "mingw32" -- "faketime" -- "zip" -reference_datetime: "2011-01-30 00:00:00" -remotes: [] -files: -- "boost_1_50_0.tar.bz2" -script: | - TMPDIR="$HOME/tmpdir" - mkdir -p $TMPDIR/bin/$GBUILD_BITS $TMPDIR/include - tar xjf boost_1_50_0.tar.bz2 - cd boost_1_50_0 - echo "using gcc : 4.4 : i586-mingw32msvc-g++ - : - i586-mingw32msvc-windres - i586-mingw32msvc-ar - -frandom-seed=boost1 - ;" > user-config.jam - ./bootstrap.sh --without-icu - ./bjam toolset=gcc target-os=windows threadapi=win32 threading=multi variant=release link=static --user-config=user-config.jam --without-mpi --without-python -sNO_BZIP2=1 -sNO_ZLIB=1 --layout=tagged --build-type=complete $MAKEOPTS stage - for lib in chrono date_time exception filesystem graph iostreams math_c99f math_c99l math_c99 math_tr1f math_tr1l math_tr1 prg_exec_monitor program_options random regex serialization signals system test_exec_monitor thread_win32 unit_test_framework wave wserialization; do - mkdir $lib - (cd $lib ; ar xf ../stage/lib/libboost_${lib}-mt-s.a) - mv $lib $TMPDIR/bin/$GBUILD_BITS - done - cp -a boost $TMPDIR/include - cd $TMPDIR - export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 - export FAKETIME=$REFERENCE_DATETIME - zip -r boost-win32-1.50.0-gitian2.zip * - cp boost-win32-1.50.0-gitian2.zip $OUTDIR diff --git a/contrib/gitian-descriptors/deps-linux.yml b/contrib/gitian-descriptors/deps-linux.yml new file mode 100644 index 00000000..82212221 --- /dev/null +++ b/contrib/gitian-descriptors/deps-linux.yml @@ -0,0 +1,98 @@ +--- +name: "bitcoin" +suites: +- "precise" +architectures: +- "i386" +- "amd64" +packages: +- "g++" +- "unzip" +- "zip" +- "pkg-config" +- "libtool" +- "faketime" +- "bsdmainutils" +reference_datetime: "2013-06-01 00:00:00" +remotes: [] +files: +- "openssl-1.0.1h.tar.gz" +- "miniupnpc-1.9.tar.gz" +- "qrencode-3.4.3.tar.bz2" +- "protobuf-2.5.0.tar.bz2" +- "db-4.8.30.NC.tar.gz" +script: | + STAGING="$HOME/install" + TEMPDIR="$HOME/tmp" + OPTFLAGS='-O2' + export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 + export FAKETIME=$REFERENCE_DATETIME + export TZ=UTC + export LIBRARY_PATH="$STAGING/lib" + # Integrity Check + echo "9d1c8a9836aa63e2c6adb684186cbd4371c9e9dcc01d6e3bb447abf2d4d3d093 openssl-1.0.1h.tar.gz" | sha256sum -c + echo "2923e453e880bb949e3d4da9f83dd3cb6f08946d35de0b864d0339cf70934464 miniupnpc-1.9.tar.gz" | sha256sum -c + echo "dfd71487513c871bad485806bfd1fdb304dedc84d2b01a8fb8e0940b50597a98 qrencode-3.4.3.tar.bz2" | sha256sum -c + echo "13bfc5ae543cf3aa180ac2485c0bc89495e3ae711fc6fab4f8ffe90dfb4bb677 protobuf-2.5.0.tar.bz2" | sha256sum -c + echo "12edc0df75bf9abd7f82f821795bcee50f42cb2e5f76a6a281b85732798364ef db-4.8.30.NC.tar.gz" | sha256sum -c + + # + tar xzf openssl-1.0.1h.tar.gz + cd openssl-1.0.1h + # need -fPIC to avoid relocation error in 64 bit builds + ./config no-shared no-zlib no-dso no-krb5 --openssldir=$STAGING -fPIC + # need to build OpenSSL with faketime because a timestamp is embedded into cversion.o + make + make install_sw + cd .. + # + tar xzfm miniupnpc-1.9.tar.gz + cd miniupnpc-1.9 + # miniupnpc is always built with -fPIC + INSTALLPREFIX=$STAGING make $MAKEOPTS install + rm -f $STAGING/lib/libminiupnpc.so* # no way to skip shared lib build + cd .. + # + tar xjf qrencode-3.4.3.tar.bz2 + cd qrencode-3.4.3 + unset FAKETIME # unset fake time during configure, as it does some clock sanity tests + # need --with-pic to avoid relocation error in 64 bit builds + ./configure --prefix=$STAGING --enable-static --disable-shared --with-pic --without-tools --disable-dependency-tracking + # Workaround to prevent re-configuring by make; make all files have a date in the past + find . -print0 | xargs -r0 touch -t 200001010000 + export FAKETIME=$REFERENCE_DATETIME + make $MAKEOPTS install + cd .. + # + tar xjf protobuf-2.5.0.tar.bz2 + cd protobuf-2.5.0 + mkdir -p $STAGING/host/bin + unset FAKETIME # unset fake time during configure, as it does some clock sanity tests + # need --with-pic to avoid relocation error in 64 bit builds + ./configure --prefix=$STAGING --bindir=$STAGING/host/bin --enable-static --disable-shared --with-pic --without-zlib + # Workaround to prevent re-configuring by make; make all files have a date in the past + find . -print0 | xargs -r0 touch -t 200001010000 + export FAKETIME=$REFERENCE_DATETIME + make $MAKEOPTS install + cd .. + # + tar xzf db-4.8.30.NC.tar.gz + cd db-4.8.30.NC/build_unix + # need --with-pic to avoid relocation error in 64 bit builds + ../dist/configure --prefix=$STAGING --enable-cxx --disable-shared --with-pic + # Workaround to prevent re-configuring by make; make all files have a date in the past + find . -print0 | xargs -r0 touch -t 200001010000 + make $MAKEOPTS library_build + make install_lib install_include + cd ../.. + # post-process all generated libraries to be deterministic + # extract them to a temporary directory then re-build them deterministically + for LIB in $(find $STAGING -name \*.a); do + rm -rf $TEMPDIR && mkdir $TEMPDIR && cd $TEMPDIR + ar xv $LIB | cut -b5- > /tmp/list.txt + rm $LIB + ar crsD $LIB $(cat /tmp/list.txt) + done + # + cd $STAGING + find include lib bin host | sort | zip -X@ $OUTDIR/bitcoin-deps-linux${GBUILD_BITS}-gitian-r6.zip diff --git a/contrib/gitian-descriptors/deps-win.yml b/contrib/gitian-descriptors/deps-win.yml new file mode 100644 index 00000000..fabc2949 --- /dev/null +++ b/contrib/gitian-descriptors/deps-win.yml @@ -0,0 +1,128 @@ +--- +name: "bitcoin-deps" +suites: +- "precise" +architectures: +- "amd64" +packages: +- "mingw-w64" +- "g++-mingw-w64" +- "git-core" +- "zip" +- "faketime" +- "psmisc" +reference_datetime: "2011-01-30 00:00:00" +remotes: [] +files: +- "openssl-1.0.1h.tar.gz" +- "db-4.8.30.NC.tar.gz" +- "miniupnpc-1.9.tar.gz" +- "zlib-1.2.8.tar.gz" +- "libpng-1.6.8.tar.gz" +- "qrencode-3.4.3.tar.bz2" +script: | + # + export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 + export FAKETIME=$REFERENCE_DATETIME + export TZ=UTC + INDIR=$HOME/build + TEMPDIR=$HOME/tmp + # Input Integrity Check + echo "9d1c8a9836aa63e2c6adb684186cbd4371c9e9dcc01d6e3bb447abf2d4d3d093 openssl-1.0.1h.tar.gz" | sha256sum -c + echo "12edc0df75bf9abd7f82f821795bcee50f42cb2e5f76a6a281b85732798364ef db-4.8.30.NC.tar.gz" | sha256sum -c + echo "2923e453e880bb949e3d4da9f83dd3cb6f08946d35de0b864d0339cf70934464 miniupnpc-1.9.tar.gz" | sha256sum -c + echo "36658cb768a54c1d4dec43c3116c27ed893e88b02ecfcb44f2166f9c0b7f2a0d zlib-1.2.8.tar.gz" | sha256sum -c + echo "32c7acf1608b9c8b71b743b9780adb7a7b347563dbfb4a5263761056da44cc96 libpng-1.6.8.tar.gz" | sha256sum -c + echo "dfd71487513c871bad485806bfd1fdb304dedc84d2b01a8fb8e0940b50597a98 qrencode-3.4.3.tar.bz2" | sha256sum -c + + for BITS in 32 64; do # for architectures + # + INSTALLPREFIX=$HOME/staging${BITS} + BUILDDIR=$HOME/build${BITS} + if [ "$BITS" == "32" ]; then + HOST=i686-w64-mingw32 + else + HOST=x86_64-w64-mingw32 + fi + # + mkdir -p $INSTALLPREFIX $BUILDDIR + cd $BUILDDIR + # + tar xzf $INDIR/openssl-1.0.1h.tar.gz + cd openssl-1.0.1h + if [ "$BITS" == "32" ]; then + OPENSSL_TGT=mingw + else + OPENSSL_TGT=mingw64 + fi + ./Configure --cross-compile-prefix=$HOST- ${OPENSSL_TGT} no-shared no-dso --openssldir=$INSTALLPREFIX + make + make install_sw + cd .. + # + tar xzf $INDIR/db-4.8.30.NC.tar.gz + cd db-4.8.30.NC/build_unix + ../dist/configure --prefix=$INSTALLPREFIX --enable-mingw --enable-cxx --host=$HOST --disable-shared + make $MAKEOPTS library_build + make install_lib install_include + cd ../.. + # + tar xzf $INDIR/miniupnpc-1.9.tar.gz + cd miniupnpc-1.9 + echo " + --- miniupnpc-1.9/Makefile.mingw.orig 2013-09-29 18:52:51.014087958 -1000 + +++ miniupnpc-1.9/Makefile.mingw 2013-09-29 19:09:29.663318691 -1000 + @@ -67,8 +67,8 @@ + + wingenminiupnpcstrings.o: wingenminiupnpcstrings.c + + -miniupnpcstrings.h: miniupnpcstrings.h.in wingenminiupnpcstrings + - wingenminiupnpcstrings \$< \$@ + +miniupnpcstrings.h: miniupnpcstrings.h.in + + sed -e 's|OS/version|MSWindows/5.1.2600|' -e 's|MINIUPNPC_VERSION_STRING \"version\"|MINIUPNPC_VERSION_STRING \"VERSIONHERE\"|' \$< > \$@ + + minixml.o: minixml.c minixml.h miniupnpcstrings.h + + " | sed "s/VERSIONHERE/$(cat VERSION)/" | patch -p1 + mkdir -p dll + make -f Makefile.mingw CC=$HOST-gcc AR=$HOST-ar libminiupnpc.a + install -d $INSTALLPREFIX/include/miniupnpc + install *.h $INSTALLPREFIX/include/miniupnpc + install libminiupnpc.a $INSTALLPREFIX/lib + cd .. + # + tar xzf $INDIR/zlib-1.2.8.tar.gz + cd zlib-1.2.8 + CROSS_PREFIX=$HOST- ./configure --prefix=$INSTALLPREFIX --static + make + make install + cd .. + # + tar xzf $INDIR/libpng-1.6.8.tar.gz + cd libpng-1.6.8 + OPT="-O2" + CPPFLAGS="${OPT} -I$INSTALLPREFIX/include" CFLAGS="${OPT} -I$INSTALLPREFIX/include" LDFLAGS="${OPT} -L$INSTALLPREFIX/lib" ./configure --disable-shared --prefix=$INSTALLPREFIX --host=$HOST + make $MAKEOPTS + make install + cd .. + # + tar xjf $INDIR/qrencode-3.4.3.tar.bz2 + cd qrencode-3.4.3 + png_CFLAGS="-I$INSTALLPREFIX/include" png_LIBS="-L$INSTALLPREFIX/lib -lpng" ./configure --prefix=$INSTALLPREFIX --host=$HOST --enable-static --disable-shared --without-tools --disable-dependency-tracking + # Workaround to prevent re-configuring by make (resulting in missing m4 error); make all files have a date in the past + find . -print0 | xargs -r0 touch -t 200001010000 + make + make install + cd .. + # post-process all generated libraries to be deterministic + # extract them to a temporary directory then re-build them deterministically + for LIB in $(find $INSTALLPREFIX -name \*.a); do + rm -rf $TEMPDIR && mkdir $TEMPDIR && cd $TEMPDIR + $HOST-ar xv $LIB | cut -b5- > /tmp/list.txt + rm $LIB + $HOST-ar crsD $LIB $(cat /tmp/list.txt) + done + # + cd $INSTALLPREFIX + find include lib | sort | zip -X@ $OUTDIR/bitcoin-deps-win$BITS-gitian-r13.zip + done # for BITS in diff --git a/contrib/gitian-descriptors/deps-win32.yml b/contrib/gitian-descriptors/deps-win32.yml deleted file mode 100644 index 90f4c6c4..00000000 --- a/contrib/gitian-descriptors/deps-win32.yml +++ /dev/null @@ -1,72 +0,0 @@ ---- -name: "bitcoin-deps" -suites: -- "lucid" -architectures: -- "i386" -packages: -- "mingw32" -- "git-core" -- "zip" -- "faketime" -- "wine" -- "psmisc" -reference_datetime: "2011-01-30 00:00:00" -remotes: [] -files: -- "openssl-1.0.1c.tar.gz" -- "db-4.8.30.NC.tar.gz" -- "miniupnpc-1.6.tar.gz" -- "zlib-1.2.6.tar.gz" -- "libpng-1.5.9.tar.gz" -- "qrencode-3.2.0.tar.bz2" -script: | - # - export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 - export FAKETIME=$REFERENCE_DATETIME - export TZ=UTC - # - tar xzf openssl-1.0.1c.tar.gz - cd openssl-1.0.1c - ./Configure --cross-compile-prefix=i586-mingw32msvc- mingw - make - cd .. - # - tar xzf db-4.8.30.NC.tar.gz - cd db-4.8.30.NC/build_unix - ../dist/configure --enable-mingw --enable-cxx --host=i586-mingw32msvc CFLAGS="-I/usr/i586-mingw32msvc/include" - make $MAKEOPTS - cd ../.. - # - tar xzf miniupnpc-1.6.tar.gz - cd miniupnpc-1.6 - sed 's/dllwrap -k --driver-name gcc/$(DLLWRAP) -k --driver-name $(CC)/' -i Makefile.mingw - sed 's|wingenminiupnpcstrings $< $@|./wingenminiupnpcstrings $< $@|' -i Makefile.mingw - make -f Makefile.mingw DLLWRAP=i586-mingw32msvc-dllwrap CC=i586-mingw32msvc-gcc AR=i586-mingw32msvc-ar - cd .. - mv miniupnpc-1.6 miniupnpc - # - tar xzf zlib-1.2.6.tar.gz - cd zlib-1.2.6 - make -f win32/Makefile.gcc PREFIX=i586-mingw32msvc- $MAKEOPTS - cd .. - # - tar xzf libpng-1.5.9.tar.gz - cd libpng-1.5.9 - ./configure -disable-shared CC=i586-mingw32msvc-cc AR=i586-mingw32msvc-ar STRIP=i586-mingw32msvc-strip RANLIB=i586-mingw32msvc-ranlib OBJDUMP=i586-mingw32msvc-objdump LD=i586-mingw32msvc-ld LDFLAGS="-L../zlib-1.2.6/" CFLAGS="-I../zlib-1.2.6/" - make $MAKEOPTS - cd .. - # - tar xjf qrencode-3.2.0.tar.bz2 - cd qrencode-3.2.0 - ./configure CC=i586-mingw32msvc-cc AR=i586-mingw32msvc-ar STRIP=i586-mingw32msvc-strip RANLIB=i586-mingw32msvc-ranlib OBJDUMP=i586-mingw32msvc-objdump LD=i586-mingw32msvc-ld png_LIBS="../libpng-1.5.9/.libs/libpng15.a ../zlib-1.2.6/libz.a" png_CFLAGS="-I../libpng-1.5.9" - make $MAKEOPTS - cd .. - # - zip -r $OUTDIR/bitcoin-deps-0.0.5.zip \ - $(ls qrencode-*/{qrencode.h,.libs/libqrencode.{,l}a} | sort) \ - $(ls db-*/build_unix/{libdb_cxx.a,db.h,db_cxx.h,libdb.a,.libs/libdb_cxx-?.?.a} | sort) \ - $(find openssl-* -name '*.a' -o -name '*.h' | sort) \ - $(find miniupnpc -name '*.h' -o -name 'libminiupnpc.a' | sort) - # Kill wine processes as gitian won't figure out we are done otherwise - killall wineserver services.exe explorer.exe winedevice.exe diff --git a/contrib/gitian-descriptors/gitian-linux.yml b/contrib/gitian-descriptors/gitian-linux.yml new file mode 100644 index 00000000..65a6c3c1 --- /dev/null +++ b/contrib/gitian-descriptors/gitian-linux.yml @@ -0,0 +1,86 @@ +--- +name: "bitcoin" +suites: +- "precise" +architectures: +- "i386" +- "amd64" +packages: +- "g++" +- "git-core" +- "unzip" +- "pkg-config" +- "autoconf2.13" +- "libtool" +- "automake" +- "faketime" +- "bsdmainutils" +- "libqt4-core" +- "libqt4-gui" +- "libqt4-dbus" +- "libqt4-network" +- "libqt4-test" +reference_datetime: "2013-06-01 00:00:00" +remotes: +- "url": "https://github.com/bitcoin/bitcoin.git" + "dir": "bitcoin" +files: +- "bitcoin-deps-linux32-gitian-r6.zip" +- "bitcoin-deps-linux64-gitian-r6.zip" +- "boost-linux32-1.55.0-gitian-r1.zip" +- "boost-linux64-1.55.0-gitian-r1.zip" +- "qt-linux32-4.6.4-gitian-r1.tar.gz" +- "qt-linux64-4.6.4-gitian-r1.tar.gz" +script: | + STAGING="$HOME/install" + OPTFLAGS='-O2' + BINDIR="${OUTDIR}/bin/${GBUILD_BITS}" # 32/64 bit build specific output directory + TEMPDIR="$HOME/tempdir" + export TZ=UTC + export LIBRARY_PATH="$STAGING/lib" + export PATH="$STAGING/bin:$PATH" + mkdir -p ${BINDIR} + # + mkdir -p $STAGING + cd $STAGING + unzip ../build/bitcoin-deps-linux${GBUILD_BITS}-gitian-r6.zip + unzip ../build/boost-linux${GBUILD_BITS}-1.55.0-gitian-r1.zip + tar -zxf ../build/qt-linux${GBUILD_BITS}-4.6.4-gitian-r1.tar.gz + cd ../build + + # Avoid exporting *any* symbols from the executable + # This avoids conflicts between the libraries statically linked into bitcoin and any + # libraries we may link dynamically (such as Qt and OpenSSL, see issue #4094). + # It also avoids start-up overhead to not export any unnecessary symbols. + # To do this, build a linker script that marks all symbols as local. + LINKER_SCRIPT=$HOME/build/linker_version_script + echo ' + { + local: *; + };' > $LINKER_SCRIPT + function do_configure { + ./configure "$@" --enable-upnp-default --prefix=$STAGING --with-protoc-bindir=$STAGING/host/bin --with-qt-bindir=$STAGING/bin --with-boost=$STAGING --disable-maintainer-mode --disable-dependency-tracking PKG_CONFIG_PATH="$STAGING/lib/pkgconfig" CPPFLAGS="-I$STAGING/include ${OPTFLAGS}" LDFLAGS="-L$STAGING/lib -Wl,--version-script=$LINKER_SCRIPT ${OPTFLAGS}" CXXFLAGS="-frandom-seed=bitcoin ${OPTFLAGS}" BOOST_CHRONO_EXTRALIBS="-lrt" --enable-glibc-back-compat + } + # + cd bitcoin + ./autogen.sh + do_configure + make dist + DISTNAME=`echo bitcoin-*.tar.gz` + + # Build dynamic versions of everything + # (with static linking to boost and openssl as well a some non-OS deps) + mkdir -p distsrc + cd distsrc + tar --strip-components=1 -xf ../$DISTNAME + do_configure --bindir=$BINDIR + make $MAKEOPTS + make $MAKEOPTS install-strip + make $MAKEOPTS clean + + # sort distribution tar file and normalize user/group/mtime information for deterministic output + mkdir -p $OUTDIR/src + rm -rf $TEMPDIR + mkdir -p $TEMPDIR + cd $TEMPDIR + tar -xvf $HOME/build/bitcoin/$DISTNAME | sort | tar --no-recursion -cT /dev/stdin --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 --mtime="$REFERENCE_DATETIME" | gzip -n > $OUTDIR/src/$DISTNAME diff --git a/contrib/gitian-descriptors/gitian-osx-bitcoin.yml b/contrib/gitian-descriptors/gitian-osx-bitcoin.yml new file mode 100644 index 00000000..44b5de9b --- /dev/null +++ b/contrib/gitian-descriptors/gitian-osx-bitcoin.yml @@ -0,0 +1,60 @@ +--- +name: "bitcoin" +suites: +- "precise" +architectures: +- "i386" +packages: +- "git-core" +- "automake" +- "faketime" +- "bsdmainutils" +- "pkg-config" +- "p7zip-full" + +reference_datetime: "2013-06-01 00:00:00" +remotes: +- "url": "https://github.com/bitcoin/bitcoin.git" + "dir": "bitcoin" +files: +- "osx-native-depends-r3.tar.gz" +- "osx-depends-r4.tar.gz" +- "osx-depends-qt-5.2.1-r4.tar.gz" +- "MacOSX10.7.sdk.tar.gz" + +script: | + + HOST=x86_64-apple-darwin11 + PREFIX=`pwd`/osx-cross-depends/prefix + SDK=`pwd`/osx-cross-depends/SDKs/MacOSX10.7.sdk + NATIVEPREFIX=`pwd`/osx-cross-depends/native-prefix + export TAR_OPTIONS="-m --mtime="$REFERENCE_DATE\\\ $REFERENCE_TIME"" + + export SOURCES_PATH=`pwd` + + mkdir -p osx-cross-depends/SDKs + + tar -C osx-cross-depends/SDKs -xf ${SOURCES_PATH}/MacOSX10.7.sdk.tar.gz + + tar -C osx-cross-depends -xf osx-native-depends-r3.tar.gz + tar -C osx-cross-depends -xf osx-depends-r4.tar.gz + tar -C osx-cross-depends -xf osx-depends-qt-5.2.1-r4.tar.gz + export PATH=`pwd`/osx-cross-depends/native-prefix/bin:$PATH + + cd bitcoin + + export ZERO_AR_DATE=1 + export QT_RCC_TEST=1 + ./autogen.sh + ./configure --host=${HOST} --with-boost=${PREFIX} CC=clang CXX=clang++ OBJC=clang OBJCXX=clang++ CFLAGS="-target ${HOST} -mmacosx-version-min=10.6 --sysroot ${SDK} -msse2 -Qunused-arguments" CXXFLAGS="-target ${HOST} -mmacosx-version-min=10.6 --sysroot ${SDK} -msse2 -Qunused-arguments" LDFLAGS="-B${NATIVEPREFIX}/bin -L${PREFIX}/lib -L${SDK}/usr/lib/i686-apple-darwin10/4.2.1" CPPFLAGS="-I${NATIVEPREFIX}/lib/clang/3.2/include -I${PREFIX}/include" SSL_LIBS="-lz -lssl -lcrypto" --disable-tests -with-gui=qt5 PKG_CONFIG_LIBDIR="${PREFIX}/lib/pkgconfig" --disable-dependency-tracking --disable-maintainer-mode + make dist + mkdir -p distsrc + cd distsrc + tar --strip-components=1 -xf ../bitcoin-*.tar* + ./configure --host=${HOST} --with-boost=${PREFIX} CC=clang CXX=clang++ OBJC=clang OBJCXX=clang++ CFLAGS="-target ${HOST} -mmacosx-version-min=10.6 --sysroot ${SDK} -msse2 -Qunused-arguments" CXXFLAGS="-target ${HOST} -mmacosx-version-min=10.6 --sysroot ${SDK} -msse2 -Qunused-arguments" LDFLAGS="-B${NATIVEPREFIX}/bin -L${PREFIX}/lib -L${SDK}/usr/lib/i686-apple-darwin10/4.2.1" CPPFLAGS="-I${NATIVEPREFIX}/lib/clang/3.2/include -I${PREFIX}/include" SSL_LIBS="-lz -lssl -lcrypto" --disable-tests -with-gui=qt5 PKG_CONFIG_LIBDIR="${PREFIX}/lib/pkgconfig" --disable-dependency-tracking --disable-maintainer-mode + make $MAKEOPTS + export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 + export FAKETIME=$REFERENCE_DATETIME + export TZ=UTC + make deploy + dmg dmg Bitcoin-Qt.dmg $OUTDIR/Bitcoin-Qt.dmg diff --git a/contrib/gitian-descriptors/gitian-osx-depends.yml b/contrib/gitian-descriptors/gitian-osx-depends.yml new file mode 100644 index 00000000..07a021cf --- /dev/null +++ b/contrib/gitian-descriptors/gitian-osx-depends.yml @@ -0,0 +1,159 @@ +--- +name: "osx-depends" +suites: +- "precise" +architectures: +- "i386" +packages: +- "git-core" +- "automake" +- "p7zip-full" + +reference_datetime: "2013-06-01 00:00:00" +remotes: [] +files: +- "boost_1_55_0.tar.bz2" +- "db-4.8.30.NC.tar.gz" +- "miniupnpc-1.9.tar.gz" +- "openssl-1.0.1h.tar.gz" +- "protobuf-2.5.0.tar.bz2" +- "qrencode-3.4.3.tar.bz2" +- "MacOSX10.7.sdk.tar.gz" +- "osx-native-depends-r3.tar.gz" + +script: | + + echo "fff00023dd79486d444c8e29922f4072e1d451fc5a4d2b6075852ead7f2b7b52 boost_1_55_0.tar.bz2" | sha256sum -c + echo "12edc0df75bf9abd7f82f821795bcee50f42cb2e5f76a6a281b85732798364ef db-4.8.30.NC.tar.gz" | sha256sum -c + echo "2923e453e880bb949e3d4da9f83dd3cb6f08946d35de0b864d0339cf70934464 miniupnpc-1.9.tar.gz" | sha256sum -c + echo "9d1c8a9836aa63e2c6adb684186cbd4371c9e9dcc01d6e3bb447abf2d4d3d093 openssl-1.0.1h.tar.gz" | sha256sum -c + echo "13bfc5ae543cf3aa180ac2485c0bc89495e3ae711fc6fab4f8ffe90dfb4bb677 protobuf-2.5.0.tar.bz2" | sha256sum -c + echo "dfd71487513c871bad485806bfd1fdb304dedc84d2b01a8fb8e0940b50597a98 qrencode-3.4.3.tar.bz2" | sha256sum -c + + REVISION=r4 + export SOURCES_PATH=`pwd` + export TAR_OPTIONS="-m --mtime="$REFERENCE_DATE\\\ $REFERENCE_TIME"" + export PATH=$HOME:$PATH + export SOURCES_PATH=`pwd` + export ZERO_AR_DATE=1 + + mkdir -p osx-cross-depends/build + cd osx-cross-depends + + PREFIX=`pwd`/prefix + NATIVEPREFIX=`pwd`/native-prefix + BUILD_BASE=`pwd`/build + SDK=`pwd`/SDKs/MacOSX10.7.sdk + HOST=x86_64-apple-darwin11 + MIN_VERSION=10.6 + + INT_CFLAGS="-target ${HOST} -mmacosx-version-min=${MIN_VERSION} --sysroot ${SDK} -msse2 -Qunused-arguments" + INT_CXXFLAGS="${INT_CFLAGS}" + INT_LDFLAGS="-L${PREFIX}/lib -L${SDK}/usr/lib/i686-apple-darwin10/4.2.1" + INT_LDFLAGS_CLANG="-B${NATIVEPREFIX}/bin" + INT_CPPFLAGS="-I${PREFIX}/include" + INT_CC=clang + INT_CXX=clang++ + INT_OBJC=clang + INT_OBJCXX=clang++ + INT_AR=${HOST}-ar + INT_RANLIB=${HOST}-ranlib + INT_LIBTOOL=${HOST}-libtool + INT_INSTALL_NAME_TOOL=${HOST}-install_name_tool + + export PATH=${NATIVEPREFIX}/bin:${PATH} + + mkdir -p ${NATIVEPREFIX}/bin + mkdir -p ${NATIVEPREFIX}/lib + mkdir -p ${PREFIX}/bin + mkdir -p ${PREFIX}/lib + mkdir -p ${BUILD_BASE} + + mkdir -p SDKs + tar -C SDKs -xf ${SOURCES_PATH}/MacOSX10.7.sdk.tar.gz + + tar xf /home/ubuntu/build/osx-native-depends-r3.tar.gz + + # bdb + SOURCE_FILE=${SOURCES_PATH}/db-4.8.30.NC.tar.gz + BUILD_DIR=${BUILD_BASE}/db-4.8.30.NC + + tar -C ${BUILD_BASE} -xf ${SOURCE_FILE} + sed -i 's/__atomic_compare_exchange/__atomic_compare_exchange_db/g' ${BUILD_DIR}/dbinc/atomic.h + pushd ${BUILD_DIR} + cd build_unix; + ../dist/configure --host=${HOST} --prefix="${PREFIX}" --disable-shared --enable-cxx CC="${INT_CC}" CXX="${INT_CXX}" AR="${INT_AR}" RANLIB="${INT_RANLIB}" OBJC="${INT_OBJC}" OBJCXX="${INT_OBJCXX}" CFLAGS="${INT_CFLAGS}" CXXFLAGS="${INT_CXXFLAGS}" LDFLAGS="${INT_CLANG_LDFLAGS} ${INT_LDFLAGS}" CPPFLAGS="${INT_CPPFLAGS}" + make $MAKEOPTS libdb.a libdb_cxx.a + make install_lib install_include + popd + + # openssl + SOURCE_FILE=${SOURCES_PATH}/openssl-1.0.1h.tar.gz + BUILD_DIR=${BUILD_BASE}/openssl-1.0.1h + + tar -C ${BUILD_BASE} -xf ${SOURCE_FILE} + pushd ${BUILD_DIR} + sed -ie "s|cc:|${INT_CC}:|" ${BUILD_DIR}/Configure + sed -ie "s|\(-arch [_a-zA-Z0-9]*\)|\1 --sysroot ${SDK} -target ${HOST} -msse2|" ${BUILD_DIR}/Configure + AR="${INT_AR}" RANLIB="${INT_RANLIB}" ./Configure --prefix=${PREFIX} --openssldir=${PREFIX}/etc/openssl zlib shared no-krb5 darwin64-x86_64-cc ${INT_LDFLAGS} ${INT_CLANG_LDFLAGS} ${INT_CPPFLAGS} + sed -i "s|engines apps test|engines|" ${BUILD_DIR}/Makefile + sed -i "/define DATE/d" ${BUILD_DIR}/crypto/Makefile + make -j1 build_libs libcrypto.pc libssl.pc openssl.pc + make -j1 install_sw + popd + + #libminiupnpc + SOURCE_FILE=${SOURCES_PATH}/miniupnpc-1.9.tar.gz + BUILD_DIR=${BUILD_BASE}/miniupnpc-1.9 + + tar -C ${BUILD_BASE} -xf ${SOURCE_FILE} + pushd ${BUILD_DIR} + CFLAGS="${INT_CFLAGS} ${INT_CPPFLAGS}" make $MAKEOPTS OS=Darwin CC="${INT_CC}" AR="${INT_AR}" libminiupnpc.a + install -d ${PREFIX}/include/miniupnpc + install *.h ${PREFIX}/include/miniupnpc + install libminiupnpc.a ${PREFIX}/lib + popd + + # qrencode + SOURCE_FILE=${SOURCES_PATH}/qrencode-3.4.3.tar.bz2 + BUILD_DIR=${BUILD_BASE}/qrencode-3.4.3 + tar -C ${BUILD_BASE} -xf ${SOURCE_FILE} + pushd ${BUILD_DIR} + + # m4 folder is not included in the stable release, which can confuse aclocal + # if its timestamp ends up being earlier than configure.ac when extracted + touch aclocal.m4 + ./configure --host=${HOST} --prefix="${PREFIX}" --disable-shared CC="${INT_CC}" CXX="${INT_CXX}" AR="${INT_AR}" RANLIB="${INT_RANLIB}" OBJC="${INT_OBJC}" OBJCXX="${INT_OBJCXX}" CFLAGS="${INT_CFLAGS}" CXXFLAGS="${INT_CXXFLAGS}" LDFLAGS="${INT_CLANG_LDFLAGS} ${INT_LDFLAGS}" CPPFLAGS="${INT_CPPFLAGS}" --disable-shared -without-tools --disable-sdltest --disable-dependency-tracking + make $MAKEOPTS + make install + popd + + # libprotobuf + SOURCE_FILE=${SOURCES_PATH}/protobuf-2.5.0.tar.bz2 + BUILD_DIR=${BUILD_BASE}/protobuf-2.5.0 + + tar -C ${BUILD_BASE} -xjf ${SOURCE_FILE} + pushd ${BUILD_DIR} + ./configure --host=${HOST} --prefix="${PREFIX}" --disable-shared --enable-cxx CC="${INT_CC}" CXX="${INT_CXX}" AR="${INT_AR}" RANLIB="${INT_RANLIB}" OBJC="${INT_OBJC}" OBJCXX="${INT_OBJCXX}" CFLAGS="${INT_CFLAGS}" CXXFLAGS="${INT_CXXFLAGS}" LDFLAGS="${INT_CLANG_LDFLAGS} ${INT_LDFLAGS}" CPPFLAGS="${INT_CPPFLAGS}" --enable-shared=no --disable-dependency-tracking --with-protoc=${NATIVEPREFIX}/bin/protoc + cd src + make $MAKEOPTS libprotobuf.la + make install-libLTLIBRARIES install-nobase_includeHEADERS + cd .. + make install-pkgconfigDATA + popd + + # boost + SOURCE_FILE=${SOURCES_PATH}/boost_1_55_0.tar.bz2 + BUILD_DIR=${BUILD_BASE}/boost_1_55_0 + + tar -C ${BUILD_BASE} -xf ${SOURCE_FILE} + pushd ${BUILD_DIR} + ./bootstrap.sh --with-libraries=chrono,filesystem,program_options,system,thread,test + echo "using darwin : : ${INT_CXX} : \"${INT_CFLAGS} ${INT_CPPFLAGS}\" \"${INT_LDFLAGS} ${INT_CLANG_LDFLAGS}\" \"${INT_LIBTOOL}\" \"${INT_STRIP}\" : ;" > "user-config.jam" + ./b2 -d2 --layout=tagged --build-type=complete --prefix="${PREFIX}" --toolset=darwin-4.2.1 --user-config=user-config.jam variant=release threading=multi link=static install + popd + + export GZIP="-9n" + find prefix | sort | tar --no-recursion -czf osx-depends-${REVISION}.tar.gz -T - + + mv osx-depends-${REVISION}.tar.gz $OUTDIR diff --git a/contrib/gitian-descriptors/gitian-osx-native.yml b/contrib/gitian-descriptors/gitian-osx-native.yml new file mode 100644 index 00000000..a753ad70 --- /dev/null +++ b/contrib/gitian-descriptors/gitian-osx-native.yml @@ -0,0 +1,178 @@ +--- +name: "osx-native" +suites: +- "precise" +architectures: +- "i386" +packages: +- "git-core" +- "automake" +- "faketime" +- "libssl-dev" +- "libbz2-dev" +- "libz-dev" +- "cmake" +- "libcap-dev" +- "p7zip-full" +- "uuid-dev" + +reference_datetime: "2013-06-01 00:00:00" +remotes: [] +files: +- "10cc648683617cca8bcbeae507888099b41b530c.tar.gz" +- "cctools-809.tar.gz" +- "dyld-195.5.tar.gz" +- "ld64-127.2.tar.gz" +- "protobuf-2.5.0.tar.bz2" +- "MacOSX10.7.sdk.tar.gz" +- "cdrkit-1.1.11.tar.gz" +- "libdmg-hfsplus-v0.1.tar.gz" +- "clang-llvm-3.2-x86-linux-ubuntu-12.04.tar.gz" +- "cdrkit-deterministic.patch" + + +script: | + + echo "18406961fd4a1ec5c7ea35c91d6a80a2f8bb797a2bd243a610bd75e13eff9aca 10cc648683617cca8bcbeae507888099b41b530c.tar.gz" | sha256sum -c + echo "03ba62749b843b131c7304a044a98c6ffacd65b1399b921d69add0375f79d8ad cctools-809.tar.gz" | sha256sum -c + echo "2cf0484c87cf79b606b351a7055a247dae84093ae92c747a74e0cde2c8c8f83c dyld-195.5.tar.gz" | sha256sum -c + echo "97b75547b2bd761306ab3e15ae297f01e7ab9760b922bc657f4ef72e4e052142 ld64-127.2.tar.gz" | sha256sum -c + echo "13bfc5ae543cf3aa180ac2485c0bc89495e3ae711fc6fab4f8ffe90dfb4bb677 protobuf-2.5.0.tar.bz2" | sha256sum -c + echo "d1c030756ecc182defee9fe885638c1785d35a2c2a297b4604c0e0dcc78e47da cdrkit-1.1.11.tar.gz" | sha256sum -c + echo "6569a02eb31c2827080d7d59001869ea14484c281efab0ae7f2b86af5c3120b3 libdmg-hfsplus-v0.1.tar.gz" | sha256sum -c + echo "b9d57a88f9514fa1f327a1a703756d0c1c960f4c58494a5bd80313245d13ffff clang-llvm-3.2-x86-linux-ubuntu-12.04.tar.gz" | sha256sum -c + echo "cc12bdbd7a09f71cb2a6a3e6ec3e0abe885ca7111c2b47857f5095e5980caf4f cdrkit-deterministic.patch" | sha256sum -c + + + REVISION=r3 + export REFERENCE_DATETIME + export TAR_OPTIONS="-m --mtime="$REFERENCE_DATE\\\ $REFERENCE_TIME"" + export FAKETIME=$REFERENCE_DATETIME + export TZ=UTC + + REAL_AR=`which ar` + REAL_RANLIB=`which ranlib` + REAL_DATE=`which date` + + echo '#!/bin/bash' > $HOME/ar + echo 'export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1' >> $HOME/ar + echo "$REAL_AR \"\$@\"" >> $HOME/ar + + echo '#!/bin/bash' > $HOME/ranlib + echo 'export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1' >> $HOME/ranlib + echo "$REAL_RANLIB \"\$@\"" >> $HOME/ranlib + + echo '#!/bin/bash' > $HOME/date + echo 'export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1' >> $HOME/date + echo "$REAL_DATE \"\$@\"" >> $HOME/date + + chmod +x $HOME/ar $HOME/ranlib $HOME/date + + + export PATH=$HOME:$PATH + export SOURCES_PATH=`pwd` + + mkdir -p osx-cross-depends/build + cd osx-cross-depends + + NATIVEPREFIX=`pwd`/native-prefix + BUILD_BASE=`pwd`/build + SDK=`pwd`/SDKs/MacOSX10.7.sdk + HOST=x86_64-apple-darwin11 + MIN_VERSION=10.6 + + CFLAGS="" + CXXFLAGS="${CFLAGS}" + LDFLAGS="-L${NATIVEPREFIX}/lib" + + export PATH=${NATIVEPREFIX}/bin:${PATH} + + mkdir -p ${NATIVEPREFIX}/bin + mkdir -p ${NATIVEPREFIX}/lib + + mkdir -p SDKs + tar -C SDKs -xf ${SOURCES_PATH}/MacOSX10.7.sdk.tar.gz + + # Clang + SOURCE_FILE=${SOURCES_PATH}/clang-llvm-3.2-x86-linux-ubuntu-12.04.tar.gz + BUILD_DIR=${BUILD_BASE}/clang+llvm-3.2-x86-linux-ubuntu-12.04 + + mkdir -p ${NATIVEPREFIX}/lib/clang/3.2/include + tar -C ${BUILD_BASE} -xf ${SOURCE_FILE} + cp ${BUILD_DIR}/bin/clang ${NATIVEPREFIX}/bin/ + cp ${BUILD_DIR}/bin/clang++ ${NATIVEPREFIX}/bin/ + cp ${BUILD_DIR}/lib/libLTO.so ${NATIVEPREFIX}/lib/ + cp ${BUILD_DIR}/lib/clang/3.2/include/* ${NATIVEPREFIX}/lib/clang/3.2/include + + # cctools + SOURCE_FILE=${SOURCES_PATH}/10cc648683617cca8bcbeae507888099b41b530c.tar.gz + BUILD_DIR=${BUILD_BASE}/toolchain4-10cc648683617cca8bcbeae507888099b41b530c + + tar -C ${BUILD_BASE} -xf ${SOURCE_FILE} + mkdir -p ${BUILD_DIR}/sdks + pushd ${BUILD_DIR}/sdks; + ln -sf ${SDK} MacOSX10.7.sdk + ln -sf ${SOURCES_PATH}/cctools-809.tar.gz ${BUILD_DIR}/cctools2odcctools/cctools-809.tar.gz + ln -sf ${SOURCES_PATH}/ld64-127.2.tar.gz ${BUILD_DIR}/cctools2odcctools/ld64-127.2.tar.gz + ln -sf ${SOURCES_PATH}/dyld-195.5.tar.gz ${BUILD_DIR}/cctools2odcctools/dyld-195.5.tar.gz + + tar -C ${BUILD_DIR} -xf ${SOURCES_PATH}/clang-llvm-3.2-x86-linux-ubuntu-12.04.tar.gz + # Hack in the use of our llvm headers rather than grabbing the old llvm-gcc. + sed -i "s|GCC_DIR|LLVM_CLANG_DIR|g" ${BUILD_DIR}/cctools2odcctools/extract.sh + sed -i "s|llvmgcc42-2336.1|clang+llvm-3.2-x86-linux-ubuntu-12.04|g" ${BUILD_DIR}/cctools2odcctools/extract.sh + sed -i "s|\${LLVM_CLANG_DIR}/llvmCore/include/llvm-c|\${LLVM_CLANG_DIR}/include/llvm-c \${LLVM_CLANG_DIR}/include/llvm |" ${BUILD_DIR}/cctools2odcctools/extract.sh + + sed -i "s|fAC_INIT|AC_INIT|" ${BUILD_DIR}/cctools2odcctools/files/configure.ac + sed -i 's/\# Dynamically linked LTO/\t ;\&\n\t linux*)\n# Dynamically linked LTO/' ${BUILD_DIR}/cctools2odcctools/files/configure.ac + + cd ${BUILD_DIR}/cctools2odcctools + ./extract.sh --osxver 10.7 + cd odcctools-809 + ./configure --prefix=${NATIVEPREFIX} --target=${HOST} CFLAGS="${CFLAGS} -I${NATIVEPREFIX}/include -D__DARWIN_UNIX03 -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS" LDFLAGS="${LDFLAGS} -Wl,-rpath=\\\$\$ORIGIN/../lib" --with-sysroot=${SDK} + + # The 'PC' define in sparc/reg.h conflicts but doesn't get used anyway. Just rename it. + sed -i "s|define\tPC|define\tPC_|" ${BUILD_DIR}/cctools2odcctools/odcctools-809/include/architecture/sparc/reg.h + make $MAKEOPTS + make install + popd + + # protoc + SOURCE_FILE=${SOURCES_PATH}/protobuf-2.5.0.tar.bz2 + BUILD_DIR=${BUILD_BASE}/protobuf-2.5.0 + + tar -C ${BUILD_BASE} -xjf ${SOURCE_FILE} + pushd ${BUILD_DIR}; + ./configure --enable-shared=no --disable-dependency-tracking --prefix=${NATIVEPREFIX} + make $MAKEOPTS + cp ${BUILD_DIR}/src/protoc ${NATIVEPREFIX}/bin/ + popd + + # cdrkit + SOURCE_FILE=${SOURCES_PATH}/cdrkit-1.1.11.tar.gz + BUILD_DIR=${BUILD_BASE}/cdrkit-1.1.11 + + tar -C ${BUILD_BASE} -xf ${SOURCE_FILE} + pushd ${BUILD_DIR} + patch -p1 < ${SOURCES_PATH}/cdrkit-deterministic.patch + cmake -DCMAKE_INSTALL_PREFIX=${NATIVEPREFIX} + make $MAKEOPTS genisoimage + make -C genisoimage install + popd + + # libdmg-hfsplus + SOURCE_FILE=${SOURCES_PATH}/libdmg-hfsplus-v0.1.tar.gz + BUILD_DIR=${BUILD_BASE}/libdmg-hfsplus-libdmg-hfsplus-v0.1 + + tar -C ${BUILD_BASE} -xf ${SOURCE_FILE} + mkdir -p ${BUILD_DIR}/build + pushd ${BUILD_DIR}/build + cmake -DCMAKE_INSTALL_PREFIX:PATH=${NATIVEPREFIX}/bin .. + make $MAKEOPTS + make install + popd + + rm -rf native-prefix/docs + + export GZIP="-9n" + find native-prefix | sort | tar --no-recursion -czf osx-native-depends-$REVISION.tar.gz -T - + mv osx-native-depends-$REVISION.tar.gz $OUTDIR diff --git a/contrib/gitian-descriptors/gitian-osx-qt.yml b/contrib/gitian-descriptors/gitian-osx-qt.yml new file mode 100644 index 00000000..81314845 --- /dev/null +++ b/contrib/gitian-descriptors/gitian-osx-qt.yml @@ -0,0 +1,186 @@ +--- +name: "osx-qt" +suites: +- "precise" +architectures: +- "i386" +packages: +- "git-core" +- "automake" +- "p7zip-full" + +reference_datetime: "2013-06-01 00:00:00" +remotes: [] +files: +- "qt-everywhere-opensource-src-5.2.1.tar.gz" +- "osx-native-depends-r3.tar.gz" +- "osx-depends-r4.tar.gz" +- "MacOSX10.7.sdk.tar.gz" + +script: | + + echo "84e924181d4ad6db00239d87250cc89868484a14841f77fb85ab1f1dbdcd7da1 qt-everywhere-opensource-src-5.2.1.tar.gz" | sha256sum -c + + REVISION=r4 + export SOURCES_PATH=`pwd` + export TAR_OPTIONS="-m --mtime="$REFERENCE_DATE\\\ $REFERENCE_TIME"" + export ZERO_AR_DATE=1 + + export TZ=UTC + + REAL_DATE=`which date` + echo '#!/bin/bash' > $HOME/date + echo "$REAL_DATE -d \"${REFERENCE_DATETIME}\" \"\$@\"" >> $HOME/date + + chmod +x $HOME/date + export PATH=$HOME:$PATH + + mkdir -p osx-cross-depends/build + cd osx-cross-depends + + PREFIX=`pwd`/prefix + NATIVEPREFIX=`pwd`/native-prefix + BUILD_BASE=`pwd`/build + SDK=`pwd`/SDKs/MacOSX10.7.sdk + HOST=x86_64-apple-darwin11 + MIN_VERSION=10.6 + + INT_CFLAGS="-target ${HOST} -mmacosx-version-min=${MIN_VERSION} --sysroot ${SDK} -msse2 -Qunused-arguments" + INT_CXXFLAGS="${INT_CFLAGS}" + INT_LDFLAGS="-L${PREFIX}/lib -L${SDK}/usr/lib/i686-apple-darwin10/4.2.1" + INT_LDFLAGS_CLANG="-B${NATIVEPREFIX}/bin" + INT_CPPFLAGS="-I${PREFIX}/include" + INT_CC=clang + INT_CXX=clang++ + INT_OBJC=clang + INT_OBJCXX=clang++ + INT_AR=${HOST}-ar + INT_RANLIB=${HOST}-ranlib + INT_LIBTOOL=${HOST}-libtool + INT_INSTALL_NAME_TOOL=${HOST}-install_name_tool + + export PATH=${NATIVEPREFIX}/bin:${PATH} + + mkdir -p ${NATIVEPREFIX}/bin + mkdir -p ${NATIVEPREFIX}/lib + mkdir -p ${PREFIX}/bin + mkdir -p ${PREFIX}/lib + mkdir -p ${BUILD_BASE} + + mkdir -p SDKs + tar -C SDKs -xf ${SOURCES_PATH}/MacOSX10.7.sdk.tar.gz + + tar xf /home/ubuntu/build/osx-native-depends-r3.tar.gz + + export PATH=`pwd`/native-prefix/bin:$PATH + tar xf /home/ubuntu/build/osx-depends-r4.tar.gz + + SOURCE_FILE=${SOURCES_PATH}/qt-everywhere-opensource-src-5.2.1.tar.gz + BUILD_DIR=${BUILD_BASE}/qt-everywhere-opensource-src-5.2.1 + + + tar -C ${BUILD_BASE} -xf ${SOURCE_FILE} + + # Install our mkspec. All files are pulled from the macx-clang spec, except for + # our custom qmake.conf + SPECFILE=${BUILD_DIR}/qtbase/mkspecs/macx-clang-linux/qmake.conf + + mkdir -p ${BUILD_DIR}/qtbase/mkspecs/macx-clang-linux + cp -f ${BUILD_DIR}/qtbase/mkspecs/macx-clang/Info.plist.lib ${BUILD_DIR}/qtbase/mkspecs/macx-clang-linux/ + cp -f ${BUILD_DIR}/qtbase/mkspecs/macx-clang/Info.plist.app ${BUILD_DIR}/qtbase/mkspecs/macx-clang-linux/ + cp -f ${BUILD_DIR}/qtbase/mkspecs/macx-clang/qplatformdefs.h ${BUILD_DIR}/qtbase/mkspecs/macx-clang-linux/ + + cat > ${SPECFILE} < $OUTDIR/src/$DISTNAME + diff --git a/contrib/gitian-descriptors/gitian-win32.yml b/contrib/gitian-descriptors/gitian-win32.yml deleted file mode 100644 index fd3b5532..00000000 --- a/contrib/gitian-descriptors/gitian-win32.yml +++ /dev/null @@ -1,74 +0,0 @@ ---- -name: "bitcoin" -suites: -- "lucid" -architectures: -- "i386" -packages: -- "mingw32" -- "git-core" -- "unzip" -- "nsis" -- "faketime" -reference_datetime: "2011-01-30 00:00:00" -remotes: -- "url": "https://github.com/bitcoin/bitcoin.git" - "dir": "bitcoin" -files: -- "qt-win32-4.8.3-gitian-r1.zip" -- "boost-win32-1.50.0-gitian2.zip" -- "bitcoin-deps-0.0.5.zip" -script: | - # - mkdir $HOME/qt - cd $HOME/qt - unzip ../build/qt-win32-4.8.3-gitian-r1.zip - cd $HOME/build/ - export PATH=$HOME/qt/bin/:$PATH - # - mkdir boost_1_50_0 - cd boost_1_50_0 - mkdir -p stage/lib - unzip ../boost-win32-1.50.0-gitian2.zip - cd bin/$GBUILD_BITS - for lib in *; do - i586-mingw32msvc-ar rc ../../stage/lib/libboost_${lib}-mt-s.a $lib/*.o - i586-mingw32msvc-ranlib ../../stage/lib/libboost_${lib}-mt-s.a - done - cd ../.. - mv include/boost . - cd .. - # - unzip bitcoin-deps-0.0.5.zip - # - find -type f | xargs touch --date="$REFERENCE_DATETIME" - # - cd bitcoin - mkdir -p $OUTDIR/src - git archive HEAD | tar -x -C $OUTDIR/src - cp $OUTDIR/src/doc/README_windows.txt $OUTDIR/readme.txt - cp $OUTDIR/src/COPYING $OUTDIR/COPYING.txt - export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 - export FAKETIME=$REFERENCE_DATETIME - export TZ=UTC - $HOME/qt/src/bin/qmake -spec unsupported/win32-g++-cross MINIUPNPC_LIB_PATH=$HOME/build/miniupnpc MINIUPNPC_INCLUDE_PATH=$HOME/build/ BDB_LIB_PATH=$HOME/build/db-4.8.30.NC/build_unix BDB_INCLUDE_PATH=$HOME/build/db-4.8.30.NC/build_unix BOOST_LIB_PATH=$HOME/build/boost_1_50_0/stage/lib BOOST_INCLUDE_PATH=$HOME/build/boost_1_50_0 BOOST_LIB_SUFFIX=-mt-s BOOST_THREAD_LIB_SUFFIX=_win32-mt-s OPENSSL_LIB_PATH=$HOME/build/openssl-1.0.1c OPENSSL_INCLUDE_PATH=$HOME/build/openssl-1.0.1c/include QRENCODE_LIB_PATH=$HOME/build/qrencode-3.2.0/.libs QRENCODE_INCLUDE_PATH=$HOME/build/qrencode-3.2.0 USE_QRCODE=1 INCLUDEPATH=$HOME/build DEFINES=BOOST_THREAD_USE_LIB BITCOIN_NEED_QT_PLUGINS=1 QMAKE_LRELEASE=lrelease QMAKE_CXXFLAGS=-frandom-seed=bitcoin USE_BUILD_INFO=1 - make $MAKEOPTS - cp release/bitcoin-qt.exe $OUTDIR/ - # - cd src - export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 - export FAKETIME=$REFERENCE_DATETIME - export TZ=UTC - make -f makefile.linux-mingw $MAKEOPTS DEPSDIR=$HOME/build bitcoind.exe USE_UPNP=0 DEBUGFLAGS="-frandom-seed=bitcoin" - i586-mingw32msvc-strip bitcoind.exe - mkdir $OUTDIR/daemon - cp bitcoind.exe $OUTDIR/daemon - cd .. - mkdir nsis - git archive HEAD | tar -x -C nsis - cd nsis/src - mkdir ../release - cp ../../release/* ../release/ - cp ../../src/*.exe . - makensis ../share/setup.nsi - cp ../share/bitcoin-*-win32-setup.exe $OUTDIR/ diff --git a/contrib/gitian-descriptors/gitian.yml b/contrib/gitian-descriptors/gitian.yml deleted file mode 100644 index 195d0e36..00000000 --- a/contrib/gitian-descriptors/gitian.yml +++ /dev/null @@ -1,55 +0,0 @@ ---- -name: "bitcoin" -suites: -- "lucid" -architectures: -- "i386" -- "amd64" -packages: -- "libdb4.8++-dev" -- "qt4-qmake" -- "libqt4-dev" -- "libboost-system-dev" -- "libboost-filesystem-dev" -- "libboost-program-options-dev" -- "libboost-thread-dev" -- "libssl-dev" -- "git-core" -- "unzip" -- "pkg-config" -- "libpng12-dev" -reference_datetime: "2011-01-30 00:00:00" -remotes: -- "url": "https://github.com/bitcoin/bitcoin.git" - "dir": "bitcoin" -files: -- "miniupnpc-1.6.tar.gz" -- "qrencode-3.2.0.tar.bz2" -script: | - INSTDIR="$HOME/install" - export LIBRARY_PATH="$INSTDIR/lib" - # - tar xzf miniupnpc-1.6.tar.gz - cd miniupnpc-1.6 - INSTALLPREFIX=$INSTDIR make $MAKEOPTS install - cd .. - # - tar xjf qrencode-3.2.0.tar.bz2 - cd qrencode-3.2.0 - ./configure --prefix=$INSTDIR --enable-static --disable-shared - make $MAKEOPTS install - cd .. - # - cd bitcoin - mkdir -p $OUTDIR/src - git archive HEAD | tar -x -C $OUTDIR/src - cp $OUTDIR/src/doc/README.md $OUTDIR - cp $OUTDIR/src/COPYING $OUTDIR - cd src - make -f makefile.unix STATIC=1 OPENSSL_INCLUDE_PATH="$INSTDIR/include" OPENSSL_LIB_PATH="$INSTDIR/lib" $MAKEOPTS bitcoind USE_UPNP=0 DEBUGFLAGS= - mkdir -p $OUTDIR/bin/$GBUILD_BITS - install -s bitcoind $OUTDIR/bin/$GBUILD_BITS - cd .. - qmake INCLUDEPATH="$INSTDIR/include" LIBS="-L$INSTDIR/lib" RELEASE=1 USE_QRCODE=1 - make $MAKEOPTS - install bitcoin-qt $OUTDIR/bin/$GBUILD_BITS diff --git a/contrib/gitian-descriptors/protobuf-win.yml b/contrib/gitian-descriptors/protobuf-win.yml new file mode 100644 index 00000000..d2fdcaa7 --- /dev/null +++ b/contrib/gitian-descriptors/protobuf-win.yml @@ -0,0 +1,65 @@ +--- +name: "protobuf-win32" +suites: +- "precise" +architectures: +- "amd64" +packages: +- "mingw-w64" +- "g++-mingw-w64" +- "zip" +- "faketime" +reference_datetime: "2013-04-15 00:00:00" +remotes: [] +files: +- "protobuf-2.5.0.tar.bz2" +script: | + # + export TZ=UTC + INDIR=$HOME/build + TEMPDIR=$HOME/tmp + OPTFLAGS="-O2" + # Integrity Check + echo "13bfc5ae543cf3aa180ac2485c0bc89495e3ae711fc6fab4f8ffe90dfb4bb677 protobuf-2.5.0.tar.bz2" | sha256sum -c + + for BITS in 32 64; do # for architectures + # + INSTALLPREFIX=$HOME/staging${BITS} + BUILDDIR=$HOME/build${BITS} + if [ "$BITS" == "32" ]; then + HOST=i686-w64-mingw32 + else + HOST=x86_64-w64-mingw32 + fi + # + mkdir -p $INSTALLPREFIX $BUILDDIR + cd $BUILDDIR + # + tar xjf $INDIR/protobuf-2.5.0.tar.bz2 + cd protobuf-2.5.0 + # First: build a native (linux) protoc + ./configure --enable-shared=no --disable-dependency-tracking --without-zlib CXXFLAGS="-frandom-seed=11 ${OPTFLAGS}" + make + mkdir -p $INSTALLPREFIX/host/bin + cp src/protoc $INSTALLPREFIX/host/bin + # Now recompile with the mingw cross-compiler: + make distclean + ./configure --prefix=$INSTALLPREFIX --enable-shared=no --disable-dependency-tracking --without-zlib --with-protoc=$INSTALLPREFIX/host/bin/protoc --host=$HOST CXXFLAGS="-frandom-seed=11 ${OPTFLAGS}" + export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 + export FAKETIME=$REFERENCE_DATETIME + make + make install + # post-process all generated libraries to be deterministic + # extract them to a temporary directory then re-build them deterministically + for LIB in $(find $INSTALLPREFIX -name \*.a); do + rm -rf $TEMPDIR && mkdir $TEMPDIR && cd $TEMPDIR + $HOST-ar xv $LIB | cut -b5- > /tmp/list.txt + rm $LIB + $HOST-ar crsD $LIB $(cat /tmp/list.txt) + done + # + cd $INSTALLPREFIX + find include lib host | sort | zip -X@ $OUTDIR/protobuf-win$BITS-2.5.0-gitian-r4.zip + unset LD_PRELOAD + unset FAKETIME + done # for BITS in diff --git a/contrib/gitian-descriptors/qt-linux.yml b/contrib/gitian-descriptors/qt-linux.yml new file mode 100644 index 00000000..b163b4bb --- /dev/null +++ b/contrib/gitian-descriptors/qt-linux.yml @@ -0,0 +1,264 @@ +--- +name: "qt-linux" +suites: +- "precise" +architectures: +- "i386" +- "amd64" +packages: +- "zip" +- "unzip" +- "faketime" +- "unzip" +- "libxext-dev" +reference_datetime: "2011-01-30 00:00:00" +remotes: [] +files: +- "qt-everywhere-opensource-src-4.6.4.tar.gz" +script: | + export FAKETIME=$REFERENCE_DATETIME + export TZ=UTC + if [ "$GBUILD_BITS" == "32" ]; then + ARCH='i386-linux-gnu' + else + ARCH='x86_64-linux-gnu' + fi + # The purpose of this gitian build is not to actually build Qt, but to export + # the headers as well as pkgconfig files in a useable format so that we can + # pretend to link against an older version. The goal is to link to the + # system version of Qt 4. + # Also build development tools. + INSTALLPREFIX="$HOME/install" + # Integrity Check + echo "9ad4d46c721b53a429ed5a2eecfd3c239a9ab566562f183f99d3125f1a234250 qt-everywhere-opensource-src-4.6.4.tar.gz" | sha256sum -c + # Make install directories + mkdir -p $INSTALLPREFIX + mkdir -p $INSTALLPREFIX/include + PKGCONFIGDIR=$INSTALLPREFIX/lib/pkgconfig + mkdir -p $PKGCONFIGDIR + # + tar xzf qt-everywhere-opensource-src-4.6.4.tar.gz + cd qt-everywhere-opensource-src-4.6.4 + QTBUILDDIR=$(pwd) + sed 's/TODAY=`date +%Y-%m-%d`/TODAY=2011-01-30/' -i configure + + # Need to build 4.6-versioned host utilities as well (lrelease/qrc/lupdate/...) + ./configure -prefix $INSTALLPREFIX -confirm-license -release -opensource -no-qt3support -no-multimedia -no-audio-backend -no-phonon -no-phonon-backend -no-declarative -no-script -no-scripttools -no-javascript-jit -no-webkit -no-svg -no-xmlpatterns -no-sql-sqlite -no-nis -no-cups -no-iconv -no-dbus -no-gif -no-libtiff -no-opengl -nomake examples -nomake demos -nomake docs + # + make $MAKEOPTS -C src/tools install # (rcc, uic, moc) + make $MAKEOPTS -C tools/linguist/lrelease install # (lrelease) + # install includes and pkgconfig files + for DIR in src/corelib src/gui src/testlib src/dbus src/network; do + ( + cd $DIR + # extract module (QtCore/QtNetwork/...) from Makefile + MODULE=$(grep "QMAKE_TARGET *=" Makefile | cut -d = -f 2 | xargs) + # patch makefile so that not everything is build first + sed -i 's/first: all/first:/g' Makefile + make install_flat_headers install_class_headers install_targ_headers + # create and install pkgconfig descriptor + make ../../lib/pkgconfig/$MODULE.pc + sed -e "s,$QTBUILDDIR,$INSTALLPREFIX,g" ../../lib/pkgconfig/$MODULE.pc > $PKGCONFIGDIR/$MODULE.pc + # create links to existing Qt libraries + ln -sf /usr/lib/${ARCH}/lib${MODULE}.so.4 ${INSTALLPREFIX}/lib/lib${MODULE}.so + ) + done + + # Write our own configuration header, same as Ubuntu + # When we don't do this, the configuration will be without STL support (the QString from/to stdString methods) + QCONFIG=$INSTALLPREFIX/include/Qt/qconfig.h + echo ' + /* Qt Edition */ + #ifndef QT_EDITION + # define QT_EDITION QT_EDITION_OPENSOURCE + #endif + ' > $QCONFIG + + if [ "$GBUILD_BITS" == "32" ]; then + echo ' + /* Machine byte-order */ + #define Q_BIG_ENDIAN 4321 + #define Q_LITTLE_ENDIAN 1234 + #define QT_BUILD_KEY "i386 linux g++-4 full-config" + #define QT_BUILD_KEY_COMPAT "i686 Linux g++-4 full-config" + + #ifdef QT_BOOTSTRAPPED + #define Q_BYTE_ORDER Q_LITTLE_ENDIAN + #else + #define Q_BYTE_ORDER Q_LITTLE_ENDIAN + #endif + /* Machine Architecture */ + #ifndef QT_BOOTSTRAPPED + # define QT_ARCH_I386 + #else + # define QT_ARCH_I386 + #endif + /* Compile time features */ + #define QT_LARGEFILE_SUPPORT 64 + #define QT_POINTER_SIZE 4 + ' >> $QCONFIG + else + echo ' + /* Machine byte-order */ + #define Q_BIG_ENDIAN 4321 + #define Q_LITTLE_ENDIAN 1234 + #define QT_BUILD_KEY "x86_64 linux g++-4 full-config" + #define QT_BUILD_KEY_COMPAT "x86_64 Linux g++-4 full-config" + + #ifdef QT_BOOTSTRAPPED + #define Q_BYTE_ORDER Q_LITTLE_ENDIAN + #else + #define Q_BYTE_ORDER Q_LITTLE_ENDIAN + #endif + /* Machine Architecture */ + #ifndef QT_BOOTSTRAPPED + # define QT_ARCH_X86_64 + #else + # define QT_ARCH_X86_64 + #endif + /* Compile time features */ + #define QT_LARGEFILE_SUPPORT 64 + #define QT_POINTER_SIZE 8 + ' >> $QCONFIG + fi + + echo ' + #ifndef QT_BOOTSTRAPPED + + #if defined(QT_NO_EGL) && defined(QT_EGL) + # undef QT_NO_EGL + #elif !defined(QT_NO_EGL) && !defined(QT_EGL) + # define QT_NO_EGL + #endif + + #if defined(QT_NO_GSTREAMER) && defined(QT_GSTREAMER) + # undef QT_NO_GSTREAMER + #elif !defined(QT_NO_GSTREAMER) && !defined(QT_GSTREAMER) + # define QT_NO_GSTREAMER + #endif + + #if defined(QT_NO_ICD) && defined(QT_ICD) + # undef QT_NO_ICD + #elif !defined(QT_NO_ICD) && !defined(QT_ICD) + # define QT_NO_ICD + #endif + + #if defined(QT_NO_IMAGEFORMAT_JPEG) && defined(QT_IMAGEFORMAT_JPEG) + # undef QT_NO_IMAGEFORMAT_JPEG + #elif !defined(QT_NO_IMAGEFORMAT_JPEG) && !defined(QT_IMAGEFORMAT_JPEG) + # define QT_NO_IMAGEFORMAT_JPEG + #endif + + #if defined(QT_NO_IMAGEFORMAT_MNG) && defined(QT_IMAGEFORMAT_MNG) + # undef QT_NO_IMAGEFORMAT_MNG + #elif !defined(QT_NO_IMAGEFORMAT_MNG) && !defined(QT_IMAGEFORMAT_MNG) + # define QT_NO_IMAGEFORMAT_MNG + #endif + + #if defined(QT_NO_IMAGEFORMAT_TIFF) && defined(QT_IMAGEFORMAT_TIFF) + # undef QT_NO_IMAGEFORMAT_TIFF + #elif !defined(QT_NO_IMAGEFORMAT_TIFF) && !defined(QT_IMAGEFORMAT_TIFF) + # define QT_NO_IMAGEFORMAT_TIFF + #endif + + #if defined(QT_NO_MULTIMEDIA) && defined(QT_MULTIMEDIA) + # undef QT_NO_MULTIMEDIA + #elif !defined(QT_NO_MULTIMEDIA) && !defined(QT_MULTIMEDIA) + # define QT_NO_MULTIMEDIA + #endif + + #if defined(QT_NO_OPENVG) && defined(QT_OPENVG) + # undef QT_NO_OPENVG + #elif !defined(QT_NO_OPENVG) && !defined(QT_OPENVG) + # define QT_NO_OPENVG + #endif + + #if defined(QT_NO_PHONON) && defined(QT_PHONON) + # undef QT_NO_PHONON + #elif !defined(QT_NO_PHONON) && !defined(QT_PHONON) + # define QT_NO_PHONON + #endif + + #if defined(QT_NO_PULSEAUDIO) && defined(QT_PULSEAUDIO) + # undef QT_NO_PULSEAUDIO + #elif !defined(QT_NO_PULSEAUDIO) && !defined(QT_PULSEAUDIO) + # define QT_NO_PULSEAUDIO + #endif + + #if defined(QT_NO_S60) && defined(QT_S60) + # undef QT_NO_S60 + #elif !defined(QT_NO_S60) && !defined(QT_S60) + # define QT_NO_S60 + #endif + + #if defined(QT_NO_STYLE_S60) && defined(QT_STYLE_S60) + # undef QT_NO_STYLE_S60 + #elif !defined(QT_NO_STYLE_S60) && !defined(QT_STYLE_S60) + # define QT_NO_STYLE_S60 + #endif + + #if defined(QT_NO_SXE) && defined(QT_SXE) + # undef QT_NO_SXE + #elif !defined(QT_NO_SXE) && !defined(QT_SXE) + # define QT_NO_SXE + #endif + + #if defined(QT_NO_WEBKIT) && defined(QT_WEBKIT) + # undef QT_NO_WEBKIT + #elif !defined(QT_NO_WEBKIT) && !defined(QT_WEBKIT) + # define QT_NO_WEBKIT + #endif + + #if defined(QT_NO_ZLIB) && defined(QT_ZLIB) + # undef QT_NO_ZLIB + #elif !defined(QT_NO_ZLIB) && !defined(QT_ZLIB) + # define QT_NO_ZLIB + #endif + + #if defined(QT_RUNTIME_XCURSOR) && defined(QT_NO_RUNTIME_XCURSOR) + # undef QT_RUNTIME_XCURSOR + #elif !defined(QT_RUNTIME_XCURSOR) && !defined(QT_NO_RUNTIME_XCURSOR) + # define QT_RUNTIME_XCURSOR + #endif + + #if defined(QT_RUNTIME_XFIXES) && defined(QT_NO_RUNTIME_XFIXES) + # undef QT_RUNTIME_XFIXES + #elif !defined(QT_RUNTIME_XFIXES) && !defined(QT_NO_RUNTIME_XFIXES) + # define QT_RUNTIME_XFIXES + #endif + + #if defined(QT_RUNTIME_XINERAMA) && defined(QT_NO_RUNTIME_XINERAMA) + # undef QT_RUNTIME_XINERAMA + #elif !defined(QT_RUNTIME_XINERAMA) && !defined(QT_NO_RUNTIME_XINERAMA) + # define QT_RUNTIME_XINERAMA + #endif + + #if defined(QT_RUNTIME_XINPUT) && defined(QT_NO_RUNTIME_XINPUT) + # undef QT_RUNTIME_XINPUT + #elif !defined(QT_RUNTIME_XINPUT) && !defined(QT_NO_RUNTIME_XINPUT) + # define QT_RUNTIME_XINPUT + #endif + + #if defined(QT_RUNTIME_XRANDR) && defined(QT_NO_RUNTIME_XRANDR) + # undef QT_RUNTIME_XRANDR + #elif !defined(QT_RUNTIME_XRANDR) && !defined(QT_NO_RUNTIME_XRANDR) + # define QT_RUNTIME_XRANDR + #endif + + #if defined(QT_USE_MATH_H_FLOATS) && defined(QT_NO_USE_MATH_H_FLOATS) + # undef QT_USE_MATH_H_FLOATS + #elif !defined(QT_USE_MATH_H_FLOATS) && !defined(QT_NO_USE_MATH_H_FLOATS) + # define QT_USE_MATH_H_FLOATS + #endif + + #endif // QT_BOOTSTRAPPED + + #define QT_VISIBILITY_AVAILABLE + ' >> $QCONFIG + cp $QCONFIG $INSTALLPREFIX/include/QtCore/qconfig.h + + cd $INSTALLPREFIX + # as zip stores file timestamps, use faketime to intercept stat calls to set dates for all files to reference date + export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 + # Create a .tar.gz because .zip has problems with symbolic links + find | sort | tar --no-recursion -cT /dev/stdin --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 --mtime="$REFERENCE_DATETIME" | gzip -n > $OUTDIR/qt-linux${GBUILD_BITS}-4.6.4-gitian-r1.tar.gz diff --git a/contrib/gitian-descriptors/qt-win.yml b/contrib/gitian-descriptors/qt-win.yml new file mode 100644 index 00000000..7000c700 --- /dev/null +++ b/contrib/gitian-descriptors/qt-win.yml @@ -0,0 +1,92 @@ +--- +name: "qt" +suites: +- "precise" +architectures: +- "amd64" +packages: +- "mingw-w64" +- "g++-mingw-w64" +- "zip" +- "unzip" +- "faketime" +- "libz-dev" +reference_datetime: "2011-01-30 00:00:00" +remotes: [] +files: +- "qt-everywhere-opensource-src-5.2.0.tar.gz" +- "bitcoin-deps-win32-gitian-r13.zip" +- "bitcoin-deps-win64-gitian-r13.zip" +script: | + # Defines + export TZ=UTC + INDIR=$HOME/build + TEMPDIR=$HOME/tmp + # Qt: workaround for determinism in resource ordering + # Qt5's rcc uses a QHash to store the files for the resource. + # A security fix in QHash makes the ordering of keys to be different on every run + # (https://qt.gitorious.org/qt/qtbase/commit/c01eaa438200edc9a3bbcd8ae1e8ded058bea268). + # This is good in general but qrc shouldn't be doing a traversal over a randomized container. + # The thorough solution would be to use QMap instead of QHash, but this requires patching Qt. + # For now luckily there is a test mode that forces a fixed seed. + export QT_RCC_TEST=1 + # Integrity Check + echo "395ec72277c5786c65b8163ef5817fd03d0a1f524a6d47f53624baf8056f1081 qt-everywhere-opensource-src-5.2.0.tar.gz" | sha256sum -c + + for BITS in 32 64; do # for architectures + # + INSTALLPREFIX=$HOME/staging${BITS} + BUILDDIR=$HOME/build${BITS} + DEPSDIR=$HOME/deps${BITS} + if [ "$BITS" == "32" ]; then + HOST=i686-w64-mingw32 + else + HOST=x86_64-w64-mingw32 + fi + # + mkdir -p $INSTALLPREFIX $INSTALLPREFIX/host/bin $DEPSDIR $BUILDDIR + # + # Need mingw-compiled openssl from bitcoin-deps: + cd $DEPSDIR + unzip $INDIR/bitcoin-deps-win${BITS}-gitian-r13.zip + # + cd $BUILDDIR + # + tar xzf $INDIR/qt-everywhere-opensource-src-5.2.0.tar.gz + cd qt-everywhere-opensource-src-5.2.0 + SPECNAME="win32-g++" + SPECFILE="qtbase/mkspecs/${SPECNAME}/qmake.conf" + sed 's/qt_instdate=`date +%Y-%m-%d`/qt_instdate=2011-01-30/' -i qtbase/configure + sed --posix "s|QMAKE_CFLAGS = -pipe -fno-keep-inline-dllexport|QMAKE_CFLAGS\t\t= -pipe -fno-keep-inline-dllexport -isystem /usr/$HOST/include/ -frandom-seed=qtbuild -I$DEPSDIR/include|" -i ${SPECFILE} + sed --posix "s|QMAKE_LFLAGS =|QMAKE_LFLAGS\t\t= -L$DEPSDIR/lib|" -i ${SPECFILE} + # Before we tried to pass arguments to ar (static linking) in using QMAKE_LIB, however + # qt removes the arguments for ar and provides a script which makes it impossible to pass the determinism flag - + # so rather than try to replace ar, post-process all libraries and plugins at the end. + # + # Don't load faketime while compiling Qt, qmake will get stuck in nearly infinite loops + #export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 + #export FAKETIME=$REFERENCE_DATETIME + # + # Compile static libraries, and use statically linked openssl (-openssl-linked): + OPENSSL_LIBS="-L$DEPSDIR/lib -lssl -lcrypto -lgdi32" ./configure -prefix $INSTALLPREFIX -bindir $INSTALLPREFIX/host/bin -confirm-license -release -opensource -static -xplatform $SPECNAME -device-option CROSS_COMPILE="$HOST-" -no-audio-backend -no-javascript-jit -no-sql-sqlite -no-sql-odbc -no-nis -no-cups -no-iconv -no-dbus -no-gif -no-opengl -no-compile-examples -no-feature-style-windowsce -no-feature-style-windowsmobile -no-qml-debug -openssl-linked -skip qtsvg -skip qtwebkit -skip qtwebkit-examples -skip qtserialport -skip qtdeclarative -skip qtmultimedia -skip qtimageformats -skip qtlocation -skip qtsensors -skip qtquick1 -skip qtquickcontrols -skip qtactiveqt -skip qtconnectivity -skip qtwinextras -skip qtxmlpatterns -skip qtscript -skip qtdoc -system-libpng -system-zlib + make $MAKEOPTS install + # post-process all generated libraries and plugins to be deterministic + # extract them to a temporary directory then re-build them deterministically + for LIB in $(find $INSTALLPREFIX -name *.a); do + rm -rf $TEMPDIR && mkdir $TEMPDIR && cd $TEMPDIR + $HOST-ar xv $LIB | cut -b5- > /tmp/list.txt + rm $LIB + $HOST-ar crsD $LIB $(cat /tmp/list.txt) + done + # + cd $INSTALLPREFIX + # Remove unused non-deterministic stuff + rm host/bin/qtpaths.exe lib/libQt5Bootstrap.a lib/libQt5Bootstrap.la + # as zip stores file timestamps, use faketime to intercept stat calls to set dates for all files to reference date + export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 + export FAKETIME=$REFERENCE_DATETIME + find -print0 | xargs -r0 touch # fix up timestamps before packaging + find | sort | zip -X@ $OUTDIR/qt-win${BITS}-5.2.0-gitian-r3.zip + unset LD_PRELOAD + unset FAKETIME + done # for BITS in diff --git a/contrib/gitian-descriptors/qt-win32.yml b/contrib/gitian-descriptors/qt-win32.yml deleted file mode 100644 index 0b711790..00000000 --- a/contrib/gitian-descriptors/qt-win32.yml +++ /dev/null @@ -1,54 +0,0 @@ ---- -name: "qt" -suites: -- "lucid" -architectures: -- "i386" -packages: -- "mingw32" -- "zip" -- "faketime" -reference_datetime: "2011-01-30 00:00:00" -remotes: [] -files: -- "qt-everywhere-opensource-src-4.8.3.tar.gz" -script: | - INSTDIR="$HOME/qt/" - mkdir $INSTDIR - SRCDIR="$INSTDIR/src/" - mkdir $SRCDIR - # - tar xzf qt-everywhere-opensource-src-4.8.3.tar.gz - cd qt-everywhere-opensource-src-4.8.3 - sed 's/$TODAY/2011-01-30/' -i configure - sed 's/i686-pc-mingw32-/i586-mingw32msvc-/' -i mkspecs/unsupported/win32-g++-cross/qmake.conf - sed --posix 's|QMAKE_CFLAGS\t\t= -pipe|QMAKE_CFLAGS\t\t= -pipe -isystem /usr/i586-mingw32msvc/include/ -frandom-seed=qtbuild|' -i mkspecs/unsupported/win32-g++-cross/qmake.conf - sed 's/QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions -mthreads/QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions/' -i mkspecs/unsupported/win32-g++-cross/qmake.conf - sed 's/QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads/QMAKE_LFLAGS_EXCEPTIONS_ON = -lmingwthrd/' -i mkspecs/unsupported/win32-g++-cross/qmake.conf - sed --posix 's/QMAKE_MOC\t\t= i586-mingw32msvc-moc/QMAKE_MOC\t\t= moc/' -i mkspecs/unsupported/win32-g++-cross/qmake.conf - sed --posix 's/QMAKE_RCC\t\t= i586-mingw32msvc-rcc/QMAKE_RCC\t\t= rcc/' -i mkspecs/unsupported/win32-g++-cross/qmake.conf - sed --posix 's/QMAKE_UIC\t\t= i586-mingw32msvc-uic/QMAKE_UIC\t\t= uic/' -i mkspecs/unsupported/win32-g++-cross/qmake.conf - # ar adds timestamps to every object file included in the static library - # providing -D as ar argument is supposed to solve it, but doesn't work as qmake strips off the arguments and adds -M to pass a script... - # which somehow cannot be combined with other flags. - # use faketime only for ar, as it confuses make/qmake into hanging sometimes - sed --posix "s|QMAKE_LIB\t\t= i586-mingw32msvc-ar -ru|QMAKE_LIB\t\t= $HOME/ar -Dr|" -i mkspecs/unsupported/win32-g++-cross/qmake.conf - echo '#!/bin/bash' > $HOME/ar - echo 'export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1' >> $HOME/ar - echo 'i586-mingw32msvc-ar "$@"' >> $HOME/ar - chmod +x $HOME/ar - #export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 - export FAKETIME=$REFERENCE_DATETIME - export TZ=UTC - ./configure -prefix $INSTDIR -confirm-license -release -opensource -static -no-qt3support -xplatform unsupported/win32-g++-cross -no-multimedia -no-audio-backend -no-phonon -no-phonon-backend -no-declarative -no-script -no-scripttools -no-javascript-jit -no-webkit -no-svg -no-xmlpatterns -no-sql-sqlite -no-nis -no-cups -no-iconv -no-dbus -no-gif -no-libtiff -no-opengl -nomake examples -nomake demos -nomake docs -no-feature-style-plastique -no-feature-style-cleanlooks -no-feature-style-motif -no-feature-style-cde -no-feature-style-windowsce -no-feature-style-windowsmobile -no-feature-style-s60 - find . -name *.prl | xargs -l sed 's|/\.||' -i - find . -name *.prl | xargs -l sed 's|/$||' -i - make $MAKEOPTS install - cp -a bin $SRCDIR/ - cd $INSTDIR - find . -name *.prl | xargs -l sed 's|/$||' -i - #sed 's|QMAKE_PRL_LIBS.*|QMAKE_PRL_LIBS = -lQtDeclarative -lQtScript -lQtSvg -lQtSql -lQtXmlPatterns -lQtGui -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lwinspool -lmsimg32 -lQtNetwork -lQtCore -lole32 -luuid -lws2_32 -ladvapi32 -lshell32 -luser32 -lkernel32|' -i imports/Qt/labs/particles/qmlparticlesplugin.prl - - # as zip stores file timestamps, use faketime to intercept stat calls to set dates for all files to reference date - export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 - zip -r $OUTDIR/qt-win32-4.8.3-gitian-r1.zip * diff --git a/contrib/gitian-downloader/aschildbach-key.pgp b/contrib/gitian-downloader/aschildbach-key.pgp new file mode 100644 index 00000000..df06e19f Binary files /dev/null and b/contrib/gitian-downloader/aschildbach-key.pgp differ diff --git a/contrib/gitian-downloader/linux-download-config b/contrib/gitian-downloader/linux-download-config index 8340a5dd..b5e0561a 100644 --- a/contrib/gitian-downloader/linux-download-config +++ b/contrib/gitian-downloader/linux-download-config @@ -8,35 +8,32 @@ rss: pattern: bitcoin-\d+.\d+.\d+-linux-gitian.zip signers: 0A82509767C7D4A5D14DA2301AE1D35043E08E54: - weight: 40 name: BlueMatt key: bluematt BF6273FAEF7CC0BA1F562E50989F6B3048A116B5: - weight: 40 name: Devrandom key: devrandom E463A93F5F3117EEDE6C7316BD02942421F4889F: - weight: 40 name: Luke-Jr key: luke-jr D762373D24904A3E42F33B08B9A408E71DAAC974: - weight: 40 name: "Pieter Wuille" key: sipa 77E72E69DA7EE0A148C06B21B34821D4944DE5F7: - weight: 40 name: tcatm key: tcatm 01CDF4627A3B88AAE4A571C87588242FBE38D3A8: - weight: 40 name: "Gavin Andresen" key: gavinandresen 71A3B16735405025D447E8F274810B012346C9A6: - weight: 40 name: "Wladimir J. van der Laan" key: laanwj AEC1884398647C47413C1C3FB1179EB7347DC10D: - weight: 40 name: "Warren Togami" key: wtogami -minimum_weight: 120 + 9692B91BBF0E8D34DFD33B1882C5C009628ECF0C: + name: michagogo + key: michagogo + E944AE667CF960B1004BC32FCA662BE18B877A60: + name: "Andreas Schildbach" + key: aschildbach diff --git a/contrib/gitian-downloader/michagogo-key.pgp b/contrib/gitian-downloader/michagogo-key.pgp new file mode 100644 index 00000000..47bc4045 --- /dev/null +++ b/contrib/gitian-downloader/michagogo-key.pgp @@ -0,0 +1,59 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.12 (GNU/Linux) + +mQENBFGeqJ4BCADb7SI3/+q93gIvN0AGRg9Mtz73OLIOzCHeeoyn+tp7JcYNzxkQ +9lfeXiEfn72Sh8gHkLtLIqr7HlIMo8DxSS8JPRVjlJGkNyAW4SeEwN2wNa5OV8k0 +N4jBa9a1csFyCyrEkPKvkUpBkQDvNXjNxyEhHwyZqPanKxy6NXIHOJji8ObOMQXI +T9HwJrpjRth3u4uKG968JBTEyAXAmkt0Zidl1Ykgzcedk4mJSE9uZCW8DjSv2wML +XcQz8+dYsoskT3KRdkowLHxAfj1BNyNc1+rKLghliM5vSQWi+Lbhi1Bxh4sY1UwA +lKnAGqrnAGyIvCtkwTq5QI6ufF2ZY44bvVgpABEBAAG0IU1pY2hhZ29nbyA8bWlj +aGFnb2dvQHNlcnZlci5mYWtlPokBOAQTAQIAIgUCUZ6ongIbAwYLCQgHAwIGFQgC +CQoLBBYCAwECHgECF4AACgkQgsXACWKOzwzMUAgAuqUmK10xE5C3lUym2f72z0t6 +a2NM5Wfjr9//Y1/okC36C5XAMEtN2UwckPzzJ5p5D5y5yzwfZq5Jd8Py29VQIMsV +7FbC1a0H3D+bCyX+JJ6FAmUbnWOQ/+mydYc74RvD8iwjePNT6kziZNv6dMGctJTl +0alwjtQYgyGkeYKnIxbcyjHX/IawLUrunb/6mSKun87T8+NM/omfFCTc3l8TakpM +0wyNYRiUkIfUBvB8sDUU3A80qKN/hqRKvlFu3+/kMiAc9ZYQrbmsB+sYWdmM+4zw +8NBw3yuYzWyPuoa4PR5ZmS9F11WLMR5vTRCdLudAqYsWu3LtV6vAIvlOUa2LMLRg +TWljaGFnb2dvIChSZWdpc3RlcmVkIG5pY2sgbWljaGFnb2dvIG9uIGZyZWVub2Rl +IGFzIG9mIE9jdG9iZXIgMTIsIDIwMTMpIDxtaWNoYWdvZ29Ac2VydmVyLmZha2U+ +iQE4BBMBAgAiBQJSWarzAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRCC +xcAJYo7PDA7nB/91wAiaMlU5nHLUu0anhNQbGvUdFgKK1zO90S5KzUdJcY438jcS +UJW1az8l9U9JBRIfPRYVhz/Z1TAJ+dCzD7D8BXHFeGEr0zNOh87ly9aB5du7dpN2 +oSBD6wLcJpqxt4h+XjSS2CX98/2ZIJxXENE2KySaTXP39Xl3eNwvJTUBA4XlcMey +J8KMp/IERli4H0O7vRyLgu3yYpUArTqAonzG1g2lfB35PQJfeInrRSniQ336otnZ +A8qwJ63kfUtWVDRz0g1fnvtiLGPivDJaI5hyIaUeJPaXU1+sg7YNroDu60o2NGZh +F+0IjHlvRfzzA+F9Vw38rpSqR3BmCdjf6Sv3iQEcBBABAgAGBQJSWa9/AAoJEH+r +EUJn5PoE/hgH/1T2dAthVucA/hzY0nl4SMjbg+dzNlYBq00Qwx8DRKVjk5et8+kY +oPI3DGILcr+ELnxNekeMv9WQBBtJanUh1K5ohZ6ohoR7lG18LXf5HCdspflB5Me6 +LMA6iMryEP6gIs9GFuoGe2YQavm58YrkqhcPu34dGN7kdurfEXLvDfVlh5ZbKCsP +Gyd7Pbz04SpqykgK1udiTsLVjc70Xhv+jAMqeaCugDX6TLEwjVmZH/xsyKk2Uh3V +Oib5FXADAtKH+vSqqhFpXrw7R/NaBzvCbas8l61DFHiUg1/bo8vsV8MtGcyZmzXJ +C5Gm0njtGOil/g7JF9siUrpxs9Yyt/h+T2W0W01pY2hhZ29nbyAoVXNlciBhY2Nv +dW50IG1pY2hhZ29nbyBvbiBHaXRodWIgYXMgb2YgT2N0b2JlciAxMiwgMjAxMykg +PG1pY2hhZ29nb0BzZXJ2ZXIuZmFrZT6JATcEEwECACIFAlJZqxkCGwMGCwkIBwMC +BhUIAgkKCwQWAgMBAh4BAheAAAoJEILFwAlijs8M+1AH+IU78ARblqTnJeSl0iWH +mEsg4IBK30Q6/exDAcqOEm1Yc171uw2WnGmIvPYOQqxrRTvj3LoQ816dU6jrj6vY +s+XX0R2hxy7ILh17D/3UKnHcddu7rmc7pNEqZeBXaMughqQaPOWkAIe52+qK5tsl +sWllzTYE4jo29uZ3dAtDcKEJjBo/pIXnu1GOslE1+V4X1H9WDlwrS/JXHzyDQAjt +maPR+3gNesDanhrRmrnT3ZXW2ZVd3vGBibhia8PWUhU1uwOH23ySWXncgsHH0Zad +UMjd4w3YliZP/mLn2ghAxHB70IO7lgAgN3HYZeFoufP3pcK440A+CezfQiRcjHl/ +oIkBHAQQAQIABgUCUlmvfwAKCRB/qxFCZ+T6BOq9CACItsrUZPKGeWSTkMHknMrV +K5vxIXJVCBb+Tppc0Q/J5p4EkW/RFhTwIP2zw8NLDKMh5oO9md4LXhvfIZkqQJFo +6ZtLa3Vf+Kj7uyxezBo4QHA+G7tDsRGaMKVrEMiyLCwS1+hg9VaNzsf7zmQW7mYE +vTLMHp3cVaSU7Mh2Dl8rnAaM/DpTUZQwZ+32Qrb/Z4HSa4f278iqoFpjEbBE2KCr +vT5yEVvpCZ4lwSgA2a+uTlRTvVV6NA/kpsxU64tmhuEOjy+ToDqJ8wv4mqvWZxMv +C6OhfVaXBy3U9gG8aQV0ffXGs+TbCtv8ApHd6E1/AVk0oyZGJaBVrEl688bBIWd/ +uQENBFGeqJ4BCADFmgR7oEGkFFB5qXnuNYFq1nUGDAh0dLNtAD3J6EMxUZEXdmp+ +DQHJw6/eDRQaG9EbjNZheycbVUoI8K2Y/Z268HQueGuIEIJv6cZYXoXdWCbDD4fn +HMNUX2wNlpDqWxb7PNUEtfU9hI3gmHGlr5OiEh3iV06uiZg4n2rbWPbj45m5LJzv +wpCrUA+pLcl9Xjw2cajaSTjdXHk9gvXTCo6s2ZS3/3Q4l+xuzZp1MGNzPQHASMKs +wecSJKkYg6W8I5WsVlPd9a8oQCc/Nfz7BPw31MRVR/SF5FAMqaXx5uLwghVdHB2i +cLURsOtJlCfP8W06gB7yS+MH45Jq/oxBRiJBABEBAAGJAR8EGAECAAkFAlGeqJ4C +GwwACgkQgsXACWKOzwwT4wgAy6ICcnBZ9l2jSu+ldy57F6jf5kpKZgB9NV8V2mMA +NeY1wMQ4VTVpU4t3s4E2LYtGNJNkPQVHbt1Pf4dGPasvMPaHMamgwgyqgYixqs0x +D5PdKzVrfnjwTTr/ZAFdccSPmvy5/hbY0geQ/+mzdbL07+xaT58JIoG5nySDKhmC +VeOvhDZtXMVAhEWBDPEgh/H9sEuBgMgZrzfE1j3q802qiXeQs6WtadWlQ1RN9Iq1 +ZzIi6u9/BifEIRI0pO/WwKOZdXLTemFUoakoe7uT3A74N96t0G9LZVihYbEoO+Pc +5IaHPBV5VLeR3TB1LnnjHVf/Fwi8cnGy50kNWjcbMyEDag== +=jyQ4 +-----END PGP PUBLIC KEY BLOCK----- diff --git a/contrib/gitian-downloader/win32-download-config b/contrib/gitian-downloader/win32-download-config index 49d52851..5d56db86 100644 --- a/contrib/gitian-downloader/win32-download-config +++ b/contrib/gitian-downloader/win32-download-config @@ -8,35 +8,32 @@ rss: pattern: bitcoin-\d+.\d+.\d+-win32-gitian.zip signers: 0A82509767C7D4A5D14DA2301AE1D35043E08E54: - weight: 40 name: BlueMatt key: bluematt BF6273FAEF7CC0BA1F562E50989F6B3048A116B5: - weight: 40 name: Devrandom key: devrandom E463A93F5F3117EEDE6C7316BD02942421F4889F: - weight: 40 name: Luke-Jr key: luke-jr D762373D24904A3E42F33B08B9A408E71DAAC974: - weight: 40 name: "Pieter Wuille" key: sipa 77E72E69DA7EE0A148C06B21B34821D4944DE5F7: - weight: 40 name: tcatm key: tcatm 01CDF4627A3B88AAE4A571C87588242FBE38D3A8: - weight: 40 name: "Gavin Andresen" key: gavinandresen 71A3B16735405025D447E8F274810B012346C9A6: - weight: 40 name: "Wladimir J. van der Laan" key: laanwj AEC1884398647C47413C1C3FB1179EB7347DC10D: - weight: 40 name: "Warren Togami" key: wtogami -minimum_weight: 120 + 9692B91BBF0E8D34DFD33B1882C5C009628ECF0C: + name: michagogo + key: michagogo + E944AE667CF960B1004BC32FCA662BE18B877A60: + name: "Andreas Schildbach" + key: aschildbach diff --git a/contrib/homebrew/bitcoin.qt.pro.patch b/contrib/homebrew/bitcoin.qt.pro.patch deleted file mode 100644 index 1001f290..00000000 --- a/contrib/homebrew/bitcoin.qt.pro.patch +++ /dev/null @@ -1,32 +0,0 @@ -diff --git a/bitcoin-qt.pro b/bitcoin-qt.pro -index d938c07..e1dd4ec 100644 ---- a/bitcoin-qt.pro -+++ b/bitcoin-qt.pro -@@ -353,7 +353,7 @@ - } - - isEmpty(BDB_LIB_PATH) { -- macx:BDB_LIB_PATH = /opt/local/lib/db48 -+ macx:BDB_LIB_PATH = /usr/local/opt/berkeley-db4/lib - } - - isEmpty(BDB_LIB_SUFFIX) { -@@ -361,15 +361,15 @@ - } - - isEmpty(BDB_INCLUDE_PATH) { -- macx:BDB_INCLUDE_PATH = /opt/local/include/db48 -+ macx:BDB_INCLUDE_PATH = /usr/local/opt/berkeley-db4/include - } - - isEmpty(BOOST_LIB_PATH) { -- macx:BOOST_LIB_PATH = /opt/local/lib -+ macx:BOOST_LIB_PATH = /usr/local/opt/boost/lib - } - - isEmpty(BOOST_INCLUDE_PATH) { -- macx:BOOST_INCLUDE_PATH = /opt/local/include -+ macx:BOOST_INCLUDE_PATH = /usr/local/opt/boost/include - } - - win32:DEFINES += WIN32 diff --git a/contrib/homebrew/makefile.osx.patch b/contrib/homebrew/makefile.osx.patch deleted file mode 100644 index 287db2fd..00000000 --- a/contrib/homebrew/makefile.osx.patch +++ /dev/null @@ -1,48 +0,0 @@ -diff --git a/src/makefile.osx b/src/makefile.osx -index bef0ef3..07ef8d3 100644 ---- a/src/makefile.osx -+++ b/src/makefile.osx -@@ -7,17 +7,21 @@ - # Originally by Laszlo Hanyecz (solar@heliacal.net) - - CXX=llvm-g++ --DEPSDIR=/opt/local -+DEPSDIR=/usr/local -+DB4DIR=/usr/local/opt/berkeley-db4 -+OPENSSLDIR=/usr/local/opt/openssl - - INCLUDEPATHS= \ - -I"$(CURDIR)" \ -- -I"$(CURDIR)"/obj \ -+ -I"$(CURDIR)/obj" \ - -I"$(DEPSDIR)/include" \ -- -I"$(DEPSDIR)/include/db48" -+ -I"$(DB4DIR)/include" \ -+ -I"$(OPENSSLDIR)/include" - - LIBPATHS= \ - -L"$(DEPSDIR)/lib" \ -- -L"$(DEPSDIR)/lib/db48" -+ -L"$(DB4DIR)/lib" \ -+ -L"$(OPENSSLDIR)/lib" - - USE_UPNP:=1 - USE_IPV6:=1 -@@ -31,14 +35,14 @@ ifdef STATIC - TESTLIBS += \ - $(DEPSDIR)/lib/libboost_unit_test_framework-mt.a - LIBS += \ -- $(DEPSDIR)/lib/db48/libdb_cxx-4.8.a \ -+ $(DB4DIR)/lib/libdb_cxx-4.8.a \ - $(DEPSDIR)/lib/libboost_system-mt.a \ - $(DEPSDIR)/lib/libboost_filesystem-mt.a \ - $(DEPSDIR)/lib/libboost_program_options-mt.a \ - $(DEPSDIR)/lib/libboost_thread-mt.a \ - $(DEPSDIR)/lib/libboost_chrono-mt.a \ -- $(DEPSDIR)/lib/libssl.a \ -- $(DEPSDIR)/lib/libcrypto.a \ -+ $(OPENSSLDIR)/lib/libssl.a \ -+ $(OPENSSLDIR)/lib/libcrypto.a \ - -lz - else - TESTLIBS += \ diff --git a/contrib/linearize/README.md b/contrib/linearize/README.md new file mode 100644 index 00000000..70b9f034 --- /dev/null +++ b/contrib/linearize/README.md @@ -0,0 +1,2 @@ +### Linearize ### +Construct a linear, no-fork, best version of the blockchain. \ No newline at end of file diff --git a/contrib/linearize/example-linearize.cfg b/contrib/linearize/example-linearize.cfg new file mode 100644 index 00000000..f5cdab53 --- /dev/null +++ b/contrib/linearize/example-linearize.cfg @@ -0,0 +1,12 @@ + +# bitcoind RPC settings +rpcuser=someuser +rpcpassword=somepassword +host=127.0.0.1 +port=8332 + +# bootstrap.dat settings +netmagic=f9beb4d9 +max_height=279000 +output=bootstrap.dat + diff --git a/contrib/linearize/linearize.py b/contrib/linearize/linearize.py new file mode 100644 index 00000000..650f7d36 --- /dev/null +++ b/contrib/linearize/linearize.py @@ -0,0 +1,132 @@ +#!/usr/bin/python +# +# linearize.py: Construct a linear, no-fork, best version of the blockchain. +# +# +# Copyright (c) 2013 The Bitcoin developers +# Distributed under the MIT/X11 software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. +# + +import json +import struct +import re +import base64 +import httplib +import sys + +ERR_SLEEP = 15 +MAX_NONCE = 1000000L + +settings = {} + +class BitcoinRPC: + OBJID = 1 + + def __init__(self, host, port, username, password): + authpair = "%s:%s" % (username, password) + self.authhdr = "Basic %s" % (base64.b64encode(authpair)) + self.conn = httplib.HTTPConnection(host, port, False, 30) + def rpc(self, method, params=None): + self.OBJID += 1 + obj = { 'version' : '1.1', + 'method' : method, + 'id' : self.OBJID } + if params is None: + obj['params'] = [] + else: + obj['params'] = params + self.conn.request('POST', '/', json.dumps(obj), + { 'Authorization' : self.authhdr, + 'Content-type' : 'application/json' }) + + resp = self.conn.getresponse() + if resp is None: + print "JSON-RPC: no response" + return None + + body = resp.read() + resp_obj = json.loads(body) + if resp_obj is None: + print "JSON-RPC: cannot JSON-decode body" + return None + if 'error' in resp_obj and resp_obj['error'] != None: + return resp_obj['error'] + if 'result' not in resp_obj: + print "JSON-RPC: no result in object" + return None + + return resp_obj['result'] + def getblock(self, hash, verbose=True): + return self.rpc('getblock', [hash, verbose]) + def getblockhash(self, index): + return self.rpc('getblockhash', [index]) + +def getblock(rpc, settings, n): + hash = rpc.getblockhash(n) + hexdata = rpc.getblock(hash, False) + data = hexdata.decode('hex') + + return data + +def get_blocks(settings): + rpc = BitcoinRPC(settings['host'], settings['port'], + settings['rpcuser'], settings['rpcpassword']) + + outf = open(settings['output'], 'ab') + + for height in xrange(settings['min_height'], settings['max_height']+1): + data = getblock(rpc, settings, height) + + outhdr = settings['netmagic'] + outhdr += struct.pack("= 3: print "Inspecting with otool: " + binaryPath - otool = subprocess.Popen(["otool", "-L", binaryPath], stdout=subprocess.PIPE, stderr=subprocess.PIPE) + otoolbin=os.getenv("OTOOL", "otool") + otool = subprocess.Popen([otoolbin, "-L", binaryPath], stdout=subprocess.PIPE, stderr=subprocess.PIPE) o_stdout, o_stderr = otool.communicate() if otool.returncode != 0: if verbose >= 1: @@ -221,7 +222,8 @@ def getFrameworks(binaryPath, verbose): return libraries def runInstallNameTool(action, *args): - subprocess.check_call(["install_name_tool", "-"+action] + list(args)) + installnametoolbin=os.getenv("INSTALLNAMETOOL", "install_name_tool") + subprocess.check_call([installnametoolbin, "-"+action] + list(args)) def changeInstallName(oldName, newName, binaryPath, verbose): if verbose >= 3: @@ -239,10 +241,11 @@ def changeIdentification(id, binaryPath, verbose): runInstallNameTool("id", id, binaryPath) def runStrip(binaryPath, verbose): + stripbin=os.getenv("STRIP", "strip") if verbose >= 3: print "Using strip:" print " stripped", binaryPath - subprocess.check_call(["strip", "-x", binaryPath]) + subprocess.check_call([stripbin, "-x", binaryPath]) def copyFramework(framework, path, verbose): if framework.sourceFilePath.startswith("Qt"): @@ -347,6 +350,8 @@ def deployFrameworksForAppBundle(applicationBundle, strip, verbose): def deployPlugins(appBundleInfo, deploymentInfo, strip, verbose): # Lookup available plugins, exclude unneeded plugins = [] + if deploymentInfo.pluginPath is None: + return for dirpath, dirnames, filenames in os.walk(deploymentInfo.pluginPath): pluginDirectory = os.path.relpath(dirpath, deploymentInfo.pluginPath) if pluginDirectory == "designer": @@ -421,8 +426,8 @@ def deployPlugins(appBundleInfo, deploymentInfo, strip, verbose): deployFrameworks([dependency], appBundleInfo.path, destinationPath, strip, verbose, deploymentInfo) qt_conf="""[Paths] -translations=Resources -plugins=PlugIns +Translations=Resources +Plugins=PlugIns """ ap = ArgumentParser(description="""Improved version of macdeployqt. @@ -651,6 +656,23 @@ elif config.sign: # ------------------------------------------------ if config.dmg is not None: + + #Patch in check_output for Python 2.6 + if "check_output" not in dir( subprocess ): + def f(*popenargs, **kwargs): + if 'stdout' in kwargs: + raise ValueError('stdout argument not allowed, it will be overridden.') + process = subprocess.Popen(stdout=subprocess.PIPE, *popenargs, **kwargs) + output, unused_err = process.communicate() + retcode = process.poll() + if retcode: + cmd = kwargs.get("args") + if cmd is None: + cmd = popenargs[0] + raise CalledProcessError(retcode, cmd) + return output + subprocess.check_output = f + def runHDIUtil(verb, image_basename, **kwargs): hdiutil_args = ["hdiutil", verb, image_basename + ".dmg"] if kwargs.has_key("capture_stdout"): diff --git a/contrib/macdeploy/notes.txt b/contrib/macdeploy/notes.txt deleted file mode 100644 index 3d749014..00000000 --- a/contrib/macdeploy/notes.txt +++ /dev/null @@ -1,26 +0,0 @@ - -macdeployqtplus works best on OS X Lion, for Snow Leopard you'd need to install -Python 2.7 and make it your default Python installation. - -You will need the appscript package for the fancy disk image creation to work. -Install it by invoking "sudo easy_install appscript". - -This script should be invoked in the target directory like this: -$source_dir/contrib/macdeploy/macdeployqtplus Bitcoin-Qt.app -add-qt-tr da,de,es,hu,ru,uk,zh_CN,zh_TW -dmg -fancy $source_dir/contrib/macdeploy/fancy.plist -verbose 2 - -During the process, the disk image window will pop up briefly where the fancy -settings are applied. This is normal, please do not interfere. - -You can also set up Qt Creator for invoking the script. For this, go to the -"Projects" tab on the left side, switch to "Run Settings" above and add a -deploy configuration. Next add a deploy step choosing "Custom Process Step". -Fill in the following. - -Enable custom process step: [x] -Command: %{sourceDir}/contrib/macdeploy/macdeployqtplus -Working directory: %{buildDir} -Command arguments: Bitcoin-Qt.app -add-qt-tr da,de,es,hu,ru,uk,zh_CN,zh_TW -dmg -fancy %{sourceDir}/contrib/macdeploy/fancy.plist -verbose 2 - -After that you can start the deployment process through the menu with -Build -> Deploy Project "bitcoin-qt" - diff --git a/contrib/pyminer/README b/contrib/pyminer/README deleted file mode 100644 index d1596575..00000000 --- a/contrib/pyminer/README +++ /dev/null @@ -1,6 +0,0 @@ - -This is a 'getwork' CPU mining client for bitcoin. - -It is pure-python, and therefore very, very slow. The purpose is to -provide a reference implementation of a miner, for study. - diff --git a/contrib/pyminer/README.md b/contrib/pyminer/README.md new file mode 100644 index 00000000..3b20f2fd --- /dev/null +++ b/contrib/pyminer/README.md @@ -0,0 +1,8 @@ +### PyMiner ### + +This is a 'getwork' CPU mining client for Bitcoin. It is pure-python, and therefore very, very slow. The purpose is to provide a reference implementation of a miner, for study. + +### Other Resources ### + +- [BitcoinTalk Thread](https://bitcointalk.org/index.php?topic=3546.0) +- [Jgarzik Repo](https://github.com/jgarzik/pyminer) \ No newline at end of file diff --git a/contrib/qos/README b/contrib/qos/README.md similarity index 97% rename from contrib/qos/README rename to contrib/qos/README.md index f4196857..5e0a975f 100644 --- a/contrib/qos/README +++ b/contrib/qos/README.md @@ -1,3 +1,5 @@ +### Qos ### + This is a Linux bash script that will set up tc to limit the outgoing bandwidth for connections to the Bitcoin network. It limits outbound TCP traffic with a source or destination port of 8333, but not if the destination IP is within a LAN (defined as 192.168.x.x). This means one can have an always-on bitcoind instance running, and another local bitcoind/bitcoin-qt instance which connects to this node and receives blocks from it. diff --git a/contrib/seeds/README b/contrib/seeds/README.md similarity index 74% rename from contrib/seeds/README rename to contrib/seeds/README.md index 97e3e1ec..f9a0c277 100644 --- a/contrib/seeds/README +++ b/contrib/seeds/README.md @@ -1,9 +1,11 @@ +### Seeds ### + Utility to generate the pnSeed[] array that is compiled into the client -(see src/net.cpp). +(see [src/net.cpp](/src/net.cpp)). The 600 seeds compiled into the 0.8 release were created from sipa's DNS seed data, like this: -curl -s http://bitcoin.sipa.be/seeds.txt | head -1000 | makeseeds.py + curl -s http://bitcoin.sipa.be/seeds.txt | head -1000 | makeseeds.py The input to makeseeds.py is assumed to be approximately sorted from most-reliable to least-reliable, with IP:port first on each line (lines that don't match IPv4:port are ignored). diff --git a/contrib/spendfrom/README b/contrib/spendfrom/README deleted file mode 100644 index 8a087a0c..00000000 --- a/contrib/spendfrom/README +++ /dev/null @@ -1,32 +0,0 @@ -Use the raw transactions API to send coins received on a particular -address (or addresses). - -Depends on jsonrpc - -Usage: - -spendfrom.py --from=FROMADDRESS1[,FROMADDRESS2] --to=TOADDRESS --amount=amount \ - --fee=fee --datadir=/path/to/.bitcoin --testnet --dry_run - -With no arguments, outputs a list of amounts associated with addresses. - -With arguments, sends coins received by the FROMADDRESS addresses to the TOADDRESS. - -You may explictly specify how much fee to pay (a fee more than 1% of the amount -will fail, though, to prevent bitcoin-losing accidents). Spendfrom may fail if -it thinks the transaction would never be confirmed (if the amount being sent is -too small, or if the transaction is too many bytes for the fee). - -If a change output needs to be created, the change will be sent to the last -FROMADDRESS (if you specify just one FROMADDRESS, change will go back to it). - -If --datadir is not specified, the default datadir is used. - -The --dry_run option will just create and sign the the transaction and print -the transaction data (as hexadecimal), instead of broadcasting it. - -If the transaction is created and broadcast successfully, a transaction id -is printed. - -If this was a tool for end-users and not programmers, it would have much friendlier -error-handling. diff --git a/contrib/spendfrom/README.md b/contrib/spendfrom/README.md new file mode 100644 index 00000000..c0a9c9cc --- /dev/null +++ b/contrib/spendfrom/README.md @@ -0,0 +1,35 @@ +### SpendFrom ### + +Use the raw transactions API to send coins received on a particular +address (or addresses). + +### Usage: ### +Depends on [jsonrpc](http://json-rpc.org/). + + spendfrom.py --from=FROMADDRESS1[,FROMADDRESS2] --to=TOADDRESS --amount=amount \ + --fee=fee --datadir=/path/to/.bitcoin --testnet --dry_run + +With no arguments, outputs a list of amounts associated with addresses. + +With arguments, sends coins received by the `FROMADDRESS` addresses to the `TOADDRESS`. + +### Notes ### + +- You may explicitly specify how much fee to pay (a fee more than 1% of the amount +will fail, though, to prevent bitcoin-losing accidents). Spendfrom may fail if +it thinks the transaction would never be confirmed (if the amount being sent is +too small, or if the transaction is too many bytes for the fee). + +- If a change output needs to be created, the change will be sent to the last +`FROMADDRESS` (if you specify just one `FROMADDRESS`, change will go back to it). + +- If `--datadir` is not specified, the default datadir is used. + +- The `--dry_run` option will just create and sign the transaction and print +the transaction data (as hexadecimal), instead of broadcasting it. + +- If the transaction is created and broadcast successfully, a transaction id +is printed. + +- If this was a tool for end-users and not programmers, it would have much friendlier +error-handling. diff --git a/contrib/test-patches/README b/contrib/test-patches/README.md similarity index 58% rename from contrib/test-patches/README rename to contrib/test-patches/README.md index ed754cea..def40b0d 100644 --- a/contrib/test-patches/README +++ b/contrib/test-patches/README.md @@ -1,4 +1,7 @@ +### Test Patches ### + These patches are applied when the automated pull-tester tests each pull and when master is tested using jenkins. You can find more information about the tests run at -http://jenkins.bluematt.me/pull-tester/files/ +[http://jenkins.bluematt.me/pull-tester/files/ +](http://jenkins.bluematt.me/pull-tester/files/) \ No newline at end of file diff --git a/contrib/testgen/README b/contrib/testgen/README deleted file mode 100644 index 02d6c4cd..00000000 --- a/contrib/testgen/README +++ /dev/null @@ -1 +0,0 @@ -Utilities to generate test vectors for the data-driven Bitcoin tests diff --git a/contrib/testgen/README.md b/contrib/testgen/README.md new file mode 100644 index 00000000..83624f44 --- /dev/null +++ b/contrib/testgen/README.md @@ -0,0 +1,8 @@ +### TestGen ### + +Utilities to generate test vectors for the data-driven Bitcoin tests. + +Usage: + + gen_base58_test_vectors.py valid 50 > ../../src/test/data/base58_keys_valid.json + gen_base58_test_vectors.py invalid 50 > ../../src/test/data/base58_keys_invalid.json \ No newline at end of file diff --git a/contrib/verifysfbinaries/README.md b/contrib/verifysfbinaries/README.md new file mode 100644 index 00000000..f646d1ef --- /dev/null +++ b/contrib/verifysfbinaries/README.md @@ -0,0 +1,6 @@ +### Verify SF Binaries ### +This script attempts to download the signature file `SHA256SUMS.asc` from SourceForge. + +It first checks if the signature passes, and then downloads the files specified in the file, and checks if the hashes of these files match those that are specified in the signature file. + +The script returns 0 if everything passes the checks. It returns 1 if either the signature check or the hash check doesn't pass. If an error occurs the return value is 2. \ No newline at end of file diff --git a/contrib/verifysfbinaries/verify.sh b/contrib/verifysfbinaries/verify.sh index 768be86b..e9229566 100755 --- a/contrib/verifysfbinaries/verify.sh +++ b/contrib/verifysfbinaries/verify.sh @@ -18,7 +18,7 @@ WORKINGDIR="/tmp/bitcoin" TMPFILE="hashes.tmp" #this URL is used if a version number is not specified as an argument to the script -SIGNATUREFILE="http://downloads.sourceforge.net/project/bitcoin/Bitcoin/bitcoin-0.8.2/SHA256SUMS.asc" +SIGNATUREFILE="http://downloads.sourceforge.net/project/bitcoin/Bitcoin/bitcoin-0.9.0rc1/SHA256SUMS.asc" SIGNATUREFILENAME="SHA256SUMS.asc" RCSUBDIR="test/" diff --git a/contrib/wallettools/walletchangepass.py b/contrib/wallettools/walletchangepass.py deleted file mode 100644 index 30f3f5b2..00000000 --- a/contrib/wallettools/walletchangepass.py +++ /dev/null @@ -1,5 +0,0 @@ -from jsonrpc import ServiceProxy -access = ServiceProxy("http://127.0.0.1:8332") -pwd = raw_input("Enter old wallet passphrase: ") -pwd2 = raw_input("Enter new wallet passphrase: ") -access.walletpassphrasechange(pwd, pwd2) \ No newline at end of file diff --git a/contrib/wallettools/walletunlock.py b/contrib/wallettools/walletunlock.py deleted file mode 100644 index f847c6fe..00000000 --- a/contrib/wallettools/walletunlock.py +++ /dev/null @@ -1,4 +0,0 @@ -from jsonrpc import ServiceProxy -access = ServiceProxy("http://127.0.0.1:8332") -pwd = raw_input("Enter wallet passphrase: ") -access.walletpassphrase(pwd, 60) \ No newline at end of file diff --git a/doc/Doxyfile b/doc/Doxyfile index c32d0f89..ada96ef8 100644 --- a/doc/Doxyfile +++ b/doc/Doxyfile @@ -34,7 +34,7 @@ PROJECT_NAME = Bitcoin # This could be handy for archiving the generated documentation or # if some version control system is used. -PROJECT_NUMBER = 0.5.0 +PROJECT_NUMBER = 0.9.2 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer @@ -683,7 +683,7 @@ RECURSIVE = YES # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. -EXCLUDE = +EXCLUDE = src/leveldb src/json src/test /src/qt/test # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded @@ -705,7 +705,7 @@ EXCLUDE_PATTERNS = # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test -EXCLUDE_SYMBOLS = +EXCLUDE_SYMBOLS = boost google # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see @@ -1577,7 +1577,7 @@ HIDE_UNDOC_RELATIONS = YES # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) -HAVE_DOT = NO +HAVE_DOT = YES # The DOT_NUM_THREADS specifies the number of dot invocations doxygen is # allowed to run in parallel. When set to 0 (the default) doxygen will @@ -1659,7 +1659,7 @@ INCLUDED_BY_GRAPH = YES # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. -CALL_GRAPH = NO +CALL_GRAPH = YES # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function @@ -1667,7 +1667,7 @@ CALL_GRAPH = NO # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. -CALLER_GRAPH = NO +CALLER_GRAPH = YES # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will generate a graphical hierarchy of all classes instead of a textual one. @@ -1685,7 +1685,7 @@ DIRECTORY_GRAPH = YES # generated by dot. Possible values are svg, png, jpg, or gif. # If left blank png will be used. -DOT_IMAGE_FORMAT = png +DOT_IMAGE_FORMAT = svg # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. diff --git a/doc/README.md b/doc/README.md index 1238033f..b4e37e22 100644 --- a/doc/README.md +++ b/doc/README.md @@ -1,24 +1,16 @@ -Bitcoin 0.8.2 BETA -==================== +Bitcoin 0.9.2 BETA +===================== -Copyright (c) 2009-2013 Bitcoin Developers - -Distributed under the [MIT/X11 software license](http://www.opensource.org/licenses/mit-license.php). -This product includes software developed by the OpenSSL Project for use in the [OpenSSL Toolkit](http://www.openssl.org/). This product includes -cryptographic software written by Eric Young ([eay@cryptsoft.com](mailto:eay@cryptsoft.com)), and UPnP software written by Thomas Bernard. - - -Intro ---------------------- -Bitcoin is a free open source peer-to-peer electronic cash system that is -completely decentralized, without the need for a central server or trusted -parties. Users hold the crypto keys to their own money and transact directly -with each other, with the help of a P2P network to check for double-spending. +Copyright (c) 2009-2014 Bitcoin Developers Setup --------------------- -[Bitcoin-Qt](http://bitcoin.org/en/download) is the original Bitcoin client and it builds the backbone of the network. However, it downloads and stores the entire history of Bitcoin transactions; depending on the speed of your computer and network connection, the synchronization process can take anywhere from a few hours to a day or more. +[Bitcoin Core](http://bitcoin.org/en/download) is the original Bitcoin client and it builds the backbone of the network. However, it downloads and stores the entire history of Bitcoin transactions (which is currently several GBs); depending on the speed of your computer and network connection, the synchronization process can take anywhere from a few hours to a day or more. Thankfully you only have to do this once. If you would like the process to go faster you can [download the blockchain directly](bootstrap.md). + +Running +--------------------- +The following are some helpful notes on how to run Bitcoin on your native platform. ### Unix @@ -28,33 +20,38 @@ You need the Qt4 run-time libraries to run Bitcoin-Qt. On Debian or Ubuntu: Unpack the files into a directory and run: -- bin/32/bitcoin-qt (GUI, 32-bit) -- bin/32/bitcoind (headless, 32-bit) -- bin/64/bitcoin-qt (GUI, 64-bit) -- bin/64/bitcoind (headless, 64-bit) +- bin/32/bitcoin-qt (GUI, 32-bit) or bin/32/bitcoind (headless, 32-bit) +- bin/64/bitcoin-qt (GUI, 64-bit) or bin/64/bitcoind (headless, 64-bit) ### Windows -Unpack the files into a directory and run bitcoin-qt.exe. +Unpack the files into a directory, and then run bitcoin-qt.exe. + +### OSX + +Drag Bitcoin-Qt to your applications folder, and then run Bitcoin-Qt. ### Need Help? * See the documentation at the [Bitcoin Wiki](https://en.bitcoin.it/wiki/Main_Page) for help and more information. * Ask for help on [#bitcoin](http://webchat.freenode.net?channels=bitcoin) on Freenode. If you don't have an IRC client use [webchat here](http://webchat.freenode.net?channels=bitcoin). -* Ask for help on the [BitcoinTalk](https://bitcointalk.org/) forums. +* Ask for help on the [BitcoinTalk](https://bitcointalk.org/) forums, in the [Technical Support board](https://bitcointalk.org/index.php?board=4.0). Building --------------------- -- [Bitcoin-Qt Readme](readme-qt.md) +The following are developer notes on how to build Bitcoin on your native platform. They are not complete guides, but include notes on the necessary libraries, compile flags, etc. + - [OSX Build Notes](build-osx.md) - [Unix Build Notes](build-unix.md) - [Windows Build Notes](build-msw.md) Development --------------------- +The Bitcoin repo's [root README](https://github.com/bitcoin/bitcoin/blob/master/README.md) contains relevant information on the development process and automated testing. + - [Coding Guidelines](coding.md) - [Multiwallet Qt Development](multiwallet-qt.md) - [Release Notes](release-notes.md) @@ -63,8 +60,17 @@ Development - [Translation Process](translation_process.md) - [Unit Tests](unit-tests.md) -Other Pages ---------------------- +### Resources +* Discuss on the [BitcoinTalk](https://bitcointalk.org/) forums, in the [Development & Technical Discussion board](https://bitcointalk.org/index.php?board=6.0). +* Discuss on [#bitcoin-dev](http://webchat.freenode.net/?channels=bitcoin) on Freenode. If you don't have an IRC client use [webchat here](http://webchat.freenode.net/?channels=bitcoin-dev). + +### Miscellaneous - [Assets Attribution](assets-attribution.md) - [Files](files.md) -- [Tor Support](tor.md) \ No newline at end of file +- [Tor Support](tor.md) + +License +--------------------- +Distributed under the [MIT/X11 software license](http://www.opensource.org/licenses/mit-license.php). +This product includes software developed by the OpenSSL Project for use in the [OpenSSL Toolkit](http://www.openssl.org/). This product includes +cryptographic software written by Eric Young ([eay@cryptsoft.com](mailto:eay@cryptsoft.com)), and UPnP software written by Thomas Bernard. diff --git a/doc/README_osx.txt b/doc/README_osx.txt new file mode 100644 index 00000000..2be56c15 --- /dev/null +++ b/doc/README_osx.txt @@ -0,0 +1,75 @@ +Deterministic OSX Dmg Notes. + +Working OSX DMG's are created in Linux by combining a recent clang, +the Apple's binutils (ld, ar, etc), and DMG authoring tools. + +Apple uses clang extensively for development and has upstreamed the necessary +functionality so that a vanilla clang can take advantage. It supports the use +of -F, -target, -mmacosx-version-min, and --sysroot, which are all necessary +when building for OSX. A pre-compiled version of 3.2 is used because it was not +available in the Precise repositories at the time this work was started. In the +future, it can be switched to use system packages instead. + +Apple's version of binutils (called cctools) contains lots of functionality +missing in the FSF's binutils. In addition to extra linker options for +frameworks and sysroots, several other tools are needed as well such as +install_name_tool, lipo, and nmedit. These do not build under linux, so they +have been patched to do so. The work here was used as a starting point: +https://github.com/mingwandroid/toolchain4 + +In order to build a working toolchain, the following source packages are needed +from Apple: cctools, dyld, and ld64. + +Beware. This part is ugly. Very very very ugly. In the future, this should be +broken out into a new repository and cleaned up. Additionally, the binaries +only work when built as x86 and not x86_64. This is an especially nasty +limitation because it must be linked with the toolchain's libLTO.so, meaning +that the entire toolchain must be x86. Gitian x86_64 should not be used until +this has been fixed, because it would mean that several native dependencies +(openssl, libuuid, etc) would need to be built as x86 first. + +These tools inject timestamps by default, which produce non-deterministic +binaries. The ZERO_AR_DATE environment variable is used to disable that. + +This version of cctools has been patched to use the current version of clang's +headers and and its libLTO.so rather than those from llvmgcc, as it was +originally done in toolchain4. + +To complicate things further, all builds must target an Apple SDK. These SDKs +are free to download, but not redistributable. +To obtain it, register for a developer account, then download xcode4630916281a.dmg: +https://developer.apple.com/downloads/download.action?path=Developer_Tools/xcode_4.6.3/xcode4630916281a.dmg +This file is several gigabytes in size, but only a single directory inside is +needed: Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk + +Unfortunately, the usual linux tools (7zip, hpmount, loopback mount) are incapable of opening this file. +To create a tarball suitable for gitian input, mount the dmg in OSX, then create it with: + $ tar -C /Volumes/Xcode/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/ -czf MacOSX10.7.sdk.tar.gz MacOSX10.7.sdk + + +The gitian descriptors build 2 sets of files: Linux tools, then Apple binaries +which are created using these tools. The build process has been designed to +avoid including the SDK's files in Gitian's outputs. All interim tarballs are +fully deterministic and may be freely redistributed. + +genisoimage is used to create the initial DMG. It is not deterministic as-is, +so it has been patched. A system genisoimage will work fine, but it will not +be deterministic because the file-order will change between invocations. +The patch can be seen here: +https://raw.githubusercontent.com/theuni/osx-cross-depends/master/patches/cdrtools/genisoimage.diff +No effort was made to fix this cleanly, so it likely leaks memory badly. But +it's only used for a single invocation, so that's no real concern. + +genisoimage cannot compress DMGs, so afterwards, the 'dmg' tool from the +libdmg-hfsplus project is used to compress it. There are several bugs in this +tool and its maintainer has seemingly abandoned the project. It has been forked +and is available (with fixes) here: https://github.com/theuni/libdmg-hfsplus . + +The 'dmg' tool has the ability to create DMG's from scratch as well, but this +functionality is broken. Only the compression feature is currently used. +Ideally, the creation could be fixed and genisoimage would no longer be necessary. + +Background images and other features can be added to DMG files by inserting a +.DS_Store before creation. The easiest way to create this file is to build a +DMG without one, move it to a device running OSX, customize the layout, then +grab the .DS_Store file for later use. That is the approach taken here. diff --git a/doc/README_windows.txt b/doc/README_windows.txt index b26fab3b..28b2772d 100644 --- a/doc/README_windows.txt +++ b/doc/README_windows.txt @@ -1,6 +1,7 @@ -Bitcoin 0.8.2 BETA +Bitcoin 0.9.2 BETA + +Copyright (c) 2009-2014 Bitcoin Core Developers -Copyright (c) 2009-2013 Bitcoin Developers Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. This product includes software developed by the OpenSSL Project for use in @@ -20,7 +21,7 @@ Setup ----- Unpack the files into a directory and run bitcoin-qt.exe. -Bitcoin-Qt is the original Bitcoin client and it builds the backbone of the network. +Bitcoin Core is the original Bitcoin client and it builds the backbone of the network. However, it downloads and stores the entire history of Bitcoin transactions; depending on the speed of your computer and network connection, the synchronization process can take anywhere from a few hours to a day or more. diff --git a/doc/Tor.txt b/doc/Tor.txt deleted file mode 100644 index 386e3b54..00000000 --- a/doc/Tor.txt +++ /dev/null @@ -1,92 +0,0 @@ -TOR SUPPORT IN BITCOIN -====================== - -It is possible to run Bitcoin as a Tor hidden service, and connect to such services. - -The following directions assume you have a Tor proxy running on port 9050. Many distributions -default to having a SOCKS proxy listening on port 9050, but others may not. -In particular, the Tor Browser Bundle defaults to listening on a random port. See -https://www.torproject.org/docs/faq.html.en#TBBSocksPort for how to properly -configure Tor. - - -1. Run bitcoin behind a Tor proxy ---------------------------------- - -The first step is running Bitcoin behind a Tor proxy. This will already make all -outgoing connections be anonimized, but more is possible. - --socks=5 SOCKS5 supports connecting-to-hostname, which can be used instead - of doing a (leaking) local DNS lookup. SOCKS5 is the default, - but SOCKS4 does not support this. (SOCKS4a does, but isn't - implemented). - --proxy=ip:port Set the proxy server. If SOCKS5 is selected (default), this proxy - server will be used to try to reach .onion addresses as well. - --tor=ip:port Set the proxy server to use for tor hidden services. You do not - need to set this if it's the same as -proxy. You can use -notor - to explicitly disable access to hidden service. - --listen When using -proxy, listening is disabled by default. If you want - to run a hidden service (see next section), you'll need to enable - it explicitly. - --connect=X When behind a Tor proxy, you can specify .onion addresses instead --addnode=X of IP addresses or hostnames in these parameters. It requires --seednode=X SOCKS5. In Tor mode, such addresses can also be exchanged with - other P2P nodes. - -In a typical situation, this suffices to run behind a Tor proxy: - - ./bitcoin -proxy=127.0.0.1:9050 - - -2. Run a bitcoin hidden server ------------------------------- - -If you configure your Tor system accordingly, it is possible to make your node also -reachable from the Tor network. Add these lines to your /etc/tor/torrc (or equivalent -config file): - - HiddenServiceDir /var/lib/tor/bitcoin-service/ - HiddenServicePort 8333 127.0.0.1:8333 - -The directory can be different of course, but (both) port numbers should be equal to -your bitcoind's P2P listen port (8333 by default). - --externalip=X You can tell bitcoin about its publicly reachable address using - this option, and this can be a .onion address. Given the above - configuration, you can find your onion address in - /var/lib/tor/bitcoin-service/hostname. Onion addresses are given - preference for your node to advertize itself with, for connections - coming from unroutable addresses (such as 127.0.0.1, where the - Tor proxy typically runs). - --listen You'll need to enable listening for incoming connections, as this - is off by default behind a proxy. - --discover When -externalip is specified, no attempt is made to discover local - IPv4 or IPv6 addresses. If you want to run a dual stack, reachable - from both Tor and IPv4 (or IPv6), you'll need to either pass your - other addresses using -externalip, or explicitly enable -discover. - Note that both addresses of a dual-stack system may be easily - linkable using traffic analysis. - -In a typical situation, where you're only reachable via Tor, this should suffice: - - ./bitcoind -proxy=127.0.0.1:9050 -externalip=57qr3yd1nyntf5k.onion -listen - -(obviously, replace the Onion address with your own). If you don't care too much -about hiding your node, and want to be reachable on IPv4 as well, additionally -specify: - - ./bitcoind ... -discover - -and open port 8333 on your firewall (or use -upnp). - -If you only want to use Tor to reach onion addresses, but not use it as a proxy -for normal IPv4/IPv6 communication, use: - - ./bitcoin -tor=127.0.0.1:9050 -externalip=57qr3yd1nyntf5k.onion -discover - diff --git a/doc/assets-attribution.md b/doc/assets-attribution.md index e85e7452..61b457a2 100644 --- a/doc/assets-attribution.md +++ b/doc/assets-attribution.md @@ -4,29 +4,29 @@ The following is a list of assets used in the bitcoin source and their proper at ----------------------- #### Info * License: MIT + ### Assets Used + src/qt/res/icons/clock*.png, src/qt/res/icons/tx*.png, + src/qt/res/src/clock_green.svg, src/qt/res/src/clock1.svg, + src/qt/res/src/clock2.svg, src/qt/res/src/clock3.svg, + src/qt/res/src/clock4.svg, src/qt/res/src/clock5.svg, + src/qt/res/src/inout.svg, src/qt/res/src/questionmark.svg - src/qt/res/icons/clock*.png, src/qt/res/icons/tx*.png, - src/qt/res/src/clock_green.svg, src/qt/res/src/clock1.svg, - src/qt/res/src/clock2.svg, src/qt/res/src/clock3.svg, - src/qt/res/src/clock4.svg, src/qt/res/src/clock5.svg, - src/qt/res/src/inout.svg, src/qt/res/src/questionmark.svg - -[David Vignoni](www.icon-king.com) +[David Vignoni](http://www.icon-king.com) ----------------------- ### Info * Icon Pack: NUVOLA ICON THEME for KDE 3.x * Designer: David Vignoni (david@icon-king.com) * License: LGPL -* Site: [http://www.icon-king.com/projects/nuvola/](http://www.icon-king.com/projects/nuvola/) +* Site: [http://www.icon-king.com/projects/nuvola](http://www.icon-king.com/projects/nuvola) ### Assets Used - src/qt/res/icons/address-book.png, src/qt/res/icons/export.png, - src/qt/res/icons/history.png, src/qt/res/icons/key.png, - src/qt/res/icons/lock_*.png, src/qt/res/icons/overview.png, - src/qt/res/icons/receive.png, src/qt/res/icons/send.png, - src/qt/res/icons/synced.png, src/qt/res/icons/filesave.png + src/qt/res/icons/address-book.png, src/qt/res/icons/export.png, + src/qt/res/icons/history.png, src/qt/res/icons/key.png, + src/qt/res/icons/lock_*.png, src/qt/res/icons/overview.png, + src/qt/res/icons/receive.png, src/qt/res/icons/send.png, + src/qt/res/icons/synced.png, src/qt/res/icons/filesave.png schollidesign ----------------------- @@ -38,17 +38,16 @@ schollidesign * Site: [http://findicons.com/icon/93743/blocks_gnome_netstatus_0](http://findicons.com/icon/93743/blocks_gnome_netstatus_0) ### Assets Used - src/qt/res/icons/connect*.png + src/qt/res/icons/connect*.png md2k7 ----------------------- ### Info * Designer: md2k7 -* Site: https://bitcointalk.org/index.php?topic=15276.0 -* License: You are free to do with these icons as you wish, including selling, - copying, modifying etc. +* License: You are free to do with these icons as you wish, including selling, copying, modifying etc. * License: MIT +* Site: [https://bitcointalk.org/index.php?topic=15276.0](https://bitcointalk.org/index.php?topic=15276.0) ### Assets Used src/qt/res/icons/transaction*.png @@ -57,15 +56,15 @@ md2k7 ----------------------- ### Info -* Designer: [http://www.everaldo.com](http://www.everaldo.com) * Icon Pack: Crystal SVG +* Designer: [http://www.everaldo.com](http://www.everaldo.com) * License: LGPL ### Assets Used src/qt/res/icons/configure.png, src/qt/res/icons/quit.png, - src/qt/res/icons/editcopy.png, src/qt/res/icons/editpaste.png, - src/qt/res/icons/add.png, src/qt/res/icons/edit.png, - src/qt/res/icons/remove.png (edited) + src/qt/res/icons/editcopy.png, src/qt/res/icons/editpaste.png, + src/qt/res/icons/add.png, src/qt/res/icons/edit.png, + src/qt/res/icons/remove.png (edited) Everaldo (Everaldo Coelho) ----------------------- @@ -75,16 +74,17 @@ Everaldo (Everaldo Coelho) * Designer: Everaldo (Everaldo Coelho) * License: GNU/GPL * Site: [http://findicons.com/icon/17102/reload?id=17102](http://findicons.com/icon/17102/reload?id=17102) -### Assets Used - scripts/img/reload.xcf (modified), src/qt/res/movies/update_spinner.mng -[Vignoni David](http://www.oxygen-icons.org/) +### Assets Used + scripts/img/reload.xcf (modified), src/qt/res/movies/*.png + +[Vignoni David](http://techbase.kde.org/Projects/Oxygen) ----------------------- ### Info * Designer: Vignoni David -* Site: http://www.oxygen-icons.org/ * License: Oxygen icon theme is dual licensed. You may copy it under the Creative Common Attribution-ShareAlike 3.0 License or the GNU Library General Public License. +* Site: [http://techbase.kde.org/Projects/Oxygen](http://techbase.kde.org/Projects/Oxygen) ### Assets Used src/qt/res/icons/debugwindow.png @@ -101,4 +101,4 @@ Jonas Schnelli src/qt/res/src/bitcoin.ico, src/qt/res/src/bitcoin.png, src/qt/res/src/bitcoin_testnet.png, docs/bitcoin_logo_doxygen.png, src/qt/res/icons/toolbar.png, src/qt/res/icons/toolbar_testnet.png, - src/qt/res/images/splash.png, src/qt/res/images/splash_testnet.png \ No newline at end of file + src/qt/res/images/splash.png, src/qt/res/images/splash_testnet.png diff --git a/doc/assets-attribution.txt b/doc/assets-attribution.txt deleted file mode 100644 index 2069c5d6..00000000 --- a/doc/assets-attribution.txt +++ /dev/null @@ -1,58 +0,0 @@ -Icon: src/qt/res/icons/clock*.png, src/qt/res/icons/tx*.png, - src/qt/res/src/clock_green.svg, src/qt/res/src/clock1.svg, - src/qt/res/src/clock2.svg, src/qt/res/src/clock3.svg, - src/qt/res/src/clock4.svg, src/qt/res/src/clock5.svg, - src/qt/res/src/inout.svg, src/qt/res/src/questionmark.svg -Designer: Wladimir van der Laan -License: MIT - -Icon: src/qt/res/icons/address-book.png, src/qt/res/icons/export.png, - src/qt/res/icons/history.png, src/qt/res/icons/key.png, - src/qt/res/icons/lock_*.png, src/qt/res/icons/overview.png, - src/qt/res/icons/receive.png, src/qt/res/icons/send.png, - src/qt/res/icons/synced.png, src/qt/res/icons/filesave.png -Icon Pack: NUVOLA ICON THEME for KDE 3.x -Designer: David Vignoni (david@icon-king.com) - ICON KING - www.icon-king.com -License: LGPL -Site: http://www.icon-king.com/projects/nuvola/ - -Icon: src/qt/res/icons/connect*.png -Icon Pack: Human-O2 -Designer: schollidesign -License: GNU/GPL -Site: http://findicons.com/icon/93743/blocks_gnome_netstatus_0 - -Icon: src/qt/res/icons/transaction*.png -Designer: md2k7 -Site: https://bitcointalk.org/index.php?topic=15276.0 -License: You are free to do with these icons as you wish, including selling, - copying, modifying etc. -License: MIT - -Icon: src/qt/res/icons/configure.png, src/qt/res/icons/quit.png, - src/qt/res/icons/editcopy.png, src/qt/res/icons/editpaste.png, - src/qt/res/icons/add.png, src/qt/res/icons/edit.png, - src/qt/res/icons/remove.png (edited) -Designer: http://www.everaldo.com -Icon Pack: Crystal SVG -License: LGPL - -Icon: scripts/img/reload.xcf (modified), src/qt/res/movies/update_spinner.mng -Icon Pack: Kids -Designer: Everaldo (Everaldo Coelho) -License: GNU/GPL -Site: http://findicons.com/icon/17102/reload?id=17102 - -Icon: src/qt/res/icons/debugwindow.png -Designer: Vignoni David -Site: http://www.oxygen-icons.org/ -License: Oxygen icon theme is dual licensed. You may copy it under the Creative Common Attribution-ShareAlike 3.0 License or the GNU Library General Public License. - -Icon: src/qt/res/icons/bitcoin.icns, src/qt/res/src/bitcoin.svg, - src/qt/res/src/bitcoin.ico, src/qt/res/src/bitcoin.png, - src/qt/res/src/bitcoin_testnet.png, docs/bitcoin_logo_doxygen.png, - src/qt/res/icons/toolbar.png, src/qt/res/icons/toolbar_testnet.png, - src/qt/res/images/splash.png, src/qt/res/images/splash_testnet.png -Designer: Jonas Schnelli (based on the original bitcoin logo from Bitboy) -License: MIT diff --git a/doc/bitcoin_logo_doxygen.png b/doc/bitcoin_logo_doxygen.png index 2d62a8dc..258be86e 100644 Binary files a/doc/bitcoin_logo_doxygen.png and b/doc/bitcoin_logo_doxygen.png differ diff --git a/doc/bootstrap.md b/doc/bootstrap.md new file mode 100644 index 00000000..685b768f --- /dev/null +++ b/doc/bootstrap.md @@ -0,0 +1,66 @@ +### Bootstrap the Blockchain Synchronization + +Normally the Bitcoin client will download the transaction and network information, called the blockchain, from the network by syncing with the other clients. This can be a process that can take multiple days as the [Bitcoin block chain](https://blockchain.info/charts/blocks-size) has grown to more than 15 gigabytes, and is growing almost a gigabyte every month. Luckily there is a safe and fast way to speed up this process. We’ll show you how to bootstrap your blockchain to bring your client up to speed in just a few simple steps. + +### Requirements + +A fresh install of the Bitcoin client software. + +### Download the blockchain via Bittorent + +Jeff Garzik, Bitcoin core developer, offers an [torrent file](https://bitcointalk.org/index.php?topic=145386.0) for bootstrapping purposes that is updated often. Bittorrent is a protocol that speeds up the downloading of large files by using the other clients in the network. Examples of free and safe open-source clients are [Deluge](http://deluge-torrent.org/) or [QBittorent](http://www.qbittorrent.org/). A guide to installing and configuring the torrent clients can be found [here](http://dev.deluge-torrent.org/wiki/UserGuide) for Deluge and [here](http://qbforums.shiki.hu/) for QBittorent. A further in-depth tutorial on Bittorent can be found [here](http://www.howtogeek.com/howto/31846/bittorrent-for-beginners-how-get-started-downloading-torrents/). + +With the client installed we’ll proceed to download the blockchain torrent file. Use the following magnet link: + + magnet:?xt=urn:btih:2d4e6c1f96c5d5fb260dff92aea4e600227f1aea&dn=bootstrap.dat&tr=udp://tracker.openbittorrent.com:80&tr=udp://tracker.publicbt.com:80&tr=udp://tracker.ccc.de:80&tr=udp://tracker.istole.it:80 + + or go to [Jeff Garzik's topic](https://bitcointalk.org/index.php?topic=145386.0) for a signed magnet link. Alternately you can use the [.torrent file](http://sourceforge.net/projects/bitcoin/files/Bitcoin/blockchain/bootstrap.dat.torrent/download) found on Sourceforge. + +![Fig1](img/bootstrap1.png) + +The download page should look like this, with a countdown to the download. If it does not work click the direct download link. + +The torrent client installed will recognize the download of the torrent file. Save the bootstrap.dat file to a folder you use for downloads. The image below shows the torrent download in QBittorent, with current speed and ETA highlighted. + +![Fig2](img/bootstrap2.png) + +### Download the block chain directly from official repositories +The Bittorent version, see above, of the block chain download is refreshed more often than the direct download available. If Bittorent is blocked on your network then you can use the direct download method. Be sure to only use official repositories as the link displayed below. This download will only update the client to March 2013. + +Click [here](http://sourceforge.net/projects/bitcoin/files/Bitcoin/blockchain/bitcoin_blockchain_170000.zip/download) to download or copy and paste the link below. + + http://sourceforge.net/projects/bitcoin/files/Bitcoin/blockchain/bitcoin_blockchain_170000.zip/download + +The download page should look like this, with a countdown to the download. If it does not work directly click the download. Save the file to a folder you use for downloads. +![Fig3](img/bootstrap3.png) + +### Importing the blockchain +Exit the Bitcoin Client software if you have it running. Be sure not to have an actively used wallet in use. We are going to copy the download of the blockchain to the Bitcoin client data directory. You should run the client software at least once so it can generate the data directory. Copy the downloaded bootstrap.dat file into the Bitcoin data folder. + +**For Windows users:** +Open explorer, and type into the address bar: + + %APPDATA%\Bitcoin + +This will open up the data folder. It should look like the image below. Copy over the bootstrap.dat from your download folder to this directory. +![Fig4](img/bootstrap4.png) + +**For OSX users:** +Open Finder by pressing Press [shift] + [cmd] + [g] and enter: + + ~/Library/Application Support/Bitcoin/ + +**For Linux users:** +The directory is hidden in your User folder. Go to: + + ~/.bitcoin/ + +### Importing the blockchain +Now start the Bitcoin client software. It should show "Importing blocks from disk" like the image below. +![Fig5](img/bootstrap5.png) + +Wait until the import finishes. The client will download the last days not covered by the import. Congratulations you have successfully imported the blockchain! + +### Is this safe? + +Yes, the above method is safe. The download contains only raw block chain data and the client verifies this on import. Do not download the blockchain from unofficial sources, especially if they provide `*.rev` and `*.sst` files. These files are not verified and can contain malicious edits. diff --git a/doc/build-msw.md b/doc/build-msw.md index d348ad7c..9e4eaee3 100644 --- a/doc/build-msw.md +++ b/doc/build-msw.md @@ -1,8 +1,6 @@ WINDOWS BUILD NOTES =================== -See [readme-qt.md](readme-qt.md) for instructions on building Bitcoin-Qt, the -graphical user interface. Compilers Supported ------------------- @@ -57,7 +55,7 @@ MSYS shell: Boost ----- -DOS prompt: +MSYS shell: downloaded boost jam 3.1.18 cd \boost-1.50.0-mgw @@ -76,8 +74,10 @@ MSYS shell: Bitcoin ------- -DOS prompt: +MSYS shell: - cd \bitcoin\src - mingw32-make -f makefile.mingw + cd \bitcoin + sh autogen.sh + sh configure + mingw32-make strip bitcoind.exe diff --git a/doc/build-osx.md b/doc/build-osx.md index 271f8f55..0de5c792 100644 --- a/doc/build-osx.md +++ b/doc/build-osx.md @@ -5,10 +5,9 @@ This guide will show you how to build bitcoind(headless client) for OSX. Notes ----- -* See [readme-qt.md](readme-qt.md) for instructions on building Bitcoin-Qt, the -graphical user interface. -* Tested on OS X 10.5 through 10.8 on Intel processors only. PPC is not -supported because it is big-endian. +* Tested on OS X 10.6 through 10.9 on 64-bit Intel processors only. +Older OSX releases or 32-bit processors are no longer supported. + * All of the commands should be executed in a Terminal application. The built-in one is located in `/Applications/Utilities`. @@ -29,7 +28,7 @@ not, it's the path of least resistance to install [Github for Mac](https://mac.g [Git for OS X](https://code.google.com/p/git-osx-installer/). It is also available via Homebrew or MacPorts. -You will also need to install [Homebrew](http://mxcl.github.io/homebrew/) +You will also need to install [Homebrew](http://brew.sh) or [MacPorts](https://www.macports.org/) in order to install library dependencies. It's largely a religious decision which to choose, but, as of December 2012, MacPorts is a little easier because you can just install the @@ -47,7 +46,11 @@ Instructions: MacPorts Installing the dependencies using MacPorts is very straightforward. - sudo port install boost db48@+no_java openssl miniupnpc + sudo port install boost db48@+no_java openssl miniupnpc autoconf pkgconfig automake + +Optional: install Qt4 + + sudo port install qt4-mac qrencode protobuf-cpp ### Building `bitcoind` @@ -56,89 +59,83 @@ Installing the dependencies using MacPorts is very straightforward. git clone git@github.com:bitcoin/bitcoin.git bitcoin cd bitcoin -2. Build bitcoind: +2. Build bitcoind (and Bitcoin-Qt, if configured): - cd src - make -f makefile.osx + ./autogen.sh + ./configure + make 3. It is a good idea to build and run the unit tests, too: - make -f makefile.osx test + make check -Instructions: HomeBrew +Instructions: Homebrew ---------------------- #### Install dependencies using Homebrew - brew install boost miniupnpc openssl berkeley-db4 + brew install autoconf automake berkeley-db4 boost miniupnpc openssl pkg-config protobuf qt -Note: After you have installed the dependencies, you should check that the Brew installed version of OpenSSL is the one available for compilation. You can check this by typing +Note: After you have installed the dependencies, you should check that the Homebrew installed version of OpenSSL is the one available for compilation. You can check this by typing openssl version -into Terminal. You should see OpenSSL 1.0.1e 11 Feb 2013. +into Terminal. You should see OpenSSL 1.0.1f 6 Jan 2014. -If not, you can ensure that the Brew OpenSSL is correctly linked by running +If not, you can ensure that the Homebrew OpenSSL is correctly linked by running brew link openssl --force -Rerunning "openssl version" should now return the correct version. +Rerunning "openssl version" should now return the correct version. If it +doesn't, make sure `/usr/local/bin` comes before `/usr/bin` in your +PATH. ### Building `bitcoind` 1. Clone the github tree to get the source code and go into the directory. - git clone git@github.com:bitcoin/bitcoin.git bitcoin + git clone https://github.com/bitcoin/bitcoin.git cd bitcoin -2. Modify source in order to pick up the `openssl` library. +2. Build bitcoind: - Edit `makefile.osx` to account for library location differences. There's a - diff in `contrib/homebrew/makefile.osx.patch` that shows what you need to - change, or you can just patch by doing + ./autogen.sh + ./configure + make - patch -p1 < contrib/homebrew/makefile.osx.patch +3. It is a good idea to build and run the unit tests, too: -3. Build bitcoind: - - cd src - make -f makefile.osx - -4. It is a good idea to build and run the unit tests, too: - - make -f makefile.osx test + make check Creating a release build ------------------------ +You can ignore this section if you are building `bitcoind` for your own use. -A bitcoind binary is not included in the Bitcoin-Qt.app bundle. 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. -If you are building `bitcoind` for others, your build machine should be set up +If you are building `bitcoind` or `Bitcoin-Qt` for others, your build machine should be set up as follows for maximum compatibility: All dependencies should be compiled with these flags: - -mmacosx-version-min=10.5 -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk + -mmacosx-version-min=10.6 + -arch x86_64 + -isysroot $(xcode-select --print-path)/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.6.sdk For MacPorts, that means editing your macports.conf and setting `macosx_deployment_target` and `build_arch`: - macosx_deployment_target=10.5 - build_arch=i386 + macosx_deployment_target=10.6 + build_arch=x86_64 ... and then uninstalling and re-installing, or simply rebuilding, all ports. As of December 2012, the `boost` port does not obey `macosx_deployment_target`. Download `http://gavinandresen-bitcoin.s3.amazonaws.com/boost_macports_fix.zip` -for a fix. Some ports also seem to obey either `build_arch` or -`macosx_deployment_target`, but not both at the same time. For example, building -on an OS X 10.6 64-bit machine fails. Official release builds of Bitcoin-Qt are -compiled on an OS X 10.6 32-bit machine to workaround that problem. +for a fix. -Once dependencies are compiled, creating `Bitcoin-Qt.app` is easy: - - make -f Makefile.osx RELEASE=1 +Once dependencies are compiled, see release-process.md for how the Bitcoin-Qt.app +bundle is packaged and signed to create the .dmg disk image that is distributed. Running ------- @@ -153,10 +150,13 @@ commands: chmod 600 "/Users/${USER}/Library/Application Support/Bitcoin/bitcoin.conf" When next you run it, it will start downloading the blockchain, but it won't -output anything while it's doing this. This process may take several hours. +output anything while it's doing this. This process may take several hours; +you can monitor its process by looking at the debug.log file, like this: + + tail -f $HOME/Library/Application\ Support/Bitcoin/debug.log Other commands: - ./bitcoind --help # for a list of command-line options. ./bitcoind -daemon # to start the bitcoin daemon. - ./bitcoind help # When the daemon is running, to get a list of RPC commands + ./bitcoin-cli --help # for a list of command-line options. + ./bitcoin-cli help # When the daemon is running, to get a list of RPC commands diff --git a/doc/build-unix.md b/doc/build-unix.md index 4653bba4..ab5fbad5 100644 --- a/doc/build-unix.md +++ b/doc/build-unix.md @@ -5,32 +5,32 @@ Some notes on how to build Bitcoin in Unix. To Build --------------------- - cd src/ - make -f makefile.unix # Headless bitcoin + ./autogen.sh + ./configure + make -See [readme-qt.md](readme-qt.md) for instructions on building Bitcoin-Qt, the graphical user interface. +This will build bitcoin-qt as well if the dependencies are met. Dependencies --------------------- - Library Purpose Description - ------- ------- ----------- - libssl SSL Support Secure communications - libdb4.8 Berkeley DB Blockchain & wallet storage - libboost Boost C++ Library - miniupnpc UPnP Support Optional firewall-jumping support + Library | Purpose | Description + ------------|------------------|---------------------- + libssl | SSL Support | Secure communications + libdb4.8 | Berkeley DB | Wallet storage + libboost | Boost | C++ Library + miniupnpc | UPnP Support | Optional firewall-jumping support + qt | GUI | GUI toolkit + protobuf | Payments in GUI | Data interchange format used for payment protocol + libqrencode | QR codes in GUI | Optional for generating QR codes [miniupnpc](http://miniupnp.free.fr/) may be used for UPnP port mapping. It can be downloaded from [here]( http://miniupnp.tuxfamily.org/files/). UPnP support is compiled in and -turned off by default. Set USE_UPNP to a different value to control this: +turned off by default. See the configure options for upnp behavior desired: - USE_UPNP= No UPnP support miniupnp not required - USE_UPNP=0 (the default) UPnP support turned off by default at runtime - USE_UPNP=1 UPnP support turned on by default at runtime - -IPv6 support may be disabled by setting: - - USE_IPV6=0 Disable IPv6 support + --without-miniupnpc No UPnP support miniupnp not required + --disable-upnp-default (the default) UPnP support turned off by default at runtime + --enable-upnp-default UPnP support turned on by default at runtime Licenses of statically linked libraries: Berkeley DB New BSD license with additional requirement that linked @@ -38,55 +38,82 @@ Licenses of statically linked libraries: Boost MIT-like license miniupnpc New (3-clause) BSD license -- Versions used in this release: -- GCC 4.3.3 -- OpenSSL 1.0.1c -- Berkeley DB 4.8.30.NC -- Boost 1.37 -- miniupnpc 1.6 +- For the versions used in the release, see doc/release-process.md under *Fetch and build inputs*. + +System requirements +-------------------- + +C++ compilers are memory-hungry. It is recommended to have at least 1 GB of +memory available when compiling Bitcoin Core. With 512MB of memory or less +compilation will take much longer due to swap thrashing. Dependency Build Instructions: Ubuntu & Debian ---------------------------------------------- Build requirements: sudo apt-get install build-essential + sudo apt-get install libtool autotools-dev autoconf sudo apt-get install libssl-dev -for Ubuntu 12.04: +for Ubuntu 12.04 and later: sudo apt-get install libboost-all-dev db4.8 packages are available [here](https://launchpad.net/~bitcoin/+archive/bitcoin). + You can add the repository using the following command: - Ubuntu precise has packages for libdb5.1-dev and libdb5.1++-dev, + sudo add-apt-repository ppa:bitcoin/bitcoin + sudo apt-get update + + Ubuntu 12.04 and later have packages for libdb5.1-dev and libdb5.1++-dev, but using these will break binary wallet compatibility, and is not recommended. +for Ubuntu 13.10: + libboost1.54 will not work, + remove libboost1.54-all-dev and install libboost1.53-all-dev instead. + +for Debian 7 (Wheezy) and later: + The oldstable repository contains db4.8 packages. + Add the following line to /etc/apt/sources.list, + replacing [mirror] with any official debian mirror. + + deb http://[mirror]/debian/ oldstable main + +To enable the change run + + sudo apt-get update + for other Ubuntu & Debian: sudo apt-get install libdb4.8-dev sudo apt-get install libdb4.8++-dev - sudo apt-get install libboost1.37-dev - (If using Boost 1.37, append -mt to the boost libraries in the makefile) Optional: - sudo apt-get install libminiupnpc-dev (see USE_UPNP compile flag) + sudo apt-get install libminiupnpc-dev (see --with-miniupnpc and --enable-upnp-default) +Dependencies for the GUI: Ubuntu & Debian +----------------------------------------- -Dependency Build Instructions: Gentoo -------------------------------------- +If you want to build Bitcoin-Qt, make sure that the required packages for Qt development +are installed. Either Qt 4 or Qt 5 are necessary to build the GUI. +If both Qt 4 and Qt 5 are installed, Qt 4 will be used. Pass `--with-gui=qt5` to configure to choose Qt5. +To build without GUI pass `--without-gui`. -Note: If you just want to install bitcoind on Gentoo, you can add the Bitcoin overlay and use your package manager: +To build with Qt 4 you need the following: - layman -a bitcoin && emerge bitcoind - emerge -av1 --noreplace boost glib openssl sys-libs/db:4.8 + sudo apt-get install libqt4-dev libprotobuf-dev protobuf-compiler -Take the following steps to build (no UPnP support): +For Qt 5 you need the following: - cd ${BITCOIN_DIR}/src - make -f makefile.unix USE_UPNP= USE_IPV6=1 BDB_INCLUDE_PATH='/usr/include/db4.8' - strip bitcoind + sudo apt-get install libqt5gui5 libqt5core5 libqt5dbus5 qttools5-dev qttools5-dev-tools libprotobuf-dev +libqrencode (optional) can be installed with: + + sudo apt-get install libqrencode-dev + +Once these are installed, they will be found by configure and a bitcoin-qt executable will be +built by default. Notes ----- @@ -105,11 +132,33 @@ miniupnpc Berkeley DB ----------- -You need Berkeley DB 4.8. If you have to build Berkeley DB yourself: +It is recommended to use Berkeley DB 4.8. If you have to build it yourself: - ../dist/configure --enable-cxx - make +```bash +BITCOIN_ROOT=$(pwd) +# Pick some path to install BDB to, here we create a directory within the bitcoin directory +BDB_PREFIX="${BITCOIN_ROOT}/db4" +mkdir -p $BDB_PREFIX + +# Fetch the source and verify that it is not tampered with +wget 'http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz' +echo '12edc0df75bf9abd7f82f821795bcee50f42cb2e5f76a6a281b85732798364ef db-4.8.30.NC.tar.gz' | sha256sum -c +# -> db-4.8.30.NC.tar.gz: OK +tar -xzvf db-4.8.30.NC.tar.gz + +# Build the library and install to our prefix +cd db-4.8.30.NC/build_unix/ +# Note: Do a static build so that it can be embedded into the exectuable, instead of having to find a .so at runtime +../dist/configure --enable-cxx --disable-shared --with-pic --prefix=$BDB_PREFIX +make install + +# Configure Bitcoin Core to use our own-built instance of BDB +cd $BITCOIN_ROOT +./configure (other args...) LDFLAGS="-L${BDB_PREFIX}/lib/" CPPFLAGS="-I${BDB_PREFIX}/include/" +``` + +**Note**: You only need Berkeley DB if the wallet is enabled (see the section *Disable-Wallet mode* below). Boost ----- @@ -123,7 +172,16 @@ If you need to build Boost yourself: Security -------- To help make your bitcoin installation more secure by making certain attacks impossible to -exploit even if a vulnerability is found, you can take the following measures: +exploit even if a vulnerability is found, binaries are hardened by default. +This can be disabled with: + +Hardening Flags: + + ./configure --enable-hardening + ./configure --disable-hardening + + +Hardening enables the following features: * Position Independent Executable Build position independent code to take advantage of Address Space Layout Randomization @@ -135,10 +193,6 @@ exploit even if a vulnerability is found, you can take the following measures: On an Amd64 processor where a library was not compiled with -fPIC, this will cause an error such as: "relocation R_X86_64_32 against `......' can not be used when making a shared object;" - To build with PIE, use: - - make -f makefile.unix ... -e PIE=1 - To test that you have built PIE executable, install scanelf, part of paxutils, and use: scanelf -e ./bitcoin @@ -162,3 +216,16 @@ exploit even if a vulnerability is found, you can take the following measures: RW- R-- RW- The STK RW- means that the stack is readable and writeable but not executable. + +Disable-wallet mode +-------------------- +When the intention is to run only a P2P node without a wallet, bitcoin may be compiled in +disable-wallet mode with: + + ./configure --disable-wallet + +In this case there is no dependency on Berkeley DB 4.8. + +Mining is also possible in disable-wallet mode, but only using the `getblocktemplate` RPC +call not `getwork`. + diff --git a/doc/coding.md b/doc/coding.md index 3581d7de..69388c9c 100644 --- a/doc/coding.md +++ b/doc/coding.md @@ -43,8 +43,61 @@ Common types: set set or multiset bn CBigNum -------------------------- +Doxygen comments +----------------- + +To facilitate the generation of documentation, use doxygen-compatible comment blocks for functions, methods and fields. + +For example, to describe a function use: +```c++ +/** + * ... text ... + * @param[in] arg1 A description + * @param[in] arg2 Another argument description + * @pre Precondition for function... + */ +bool function(int arg1, const char *arg2) +``` +A complete list of `@xxx` commands can be found at http://www.stack.nl/~dimitri/doxygen/manual/commands.html. +As Doxygen recognizes the comments by the delimiters (`/**` and `*/` in this case), you don't +*need* to provide any commands for a comment to be valid, just a description text is fine. + +To describe a class use the same construct above the class definition: +```c++ +/** + * Alerts are for notifying old versions if they become too obsolete and + * need to upgrade. The message is displayed in the status bar. + * @see GetWarnings() + */ +class CAlert +{ +``` + +To describe a member or variable use: +```c++ +int var; //!< Detailed description after the member +``` + +Also OK: +```c++ +/// +/// ... text ... +/// +bool function2(int arg1, const char *arg2) +``` + +Not OK (used plenty in the current source, but not picked up): +```c++ +// +// ... text ... +// +``` + +A full list of comment syntaxes picked up by doxygen can be found at http://www.stack.nl/~dimitri/doxygen/manual/docblocks.html, +but if possible use one of the above styles. + Locking/mutex usage notes +------------------------- The code is multi-threaded, and uses mutexes and the LOCK/TRY_LOCK macros to protect data structures. @@ -60,35 +113,35 @@ between the various components is a goal, with any necessary locking done by the components (e.g. see the self-contained CKeyStore class and its cs_KeyStore lock for example). -------- Threads +------- + +- ThreadScriptCheck : Verifies block scripts. + +- ThreadImport : Loads blocks from blk*.dat files or bootstrap.dat. - StartNode : Starts other threads. -- ThreadGetMyExternalIP : Determines outside-the-firewall IP address, sends addr message to connected peers when it determines it. +- ThreadGetMyExternalIP : Determines outside-the-firewall IP address, sends addr message to connected peers when it determines it. + +- ThreadDNSAddressSeed : Loads addresses of peers from the DNS. + +- ThreadMapPort : Universal plug-and-play startup/shutdown - ThreadSocketHandler : Sends/Receives data from peers on port 8333. - -- ThreadMessageHandler : Higher-level message handling (sending and receiving). - + +- ThreadOpenAddedConnections : Opens network connections to added nodes. + - ThreadOpenConnections : Initiates new connections to peers. -- ThreadTopUpKeyPool : replenishes the keystore's keypool. - -- ThreadCleanWalletPassphrase : re-locks an encrypted wallet after user has unlocked it for a period of time. - -- SendingDialogStartTransfer : used by pay-via-ip-address code (obsolete) - -- ThreadDelayedRepaint : repaint the gui +- ThreadMessageHandler : Higher-level message handling (sending and receiving). + +- DumpAddresses : Dumps IP addresses of nodes to peers.dat. - ThreadFlushWalletDB : Close the wallet.dat file if it hasn't been used in 500ms. - + - ThreadRPCServer : Remote procedure call handler, listens on port 8332 for connections and services them. - -- ThreadBitcoinMiner : Generates bitcoins - -- ThreadMapPort : Universal plug-and-play startup/shutdown - -- Shutdown : Does an orderly shutdown of everything - -- ExitTimeout : Windows-only, sleeps 5 seconds then exits application + +- BitcoinMiner : Generates bitcoins (if wallet is enabled). + +- Shutdown : Does an orderly shutdown of everything. diff --git a/doc/files.txt b/doc/files.txt deleted file mode 100644 index 5d4cdabf..00000000 --- a/doc/files.txt +++ /dev/null @@ -1,19 +0,0 @@ -Used in 0.8.0: -* wallet.dat: personal wallet (BDB) with keys and transactions -* peers.dat: peer IP address database (custom format); since 0.7.0 -* blocks/blk000??.dat: block data (custom, 128 MiB per file); since 0.8.0 -* blocks/rev000??.dat; block undo data (custom); since 0.8.0 (format changed since pre-0.8) -* blocks/index/*; block index (LevelDB); since 0.8.0 -* chainstate/*; block chain state database (LevelDB); since 0.8.0 -* database/*: BDB database environment; only used for wallet since 0.8.0 - -Only used in pre-0.8.0: -* blktree/*; block chain index (LevelDB); since pre-0.8, replaced by blocks/index/* in 0.8.0 -* coins/*; unspent transaction output database (LevelDB); since pre-0.8, replaced by chainstate/* in 0.8.0 - -Only used before 0.8.0: -* blkindex.dat: block chain index database (BDB); replaced by {chainstate/*,blocks/index/*,blocks/rev000??.dat} in 0.8.0 -* blk000?.dat: block data (custom, 2 GiB per file); replaced by blocks/blk000??.dat in 0.8.0 - -Only used before 0.7.0: -* addr.dat: peer IP address database (BDB); replaced by peers.dat in 0.7.0 diff --git a/doc/gitian-building.md b/doc/gitian-building.md new file mode 100644 index 00000000..544bbc12 --- /dev/null +++ b/doc/gitian-building.md @@ -0,0 +1,410 @@ +Gitian building +================ + +*Setup instructions for a gitian build of Bitcoin using a Debian VM or physical system.* + +Gitian is the deterministic build process that is used to build the Bitcoin +Core executables [1]. It provides a way to be reasonably sure that the +executables are really built from source on github. It also makes sure that +the same, tested dependencies are used and statically built into the executable. + +Multiple developers build the source code by following a specific descriptor +("recipe"), cryptographically sign the result, and upload the resulting signature. +These results are compared and only if they match, the build is accepted and uploaded +to bitcoin.org. + +More independent gitian builders are needed, which is why I wrote this +guide. It is preferred to follow these steps yourself instead of using someone else's +VM image to avoid 'contaminating' the build. + +[1] For all platforms except for MacOSX, at this point. Work for deterministic +builds for Mac is under way here: https://github.com/theuni/osx-cross-depends . + +Table of Contents +------------------ + +- [Create a new VirtualBox VM](#create-a-new-virtualbox-vm) +- [Connecting to the VM](#connecting-to-the-vm) +- [Setting up Debian for gitian building](#setting-up-debian-for-gitian-building) +- [Installing gitian](#installing-gitian) +- [Setting up gitian images](#setting-up-gitian-images) +- [Getting and building the inputs](#getting-and-building-the-inputs) +- [Building Bitcoin](#building-bitcoin) +- [Building an alternative repository](#building-an-alternative-repository) +- [Signing externally](#signing-externally) +- [Uploading signatures](#uploading-signatures) + +Create a new VirtualBox VM +--------------------------- + +The first step is to create a new Virtual Machine, which will be explained in +this section. This VM will be used to do the Gitian builds. In this guide it +will be explained how to set up the environment, and how to get the builds +started. + +Debian Linux was chosen as the host distribution because it has a lightweight install (in +contrast to Ubuntu) and is readily available. We here show the steps for +VirtualBox [1], but any kind of virtualization can be used. You can also install +on actual hardware instead of using a VM, in this case you can skip this section. + +In the VirtualBox GUI click "Create" and choose the following parameters in the wizard: + +![](gitian-building/create_vm_page1.png) + +- Type: Linux, Debian (64 bit) + +![](gitian-building/create_vm_memsize.png) + +- Memory Size: at least 1024MB, anything lower will really slow the build down + +![](gitian-building/create_vm_hard_drive.png) + +- Hard Drive: Create a virtual hard drive now + +![](gitian-building/create_vm_hard_drive_file_type.png) + +- Hard Drive file type: Use the default, VDI (VirtualBox Disk Image) + +![](gitian-building/create_vm_storage_physical_hard_drive.png) + +- Storage on Physical hard drive: Dynamically Allocated + +![](gitian-building/create_vm_file_location_size.png) + +- Disk size: at least 40GB; as low as 20GB *may* be possible, but better to err on the safe side +- Push the `Create` button + +Get the [Debian 7.4 net installer](http://cdimage.debian.org/debian-cd/7.4.0/amd64/iso-cd/debian-7.4.0-amd64-netinst.iso). +This DVD image can be validated using a SHA256 hashing tool, for example on +Unixy OSes by entering the following in a terminal: + + echo "b712a141bc60269db217d3b3e456179bd6b181645f90e4aac9c42ed63de492e9 /home/orion/Downloads/debian-7.4.0-amd64-netinst.iso" | sha256sum -c + # (must return OK) + +After creating the VM, we need to configure it. + +- Click the `Settings` button, then go to the `Network` tab. Adapter 1 should be attacked to `NAT`. + +![](gitian-building/network_settings.png) + +- Click `Advanced`, then `Port Forwarding`. We want to set up a port through where we can reach the VM to get files in and out. +- Create a new rule by clicking the plus icon. + +![](gitian-building/port_forwarding_rules.png) + +- Set up the new rule the following way: + - Name: `SSH` + - Protocol: `TCP` + - Leave Host IP empty + - Host Port: `22222` + - Leave Guest IP empty + - Guest Port: `22` + +- Click `Ok` twice to save. + +Then start the VM. On the first launch you will be asked for a CD or DVD image. Choose the downloaded iso. + +![](gitian-building/select_startup_disk.png) + +[1] https://www.virtualbox.org/ + +Installing Debian +------------------ + +In this section it will be explained how to install Debian on the newly created VM. + +- Choose the non-graphical installer. We do not need the graphical environment, it will only increase installation time and disk usage. + +![](gitian-building/debian_install_1_boot_menu.png) + +**Note**: Navigation in the Debian installer: To keep a setting at the default +and proceed, just press `Enter`. To select a different button, press `Tab`. + +- Choose locale and keyboard settings (doesn't matter, you can just go with the defaults or select your own information) + +![](gitian-building/debian_install_2_select_a_language.png) +![](gitian-building/debian_install_3_select_location.png) +![](gitian-building/debian_install_4_configure_keyboard.png) + +- The VM will detect network settings using DHCP, this should all proceed automatically +- Configure the network: + - System name `debian`. + - Leave domain name empty. + +![](gitian-building/debian_install_5_configure_the_network.png) + +- Choose a root password and enter it twice (and remember it for later) + +![](gitian-building/debian_install_6a_set_up_root_password.png) + +- Name the new user `debian` (the full name doesn't matter, you can leave it empty) + +![](gitian-building/debian_install_7_set_up_user_fullname.png) +![](gitian-building/debian_install_8_set_up_username.png) + +- Choose a user password and enter it twice (and remember it for later) + +![](gitian-building/debian_install_9_user_password.png) + +- The installer will set up the clock using a time server, this process should be automatic +- Set up the clock: choose a time zone (depends on the locale settings that you picked earlier; specifics don't matter) + +![](gitian-building/debian_install_10_configure_clock.png) + +- Disk setup + - Partitioning method: Guided - Use the entire disk + +![](gitian-building/debian_install_11_partition_disks.png) + + - Select disk to partition: SCSI1 (0,0,0) + +![](gitian-building/debian_install_12_choose_disk.png) + + - Partitioning scheme: All files in one partition + +![](gitian-building/debian_install_13_partition_scheme.png) + + - Finish partitioning and write changes to disk -> *Yes* (`Tab`, `Enter` to select the `Yes` button) + +![](gitian-building/debian_install_14_finish.png) +![](gitian-building/debian_install_15_write_changes.png) + +- The base system will be installed, this will take a minute or so +- Choose a mirror (any will do) + +![](gitian-building/debian_install_16_choose_a_mirror.png) + +- Enter proxy information (unless you are on an intranet, you can leave this empty) + +![](gitian-building/debian_install_18_proxy_settings.png) + +- Wait a bit while 'Select and install software' runs +- Participate in popularity contest -> *No* +- Choose software to install. We need just the base system. + +![](gitian-building/debian_install_19_software_selection.png) + +- Make sure only 'SSH server' and 'Standard System Utilities' are checked +- Uncheck 'Debian Desktop Environment' and 'Print Server' + +![](gitian-building/debian_install_20_install_grub.png) + +- Install the GRUB boot loader to the master boot record? -> Yes + +![](gitian-building/debian_install_21_finish_installation.png) + +- Installation Complete -> *Continue* +- After installation, the VM will reboot and you will have a working Debian VM. Congratulations! + +Connecting to the VM +---------------------- + +After the VM has booted you can connect to it using SSH, and files can be copied from and to the VM using a SFTP utility. +Connect to `localhost`, port `22222` (or the port configured when installing the VM). +On Windows you can use putty[1] and WinSCP[2]. + +For example to connect as `root` from a Linux command prompt use + + $ ssh root@localhost -p 22222 + The authenticity of host '[localhost]:22222 ([127.0.0.1]:22222)' can't be established. + ECDSA key fingerprint is 8e:71:f9:5b:62:46:de:44:01:da:fb:5f:34:b5:f2:18. + Are you sure you want to continue connecting (yes/no)? yes + Warning: Permanently added '[localhost]:22222' (ECDSA) to the list of known hosts. + root@localhost's password: (enter root password configured during install) + Linux debian 3.2.0-4-amd64 #1 SMP Debian 3.2.54-2 x86_64 + root@debian:~# + +Replace `root` with `debian` to log in as user. + +[1] http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html +[2] http://winscp.net/eng/index.php + +Setting up Debian for gitian building +-------------------------------------- + +In this section we will be setting up the Debian installation for Gitian building. + +First we need to log in as `root` to set up dependencies and make sure that our +user can use the sudo command. Type/paste the following in the terminal: + +```bash +apt-get install git ruby sudo apt-cacher-ng qemu-utils debootstrap lxc python-cheetah parted kpartx bridge-utils +adduser debian sudo +``` + +When you get a colorful screen with a question about the 'LXC directory', just +go with the default (`/var/lib/lxc`). + +Then set up LXC and the rest with the following is a complex jumble of settings and workarounds: + +```bash +# the version of lxc-start in Debian 7.4 needs to run as root, so make sure +# that the build script can exectute it without providing a password +echo "%sudo ALL=NOPASSWD: /usr/bin/lxc-start" > /etc/sudoers.d/gitian-lxc +# add cgroup for LXC +echo "cgroup /sys/fs/cgroup cgroup defaults 0 0" >> /etc/fstab +# make /etc/rc.local script that sets up bridge between guest and host +echo '#!/bin/sh -e' > /etc/rc.local +echo 'brctl addbr br0' >> /etc/rc.local +echo 'ifconfig br0 10.0.3.2/24 up' >> /etc/rc.local +echo 'exit 0' >> /etc/rc.local +# make sure that USE_LXC is always set when logging in as debian, +# and configure LXC IP addresses +echo 'export USE_LXC=1' >> /home/debian/.profile +echo 'export GITIAN_HOST_IP=10.0.3.2' >> /home/debian/.profile +echo 'export LXC_GUEST_IP=10.0.3.5' >> /home/debian/.profile +reboot +``` + +At the end the VM is rebooted to make sure that the changes take effect. The steps in this +section need only to be performed once. + +Installing gitian +------------------ + +Re-login as the user `debian` that was created during installation. +The rest of the steps in this guide will be performed as that user. + +There is no `python-vm-builder` package in Debian, so we need to install it from source ourselves, + +```bash +wget http://archive.ubuntu.com/ubuntu/pool/universe/v/vm-builder/vm-builder_0.12.4+bzr489.orig.tar.gz +echo "ec12e0070a007989561bfee5862c89a32c301992dd2771c4d5078ef1b3014f03 vm-builder_0.12.4+bzr489.orig.tar.gz" | sha256sum -c +# (verification -- must return OK) +tar -zxvf vm-builder_0.12.4+bzr489.orig.tar.gz +cd vm-builder-0.12.4+bzr489 +sudo python setup.py install +cd .. +``` + +**Note**: When sudo asks for a password, enter the password for the user *debian* not for *root*. + +Clone the git repositories for bitcoin and gitian, + +```bash +git clone https://github.com/devrandom/gitian-builder.git +git clone https://github.com/bitcoin/bitcoin +``` + +Setting up gitian images +------------------------- + +Gitian needs virtual images of the operating system to build in. +Currently this is Ubuntu Precise for both x86 architectures. +These images will be copied and used every time that a build is started to +make sure that the build is deterministic. +Creating the images will take a while, but only has to be done once. + +Execute the following as user `debian`: + +```bash +cd gitian-builder +bin/make-base-vm --lxc --arch i386 --suite precise +bin/make-base-vm --lxc --arch amd64 --suite precise +``` + +There will be a lot of warnings printed during build of the images. These can be ignored. + +**Note**: When sudo asks for a password, enter the password for the user *debian* not for *root*. + +Getting and building the inputs +-------------------------------- + +In [doc/release-process.md](release-process.md) in the bitcoin repository under 'Fetch and build inputs'. +you will find a list of `wget` commands that can be executed to get the dependencies. + +I needed to add `--no-check-certificate` to the OpenSSL wget line to make it work. +Likely this is because the ca-certificates in Debian 7.4 is fairly old. This does not create a +security issue as the gitian descriptors check integrity of the input archives and refuse to work +if any one is corrupted. + +After downloading the archives, execute the `gbuild` commends to build the dependencies. +This can take a long time, but only has to be done when the dependencies change, for example +to upgrade the used version. + +**Note**: Do not forget to copy the result from `build/out` to `inputs` after every gbuild command! This will save +you a lot of time. + +At any time you can check the package installation and build progress with + +```bash +tail -f var/install.log +tail -f var/build.log +``` + +Building Bitcoin +---------------- + +To build Bitcoin (for Linux and/or Windows) just follow the steps under 'perform +gitian builds' in [doc/release-process.md](release-process.md) in the bitcoin repository. + +Output from `gbuild` will look something like + + Initialized empty Git repository in /home/debian/gitian-builder/inputs/bitcoin/.git/ + remote: Reusing existing pack: 35606, done. + remote: Total 35606 (delta 0), reused 0 (delta 0) + Receiving objects: 100% (35606/35606), 26.52 MiB | 4.28 MiB/s, done. + Resolving deltas: 100% (25724/25724), done. + From https://github.com/bitcoin/bitcoin + ... (new tags, new branch etc) + --- Building for precise i386 --- + Stopping target if it is up + Making a new image copy + stdin: is not a tty + Starting target + Checking if target is up + Preparing build environment + Updating apt-get repository (log in var/install.log) + Installing additional packages (log in var/install.log) + Grabbing package manifest + stdin: is not a tty + Creating build script (var/build-script) + lxc-start: Connection refused - inotify event with no name (mask 32768) + Running build script (log in var/build.log) + +As when building the dependencies, the progress of package installation and building +can be inspected in `var/install.log` and `var/build.log`. + +Building an alternative repository +----------------------------------- + +If you want to do a test build of a pull on github it can be useful to point +the gitian builder at an alternative repository, using the same descriptors +and inputs. + +For example: +```bash +URL=https://github.com/laanwj/bitcoin.git +COMMIT=2014_03_windows_unicode_path +./bin/gbuild --commit bitcoin=${COMMIT} --url bitcoin=${URL} ../bitcoin/contrib/gitian-descriptors/gitian-linux.yml +./bin/gbuild --commit bitcoin=${COMMIT} --url bitcoin=${URL} ../bitcoin/contrib/gitian-descriptors/gitian-win.yml +``` + +Signing externally +------------------- + +If you want to do the PGP signing on another device that's possible too; just define `SIGNER` as mentioned +and follow the steps in the build process as normally. + + gpg: skipped "laanwj": secret key not available + +When you execute `gsign` you will get an error from GPG, which can be ignored. Copy the resulting `.assert` files +in `gitian.sigs` to your signing machine and do + +```bash + gpg --detach-sign ${VERSION}/${SIGNER}/bitcoin-build.assert + gpg --detach-sign ${VERSION}-win/${SIGNER}/bitcoin-build.assert +``` + +This will create the `.sig` files that can be committed together with the `.assert` files to assert your +gitian build. + +Uploading signatures +--------------------- + +After building and signing you can push your signatures (both the `.assert` and +`.assert.sig` files) to the +[bitcoin/gitian.sigs](https://github.com/bitcoin/gitian.sigs/) repository, or +if not possible create a pull request. You can also mail the files to me +(laanwj@gmail.com) and I'll commit them. + diff --git a/doc/gitian-building/create_vm_file_location_size.png b/doc/gitian-building/create_vm_file_location_size.png new file mode 100644 index 00000000..14aef5ab Binary files /dev/null and b/doc/gitian-building/create_vm_file_location_size.png differ diff --git a/doc/gitian-building/create_vm_hard_drive.png b/doc/gitian-building/create_vm_hard_drive.png new file mode 100644 index 00000000..a1706e14 Binary files /dev/null and b/doc/gitian-building/create_vm_hard_drive.png differ diff --git a/doc/gitian-building/create_vm_hard_drive_file_type.png b/doc/gitian-building/create_vm_hard_drive_file_type.png new file mode 100644 index 00000000..251b8ee3 Binary files /dev/null and b/doc/gitian-building/create_vm_hard_drive_file_type.png differ diff --git a/doc/gitian-building/create_vm_memsize.png b/doc/gitian-building/create_vm_memsize.png new file mode 100644 index 00000000..33717867 Binary files /dev/null and b/doc/gitian-building/create_vm_memsize.png differ diff --git a/doc/gitian-building/create_vm_page1.png b/doc/gitian-building/create_vm_page1.png new file mode 100644 index 00000000..edaebc62 Binary files /dev/null and b/doc/gitian-building/create_vm_page1.png differ diff --git a/doc/gitian-building/create_vm_storage_physical_hard_drive.png b/doc/gitian-building/create_vm_storage_physical_hard_drive.png new file mode 100644 index 00000000..987efaa4 Binary files /dev/null and b/doc/gitian-building/create_vm_storage_physical_hard_drive.png differ diff --git a/doc/gitian-building/debian_install_10_configure_clock.png b/doc/gitian-building/debian_install_10_configure_clock.png new file mode 100644 index 00000000..467c7901 Binary files /dev/null and b/doc/gitian-building/debian_install_10_configure_clock.png differ diff --git a/doc/gitian-building/debian_install_11_partition_disks.png b/doc/gitian-building/debian_install_11_partition_disks.png new file mode 100644 index 00000000..18110734 Binary files /dev/null and b/doc/gitian-building/debian_install_11_partition_disks.png differ diff --git a/doc/gitian-building/debian_install_12_choose_disk.png b/doc/gitian-building/debian_install_12_choose_disk.png new file mode 100644 index 00000000..a00d4abf Binary files /dev/null and b/doc/gitian-building/debian_install_12_choose_disk.png differ diff --git a/doc/gitian-building/debian_install_13_partition_scheme.png b/doc/gitian-building/debian_install_13_partition_scheme.png new file mode 100644 index 00000000..2f80f19b Binary files /dev/null and b/doc/gitian-building/debian_install_13_partition_scheme.png differ diff --git a/doc/gitian-building/debian_install_14_finish.png b/doc/gitian-building/debian_install_14_finish.png new file mode 100644 index 00000000..411d457e Binary files /dev/null and b/doc/gitian-building/debian_install_14_finish.png differ diff --git a/doc/gitian-building/debian_install_15_write_changes.png b/doc/gitian-building/debian_install_15_write_changes.png new file mode 100644 index 00000000..f2609398 Binary files /dev/null and b/doc/gitian-building/debian_install_15_write_changes.png differ diff --git a/doc/gitian-building/debian_install_16_choose_a_mirror.png b/doc/gitian-building/debian_install_16_choose_a_mirror.png new file mode 100644 index 00000000..d2c2e952 Binary files /dev/null and b/doc/gitian-building/debian_install_16_choose_a_mirror.png differ diff --git a/doc/gitian-building/debian_install_17_choose_a_mirror2.png b/doc/gitian-building/debian_install_17_choose_a_mirror2.png new file mode 100644 index 00000000..cef2db07 Binary files /dev/null and b/doc/gitian-building/debian_install_17_choose_a_mirror2.png differ diff --git a/doc/gitian-building/debian_install_18_proxy_settings.png b/doc/gitian-building/debian_install_18_proxy_settings.png new file mode 100644 index 00000000..24ba25c1 Binary files /dev/null and b/doc/gitian-building/debian_install_18_proxy_settings.png differ diff --git a/doc/gitian-building/debian_install_19_software_selection.png b/doc/gitian-building/debian_install_19_software_selection.png new file mode 100644 index 00000000..d462757a Binary files /dev/null and b/doc/gitian-building/debian_install_19_software_selection.png differ diff --git a/doc/gitian-building/debian_install_1_boot_menu.png b/doc/gitian-building/debian_install_1_boot_menu.png new file mode 100644 index 00000000..27fd849b Binary files /dev/null and b/doc/gitian-building/debian_install_1_boot_menu.png differ diff --git a/doc/gitian-building/debian_install_20_install_grub.png b/doc/gitian-building/debian_install_20_install_grub.png new file mode 100644 index 00000000..de4f9be0 Binary files /dev/null and b/doc/gitian-building/debian_install_20_install_grub.png differ diff --git a/doc/gitian-building/debian_install_21_finish_installation.png b/doc/gitian-building/debian_install_21_finish_installation.png new file mode 100644 index 00000000..b967c355 Binary files /dev/null and b/doc/gitian-building/debian_install_21_finish_installation.png differ diff --git a/doc/gitian-building/debian_install_2_select_a_language.png b/doc/gitian-building/debian_install_2_select_a_language.png new file mode 100644 index 00000000..1c9e0bcf Binary files /dev/null and b/doc/gitian-building/debian_install_2_select_a_language.png differ diff --git a/doc/gitian-building/debian_install_3_select_location.png b/doc/gitian-building/debian_install_3_select_location.png new file mode 100644 index 00000000..005c3956 Binary files /dev/null and b/doc/gitian-building/debian_install_3_select_location.png differ diff --git a/doc/gitian-building/debian_install_4_configure_keyboard.png b/doc/gitian-building/debian_install_4_configure_keyboard.png new file mode 100644 index 00000000..580c8af7 Binary files /dev/null and b/doc/gitian-building/debian_install_4_configure_keyboard.png differ diff --git a/doc/gitian-building/debian_install_5_configure_the_network.png b/doc/gitian-building/debian_install_5_configure_the_network.png new file mode 100644 index 00000000..a7fdffc6 Binary files /dev/null and b/doc/gitian-building/debian_install_5_configure_the_network.png differ diff --git a/doc/gitian-building/debian_install_6_domain_name.png b/doc/gitian-building/debian_install_6_domain_name.png new file mode 100644 index 00000000..7a986d92 Binary files /dev/null and b/doc/gitian-building/debian_install_6_domain_name.png differ diff --git a/doc/gitian-building/debian_install_6a_set_up_root_password.png b/doc/gitian-building/debian_install_6a_set_up_root_password.png new file mode 100644 index 00000000..31bd210f Binary files /dev/null and b/doc/gitian-building/debian_install_6a_set_up_root_password.png differ diff --git a/doc/gitian-building/debian_install_7_set_up_user_fullname.png b/doc/gitian-building/debian_install_7_set_up_user_fullname.png new file mode 100644 index 00000000..bffc6ccd Binary files /dev/null and b/doc/gitian-building/debian_install_7_set_up_user_fullname.png differ diff --git a/doc/gitian-building/debian_install_8_set_up_username.png b/doc/gitian-building/debian_install_8_set_up_username.png new file mode 100644 index 00000000..9e2750ad Binary files /dev/null and b/doc/gitian-building/debian_install_8_set_up_username.png differ diff --git a/doc/gitian-building/debian_install_9_user_password.png b/doc/gitian-building/debian_install_9_user_password.png new file mode 100644 index 00000000..a26d30cb Binary files /dev/null and b/doc/gitian-building/debian_install_9_user_password.png differ diff --git a/doc/gitian-building/network_settings.png b/doc/gitian-building/network_settings.png new file mode 100644 index 00000000..1d9b6428 Binary files /dev/null and b/doc/gitian-building/network_settings.png differ diff --git a/doc/gitian-building/port_forwarding_rules.png b/doc/gitian-building/port_forwarding_rules.png new file mode 100644 index 00000000..e45c9eff Binary files /dev/null and b/doc/gitian-building/port_forwarding_rules.png differ diff --git a/doc/gitian-building/select_startup_disk.png b/doc/gitian-building/select_startup_disk.png new file mode 100644 index 00000000..729b368f Binary files /dev/null and b/doc/gitian-building/select_startup_disk.png differ diff --git a/doc/img/bootstrap1.png b/doc/img/bootstrap1.png new file mode 100644 index 00000000..07593079 Binary files /dev/null and b/doc/img/bootstrap1.png differ diff --git a/doc/img/bootstrap2.png b/doc/img/bootstrap2.png new file mode 100644 index 00000000..6461f818 Binary files /dev/null and b/doc/img/bootstrap2.png differ diff --git a/doc/img/bootstrap3.png b/doc/img/bootstrap3.png new file mode 100644 index 00000000..8a6754e3 Binary files /dev/null and b/doc/img/bootstrap3.png differ diff --git a/doc/img/bootstrap4.png b/doc/img/bootstrap4.png new file mode 100644 index 00000000..ad697379 Binary files /dev/null and b/doc/img/bootstrap4.png differ diff --git a/doc/img/bootstrap5.png b/doc/img/bootstrap5.png new file mode 100644 index 00000000..d8d9baaf Binary files /dev/null and b/doc/img/bootstrap5.png differ diff --git a/doc/multiwallet-qt.md b/doc/multiwallet-qt.md index 8d695552..3caab818 100644 --- a/doc/multiwallet-qt.md +++ b/doc/multiwallet-qt.md @@ -4,7 +4,7 @@ Multiwallet Qt Development and Integration Strategy In order to support loading of multiple wallets in bitcoin-qt, a few changes in the UI architecture will be needed. Fortunately, only four of the files in the existing project are affected by this change. -Three new classes have been implemented in three new .h/.cpp file pairs, with much of the functionality that was previously +Two new classes have been implemented in two new .h/.cpp file pairs, with much of the functionality that was previously implemented in the BitcoinGUI class moved over to these new classes. The two existing files most affected, by far, are bitcoingui.h and bitcoingui.cpp, as the BitcoinGUI class will require @@ -12,7 +12,7 @@ some major retrofitting. Only requiring some minor changes is bitcoin.cpp. -Finally, three new headers and source files will have to be added to bitcoin-qt.pro. +Finally, two new headers and source files will have to be added to bitcoin-qt.pro. Changes to class BitcoinGUI --------------------------- @@ -23,13 +23,9 @@ A new class called *WalletView* inheriting from QStackedWidget has been written these page views. In addition to owning these five page views, a WalletView also has a pointer to a WalletModel instance. This allows the construction of multiple WalletView objects, each rendering a distinct wallet. -A second class called *WalletStack*, also inheriting from QStackedWidget, has been written to handle switching focus between -different loaded wallets. In its current implementation, as a QStackedWidget, only one wallet can be viewed at a time - -but this can be changed later. - -A third class called *WalletFrame* inheriting from QFrame has been written as a container for embedding all wallet-related -controls into BitcoinGUI. At present it just contains a WalletStack instance and does little more than passing on messages -from BitcoinGUI to the WalletStack, which in turn passes them to the individual WalletViews. It is a WalletFrame instance +A second class called *WalletFrame* inheriting from QFrame has been written as a container for embedding all wallet-related +controls into BitcoinGUI. At present it contains the WalletView instances for the wallets and does little more than passing on messages +from BitcoinGUI to the currently selected WalletView. It is a WalletFrame instance that takes the place of what used to be centralWidget in BitcoinGUI. The purpose of this class is to allow future refinements of the wallet controls with minimal need for further modifications to BitcoinGUI, thus greatly simplifying merges while reducing the risk of breaking top-level stuff. diff --git a/doc/readme-qt.md b/doc/readme-qt.md deleted file mode 100644 index 083db327..00000000 --- a/doc/readme-qt.md +++ /dev/null @@ -1,128 +0,0 @@ -Bitcoin-Qt Readme -=============================== -Contains build and configuration instructions for Bitcoin-Qt (Qt4 GUI for Bitcoin). - -Build Instructions ---------------------- - -### Debian - - -First, make sure that the required packages for Qt4 development of your -distribution are installed, these are - - - -for Debian and Ubuntu <= 11.10 : - - - apt-get install qt4-qmake libqt4-dev build-essential libboost-dev libboost-system-dev \ - libboost-filesystem-dev libboost-program-options-dev libboost-thread-dev \ - libssl-dev libdb4.8++-dev - -for Ubuntu >= 12.04 (please read the 'Berkely DB version warning' below): - - apt-get install qt4-qmake libqt4-dev build-essential libboost-dev libboost-system-dev \ - libboost-filesystem-dev libboost-program-options-dev libboost-thread-dev \ - libssl-dev libdb++-dev libminiupnpc-dev - -For Qt 5 you need the following, otherwise you get an error with lrelease when running qmake: - - - apt-get install qt5-qmake libqt5gui5 libqt5core5 libqt5dbus5 qttools5-dev-tools - -then execute the following: - - qmake - make - -Alternatively, install [Qt Creator](http://qt-project.org/downloads/) and open the `bitcoin-qt.pro` file. -An executable named `bitcoin-qt` will be built. - - - -### Mac OS X - -* Download and install the [Qt Mac OS X SDK](https://qt-project.org/downloads). It is recommended to also install Apple's Xcode with UNIX tools. -* Download and install either [MacPorts](https://www.macports.org/) or [HomeBrew](http://mxcl.github.io/homebrew/). -* Execute the following commands in a terminal to get the dependencies using MacPorts - - sudo port selfupdate - sudo port install boost db48 miniupnpc - -* Execute the following commands in a terminal to get the dependencies using HomeBrew: - - brew update - brew install boost miniupnpc openssl berkeley-db4 - -- If using HomeBrew, edit `bitcoin-qt.pro` to account for library location differences. There's a diff in `contrib/homebrew/bitcoin-qt-pro.patch` that shows what you need to change, or you can just patch by doing - - patch -p1 < contrib/homebrew/bitcoin.qt.pro.patch - -- Open the bitcoin-qt.pro file in Qt Creator and build as normal (cmd+B) - - -Build Configuration Options ---------------------- - -### UPnP port forwarding - -To use UPnP for port forwarding behind a NAT router (recommended, as more connections overall allow for a faster and more stable bitcoin experience), pass the following argument to qmake: - - - - qmake "USE_UPNP=1" - -(in **Qt Creator**, you can find the setting for additional qmake arguments under "Projects" -> "Build Settings" -> "Build Steps", then click "Details" next to **qmake**) - -This requires miniupnpc for UPnP port mapping. It can be downloaded from [here]( -http://miniupnp.tuxfamily.org/files/). UPnP support is not compiled in by default. - -Set USE_UPNP to a different value to control this: - - - USE_UPNP=- no UPnP support, miniupnpc not required; - USE_UPNP=0 (the default) built with UPnP, support turned off by default at runtime; - USE_UPNP=1 build with UPnP support turned on by default at runtime. - -### Notification support for recent (k)ubuntu versions - -To see desktop notifications on (k)ubuntu versions starting from 10.04, enable usage of the -FreeDesktop notification interface through DBUS using the following qmake option: - - - - qmake "USE_DBUS=1" - -### Generation of QR codes - -[libqrencode](http://fukuchi.org/works/qrencode/) may be used to generate QRCode images for payment requests. Pass the USE_QRCODE flag to qmake to control this: - - - USE_QRCODE=0 (the default) No QRCode support - libarcode not required - USE_QRCODE=1 QRCode support enabled - -Warnings ---------------------- - -### Berkely DB Version Warning - - -A warning for people using the *static binary* version of Bitcoin on a Linux/UNIX-ish system (tl;dr: **Berkely DB databases are not forward compatible**). - -The static binary version of Bitcoin is linked against libdb4.8 (see also [this Debian issue](http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=621425)). - -Now the nasty thing is that databases from 5.X are not compatible with 4.X. - -If the globally installed development package of Berkely DB installed on your system is 5.X, any source you build yourself will be linked against that. The first time you run with a 5.X version the database will be upgraded, and 4.X cannot open the new format. This means that you cannot go back to the old statically linked version without significant hassle! - -### Ubuntu 11.10 Warning - - -Ubuntu 11.10 has a package called 'qt-at-spi' installed by default. At the time of writing, having that package installed causes bitcoin-qt to crash intermittently. The issue has been reported as [launchpad bug 857790](https://bugs.launchpad.net/ubuntu/+source/qt-at-spi/+bug/857790), but -isn't yet fixed. - -Until the bug is fixed, you can remove the qt-at-spi package to work around the problem, though this will presumably disable screen reader functionality for Qt apps: - - sudo apt-get remove qt-at-spi - diff --git a/doc/release-notes.md b/doc/release-notes.md index acaeef1d..bd76f449 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -1,3 +1,204 @@ -(note: this is a temporary file, to be added-to by anybody, and deleted at -release time) +Bitcoin Core version 0.9.2 is now available from: + + https://bitcoin.org/bin/0.9.2/ + +This is a new minor version release, bringing mostly bug fixes and some minor +improvements. OpenSSL has been updated because of a security issue (CVE-2014-0224). +Upgrading to this release is recommended. + +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). + +If you are upgrading from version 0.7.2 or earlier, the first time you run +0.9.0 your blockchain files will be re-indexed, which will take anywhere from +30 minutes to several hours, depending on the speed of your machine. + +Downgrading warnings +-------------------- + +The 'chainstate' for this release is not always compatible with previous +releases, so if you run 0.9.x and then decide to switch back to a +0.8.x release you might get a blockchain validation error when starting the +old release (due to 'pruned outputs' being omitted from the index of +unspent transaction outputs). + +Running the old release with the -reindex option will rebuild the chainstate +data structures and correct the problem. + +Also, the first time you run a 0.8.x release on a 0.9 wallet it will rescan +the blockchain for missing spent coins, which will take a long time (tens +of minutes on a typical machine). + +Important changes +================== + +Gitian OSX build +----------------- + +The deterministic build system that was already used for Windows and Linux +builds is now used for OSX as well. Although the resulting executables have +been tested quite a bit, there could be possible regressions. Be sure to report +these on the Github bug tracker mentioned above. + +Compatibility of Linux build +----------------------------- + +For Linux we now build against Qt 4.6, and filter the symbols for libstdc++ and glibc. +This brings back compatibility with + +- Debian 6+ / Tails +- Ubuntu 10.04 +- CentOS 6.5 + +0.9.2 Release notes +======================= + +The OpenSSL dependency in the gitian builds has been upgraded to 1.0.1h because of CVE-2014-0224. + +RPC: +- Add `getwalletinfo`, `getblockchaininfo` and `getnetworkinfo` calls (will replace hodge-podge `getinfo` at some point) +- Add a `relayfee` field to `getnetworkinfo` +- Fix RPC related shutdown hangs and leaks +- Always show syncnode in `getpeerinfo` +- `sendrawtransaction`: report the reject code and reason, and make it possible to re-send transactions that are already in the mempool +- `getmininginfo` show right genproclimit + +Command-line options: +- Fix `-printblocktree` output +- Show error message if ReadConfigFile fails + +Block-chain handling and storage: +- Fix for GetBlockValue() after block 13,440,000 (BIP42) +- Upgrade leveldb to 1.17 + +Protocol and network code: +- Per-peer block download tracking and stalled download detection +- Add new DNS seed from bitnodes.io +- Prevent socket leak in ThreadSocketHandler and correct some proxy related socket leaks +- Use pnode->nLastRecv as sync score (was the wrong way around) + +Wallet: +- Make GetAvailableCredit run GetHash() only once per transaction (performance improvement) +- Lower paytxfee warning threshold from 0.25 BTC to 0.01 BTC +- Fix importwallet nTimeFirstKey (trigger necessary rescans) +- Log BerkeleyDB version at startup +- CWallet init fix + +Build system: +- Add OSX build descriptors to gitian +- Fix explicit --disable-qt-dbus +- Don't require db_cxx.h when compiling with wallet disabled and GUI enabled +- Improve missing boost error reporting +- Upgrade miniupnpc version to 1.9 +- gitian-linux: --enable-glibc-back-compat for binary compatibility with old distributions +- gitian: don't export any symbols from executable +- gitian: build against Qt 4.6 +- devtools: add script to check symbols from Linux gitian executables +- Remove build-time no-IPv6 setting + +GUI: +- Fix various coin control visual issues +- Show number of in/out connections in debug console +- Show weeks as well as years behind for long timespans behind +- Enable and disable the Show and Remove buttons for requested payments history based on whether any entry is selected. +- Show also value for options overridden on command line in options dialog +- Fill in label from address book also for URIs +- Fixes feel when resizing the last column on tables (issue #2862) +- Fix ESC in disablewallet mode +- Add expert section to wallet tab in optionsdialog +- Do proper boost::path conversion (fixes unicode in datadir) +- Only override -datadir if different from the default (fixes -datadir in config file) +- Show rescan progress at start-up +- Show importwallet progress +- Get required locks upfront in polling functions (avoids hanging on locks) +- Catch Windows shutdown events while client is running +- Optionally add third party links to transaction context menu +- Check for !pixmap() before trying to export QR code (avoids crashes when no QR code could be generated) +- Fix "Start bitcoin on system login" + +Miscellaneous: + +- Replace non-threadsafe C functions (gmtime, strerror and setlocale) +- Add missing cs_main and wallet locks +- Avoid exception at startup when system locale not recognized +- Changed bitrpc.py's raw_input to getpass for passwords to conceal characters during command line input +- devtools: add a script to fetch and postprocess translations + +Credits +-------- + +Thanks to everyone who contributed to this release: + +- Addy Yeow +- Altoidnerd +- Andrea D'Amore +- Andreas Schildbach +- Bardi Harborow +- Brandon Dahler +- Bryan Bishop +- Chris Beams +- Christian von Roques +- Cory Fields +- Cozz Lovan +- daniel +- Daniel Newton +- David A. Harding +- ditto-b +- duanemoody +- Eric S. Bullington +- Fabian Raetz +- Gavin Andresen +- Gregory Maxwell +- gubatron +- Haakon Nilsen +- harry +- Hector Jusforgues +- Isidoro Ghezzi +- Jeff Garzik +- Johnathan Corgan +- jtimon +- Kamil Domanski +- langerhans +- Luke Dashjr +- Manuel Araoz +- Mark Friedenbach +- Matt Corallo +- Matthew Bogosian +- Meeh +- Michael Ford +- Michagogo +- Mikael Wikman +- Mike Hearn +- olalonde +- paveljanik +- peryaudo +- Philip Kaufmann +- philsong +- Pieter Wuille +- R E Broadley +- richierichrawr +- Rune K. Svendsen +- rxl +- shshshsh +- Simon de la Rouviere +- Stuart Cardall +- super3 +- Telepatheic +- Thomas Zander +- Torstein Husebø +- Warren Togami +- Wladimir J. van der Laan +- Yoichi Hirai diff --git a/doc/release-notes/release-notes-0.3.12.md b/doc/release-notes/release-notes-0.3.12.md new file mode 100644 index 00000000..38715bc7 --- /dev/null +++ b/doc/release-notes/release-notes-0.3.12.md @@ -0,0 +1,13 @@ +Version 0.3.12 is now available. + +Features: +* json-rpc errors return a more standard error object. (thanks to Gavin Andresen) +* json-rpc command line returns exit codes. +* json-rpc "backupwallet" command. +* Recovers and continues if an exception is caused by a message you received. Other nodes shouldn't be able to cause an exception, and it hasn't happened before, but if a way is found to cause an exception, this would keep it from being used to stop network nodes. + +If you have json-rpc code that checks the contents of the error string, you need to change it to expect error objects of the form {"code":,"message":}, which is the standard. See this thread: +http://www.bitcoin.org/smf/index.php?topic=969.0 + +Download: +http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.12/ diff --git a/doc/release-notes/release-notes-0.3.13.md b/doc/release-notes/release-notes-0.3.13.md new file mode 100644 index 00000000..2b95ff23 --- /dev/null +++ b/doc/release-notes/release-notes-0.3.13.md @@ -0,0 +1,26 @@ +Version 0.3.13 is now available. You should upgrade to prevent potential problems with 0/unconfirmed transactions. Note: 0.3.13 prevents problems if you haven't already spent a 0/unconfirmed transaction, but if that already happened, you need 0.3.13.2. + +Changes: +* Don't count or spend payments until they have 1 confirmation. +* Internal version number from 312 to 31300. +* Only accept transactions sent by IP address if -allowreceivebyip is specified. +* Dropped DB_PRIVATE Berkeley DB flag. +* Fix problem sending the last cent with sub-cent fractional change. +* Auto-detect whether to use 128-bit 4-way SSE2 on Linux. +Gavin Andresen: +* Option -rpcallowip= to accept json-rpc connections from another machine. +* Clean shutdown on SIGTERM on Linux. + +Download: +http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.13/ + +(Thanks Laszlo for the Mac OSX build!) + +Note: +The SSE2 auto-detect in the Linux 64-bit version doesn't work with AMD in 64-bit mode. Please try this instead and let me know if it gets it right: +http://www.bitcoin.org/download/bitcoin-0.3.13.1-specialbuild-linux64.tar.gz + +You can still control the SSE2 use manually with -4way and -4way=0. + +Version 0.3.13.2 (SVN rev 161) has improvements for the case where you already had 0/unconfirmed transactions that you might have already spent. Here's a Windows build of it: +http://www.bitcoin.org/download/bitcoin-0.3.13.2-win32-setup.exe diff --git a/doc/release-notes/release-notes-0.3.14.md b/doc/release-notes/release-notes-0.3.14.md new file mode 100644 index 00000000..e73052ed --- /dev/null +++ b/doc/release-notes/release-notes-0.3.14.md @@ -0,0 +1,11 @@ +Version 0.3.14 is now available +http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.14/ + +Changes: +* Key pool feature for safer wallet backup +Gavin Andresen: +* TEST network mode with switch -testnet +* Option to use SSL for JSON-RPC connections on unix/osx +* validateaddress RPC command +eurekafag: +* Russian translation diff --git a/doc/release-notes/release-notes-0.3.15.md b/doc/release-notes/release-notes-0.3.15.md new file mode 100644 index 00000000..b98052ef --- /dev/null +++ b/doc/release-notes/release-notes-0.3.15.md @@ -0,0 +1,6 @@ +* paytxfee switch is now per KB, so it adds the correct fee for large transactions +* sending avoids using coins with less than 6 confirmations if it can +* BitcoinMiner processes transactions in priority order based on age of dependencies +* make sure generation doesn't start before block 74000 downloaded +* bugfixes by Dean Gores +* testnet, keypoololdest and paytxfee added to getinfo diff --git a/doc/release-notes/release-notes-0.3.16.md b/doc/release-notes/release-notes-0.3.16.md new file mode 100644 index 00000000..743f84f3 --- /dev/null +++ b/doc/release-notes/release-notes-0.3.16.md @@ -0,0 +1 @@ +Never released. diff --git a/doc/release-notes/release-notes-0.3.17.md b/doc/release-notes/release-notes-0.3.17.md new file mode 100644 index 00000000..d3604b8f --- /dev/null +++ b/doc/release-notes/release-notes-0.3.17.md @@ -0,0 +1,12 @@ +Version 0.3.17 is now available. + +Changes: +* new getwork, thanks m0mchil +* added transaction fee setting in UI options menu +* free transaction limits +* sendtoaddress returns transaction id instead of "sent" +* getaccountaddress + +The UI transaction fee setting was easy since it was still there from 0.1.5 and all I had to do was re-enable it. + +The accounts-based commands: move, sendfrom and getbalance will be in the next release. We still have some more changes to make first. diff --git a/doc/release-notes/release-notes-0.3.18.md b/doc/release-notes/release-notes-0.3.18.md new file mode 100644 index 00000000..ab1c2e06 --- /dev/null +++ b/doc/release-notes/release-notes-0.3.18.md @@ -0,0 +1,11 @@ +Changes: +* Fixed a wallet.dat compatibility problem if you downgraded from 0.3.17 and then upgraded again +* IsStandard() check to only include known transaction types in blocks +* Jgarzik's optimisation to speed up the initial block download a little + +The main addition in this release is the Accounts-Based JSON-RPC commands that Gavin's been working on (more details at http://www.bitcoin.org/smf/index.php?topic=1886.0). +* getaccountaddress +* sendfrom +* move +* getbalance +* listtransactions diff --git a/doc/release-notes/release-notes-0.3.19.md b/doc/release-notes/release-notes-0.3.19.md new file mode 100644 index 00000000..fcd86756 --- /dev/null +++ b/doc/release-notes/release-notes-0.3.19.md @@ -0,0 +1,9 @@ +There's more work to do on DoS, but I'm doing a quick build of what I have so far in case it's needed, before venturing into more complex ideas. The build for this is version 0.3.19. + +- Added some DoS controls +As Gavin and I have said clearly before, the software is not at all resistant to DoS attack. This is one improvement, but there are still more ways to attack than I can count. + +I'm leaving the -limitfreerelay part as a switch for now and it's there if you need it. + +- Removed "safe mode" alerts +"safe mode" alerts was a temporary measure after the 0.3.9 overflow bug. We can say all we want that users can just run with "-disablesafemode", but it's better just not to have it for the sake of appearances. It was never intended as a long term feature. Safe mode can still be triggered by seeing a longer (greater total PoW) invalid block chain. diff --git a/doc/release-notes/release-notes-0.3.20.1.md b/doc/release-notes/release-notes-0.3.20.1.md new file mode 100644 index 00000000..6c5682ea --- /dev/null +++ b/doc/release-notes/release-notes-0.3.20.1.md @@ -0,0 +1 @@ +Never released or release notes were lost. diff --git a/doc/release-notes/release-notes-0.3.20.2.md b/doc/release-notes/release-notes-0.3.20.2.md new file mode 100644 index 00000000..09ecb736 --- /dev/null +++ b/doc/release-notes/release-notes-0.3.20.2.md @@ -0,0 +1,17 @@ +The maxsendbuffer bug (0.3.20.1 clients not being able to download the block chain from other 0.3.20.1 clients) was only going to get +worse as people upgraded, so I cherry-picked the bug fix and created a minor release yesterday. + +The Amazon Machine Images I used to do the builds are available: + + ami-38a05251 Bitcoin-v0.3.20.2 Mingw (Windows; Administrator password 'bitcoin development') + ami-30a05259 Bitcoin_0.3.20.2 Linux32 + ami-8abc4ee3 Bitcoin_0.3.20.2 Linux64 + +(mac build will be done soon) + +If you have already downloaded version 0.3.20.1, please either add this to your bitcoin.conf file: + + maxsendbuffer=10000 + maxreceivebuffer=10000 + +... or download the new version. diff --git a/doc/release-notes/release-notes-0.3.20.md b/doc/release-notes/release-notes-0.3.20.md new file mode 100644 index 00000000..9ae21802 --- /dev/null +++ b/doc/release-notes/release-notes-0.3.20.md @@ -0,0 +1,22 @@ +Please checkout the git integration branch from: + +https://github.com/bitcoin/bitcoin + +... and help test. The new features that need testing are: + +* -nolisten : https://github.com/bitcoin/bitcoin/pull/11 +* -rescan : scan block chain for missing wallet transactions +* -printtoconsole : https://github.com/bitcoin/bitcoin/pull/37 +* RPC gettransaction details : https://github.com/bitcoin/bitcoin/pull/24 +* listtransactions new features : https://github.com/bitcoin/bitcoin/pull/10 + +Bug fixes that also need testing: + +* -maxconnections= : https://github.com/bitcoin/bitcoin/pull/42 +* RPC listaccounts minconf : https://github.com/bitcoin/bitcoin/pull/27 +* RPC move, add time to output : https://github.com/bitcoin/bitcoin/pull/21 +* ...and several improvements to --help output. + +This needs more testing on Windows! Please drop me a quick private message, email, or IRC message if you are able to do some testing. If you find bugs, please open an issue at: + +https://github.com/bitcoin/bitcoin/issues diff --git a/doc/release-notes/release-notes-0.3.21.md b/doc/release-notes/release-notes-0.3.21.md new file mode 100644 index 00000000..f3b6bc42 --- /dev/null +++ b/doc/release-notes/release-notes-0.3.21.md @@ -0,0 +1,20 @@ +Binaries for Bitcoin version 0.3.21 are available at: + https://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.21/ + +Changes and new features from the 0.3.20 release include: + +* Universal Plug and Play support. Enable automatic opening of a port for incoming connections by running bitcoin or bitcoind with the - -upnp=1 command line switch or using the Options dialog box. + +* Support for full-precision bitcoin amounts. You can now send, and bitcoin will display, bitcoin amounts smaller than 0.01. However, sending fewer than 0.01 bitcoins still requires a 0.01 bitcoin fee (so you can send 1.0001 bitcoins without a fee, but you will be asked to pay a fee if you try to send 0.0001). + +* A new method of finding bitcoin nodes to connect with, via DNS A records. Use the -dnsseed option to enable. + +For developers, changes to bitcoin's remote-procedure-call API: + +* New rpc command "sendmany" to send bitcoins to more than one address in a single transaction. + +* Several bug fixes, including a serious intermittent bug that would sometimes cause bitcoind to stop accepting rpc requests. + +* -logtimestamps option, to add a timestamp to each line in debug.log. + +* Immature blocks (newly generated, under 120 confirmations) are now shown in listtransactions. diff --git a/doc/release-notes/release-notes-0.3.22.md b/doc/release-notes/release-notes-0.3.22.md new file mode 100644 index 00000000..4c05e3e5 --- /dev/null +++ b/doc/release-notes/release-notes-0.3.22.md @@ -0,0 +1,16 @@ +Download URL: https://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.22/ + +This is largely a bugfix and TX fee schedule release. We also hope to make 0.3.23 a quick release, to fix problems that the network has seen due to explosive growth in the past week. + +Notable changes: +* Client will accept and relay TX's with 0.0005 BTC fee schedule (users still pay 0.01 BTC per kb, until next version) +* Non-standard transactions accepted on testnet +* Source code tree reorganized (prep for autotools build) +* Remove "Generate Coins" option from GUI, and remove 4way SSE miner. Internal reference CPU miner remains available, but users are directed to external miners for best hash production. +* IRC is overflowing. Client now bootstraps to channels #bitcoin00 - #bitcoin99 +* DNS names now may be used with -addnode, -connect (requires -dns to enable) + +RPC changes: +* 'listtransactions' adds 'from' param, for range queries +* 'move' may take account balances negative +* 'settxfee' added, to manually set TX fee diff --git a/doc/release-notes/release-notes-0.3.23.md b/doc/release-notes/release-notes-0.3.23.md new file mode 100644 index 00000000..c1d520e4 --- /dev/null +++ b/doc/release-notes/release-notes-0.3.23.md @@ -0,0 +1,10 @@ +Win32, Linux, MacOSX and source releases for bitcoin v0.3.23 have been uploaded to +https://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.23/ + +This is another quick bugfix release, trying to deal with the influx of new bitcoin users. + +Main items of note: + +* P2P connect-to-node logic changed to reduce timeout a bit. The network saw a huge influx of new users, who do not permit incoming connections. This change is a short-term hack, to more quickly hunt for useful P2P connections. Better "leaf node" logic is in the works, but this should let us limp along until then. One may use -upnp to properly forward ports, and help the network. +* Transaction fee reduced to 0.0005 for new transactions +* Client will relay transactions with fees as low as 0.0001 BTC diff --git a/doc/release-notes/release-notes-0.3.24.md b/doc/release-notes/release-notes-0.3.24.md new file mode 100644 index 00000000..d35ac66f --- /dev/null +++ b/doc/release-notes/release-notes-0.3.24.md @@ -0,0 +1,20 @@ +Bitcoin v0.3.24 is now available for download at +https://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.24/ + +This is another bug fix release. We had hoped to have wallet encryption ready for release, but more urgent fixes for existing clients were needed -- most notably block download problems were getting severe. Wallet encryption is ready for testing at https://github.com/bitcoin/bitcoin/pull/352 for the git-savvy, and hopefully will follow shortly in the next release, v0.4. + +Notable fixes in v0.3.24, and the main reasons for this release: + +F1) Block downloads were failing or taking unreasonable amounts of time to complete, because the increased size of the block chain was bumping up against some earlier buffer-size DoS limits. + +F2) Fix crash caused by loss/lack of network connection. + +Notable changes in v0.3.24: + +C1) DNS seeding enabled by default. + +C2) UPNP enabled by default in the GUI client. The percentage of bitcoin clients that accept incoming connections is quite small, and that is a problem. This should help. bitcoind, and unofficial builds, are unchanged (though we encourage use of "-upnp" to help the network!) + +C3) Initial unit testing framework. Bitcoin sorely needs automated tests, and this is a beginning. Contributions welcome. + +C4) Internal wallet code cleanup. While invisible to an end user, this change provides the basis for v0.4's wallet encryption. diff --git a/doc/release-notes/release-notes-0.4.0.md b/doc/release-notes/release-notes-0.4.0.md new file mode 100644 index 00000000..145072a3 --- /dev/null +++ b/doc/release-notes/release-notes-0.4.0.md @@ -0,0 +1,70 @@ +Bitcoin version 0.4.0 is now available for download at: +http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.4.0/ + +The main feature in this release is wallet private key encryption; +you can set a passphrase that must be entered before sending coins. +See below for more information; if you decide to encrypt your wallet, +WRITE DOWN YOUR PASSPHRASE AND PUT IT IN A SECURE LOCATION. If you +forget or lose your wallet passphrase, you lose your bitcoins. +Previous versions of bitcoin are unable to read encrypted wallets, +and will crash on startup if the wallet is encrypted. + +Also note: bitcoin version 0.4 uses a newer version of Berkeley DB +(bdb version 4.8) than previous versions (bdb 4.7). If you upgrade +to version 0.4 and then revert back to an earlier version of bitcoin +the it may be unable to start because bdb 4.7 cannot read bdb 4.8 +"log" files. + + +Notable bug fixes from version 0.3.24: + +Fix several bitcoin-becomes-unresponsive bugs due to multithreading +deadlocks. + +Optimize database writes for large (lots of inputs) transactions +(fixes a potential denial-of-service attack) + + +Wallet Encryption + +Bitcoin supports native wallet encryption so that people who steal your +wallet file don't automatically get access to all of your Bitcoins. +In order to enable this feature, choose "Encrypt Wallet" from the +Options menu. You will be prompted to enter a passphrase, which +will be used as the key to encrypt your wallet and will be needed +every time you wish to send Bitcoins. If you lose this passphrase, +you will lose access to spend all of the bitcoins in your wallet, +no one, not even the Bitcoin developers can recover your Bitcoins. +This means you are responsible for your own security, store your +passphrase in a secure location and do not forget it. + +Remember that the encryption built into bitcoin only encrypts the +actual keys which are required to send your bitcoins, not the full +wallet. This means that someone who steals your wallet file will +be able to see all the addresses which belong to you, as well as the +relevant transactions, you are only protected from someone spending +your coins. + +It is recommended that you backup your wallet file before you +encrypt your wallet. To do this, close the Bitcoin client and +copy the wallet.dat file from ~/.bitcoin/ on Linux, /Users/(user +name)/Application Support/Bitcoin/ on Mac OSX, and %APPDATA%/Bitcoin/ +on Windows (that is /Users/(user name)/AppData/Roaming/Bitcoin on +Windows Vista and 7 and /Documents and Settings/(user name)/Application +Data/Bitcoin on Windows XP). Once you have copied that file to a +safe location, reopen the Bitcoin client and Encrypt your wallet. +If everything goes fine, delete the backup and enjoy your encrypted +wallet. Note that once you encrypt your wallet, you will never be +able to go back to a version of the Bitcoin client older than 0.4. + +Keep in mind that you are always responsible for your own security. +All it takes is a slightly more advanced wallet-stealing trojan which +installs a keylogger to steal your wallet passphrase as you enter it +in addition to your wallet file and you have lost all your Bitcoins. +Wallet encryption cannot keep you safe if you do not practice +good security, such as running up-to-date antivirus software, only +entering your wallet passphrase in the Bitcoin client and using the +same passphrase only as your wallet passphrase. + +See the doc/README file in the bitcoin source for technical details +of wallet encryption. diff --git a/doc/release-notes/release-notes-0.4.1.md b/doc/release-notes/release-notes-0.4.1.md new file mode 100644 index 00000000..ac471a8d --- /dev/null +++ b/doc/release-notes/release-notes-0.4.1.md @@ -0,0 +1,38 @@ +Bitcoin version 0.4.1 is now available for download at: +http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.4.1/ + +This is a bugfix only release based on 0.4.0. + +Please report bugs by replying to this forum thread. + +MAJOR BUG FIX (CVE-2011-4447) + +The wallet encryption feature introduced in Bitcoin version 0.4.0 did not sufficiently secure the private keys. An attacker who +managed to get a copy of your encrypted wallet.dat file might be able to recover some or all of the unencrypted keys and steal the +associated coins. + +If you have a previously encrypted wallet.dat, the first time you run wxbitcoin or bitcoind the wallet will be rewritten, Bitcoin will +shut down, and you will be prompted to restart it to run with the new, properly encrypted file. + +If you had a previously encrypted wallet.dat that might have been copied or stolen (for example, you backed it up to a public +location) you should send all of your bitcoins to yourself using a new bitcoin address and stop using any previously generated addresses. + +Wallets encrypted with this version of Bitcoin are written properly. + +Technical note: the encrypted wallet's 'keypool' will be regenerated the first time you request a new bitcoin address; to be certain that the +new private keys are properly backed up you should: + +1. Run Bitcoin and let it rewrite the wallet.dat file + +2. Run it again, then ask it for a new bitcoin address. +wxBitcoin: new address visible on main window +bitcoind: run the 'walletpassphrase' RPC command to unlock the wallet, then run the 'getnewaddress' RPC command. + +3. If your encrypted wallet.dat may have been copied or stolen, send all of your bitcoins to the new bitcoin address. + +4. Shut down Bitcoin, then backup the wallet.dat file. +IMPORTANT: be sure to request a new bitcoin address before backing up, so that the 'keypool' is regenerated and backed up. + +"Security in depth" is always a good idea, so choosing a secure location for the backup and/or encrypting the backup before uploading it is recommended. And as in previous releases, if your machine is infected by malware there are several ways an attacker might steal your bitcoins. + +Thanks to Alan Reiner (etotheipi) for finding and reporting this bug. diff --git a/doc/release-notes/release-notes-0.4.2.md b/doc/release-notes/release-notes-0.4.2.md new file mode 100644 index 00000000..6c5682ea --- /dev/null +++ b/doc/release-notes/release-notes-0.4.2.md @@ -0,0 +1 @@ +Never released or release notes were lost. diff --git a/doc/release-notes/release-notes-0.4.3.md b/doc/release-notes/release-notes-0.4.3.md new file mode 100644 index 00000000..fea1ae75 --- /dev/null +++ b/doc/release-notes/release-notes-0.4.3.md @@ -0,0 +1,21 @@ +bitcoind version 0.4.3 is now available for download at: +http://luke.dashjr.org/programs/bitcoin/files/bitcoind-0.4.3/ (until Gavin uploads to SourceForge) + +This is a bugfix-only release based on 0.4.0. + +Please note that the wxBitcoin GUI client is no longer maintained nor supported. If someone would like to step up to maintain this, they should contact Luke-Jr. + +Please report bugs for the daemon only using the issue tracker at github: +https://github.com/bitcoin/bitcoin/issues + +Stable source code is hosted at Gitorious: +http://gitorious.org/bitcoin/bitcoind-stable/archive-tarball/v0.4.3#.tar.gz + +BUG FIXES + +Cease locking memory used by non-sensitive information (this caused a huge performance hit on some platforms, especially noticable during initial blockchain download). +Fixed some address-handling deadlocks (client freezes). +No longer accept inbound connections over the internet when Bitcoin is being used with Tor (identity leak). +Use the correct base transaction fee of 0.0005 BTC for accepting transactions into mined blocks (since 0.4.0, it was incorrectly accepting 0.0001 BTC which was only meant to be relayed). +Add new DNS seeds (maintained by Pieter Wuille and Luke Dashjr). + diff --git a/doc/release-notes/release-notes-0.4.4.md b/doc/release-notes/release-notes-0.4.4.md new file mode 100644 index 00000000..f435ba71 --- /dev/null +++ b/doc/release-notes/release-notes-0.4.4.md @@ -0,0 +1,30 @@ +Bitcoin version 0.4.4 is now available for download at: +http://luke.dashjr.org/programs/bitcoin/files/bitcoind-0.4.4/ + +This is a bugfix-only release based on 0.4.0. + +Please note that the wxBitcoin GUI client is no longer maintained nor supported. If someone would like to step up to maintain this, they should contact Luke-Jr. + +Please report bugs for the daemon only using the issue tracker at github: +https://github.com/bitcoin/bitcoin/issues + +Stable source code is hosted at Gitorious: +http://gitorious.org/bitcoin/bitcoind-stable/archive-tarball/v0.4.4#.tar.gz + +BUG FIXES + +Limit the number of orphan transactions stored in memory, to prevent a potential denial-of-service attack by flooding orphan transactions. Also never store invalid transactions at all. +Fix possible buffer overflow on systems with very long application data paths. This is not exploitable. +Resolved multiple bugs preventing long-term unlocking of encrypted wallets (issue #922). +Only send local IP in "version" messages if it is globally routable (ie, not private), and try to get such an IP from UPnP if applicable. +Reannounce UPnP port forwards every 20 minutes, to workaround routers expiring old entries, and allow the -upnp option to override any stored setting. +Various memory leaks and potential null pointer deferences have been +fixed. +Several shutdown issues have been fixed. +Check that keys stored in the wallet are valid at startup, and if not, +report corruption. +Various build fixes. +If no password is specified to bitcoind, recommend a secure password. +Update hard-coded fallback seed nodes, choosing recent ones with long uptime and versions at least 0.4.0. +Add checkpoint at block 168,000. + diff --git a/doc/release-notes/release-notes-0.4.5.md b/doc/release-notes/release-notes-0.4.5.md new file mode 100644 index 00000000..6c5682ea --- /dev/null +++ b/doc/release-notes/release-notes-0.4.5.md @@ -0,0 +1 @@ +Never released or release notes were lost. diff --git a/doc/release-notes/release-notes-0.4.6.md b/doc/release-notes/release-notes-0.4.6.md new file mode 100644 index 00000000..07c5e4b6 --- /dev/null +++ b/doc/release-notes/release-notes-0.4.6.md @@ -0,0 +1,37 @@ +bitcoind version 0.4.6 is now available for download at: +Windows: installer | zip (sig) +Source: tar.gz +bitcoind and Bitcoin-Qt version 0.6.0.7 are also tagged in git, but it is recommended to upgrade to 0.6.1. + +These are bugfix-only releases. + +Please report bugs by replying to this forum thread. Note that the 0.4.x wxBitcoin GUI client is no longer maintained nor supported. If someone would like to step up to maintain this, they should contact Luke-Jr. + +BUG FIXES + +Version 0.6.0 allowed importing invalid "private keys", which would be unspendable; 0.6.0.7 will now verify the private key is valid, and refuse to import an invalid one +Verify status of encrypt/decrypt calls to detect failed padding +Check blocks for duplicate transactions earlier. Fixes #1167 +Upgrade Windows builds to OpenSSL 1.0.1b +Set label when selecting an address that already has a label. Fixes #1080 (Bitcoin-Qt) +JSON-RPC listtransactions's from/count handling is now fixed +Optimize and fix multithreaded access, when checking whether we already know about transactions +Fix potential networking deadlock +Proper support for Growl 1.3 notifications +Display an error, rather than crashing, if encoding a QR Code failed (0.6.0.7) +Don't erroneously set "Display addresses" for users who haven't explicitly enabled it (Bitcoin-Qt) +Some non-ASCII input in JSON-RPC expecting hexadecimal may have been misinterpreted rather than rejected +Missing error condition checking added +Do not show green tick unless all known blocks are downloaded. Fixes #921 (Bitcoin-Qt) +Increase time ago of last block for "up to date" status from 30 to 90 minutes +Show a message box when runaway exception happens (Bitcoin-Qt) +Use a messagebox to display the error when -server is provided without providing a rpc password +Show error message instead of exception crash when unable to bind RPC port (Bitcoin-Qt) +Correct sign message bitcoin address tooltip. Fixes #1050 (Bitcoin-Qt) +Removed "(no label)" from QR Code dialog titlebar if we have no label (0.6.0.7) +Removed an ugly line break in tooltip for mature transactions (0.6.0.7) +Add missing tooltip and key shortcut in settings dialog (part of #1088) (Bitcoin-Qt) +Work around issue in boost::program_options that prevents from compiling in clang +Fixed bugs occurring only on platforms with unsigned characters (such as ARM). +Rename make_windows_icon.py to .sh as it is a shell script. Fixes #1099 (Bitcoin-Qt) +Various trivial internal corrections to types used for counting/size loops and warnings diff --git a/doc/release-notes/release-notes-0.5.0.md b/doc/release-notes/release-notes-0.5.0.md new file mode 100644 index 00000000..baa409b5 --- /dev/null +++ b/doc/release-notes/release-notes-0.5.0.md @@ -0,0 +1,70 @@ +Bitcoin version 0.5.0 is now available for download at: +http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.5.0/ + +The major change for this release is a completely new graphical interface that uses the Qt user interface toolkit. + +This release include German, Spanish, Spanish-Castilian, Norwegian and Dutch translations. More translations are welcome; join the project at Transifex if you can help: +https://www.transifex.net/projects/p/bitcoin/ + +Please report bugs using the issue tracker at github: +https://github.com/bitcoin/bitcoin/issues + +For Ubuntu users, there is a new ppa maintained by Matt Corallo which you can add to your system so that it will automatically keep bitcoin up-to-date. Just type "sudo apt-add-repository ppa:bitcoin/bitcoin" in your terminal, then install the bitcoin-qt package. + +MAJOR BUG FIX (CVE-2011-4447) + +The wallet encryption feature introduced in Bitcoin version 0.4.0 did not sufficiently secure the private keys. An attacker who +managed to get a copy of your encrypted wallet.dat file might be able to recover some or all of the unencrypted keys and steal the +associated coins. + +If you have a previously encrypted wallet.dat, the first time you run bitcoin-qt or bitcoind the wallet will be rewritten, Bitcoin will +shut down, and you will be prompted to restart it to run with the new, properly encrypted file. + +If you had a previously encrypted wallet.dat that might have been copied or stolen (for example, you backed it up to a public +location) you should send all of your bitcoins to yourself using a new bitcoin address and stop using any previously generated addresses. + +Wallets encrypted with this version of Bitcoin are written properly. + +Technical note: the encrypted wallet's 'keypool' will be regenerated the first time you request a new bitcoin address; to be certain that the +new private keys are properly backed up you should: + +1. Run Bitcoin and let it rewrite the wallet.dat file + +2. Run it again, then ask it for a new bitcoin address. +Bitcoin-Qt: Address Book, then New Address... +bitcoind: run the 'walletpassphrase' RPC command to unlock the wallet, then run the 'getnewaddress' RPC command. + +3. If your encrypted wallet.dat may have been copied or stolen, send all of your bitcoins to the new bitcoin address. + +4. Shut down Bitcoin, then backup the wallet.dat file. +IMPORTANT: be sure to request a new bitcoin address before backing up, so that the 'keypool' is regenerated and backed up. + +"Security in depth" is always a good idea, so choosing a secure location for the backup and/or encrypting the backup before uploading it is recommended. And as in previous releases, if your machine is infected by malware there are several ways an attacker might steal your bitcoins. + +Thanks to Alan Reiner (etotheipi) for finding and reporting this bug. + +MAJOR GUI CHANGES + +"Splash" graphics at startup that show address/wallet/blockchain loading progress. + +"Synchronizing with network" progress bar to show block-chain download progress. + +Icons at the bottom of the window that show how well connected you are to the network, with tooltips to display details. + +Drag and drop support for bitcoin: URIs on web pages. + +Export transactions as a .csv file. + +Many other GUI improvements, large and small. + +RPC CHANGES + +getmemorypool : new RPC command, provides everything needed to construct a block with a custom generation transaction and submit a solution + +listsinceblock : new RPC command, list transactions since given block + +signmessage/verifymessage : new RPC commands to sign a message with one of your private keys or verify that a message signed by the private key associated with a bitcoin address. + +GENERAL CHANGES + +Faster initial block download. diff --git a/doc/release-notes/release-notes-0.5.1.md b/doc/release-notes/release-notes-0.5.1.md new file mode 100644 index 00000000..d56bff6d --- /dev/null +++ b/doc/release-notes/release-notes-0.5.1.md @@ -0,0 +1,43 @@ +Bitcoin version 0.5.1 is now available for download at: +http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.5.1/ + +This is a bugfix-only release. + +This release includes 13 translations, including 5 new translations: +Italian, Hungarian, Ukranian, Portuguese (Brazilian) and Simplified Chinese. +More translations are welcome; join the project at Transifex if you can help: +https://www.transifex.net/projects/p/bitcoin/ + +Please report bugs using the issue tracker at github: +https://github.com/bitcoin/bitcoin/issues + +Project source code is hosted at github; we are no longer +distributing .tar.gz files here, you can get them +directly from github: +https://github.com/bitcoin/bitcoin/tarball/v0.5.1 # .tar.gz +https://github.com/bitcoin/bitcoin/zipball/v0.5.1 # .zip + +For Ubuntu users, there is a new ppa maintained by Matt Corallo which +you can add to your system so that it will automatically keep +bitcoin up-to-date. Just type +sudo apt-add-repository ppa:bitcoin/bitcoin +in your terminal, then install the bitcoin-qt package. + + +BUG FIXES + +Re-enable SSL support for the JSON-RPC interface (it was unintentionally +disabled for the 0.5.0 release binaries). + +The code that finds peers via "dns seeds" no longer stops bitcoin startup +if one of the dns seed machines is down. + +Tooltips on the transaction list view were rendering incorrectly (as black boxes +or with a transparent background). + +Prevent a denial-of-service attack involving flooding a bitcoin node with +orphan blocks. + +The wallet passphrase dialog now warns you if the caps lock key was pressed. + +Improved searching in addresses and labels in bitcoin-qt. diff --git a/doc/release-notes/release-notes-0.5.2.md b/doc/release-notes/release-notes-0.5.2.md new file mode 100644 index 00000000..f7981666 --- /dev/null +++ b/doc/release-notes/release-notes-0.5.2.md @@ -0,0 +1,22 @@ +Bitcoin version 0.5.2 is now available for download at: +http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.5.2/ + +This is a bugfix-only release based on 0.5.1. + +Please report bugs using the issue tracker at github: +https://github.com/bitcoin/bitcoin/issues + +Stable source code is hosted at Gitorious: +http://gitorious.org/bitcoin/bitcoind-stable/archive-tarball/v0.5.2#.tar.gz + +BUG FIXES + +Check all transactions in blocks after the last checkpoint (0.5.0 and 0.5.1 skipped checking ECDSA signatures during initial blockchain download). +Cease locking memory used by non-sensitive information (this caused a huge performance hit on some platforms, especially noticable during initial blockchain download; this was +not a security vulnerability). +Fixed some address-handling deadlocks (client freezes). +No longer accept inbound connections over the internet when Bitcoin is being used with Tor (identity leak). +Re-enable SSL support for the JSON-RPC interface (it was unintentionally disabled for the 0.5.0 and 0.5.1 release Linux binaries). +Use the correct base transaction fee of 0.0005 BTC for accepting transactions into mined blocks (since 0.4.0, it was incorrectly accepting 0.0001 BTC which was only meant to be relayed). +Don't show "IP" for transactions which are not necessarily IP transactions. +Add new DNS seeds (maintained by Pieter Wuille and Luke Dashjr). diff --git a/doc/release-notes/release-notes-0.5.3.md b/doc/release-notes/release-notes-0.5.3.md new file mode 100644 index 00000000..7c84c533 --- /dev/null +++ b/doc/release-notes/release-notes-0.5.3.md @@ -0,0 +1,42 @@ +Bitcoin version 0.5.3 is now available for download at: +http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.5.3/ + +This is a bugfix-only release based on 0.5.1. +It also includes a few protocol updates. + +Please report bugs using the issue tracker at github: +https://github.com/bitcoin/bitcoin/issues + +Stable source code is hosted at Gitorious: +http://gitorious.org/bitcoin/bitcoind-stable/archive-tarball/v0.5.3#.tar.gz + +PROTOCOL UPDATES + +BIP 30: Introduce a new network rule: "a block is not valid if it contains a transaction whose hash already exists in the block chain, unless all that transaction's outputs were already spent before said block" beginning on March 15, 2012, 00:00 UTC. +On testnet, allow mining of min-difficulty blocks if 20 minutes have gone by without mining a regular-difficulty block. This is to make testing Bitcoin easier, and will not affect normal mode. + +BUG FIXES + +Limit the number of orphan transactions stored in memory, to prevent a potential denial-of-service attack by flooding orphan transactions. Also never store invalid transactions at all. +Fix possible buffer overflow on systems with very long application data paths. This is not exploitable. +Resolved multiple bugs preventing long-term unlocking of encrypted wallets +(issue #922). +Only send local IP in "version" messages if it is globally routable (ie, not private), and try to get such an IP from UPnP if applicable. +Reannounce UPnP port forwards every 20 minutes, to workaround routers expiring old entries, and allow the -upnp option to override any stored setting. +Skip splash screen when -min is used, and fix Minimize to Tray function. +Do not blank "label" in Bitcoin-Qt "Send" tab, if the user has already entered something. +Correct various labels and messages. +Various memory leaks and potential null pointer deferences have been fixed. +Handle invalid Bitcoin URIs using "bitcoin://" instead of "bitcoin:". +Several shutdown issues have been fixed. +Revert to "global progress indication", as starting from zero every time was considered too confusing for many users. +Check that keys stored in the wallet are valid at startup, and if not, report corruption. +Enable accessible widgets on Windows, so that people with screen readers such as NVDA can make sense of it. +Various build fixes. +If no password is specified to bitcoind, recommend a secure password. +Automatically focus and scroll to new "Send coins" entries in Bitcoin-Qt. +Show a message box for --help on Windows, for Bitcoin-Qt. +Add missing "About Qt" menu option to show built-in Qt About dialog. +Don't show "-daemon" as an option for Bitcoin-Qt, since it isn't available. +Update hard-coded fallback seed nodes, choosing recent ones with long uptime and versions at least 0.4.0. +Add checkpoint at block 168,000. diff --git a/doc/release-notes/release-notes-0.5.4.md b/doc/release-notes/release-notes-0.5.4.md new file mode 100644 index 00000000..fcde3ac4 --- /dev/null +++ b/doc/release-notes/release-notes-0.5.4.md @@ -0,0 +1,39 @@ +Bitcoin version 0.5.4 is now available for download at: +http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.5.4/ +NOTE: 0.5.4rc3 is being renamed to 0.5.4 final with no changes. + +This is a bugfix-only release in the 0.5.x series, plus a few protocol updates. + +Please report bugs using the issue tracker at github: +https://github.com/bitcoin/bitcoin/issues + +Stable source code is hosted at Gitorious: +http://gitorious.org/bitcoin/bitcoind-stable/archive-tarball/v0.5.4#.tar.gz + +PROTOCOL UPDATES + +BIP 16: Special-case "pay to script hash" logic to enable minimal validation of new transactions. +Support for validating message signatures produced with compressed public keys. + +BUG FIXES + +Build with thread-safe MingW libraries for Windows, fixing a dangerous memory corruption scenario when exceptions are thrown. +Fix broken testnet mining. +Stop excess inventory relay during initial block download. +When disconnecting a node, clear the received buffer so that we do not process any already received messages. +Yet another attempt at implementing "minimize to tray" that works on all operating systems. +Fix Bitcoin-Qt notifications under Growl 1.3. +Increase required age of Bitcoin-Qt's "not up to date" status from 30 to 90 minutes. +Implemented missing verifications that led to crash on entering some wrong passphrases for encrypted wallets. +Fix default filename suffixes in GNOME save dialog. +Make the "Send coins" tab use the configured unit type, even on the first attempt. +Print detailed wallet loading errors to debug.log when it is corrupt. +Allocate exactly the amount of space needed for signing transactions, instead of a fixed 10k buffer. +Workaround for improbable memory access violation. +Check wallet's minimum version before trying to load it. +Remove wxBitcoin properly when installing Bitcoin-Qt over it. (Windows) +Detail reorganization information better in debug log. +Use a messagebox to display the error when -server is provided without configuring a RPC password. +Testing suite build now honours provided CXXFLAGS. +Removed an extraneous line-break in mature transaction tooltips. +Fix some grammatical errors in translation process documentation. diff --git a/doc/release-notes/release-notes-0.5.5.md b/doc/release-notes/release-notes-0.5.5.md new file mode 100644 index 00000000..75ebc3e6 --- /dev/null +++ b/doc/release-notes/release-notes-0.5.5.md @@ -0,0 +1,37 @@ +bitcoind and Bitcoin-Qt version 0.5.5 are now available for download at: +Windows: installer | zip (sig) +Source: tar.gz +bitcoind and Bitcoin-Qt version 0.6.0.7 are also tagged in git, but it is recommended to upgrade to 0.6.1. + +These are bugfix-only releases. + +Please report bugs by replying to this forum thread. Note that the 0.4.x wxBitcoin GUI client is no longer maintained nor supported. If someone would like to step up to maintain this, they should contact Luke-Jr. + +BUG FIXES + +Version 0.6.0 allowed importing invalid "private keys", which would be unspendable; 0.6.0.7 will now verify the private key is valid, and refuse to import an invalid one +Verify status of encrypt/decrypt calls to detect failed padding +Check blocks for duplicate transactions earlier. Fixes #1167 +Upgrade Windows builds to OpenSSL 1.0.1b +Set label when selecting an address that already has a label. Fixes #1080 (Bitcoin-Qt) +JSON-RPC listtransactions's from/count handling is now fixed +Optimize and fix multithreaded access, when checking whether we already know about transactions +Fix potential networking deadlock +Proper support for Growl 1.3 notifications +Display an error, rather than crashing, if encoding a QR Code failed (0.6.0.7) +Don't erroneously set "Display addresses" for users who haven't explicitly enabled it (Bitcoin-Qt) +Some non-ASCII input in JSON-RPC expecting hexadecimal may have been misinterpreted rather than rejected +Missing error condition checking added +Do not show green tick unless all known blocks are downloaded. Fixes #921 (Bitcoin-Qt) +Increase time ago of last block for "up to date" status from 30 to 90 minutes +Show a message box when runaway exception happens (Bitcoin-Qt) +Use a messagebox to display the error when -server is provided without providing a rpc password +Show error message instead of exception crash when unable to bind RPC port (Bitcoin-Qt) +Correct sign message bitcoin address tooltip. Fixes #1050 (Bitcoin-Qt) +Removed "(no label)" from QR Code dialog titlebar if we have no label (0.6.0.7) +Removed an ugly line break in tooltip for mature transactions (0.6.0.7) +Add missing tooltip and key shortcut in settings dialog (part of #1088) (Bitcoin-Qt) +Work around issue in boost::program_options that prevents from compiling in clang +Fixed bugs occurring only on platforms with unsigned characters (such as ARM). +Rename make_windows_icon.py to .sh as it is a shell script. Fixes #1099 (Bitcoin-Qt) +Various trivial internal corrections to types used for counting/size loops and warnings diff --git a/doc/release-notes/release-notes-0.6.0.md b/doc/release-notes/release-notes-0.6.0.md new file mode 100644 index 00000000..1963a362 --- /dev/null +++ b/doc/release-notes/release-notes-0.6.0.md @@ -0,0 +1,138 @@ +Bitcoin version 0.6.0 is now available for download at: +http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.6.0/test/ + +This release includes more than 20 language localizations. +More translations are welcome; join the +project at Transifex to help: +https://www.transifex.net/projects/p/bitcoin/ + +Please report bugs using the issue tracker at github: +https://github.com/bitcoin/bitcoin/issues + +Project source code is hosted at github; we are no longer +distributing .tar.gz files here, you can get them +directly from github: +https://github.com/bitcoin/bitcoin/tarball/v0.6.0 # .tar.gz +https://github.com/bitcoin/bitcoin/zipball/v0.6.0 # .zip + +For Ubuntu users, there is a ppa maintained by Matt Corallo which +you can add to your system so that it will automatically keep +bitcoin up-to-date. Just type +sudo apt-add-repository ppa:bitcoin/bitcoin +in your terminal, then install the bitcoin-qt package. + + +KNOWN ISSUES + +Shutting down while synchronizing with the network +(downloading the blockchain) can take more than a minute, +because database writes are queued to speed up download +time. + + +NEW FEATURES SINCE BITCOIN VERSION 0.5 + +Initial network synchronization should be much faster +(one or two hours on a typical machine instead of ten or more +hours). + +Backup Wallet menu option. + +Bitcoin-Qt can display and save QR codes for sending +and receiving addresses. + +New context menu on addresses to copy/edit/delete them. + +New Sign Message dialog that allows you to prove that you +own a bitcoin address by creating a digital +signature. + +New wallets created with this version will +use 33-byte 'compressed' public keys instead of +65-byte public keys, resulting in smaller +transactions and less traffic on the bitcoin +network. The shorter keys are already supported +by the network but wallet.dat files containing +short keys are not compatible with earlier +versions of Bitcoin-Qt/bitcoind. + +New command-line argument -blocknotify= +that will spawn a shell process to run +when a new block is accepted. + +New command-line argument -splash=0 to disable +Bitcoin-Qt's initial splash screen + +validateaddress JSON-RPC api command output includes +two new fields for addresses in the wallet: +pubkey : hexadecimal public key +iscompressed : true if pubkey is a short 33-byte key + +New JSON-RPC api commands for dumping/importing +private keys from the wallet (dumprivkey, importprivkey). + +New JSON-RPC api command for getting information about +blocks (getblock, getblockhash). + +New JSON-RPC api command (getmininginfo) for getting +extra information related to mining. The getinfo +JSON-RPC command no longer includes mining-related +information (generate/genproclimit/hashespersec). + + + +NOTABLE CHANGES + +BIP30 implemented (security fix for an attack involving +duplicate "coinbase transactions"). + +The -nolisten, -noupnp and -nodnsseed command-line +options were renamed to -listen, -upnp and -dnsseed, +with a default value of 1. The old names are still +supported for compatibility (so specifying -nolisten +is automatically interpreted as -listen=0; every +boolean argument can now be specified as either +-foo or -nofoo). + +The -noirc command-line options was renamed to +-irc, with a default value of 0. Run -irc=1 to +get the old behavior. + +Three fill-up-available-memory denial-of-service +attacks were fixed. + + +NOT YET IMPLEMENTED FEATURES + +Support for clicking on bitcoin: URIs and +opening/launching Bitcoin-Qt is available only on Linux, +and only if you configure your desktop to launch +Bitcoin-Qt. All platforms support dragging and dropping +bitcoin: URIs onto the Bitcoin-Qt window to start +payment. + + +PRELIMINARY SUPPORT FOR MULTISIGNATURE TRANSACTIONS + +This release has preliminary support for multisignature +transactions-- transactions that require authorization +from more than one person or device before they +will be accepted by the bitcoin network. + +Prior to this release, multisignature transactions +were considered 'non-standard' and were ignored; +with this release multisignature transactions are +considered standard and will start to be relayed +and accepted into blocks. + +It is expected that future releases of Bitcoin-Qt +will support the creation of multisignature transactions, +once enough of the network has upgraded so relaying +and validating them is robust. + +For this release, creation and testing of multisignature +transactions is limited to the bitcoin test network using +the "addmultisigaddress" JSON-RPC api call. + +Short multisignature address support is included in this +release, as specified in BIP 13 and BIP 16. diff --git a/doc/release-notes/release-notes-0.6.1.md b/doc/release-notes/release-notes-0.6.1.md new file mode 100644 index 00000000..ef7966ec --- /dev/null +++ b/doc/release-notes/release-notes-0.6.1.md @@ -0,0 +1,2 @@ +Never released + diff --git a/doc/release-notes/release-notes-0.6.2.md b/doc/release-notes/release-notes-0.6.2.md new file mode 100644 index 00000000..bb85fb23 --- /dev/null +++ b/doc/release-notes/release-notes-0.6.2.md @@ -0,0 +1,50 @@ +Bitcoin version 0.6.2 is now available for download at: +http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.6.2/ + +This is a bug-fix and code-cleanup release, with no major new features. + +Please report bugs using the github issue tracker at: +https://github.com/bitcoin/bitcoin/issues + + +NOTABLE CHANGES + +Much faster shutdowns. However, the blkindex.dat file is no longer +portable to different data directories by default. If you need a +portable blkindex.dat file then run with the new -detachdb=1 option +or the "Detach databases at shutdown" GUI preference. + +Fixed https://github.com/bitcoin/bitcoin/issues/1065, a bug that +could cause long-running nodes to crash. + +Mac and Windows binaries are compiled against OpenSSL 1.0.1b (Linux +binaries are dynamically linked to the version of OpenSSL on the system). + + +CHANGE SUMMARY + +Use 'git shortlog --no-merges v0.6.0..' for a summary of this release. + +Source codebase changes: +- Many source code cleanups and warnings fixes. Close to building with -Wall +- Locking overhaul, and several minor locking fixes +- Several source code portability fixes, e.g. FreeBSD + +JSON-RPC interface changes: +- addmultisigaddress enabled for mainnet (previously only enabled for testnet) + +Network protocol changes: +- protocol version 60001 +- added nonce value to "ping" message (BIP 31) +- added new "pong" message (BIP 31) + +Backend storage changes: +- Less redundant database flushing, especially during initial block download +- Shutdown improvements (see above) + +Qt user interface: +- minor URI handling improvements +- progressbar improvements +- error handling improvements (show message box rather than console exception, +etc.) +- by popular request, make 4th bar of connection icon green diff --git a/doc/release-notes/release-notes-0.6.3.md b/doc/release-notes/release-notes-0.6.3.md new file mode 100644 index 00000000..28bb20e1 --- /dev/null +++ b/doc/release-notes/release-notes-0.6.3.md @@ -0,0 +1,29 @@ +Bitcoin version 0.6.3 is now available for download at: + http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.6.3/ + +This is a bug-fix release, with no new features. + +Please report bugs using the issue tracker at github: + https://github.com/bitcoin/bitcoin/issues + +CHANGE SUMMARY + +Fixed a serious denial-of-service attack that could cause the +bitcoin process to become unresponsive. Thanks to Sergio Lerner +for finding and responsibly reporting the problem. (CVE-2012-3789) + +Optimized the process of checking transaction signatures, to +speed up processing of new block messages and make propagating +blocks across the network faster. + +Fixed an obscure bug that could cause the bitcoin process to get +stuck on an invalid block-chain, if the invalid chain was +hundreds of blocks long. + +Bitcoin-Qt no longer automatically selects the first address +in the address book (Issue #1384). + +Fixed minimize-to-dock behavior of Bitcon-Qt on the Mac. + +Added a block checkpoint at block 185,333 to speed up initial +blockchain download. diff --git a/doc/release-notes/release-notes-0.7.0.md b/doc/release-notes/release-notes-0.7.0.md new file mode 100644 index 00000000..d33a58f9 --- /dev/null +++ b/doc/release-notes/release-notes-0.7.0.md @@ -0,0 +1,169 @@ +Bitcoin version 0.7.0 is now available for download at: + http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.7.0/ + +We recommend that everybody running prior versions of bitcoind/Bitcoin-Qt +upgrade to this release, except for users running Mac OSX 10.5. + +Please report bugs using the issue tracker at github: + https://github.com/bitcoin/bitcoin/issues + +Project source code is hosted at github; you can get +source-only tarballs/zipballs directly from there: + https://github.com/bitcoin/bitcoin/tarball/v0.7.0 # .tar.gz + https://github.com/bitcoin/bitcoin/zipball/v0.7.0 # .zip + +Ubuntu Linux users can use the "Personal Package Archive" (PPA) +maintained by Matt Corallo to automatically keep +bitcoin up-to-date. Just type + sudo apt-add-repository ppa:bitcoin/bitcoin + sudo apt-get update +in your terminal, then install the bitcoin-qt package: + sudo apt-get install bitcoin-qt + + +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 +Code: +/Applications/Bitcoin-Qt +(on Mac) or +Code: +bitcoind/bitcoin-qt +(on Linux). + +If you were running on Linux with a version that might have been compiled +with a different version of Berkeley DB (for example, if you were using the +PPA and are switching to the binary release), then run the old version again +with the -detachdb argument and shut it down; if you do not, then the new +version will not be able to read the database files and will exit with an error. + +Incompatible Changes + +* Replaced the 'getmemorypool' RPC command with 'getblocktemplate/submitblock' + and 'getrawmempool' commands. +* Remove deprecated RPC 'getblocknumber' + +Bitcoin Improvement Proposals implemented + +BIP 22 - 'getblocktemplate', 'submitblock' RPCs +BIP 34 - block version 2, height in coinbase +BIP 35 - 'mempool' message, extended 'getdata' message behavior + + +Core bitcoin handling and blockchain database + +* Reduced CPU usage, by eliminating some redundant hash calculations +* Cache signature verifications, to eliminate redundant signature checks +* Transactions with zero-value outputs are considered non-standard +* Mining: when creating new blocks, sort 'paid' area by fee-per-kb +* Database: better validation of on-disk stored data +* Database: minor optimizations and reliability improvements +* -loadblock=FILE will import an external block file +* Additional DoS (denial-of-service) prevention measures +* New blockchain checkpoint at block 193,000 + + +JSON-RPC API + +* Internal HTTP server is now thread-per-connection, rather than + a single-threaded queue that would stall on network I/O. +* Internal HTTP server supports HTTP/1.1, pipelined requests and + connection keep-alive. +* Support JSON-RPC 2.0 batches, to encapsulate multiple JSON-RPC requests + within a single HTTP request. +* IPv6 support +* Added raw transaction API. See https://gist.github.com/2839617 +* Added 'getrawmempool', to list contents of TX memory pool +* Added 'getpeerinfo', to list data about each connected network peer +* Added 'listaddressgroupings' for better coin control +* Rework getblock call. +* Remove deprecated RPC 'getblocknumber' +* Remove superceded RPC 'getmemorypool' (see BIP 22, above) +* listtransactions output now displays "smart" times for transactions, + and 'blocktime' and 'timereceived' fields were added + + +P2P networking + +* IPv6 support +* Tor hidden service support (see doc/Tor.txt) +* Attempts to fix "stuck blockchain download" problems +* Replace BDB database "addr.dat" with internally-managed "peers.dat" + file containing peer address data. +* Lower default send buffer from 10MB to 1MB +* proxy: SOCKS5 by default +* Support connecting by hostnames passed to proxy +* Add -seednode connections, and use this instead of DNS seeds when proxied +* Added -externalip and -discover +* Add -onlynet to connect only to a given network (IPv4, IPv6, or Tor) +* Separate listening sockets, -bind= + + +Qt GUI + +* Add UI RPC console / debug window +* Re-Enable URI handling on Windows, add safety checks and tray-notifications +* Harmonize the use of ellipsis ("...") to be used in menus, but not on buttons +* Add 2 labels to the overviewpage that display Wallet and Transaction status (obsolete or current) +* Extend the optionsdialog (e.g. language selection) and re-work it to a tabbed UI +* Merge sign/verify message into a single window with tabbed UI +* Ensure a changed bitcoin unit immediately updates all GUI elements that use units +* Update QR Code dialog +* Improve error reporting at startup +* Fine-grained UI updates for a much smoother UI during block downloads +* Remove autocorrection of 0/i in addresses in UI +* Reorganize tray icon menu into more logical order +* Persistently poll for balance change when number of blocks changed +* Much better translations +* Override progress bar design on platforms with segmented progress bars to assist with readability +* Added 'immature balance' display on the overview page +* (Windows only): enable ASLR and DEP for bitcoin-qt.exe +* (Windows only): add meta-data to bitcoin-qt.exe (e.g. description) + +Internal codebase + +* Additional unit tests +* Compile warning fixes + + +Miscellaneous + +* Reopen debug.log upon SIGHUP +* Bash programmable completion for bitcoind(1) +* On supported OS's, each thread is given a useful name + + +Thanks to everybody who contributed to this release: + +Chris Moore +Christian von Roques +David Joel Schwartz +Douglas Huff +Fordy +Gavin Andresen +Giel van Schijndel +Gregory Maxwell +Jeff Garzik +Luke Dashjr +Matt Corallo +Michael Ford +Michael Hendricks +Peter Todd +Philip Kaufmann +Pieter Wuille +R E Broadley +Ricardo M. Correia +Rune K. Svendsen +Scott Ellis +Stephane Glondu +Wladimir J. van der Laan +cardpuncher +coderrr +fanquake +grimd34th +sje397 +xanatos + +Thanks to Sergio Lerner for reporting denial-of-service vulnerabilities fixed in this release. diff --git a/doc/release-notes/release-notes-0.7.1.md b/doc/release-notes/release-notes-0.7.1.md new file mode 100644 index 00000000..22e910c0 --- /dev/null +++ b/doc/release-notes/release-notes-0.7.1.md @@ -0,0 +1,110 @@ +Bitcoin version 0.7.1 is now available from: + http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.7.1/ + +This is a bug-fix minor release. + +Please report bugs using the issue tracker at github: + https://github.com/bitcoin/bitcoin/issues + +Project source code is hosted at github; you can get +source-only tarballs/zipballs directly from there: + https://github.com/bitcoin/bitcoin/tarball/v0.7.1 # .tar.gz + https://github.com/bitcoin/bitcoin/zipball/v0.7.1 # .zip + +Ubuntu Linux users can use the "Personal Package Archive" (PPA) +maintained by Matt Corallo to automatically keep +up-to-date. Just type: + sudo apt-add-repository ppa:bitcoin/bitcoin + sudo apt-get update +in your terminal, then install the bitcoin-qt package: + sudo apt-get install bitcoin-qt + +KNOWN ISSUES +------------ + +Mac OSX 10.5 is no longer supported. + +How to Upgrade +-------------- + +If you are running an older version, shut it down. Wait +until it has completely shut down (which might take a few minutes for older +versions), then run the installer (on Windows) or just copy over +/Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux). + +If you were running on Linux with a version that might have been compiled +with a different version of Berkeley DB (for example, if you were using an +Ubuntu PPA version), then run the old version again with the -detachdb +argument and shut it down; if you do not, then the new version will not +be able to read the database files and will exit with an error. + +Explanation of -detachdb (and the new "stop true" RPC command): +The Berkeley DB database library stores data in both ".dat" and +"log" files, so the database is always in a consistent state, +even in case of power failure or other sudden shutdown. The +format of the ".dat" files is portable between different +versions of Berkeley DB, but the "log" files are not-- even minor +version differences may have incompatible "log" files. The +-detachdb option moves any pending changes from the "log" files +to the "blkindex.dat" file for maximum compatibility, but makes +shutdown much slower. Note that the "wallet.dat" file is always +detached, and versions prior to 0.6.0 detached all databases +at shutdown. + +New features +------------ + +* Added a boolean argument to the RPC 'stop' command, if true sets + -detachdb to create standalone database .dat files before shutting down. + +* -salvagewallet command-line option, which moves any existing wallet.dat + to wallet.{timestamp}.dat and then attempts to salvage public/private + keys and master encryption keys (if the wallet is encrypted) into + a new wallet.dat. This should only be used if your wallet becomes + corrupted, and is not intended to replace regular wallet backups. + +* Import $DataDir/bootstrap.dat automatically, if it exists. + +Dependency changes +------------------ + +* Qt 4.8.2 for Windows builds + +* openssl 1.0.1c + +Bug fixes +--------- + +* Clicking on a bitcoin: URI on Windows should now launch Bitcoin-Qt properly. + +* When running -testnet, use RPC port 18332 by default. + +* Better detection and handling of corrupt wallet.dat and blkindex.dat files. + Previous versions would crash with a DB_RUNRECOVERY exception, this + version detects most problems and tells you how to recover if it + cannot recover itself. + +* Fixed an uninitialized variable bug that could cause transactions to + be reported out of order. + +* Fixed a bug that could cause occasional crashes on exit. + +* Warn the user that they need to create fresh wallet backups after they + encrypt their wallet. + +---------------------------------------------------- +Thanks to everybody who contributed to this release: + +Gavin Andresen +Jeff Garzik +Luke Dashjr +Mark Friedenbach +Matt Corallo +Philip Kaufmann +Pieter Wuille +Rune K. Svendsen +Virgil Dupras +Wladimir J. van der Laan +fanquake +kjj2 +xanatos diff --git a/doc/release-notes/release-notes-0.7.2.md b/doc/release-notes/release-notes-0.7.2.md new file mode 100644 index 00000000..40af3496 --- /dev/null +++ b/doc/release-notes/release-notes-0.7.2.md @@ -0,0 +1,68 @@ +Bitcoin version 0.7.2 is now available from: + http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.7.2 + +This is a bug-fix minor release. + +Please report bugs using the issue tracker at github: + https://github.com/bitcoin/bitcoin/issues + +How to Upgrade +-------------- + +If you are running an older version, shut it down. Wait +until it has completely shut down (which might take a few minutes for older +versions), then run the installer (on Windows) or just copy over +/Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux). + +If you were running on Linux with a version that might have been compiled +with a different version of Berkeley DB (for example, if you were using an +Ubuntu PPA version), then run the old version again with the -detachdb +argument and shut it down; if you do not, then the new version will not +be able to read the database files and will exit with an error. + +Explanation of -detachdb (and the new "stop true" RPC command): +The Berkeley DB database library stores data in both ".dat" and +"log" files, so the database is always in a consistent state, +even in case of power failure or other sudden shutdown. The +format of the ".dat" files is portable between different +versions of Berkeley DB, but the "log" files are not-- even minor +version differences may have incompatible "log" files. The +-detachdb option moves any pending changes from the "log" files +to the "blkindex.dat" file for maximum compatibility, but makes +shutdown much slower. Note that the "wallet.dat" file is always +detached, and versions prior to 0.6.0 detached all databases +at shutdown. + +Bug fixes +--------- + +* Prevent RPC 'move' from deadlocking. This was caused by trying to lock the + database twice. + +* Fix use-after-free problems in initialization and shutdown, the latter of + which caused Bitcoin-Qt to crash on Windows when exiting. + +* Correct library linking so building on Windows natively works. + +* Avoid a race condition and out-of-bounds read in block creation/mining code. + +* Improve platform compatibility quirks, including fix for 100% CPU utilization + on FreeBSD 9. + +* A few minor corrections to error handling, and updated translations. + +* OSX 10.5 supported again + +---------------------------------------------------- +Thanks to everybody who contributed to this release: + +Alex +dansmith +Gavin Andresen +Gregory Maxwell +Jeff Garzik +Luke Dashjr +Philip Kaufmann +Pieter Wuille +Wladimir J. van der Laan +grimd34th diff --git a/doc/release-notes/release-notes-0.8.0.md b/doc/release-notes/release-notes-0.8.0.md new file mode 100644 index 00000000..4e98a774 --- /dev/null +++ b/doc/release-notes/release-notes-0.8.0.md @@ -0,0 +1,139 @@ +Bitcoin-Qt version 0.8.0 is now available from: + http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.0/ + +This is a major release designed to improve performance and handle the +increasing volume of transactions on the network. + +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). + +The first time you run after the upgrade a re-indexing process will be +started that will take anywhere from 30 minutes to several hours, +depending on the speed of your machine. + +Incompatible Changes +-------------------- + +This release no longer maintains a full index of historical transaction ids +by default, so looking up an arbitrary transaction using the getrawtransaction +RPC call will not work. If you need that functionality, you must run once +with -txindex=1 -reindex=1 to rebuild block-chain indices (see below for more +details). + +Improvements +------------ + +Mac and Windows binaries are signed with certificates owned by the Bitcoin +Foundation, to be compatible with the new security features in OSX 10.8 and +Windows 8. + +LevelDB, a fast, open-source, non-relational database from Google, is +now used to store transaction and block indices. LevelDB works much better +on machines with slow I/O and is faster in general. Berkeley DB is now only +used for the wallet.dat file (public and private wallet keys and transactions +relevant to you). + +Pieter Wuille implemented many optimizations to the way transactions are +verified, so a running, synchronized node uses less working memory and does +much less I/O. He also implemented parallel signature checking, so if you +have a multi-CPU machine all CPUs will be used to verify transactions. + +New Features +------------ + +"Bloom filter" support in the network protocol for sending only relevant transactions to +lightweight clients. + +contrib/verifysfbinaries is a shell-script to verify that the binary downloads +at sourceforge have not been tampered with. If you are able, you can help make +everybody's downloads more secure by running this occasionally to check PGP +signatures against download file checksums. + +contrib/spendfrom is a python-language command-line utility that demonstrates +how to use the "raw transactions" JSON-RPC api to send coins received from particular +addresses (also known as "coin control"). + +New/changed settings (command-line or bitcoin.conf file) +-------------------------------------------------------- + +dbcache : controls LevelDB memory usage. + +par : controls how many threads to use to validate transactions. Defaults to the number +of CPUs on your machine, use -par=1 to limit to a single CPU. + +txindex : maintains an extra index of old, spent transaction ids so they will be found +by the getrawtransaction JSON-RPC method. + +reindex : rebuild block and transaction indices from the downloaded block data. + +New JSON-RPC API Features +------------------------- + +lockunspent / listlockunspent allow locking transaction outputs for a period of time so +they will not be spent by other processes that might be accessing the same wallet. + +addnode / getaddednodeinfo methods, to connect to specific peers without restarting. + +importprivkey now takes an optional boolean parameter (default true) to control whether +or not to rescan the blockchain for transactions after importing a new private key. + +Important Bug Fixes +------------------- + +Privacy leak: the position of the "change" output in most transactions was not being +properly randomized, making network analysis of the transaction graph to identify +users' wallets easier. + +Zero-confirmation transaction vulnerability: accepting zero-confirmation transactions +(transactions that have not yet been included in a block) from somebody you do not +trust is still not recommended, because there will always be ways for attackers to +double-spend zero-confirmation transactions. However, this release includes a bug +fix that makes it a little bit more difficult for attackers to double-spend a +certain type ("lockTime in the future") of zero-confirmation transaction. + +Dependency Changes +------------------ + +Qt 4.8.3 (compiling against older versions of Qt 4 should continue to work) + + +Thanks to everybody who contributed to this release: +---------------------------------------------------- + +Alexander Kjeldaas +Andrey Alekseenko +Arnav Singh +Christian von Roques +Eric Lombrozo +Forrest Voight +Gavin Andresen +Gregory Maxwell +Jeff Garzik +Luke Dashjr +Matt Corallo +Mike Cassano +Mike Hearn +Peter Todd +Philip Kaufmann +Pieter Wuille +Richard Schwab +Robert Backhaus +Rune K. Svendsen +Sergio Demian Lerner +Wladimir J. van der Laan +burger2 +default +fanquake +grimd34th +justmoon +redshark1802 +tucenaber +xanatos diff --git a/doc/release-notes/release-notes-0.8.1.md b/doc/release-notes/release-notes-0.8.1.md new file mode 100644 index 00000000..4fd546be --- /dev/null +++ b/doc/release-notes/release-notes-0.8.1.md @@ -0,0 +1,22 @@ +Bitcoin-Qt/bitcoind version 0.8.1 is now available from: + http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.1/ + +This is a maintenance release that adds a new network rule to avoid +a chain-forking incompatibility with versions 0.7.2 and earlier. + +Please report bugs using the issue tracker at github: + https://github.com/bitcoin/bitcoin/issues + + +How to Upgrade +-------------- + +If you are running an older version, shut it down. Wait +until it has completely shut down (which might take a few minutes for older +versions), then run the installer (on Windows) or just copy over +/Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux). + +If you are upgrading from version 0.7.2 or earlier, the first time you +run 0.8.1 your blockchain files will be re-indexed, which will take +anywhere from 30 minutes to several hours, depending on the speed of +your machine. diff --git a/doc/release-notes/release-notes-0.8.2.md b/doc/release-notes/release-notes-0.8.2.md new file mode 100644 index 00000000..eea9ba2a --- /dev/null +++ b/doc/release-notes/release-notes-0.8.2.md @@ -0,0 +1,137 @@ +Bitcoin-Qt version 0.8.2 is now available from: + http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.2/ + +This is a maintenance release that fixes many bugs and includes +a few small new features. + +Please report bugs using the issue tracker at github: + https://github.com/bitcoin/bitcoin/issues + + +How to Upgrade + +If you are running an older version, shut it down. Wait +until it has completely shut down (which might take a few minutes for older +versions), then run the installer (on Windows) or just copy over +/Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux). + +If you are upgrading from version 0.7.2 or earlier, the first time you +run 0.8.2 your blockchain files will be re-indexed, which will take +anywhere from 30 minutes to several hours, depending on the speed of +your machine. + +0.8.2 Release notes + +Fee Policy changes + +The default fee for low-priority transactions is lowered from 0.0005 BTC +(for each 1,000 bytes in the transaction; an average transaction is +about 500 bytes) to 0.0001 BTC. + +Payments (transaction outputs) of 0.543 times the minimum relay fee +(0.00005430 BTC) are now considered 'non-standard', because storing them +costs the network more than they are worth and spending them will usually +cost their owner more in transaction fees than they are worth. + +Non-standard transactions are not relayed across the network, are not included +in blocks by most miners, and will not show up in your wallet until they are +included in a block. + +The default fee policy can be overridden using the -mintxfee and -minrelaytxfee +command-line options, but note that we intend to replace the hard-coded fees +with code that automatically calculates and suggests appropriate fees in the +0.9 release and note that if you set a fee policy significantly different from +the rest of the network your transactions may never confirm. + +Bitcoin-Qt changes + +* New icon and splash screen +* Improve reporting of synchronization process +* Remove hardcoded fee recommendations +* Improve metadata of executable on MacOSX and Windows +* Move export button to individual tabs instead of toolbar +* Add "send coins" command to context menu in address book +* Add "copy txid" command to copy transaction IDs from transaction overview +* Save & restore window size and position when showing & hiding window +* New translations: Arabic (ar), Bosnian (bs), Catalan (ca), Welsh (cy), + Esperanto (eo), Interlingua (la), Latvian (lv) and many improvements + to current translations + +MacOSX: +* OSX support for click-to-pay (bitcoin:) links +* Fix GUI disappearing problem on MacOSX (issue #1522) + +Linux/Unix: +* Copy addresses to middle-mouse-button clipboard + + +Command-line options + +* -walletnotify will call a command on receiving transactions that affect the wallet. +* -alertnotify will call a command on receiving an alert from the network. +* -par now takes a negative number, to leave a certain amount of cores free. + +JSON-RPC API changes + +* fixed a getblocktemplate bug that caused excessive CPU creating blocks. +* listunspent now lists account and address information. +* getinfo now also returns the time adjustment estimated from your peers. +* getpeerinfo now returns bytessent, bytesrecv and syncnode. +* gettxoutsetinfo returns statistics about the unspent transaction output database. +* gettxout returns information about a specific unspent transaction output. + + +Networking changes + +* Significant changes to the networking code, reducing latency and memory consumption. +* Avoid initial block download stalling. +* Remove IRC seeding support. +* Performance tweaks. +* Added testnet DNS seeds. + +Wallet compatibility/rescuing + +* Cases where wallets cannot be opened in another version/installation should be reduced. +* -salvagewallet now works for encrypted wallets. + + +Known Bugs + +* Entering the 'getblocktemplate' or 'getwork' RPC commands into the Bitcoin-Qt debug +console will cause Bitcoin-Qt to crash. Run Bitcoin-Qt with the -server command-line +option to workaround. + +Thanks to everybody who contributed to the 0.8.2 release! + +APerson241 +Andrew Poelstra +Calvin Owens +Chuck LeDuc Díaz +Colin Dean +David Griffith +David Serrano +Eric Lombrozo +Gavin Andresen +Gregory Maxwell +Jeff Garzik +Jonas Schnelli +Larry Gilbert +Luke Dashjr +Matt Corallo +Michael Ford +Mike Hearn +Patrick Brown +Peter Todd +Philip Kaufmann +Pieter Wuille +Richard Schwab +Roman Mindalev +Scott Howard +Tariq Bashir +Warren Togami +Wladimir J. van der Laan +freewil +gladoscc +kjj2 +mb300sd +super3 diff --git a/doc/release-notes/release-notes-0.8.3.md b/doc/release-notes/release-notes-0.8.3.md new file mode 100644 index 00000000..856c20aa --- /dev/null +++ b/doc/release-notes/release-notes-0.8.3.md @@ -0,0 +1,18 @@ +Bitcoin-Qt version 0.8.3 is now available from: + http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.3/ + +This is a maintenance release to fix a denial-of-service attack that +can cause nodes to crash. + +Please report bugs using the issue tracker at github: + https://github.com/bitcoin/bitcoin/issues + +0.8.3 Release notes + +Truncate over-size messages to prevent a memory exhaustion attack. + +Fix a regression that causes excessive re-writing of the 'peers.dat' file. + + +Thanks to Peter Todd for responsibly disclosing the vulnerability +( CVE-2013-4627 ) and creating a fix. diff --git a/doc/release-notes/release-notes-0.8.4.md b/doc/release-notes/release-notes-0.8.4.md new file mode 100644 index 00000000..c6f31f1f --- /dev/null +++ b/doc/release-notes/release-notes-0.8.4.md @@ -0,0 +1,83 @@ +Bitcoin-Qt version 0.8.4 is now available from: + http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.4/ + +This is a maintenance release to fix a critical bug and three +security issues; we urge all users to upgrade. + +Please report bugs using the issue tracker at github: + https://github.com/bitcoin/bitcoin/issues + + +How to Upgrade +-------------- + +If you are running an older version, shut it down. Wait +until it has completely shut down (which might take a few minutes for older +versions), then run the installer (on Windows) or just copy over +/Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux). + +If you are upgrading from version 0.7.2 or earlier, the first time you +run 0.8.4 your blockchain files will be re-indexed, which will take +anywhere from 30 minutes to several hours, depending on the speed of +your machine. + +0.8.4 Release notes +=================== + +Security issues +--------------- + +An attacker could send a series of messages that resulted in +an integer division-by-zero error in the Bloom Filter handling +code, causing the Bitcoin-Qt or bitcoind process to crash. +Bloom filters were introduced with version 0.8, so versions 0.8.0 +through 0.8.3 are vulnerable to this critical denial-of-service attack. + +A constant-time algorithm is now used to check RPC password +guess attempts; fixes https://github.com/bitcoin/bitcoin/issues/2838 +(CVE-2013-4165) + +Implement a better fix for the fill-memory-with-orphan-transactions +attack that was fixed in 0.8.3. See +https://bitslog.wordpress.com/2013/07/18/buggy-cve-2013-4627-patch-open-new-vectors-of-attack/ +for a description of the weaknesses of the previous fix. +(CVE-2013-4627) + +Bugs fixed +---------- + +Fix multi-block reorg transaction resurrection. + +Fix non-standard disconnected transactions causing mempool orphans. +This bug could cause nodes running with the -debug flag to crash. + +OSX: use 'FD_FULLSYNC' with LevelDB, which will (hopefully!) +prevent the database corruption issues many people have +experienced on OSX. + +Linux: clicking on bitcoin: links was broken if you were using +a Gnome-based desktop. + +Fix a hang-at-shutdown bug that only affects users that compile +their own version of Bitcoin against Boost versions 1.50-1.52. + +Other changes +------------- + +Checkpoint at block 250,000 to speed up initial block downloads +and make the progress indicator when downloading more accurate. + + +Thanks to everybody who contributed to the 0.8.4 releases! +---------------------------------------------------------- + +Pieter Wuille +Warren Togami +Patrick Strateman +pakt +Gregory Maxwell +Sergio Demian Lerner +grayleonard +Cory Fields +Matt Corallo +Gavin Andresen diff --git a/doc/release-notes/release-notes-0.8.5.md b/doc/release-notes/release-notes-0.8.5.md new file mode 100644 index 00000000..aa93fe7c --- /dev/null +++ b/doc/release-notes/release-notes-0.8.5.md @@ -0,0 +1,44 @@ +Bitcoin-Qt version 0.8.5 is now available from: + http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.5/ + +This is a maintenance release to fix a critical bug; +we urge all users to upgrade. + +Please report bugs using the issue tracker at github: + https://github.com/bitcoin/bitcoin/issues + + +How to Upgrade +-------------- + +If you are running an older version, shut it down. Wait +until it has completely shut down (which might take a few minutes for older +versions), then run the installer (on Windows) or just copy over +/Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux). + +If you are upgrading from version 0.7.2 or earlier, the first time you +run 0.8.5 your blockchain files will be re-indexed, which will take +anywhere from 30 minutes to several hours, depending on the speed of +your machine. + +0.8.5 Release notes +=================== + +Bugs fixed +---------- + +Transactions with version numbers larger than 0x7fffffff were +incorrectly being relayed and included in blocks. + +Blocks containing transactions with version numbers larger +than 0x7fffffff caused the code that checks for LevelDB database +inconsistencies at startup to erroneously report database +corruption and suggest that you reindex your database. + +This release also contains a non-critical fix to the code that +enforces BIP 34 (block height in the coinbase transaction). + +-- + +Thanks to Gregory Maxwell and Pieter Wuille for quickly +identifying and fixing the transaction version number bug. diff --git a/doc/release-notes/release-notes-0.8.6.md b/doc/release-notes/release-notes-0.8.6.md new file mode 100644 index 00000000..39a45e0d --- /dev/null +++ b/doc/release-notes/release-notes-0.8.6.md @@ -0,0 +1,66 @@ +Bitcoin-Qt version 0.8.6 final is now available from: + + http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.6/ + +This is a maintenance release to fix a critical bug; we urge all users to upgrade. + +Please report bugs using the issue tracker at github: + + https://github.com/bitcoin/bitcoin/issues + +How to Upgrade +-------------- + +If you already downloaded 0.8.6rc1 you do not need to re-download. This release is exactly the same. + +If you are running an older version, shut it down. Wait +until it has completely shut down (which might take a few minutes for older +versions), then run the installer (on Windows) or just copy over +/Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux). + +If you are upgrading from version 0.7.2 or earlier, the first time you +run 0.8.6 your blockchain files will be re-indexed, which will take +anywhere from 30 minutes to several hours, depending on the speed of +your machine. + +0.8.6 Release notes +=================== + +- Default block size increase for miners. + (see https://gist.github.com/gavinandresen/7670433#086-accept-into-block) + +- Remove the all-outputs-must-be-greater-than-CENT-to-qualify-as-free rule for relaying + (see https://gist.github.com/gavinandresen/7670433#086-relaying) + +- Lower maximum size for free transaction creation + (see https://gist.github.com/gavinandresen/7670433#086-wallet) + +- OSX block chain database corruption fixes + - Update leveldb to 1.13 + - Use fcntl with `F_FULLSYNC` instead of fsync on OSX + - Use native Darwin memory barriers + - Replace use of mmap in leveldb for improved reliability (only on OSX) + +- Fix nodes forwarding transactions with empty vins and getting banned + +- Network code performance and robustness improvements + +- Additional debug.log logging for diagnosis of network problems, log timestamps by default + +- Fix Bitcoin-Qt startup crash when clicking dock icon on OSX + +- Fix memory leaks in CKey::SetCompactSignature() and Key::SignCompact() + +- Fix rare GUI crash on send + +- Various small GUI, documentation and build fixes + +Warning +------- + +- There have been frequent reports of users running out of virtual memory on 32-bit systems + during the initial sync. + Hence it is recommended to use a 64-bit executable if possible. + A 64-bit executable for Windows is planned for 0.9. + +Note: Gavin Andresen's GPG signing key for SHA256SUMS.asc has been changed from key id 1FC730C1 to sub key 7BF6E212 (see https://github.com/bitcoin/bitcoin.org/pull/279). diff --git a/doc/release-notes/release-notes-0.9.0.md b/doc/release-notes/release-notes-0.9.0.md new file mode 100644 index 00000000..170410ca --- /dev/null +++ b/doc/release-notes/release-notes-0.9.0.md @@ -0,0 +1,411 @@ +Bitcoin Core version 0.9.0 is now available from: + + https://bitcoin.org/bin/0.9.0/ + +This is a new major version release, bringing both new features and +bug fixes. + +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), uninstall all +earlier versions of Bitcoin, then run the installer (on Windows) or just copy +over /Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux). + +If you are upgrading from version 0.7.2 or earlier, the first time you run +0.9.0 your blockchain files will be re-indexed, which will take anywhere from +30 minutes to several hours, depending on the speed of your machine. + +On Windows, do not forget to uninstall all earlier versions of the Bitcoin +client first, especially if you are switching to the 64-bit version. + +Windows 64-bit installer +------------------------- + +New in 0.9.0 is the Windows 64-bit version of the client. There have been +frequent reports of users running out of virtual memory on 32-bit systems +during the initial sync. Because of this it is recommended to install the +64-bit version if your system supports it. + +NOTE: Release candidate 2 Windows binaries are not code-signed; use PGP +and the SHA256SUMS.asc file to make sure your binaries are correct. +In the final 0.9.0 release, Windows setup.exe binaries will be code-signed. + +OSX 10.5 / 32-bit no longer supported +------------------------------------- + +0.9.0 drops support for older Macs. The minimum requirements are now: +* A 64-bit-capable CPU (see http://support.apple.com/kb/ht3696); +* Mac OS 10.6 or later (see https://support.apple.com/kb/ht1633). + +Downgrading warnings +-------------------- + +The 'chainstate' for this release is not always compatible with previous +releases, so if you run 0.9 and then decide to switch back to a +0.8.x release you might get a blockchain validation error when starting the +old release (due to 'pruned outputs' being omitted from the index of +unspent transaction outputs). + +Running the old release with the -reindex option will rebuild the chainstate +data structures and correct the problem. + +Also, the first time you run a 0.8.x release on a 0.9 wallet it will rescan +the blockchain for missing spent coins, which will take a long time (tens +of minutes on a typical machine). + +Rebranding to Bitcoin Core +--------------------------- + +To reduce confusion between Bitcoin-the-network and Bitcoin-the-software we +have renamed the reference client to Bitcoin Core. + + +OP_RETURN and data in the block chain +------------------------------------- +On OP_RETURN: There was been some confusion and misunderstanding in +the community, regarding the OP_RETURN feature in 0.9 and data in the +blockchain. This change is not an endorsement of storing data in the +blockchain. The OP_RETURN change creates a provably-prunable output, +to avoid data storage schemes -- some of which were already deployed -- +that were storing arbitrary data such as images as forever-unspendable +TX outputs, bloating bitcoin's UTXO database. + +Storing arbitrary data in the blockchain is still a bad idea; it is less +costly and far more efficient to store non-currency data elsewhere. + +Autotools build system +----------------------- + +For 0.9.0 we switched to an autotools-based build system instead of individual +(q)makefiles. + +Using the standard "./autogen.sh; ./configure; make" to build Bitcoin-Qt and +bitcoind makes it easier for experienced open source developers to contribute +to the project. + +Be sure to check doc/build-*.md for your platform before building from source. + +Bitcoin-cli +------------- + +Another change in the 0.9 release is moving away from the bitcoind executable +functioning both as a server and as a RPC client. The RPC client functionality +("tell the running bitcoin daemon to do THIS") was split into a separate +executable, 'bitcoin-cli'. The RPC client code will eventually be removed from +bitcoind, but will be kept for backwards compatibility for a release or two. + +`walletpassphrase` RPC +----------------------- + +The behavior of the `walletpassphrase` RPC when the wallet is already unlocked +has changed between 0.8 and 0.9. + +The 0.8 behavior of `walletpassphrase` is to fail when the wallet is already unlocked: + + > walletpassphrase 1000 + walletunlocktime = now + 1000 + > walletpassphrase 10 + Error: Wallet is already unlocked (old unlock time stays) + +The new behavior of `walletpassphrase` is to set a new unlock time overriding +the old one: + + > walletpassphrase 1000 + walletunlocktime = now + 1000 + > walletpassphrase 10 + walletunlocktime = now + 10 (overriding the old unlock time) + +Transaction malleability-related fixes +-------------------------------------- + +This release contains a few fixes for transaction ID (TXID) malleability +issues: + +- -nospendzeroconfchange command-line option, to avoid spending + zero-confirmation change +- IsStandard() transaction rules tightened to prevent relaying and mining of + mutated transactions +- Additional information in listtransactions/gettransaction output to + report wallet transactions that conflict with each other because + they spend the same outputs. +- Bug fixes to the getbalance/listaccounts RPC commands, which would report + incorrect balances for double-spent (or mutated) transactions. +- New option: -zapwallettxes to rebuild the wallet's transaction information + +Transaction Fees +---------------- + +This release drops the default fee required to relay transactions across the +network and for miners to consider the transaction in their blocks to +0.01mBTC per kilobyte. + +Note that getting a transaction relayed across the network does NOT guarantee +that the transaction will be accepted by a miner; by default, miners fill +their blocks with 50 kilobytes of high-priority transactions, and then with +700 kilobytes of the highest-fee-per-kilobyte transactions. + +The minimum relay/mining fee-per-kilobyte may be changed with the +minrelaytxfee option. Note that previous releases incorrectly used +the mintxfee setting to determine which low-priority transactions should +be considered for inclusion in blocks. + +The wallet code still uses a default fee for low-priority transactions of +0.1mBTC per kilobyte. During periods of heavy transaction volume, even this +fee may not be enough to get transactions confirmed quickly; the mintxfee +option may be used to override the default. + +0.9.0 Release notes +======================= + +RPC: + +- New notion of 'conflicted' transactions, reported as confirmations: -1 +- 'listreceivedbyaddress' now provides tx ids +- Add raw transaction hex to 'gettransaction' output +- Updated help and tests for 'getreceivedby(account|address)' +- In 'getblock', accept 2nd 'verbose' parameter, similar to getrawtransaction, + but defaulting to 1 for backward compatibility +- Add 'verifychain', to verify chain database at runtime +- Add 'dumpwallet' and 'importwallet' RPCs +- 'keypoolrefill' gains optional size parameter +- Add 'getbestblockhash', to return tip of best chain +- Add 'chainwork' (the total work done by all blocks since the genesis block) + to 'getblock' output +- Make RPC password resistant to timing attacks +- Clarify help messages and add examples +- Add 'getrawchangeaddress' call for raw transaction change destinations +- Reject insanely high fees by default in 'sendrawtransaction' +- Add RPC call 'decodescript' to decode a hex-encoded transaction script +- Make 'validateaddress' provide redeemScript +- Add 'getnetworkhashps' to get the calculated network hashrate +- New RPC 'ping' command to request ping, new 'pingtime' and 'pingwait' fields + in 'getpeerinfo' output +- Adding new 'addrlocal' field to 'getpeerinfo' output +- Add verbose boolean to 'getrawmempool' +- Add rpc command 'getunconfirmedbalance' to obtain total unconfirmed balance +- Explicitly ensure that wallet is unlocked in `importprivkey` +- Add check for valid keys in `importprivkey` + +Command-line options: + +- New option: -nospendzeroconfchange to never spend unconfirmed change outputs +- New option: -zapwallettxes to rebuild the wallet's transaction information +- Rename option '-tor' to '-onion' to better reflect what it does +- Add '-disablewallet' mode to let bitcoind run entirely without wallet (when + built with wallet) +- Update default '-rpcsslciphers' to include TLSv1.2 +- make '-logtimestamps' default on and rework help-message +- RPC client option: '-rpcwait', to wait for server start +- Remove '-logtodebugger' +- Allow `-noserver` with bitcoind + +Block-chain handling and storage: + +- Update leveldb to 1.15 +- Check for correct genesis (prevent cases where a datadir from the wrong + network is accidentally loaded) +- Allow txindex to be removed and add a reindex dialog +- Log aborted block database rebuilds +- Store orphan blocks in serialized form, to save memory +- Limit the number of orphan blocks in memory to 750 +- Fix non-standard disconnected transactions causing mempool orphans +- Add a new checkpoint at block 279,000 + +Wallet: + +- Bug fixes and new regression tests to correctly compute + the balance of wallets containing double-spent (or mutated) transactions +- Store key creation time. Calculate whole-wallet birthday. +- Optimize rescan to skip blocks prior to birthday +- Let user select wallet file with -wallet=foo.dat +- Consider generated coins mature at 101 instead of 120 blocks +- Improve wallet load time +- Don't count txins for priority to encourage sweeping +- Don't create empty transactions when reading a corrupted wallet +- Fix rescan to start from beginning after importprivkey +- Only create signatures with low S values + +Mining: + +- Increase default -blockmaxsize/prioritysize to 750K/50K +- 'getblocktemplate' does not require a key to create a block template +- Mining code fee policy now matches relay fee policy + +Protocol and network: + +- Drop the fee required to relay a transaction to 0.01mBTC per kilobyte +- Send tx relay flag with version +- New 'reject' P2P message (BIP 0061, see + https://gist.github.com/gavinandresen/7079034 for draft) +- Dump addresses every 15 minutes instead of 10 seconds +- Relay OP_RETURN data TxOut as standard transaction type +- Remove CENT-output free transaction rule when relaying +- Lower maximum size for free transaction creation +- Send multiple inv messages if mempool.size > MAX_INV_SZ +- Split MIN_PROTO_VERSION into INIT_PROTO_VERSION and MIN_PEER_PROTO_VERSION +- Do not treat fFromMe transaction differently when broadcasting +- Process received messages one at a time without sleeping between messages +- Improve logging of failed connections +- Bump protocol version to 70002 +- Add some additional logging to give extra network insight +- Added new DNS seed from bitcoinstats.com + +Validation: + +- Log reason for non-standard transaction rejection +- Prune provably-unspendable outputs, and adapt consistency check for it. +- Detect any sufficiently long fork and add a warning +- Call the -alertnotify script when we see a long or invalid fork +- Fix multi-block reorg transaction resurrection +- Reject non-canonically-encoded serialization sizes +- Reject dust amounts during validation +- Accept nLockTime transactions that finalize in the next block + +Build system: + +- Switch to autotools-based build system +- Build without wallet by passing `--disable-wallet` to configure, this + removes the BerkeleyDB dependency +- Upgrade gitian dependencies (libpng, libz, libupnpc, boost, openssl) to more + recent versions +- Windows 64-bit build support +- Solaris compatibility fixes +- Check integrity of gitian input source tarballs +- Enable full GCC Stack-smashing protection for all OSes + +GUI: + +- Switch to Qt 5.2.0 for Windows build +- Add payment request (BIP 0070) support +- Improve options dialog +- Show transaction fee in new send confirmation dialog +- Add total balance in overview page +- Allow user to choose data directory on first start, when data directory is + missing, or when the -choosedatadir option is passed +- Save and restore window positions +- Add vout index to transaction id in transactions details dialog +- Add network traffic graph in debug window +- Add open URI dialog +- Add Coin Control Features +- Improve receive coins workflow: make the 'Receive' tab into a form to request + payments, and move historical address list functionality to File menu. +- Rebrand to `Bitcoin Core` +- Move initialization/shutdown to a thread. This prevents "Not responding" + messages during startup. Also show a window during shutdown. +- Don't regenerate autostart link on every client startup +- Show and store message of normal bitcoin:URI +- Fix richtext detection hang issue on very old Qt versions +- OS X: Make use of the 10.8+ user notification center to display Growl-like + notifications +- OS X: Added NSHighResolutionCapable flag to Info.plist for better font + rendering on Retina displays. +- OS X: Fix bitcoin-qt startup crash when clicking dock icon +- Linux: Fix Gnome bitcoin: URI handler + +Miscellaneous: + +- Add Linux script (contrib/qos/tc.sh) to limit outgoing bandwidth +- Add '-regtest' mode, similar to testnet but private with instant block + generation with 'setgenerate' RPC. +- Add 'linearize.py' script to contrib, for creating bootstrap.dat +- Add separate bitcoin-cli client + +Credits +-------- + +Thanks to everyone who contributed to this release: + +- Andrey +- Ashley Holman +- b6393ce9-d324-4fe1-996b-acf82dbc3d53 +- bitsofproof +- Brandon Dahler +- Calvin Tam +- Christian Decker +- Christian von Roques +- Christopher Latham +- Chuck +- coblee +- constantined +- Cory Fields +- Cozz Lovan +- daniel +- Daniel Larimer +- David Hill +- Dmitry Smirnov +- Drak +- Eric Lombrozo +- fanquake +- fcicq +- Florin +- frewil +- Gavin Andresen +- Gregory Maxwell +- gubatron +- Guillermo Céspedes Tabárez +- Haakon Nilsen +- HaltingState +- Han Lin Yap +- harry +- Ian Kelling +- Jeff Garzik +- Johnathan Corgan +- Jonas Schnelli +- Josh Lehan +- Josh Triplett +- Julian Langschaedel +- Kangmo +- Lake Denman +- Luke Dashjr +- Mark Friedenbach +- Matt Corallo +- Michael Bauer +- Michael Ford +- Michagogo +- Midnight Magic +- Mike Hearn +- Nils Schneider +- Noel Tiernan +- Olivier Langlois +- patrick s +- Patrick Strateman +- paveljanik +- Peter Todd +- phantomcircuit +- phelixbtc +- Philip Kaufmann +- Pieter Wuille +- Rav3nPL +- R E Broadley +- regergregregerrge +- Robert Backhaus +- Roman Mindalev +- Rune K. Svendsen +- Ryan Niebur +- Scott Ellis +- Scott Willeke +- Sergey Kazenyuk +- Shawn Wilkinson +- Sined +- sje +- Subo1978 +- super3 +- Tamas Blummer +- theuni +- Thomas Holenstein +- Timon Rapp +- Timothy Stranex +- Tom Geller +- Torstein Husebø +- Vaclav Vobornik +- vhf / victor felder +- Vinnie Falco +- Warren Togami +- Wil Bown +- Wladimir J. van der Laan diff --git a/doc/release-process.md b/doc/release-process.md index 7b0a73a8..5b96e537 100644 --- a/doc/release-process.md +++ b/doc/release-process.md @@ -8,8 +8,6 @@ Release Process ###update (commit) version in sources - - bitcoin-qt.pro contrib/verifysfbinaries/verify.sh doc/README* share/setup.nsi @@ -17,7 +15,7 @@ Release Process ###tag version in git - git tag -a v(new version, e.g. 0.8.0) + git tag -s v(new version, e.g. 0.8.0) ###write release notes. git shortlog helps a lot, for example: @@ -31,48 +29,108 @@ Release Process export SIGNER=(your gitian key, ie bluematt, sipa, etc) export VERSION=(new version, e.g. 0.8.0) + pushd ./bitcoin + git checkout v${VERSION} + popd pushd ./gitian-builder + mkdir -p inputs; cd inputs/ + + Register and download the Apple SDK (see OSX Readme for details) + visit https://developer.apple.com/downloads/download.action?path=Developer_Tools/xcode_4.6.3/xcode4630916281a.dmg + + Using a Mac, create a tarball for the 10.7 SDK + tar -C /Volumes/Xcode/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/ -czf MacOSX10.7.sdk.tar.gz MacOSX10.7.sdk Fetch and build inputs: (first time, or when dependency versions change) - mkdir -p inputs; cd inputs/ - wget 'http://miniupnp.free.fr/files/download.php?file=miniupnpc-1.6.tar.gz' -O miniupnpc-1.6.tar.gz - wget 'http://www.openssl.org/source/openssl-1.0.1c.tar.gz' + wget 'http://miniupnp.free.fr/files/download.php?file=miniupnpc-1.9.tar.gz' -O miniupnpc-1.9.tar.gz + wget 'https://www.openssl.org/source/openssl-1.0.1h.tar.gz' wget 'http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz' - wget 'http://zlib.net/zlib-1.2.6.tar.gz' - wget 'ftp://ftp.simplesystems.org/pub/libpng/png/src/libpng-1.5.9.tar.gz' - wget 'http://fukuchi.org/works/qrencode/qrencode-3.2.0.tar.bz2' - wget 'http://downloads.sourceforge.net/project/boost/boost/1.50.0/boost_1_50_0.tar.bz2' - wget 'http://releases.qt-project.org/qt4/source/qt-everywhere-opensource-src-4.8.3.tar.gz' + wget 'http://zlib.net/zlib-1.2.8.tar.gz' + wget 'ftp://ftp.simplesystems.org/pub/png/src/history/libpng16/libpng-1.6.8.tar.gz' + wget 'https://fukuchi.org/works/qrencode/qrencode-3.4.3.tar.bz2' + wget 'https://downloads.sourceforge.net/project/boost/boost/1.55.0/boost_1_55_0.tar.bz2' + wget 'https://svn.boost.org/trac/boost/raw-attachment/ticket/7262/boost-mingw.patch' -O \ + boost-mingw-gas-cross-compile-2013-03-03.patch + wget 'https://download.qt-project.org/official_releases/qt/5.2/5.2.0/single/qt-everywhere-opensource-src-5.2.0.tar.gz' + wget 'https://download.qt-project.org/archive/qt/4.6/qt-everywhere-opensource-src-4.6.4.tar.gz' + wget 'https://protobuf.googlecode.com/files/protobuf-2.5.0.tar.bz2' + wget 'https://github.com/mingwandroid/toolchain4/archive/10cc648683617cca8bcbeae507888099b41b530c.tar.gz' + wget 'http://www.opensource.apple.com/tarballs/cctools/cctools-809.tar.gz' + wget 'http://www.opensource.apple.com/tarballs/dyld/dyld-195.5.tar.gz' + wget 'http://www.opensource.apple.com/tarballs/ld64/ld64-127.2.tar.gz' + wget 'http://cdrkit.org/releases/cdrkit-1.1.11.tar.gz' + wget 'https://github.com/theuni/libdmg-hfsplus/archive/libdmg-hfsplus-v0.1.tar.gz' + wget 'http://llvm.org/releases/3.2/clang+llvm-3.2-x86-linux-ubuntu-12.04.tar.gz' -O \ + clang-llvm-3.2-x86-linux-ubuntu-12.04.tar.gz + wget 'https://raw.githubusercontent.com/theuni/osx-cross-depends/master/patches/cdrtools/genisoimage.diff' -O \ + cdrkit-deterministic.patch cd .. - ./bin/gbuild ../bitcoin/contrib/gitian-descriptors/boost-win32.yml - mv build/out/boost-win32-1.50.0-gitian2.zip inputs/ - ./bin/gbuild ../bitcoin/contrib/gitian-descriptors/qt-win32.yml - mv build/out/qt-win32-4.8.3-gitian-r1.zip inputs/ - ./bin/gbuild ../bitcoin/contrib/gitian-descriptors/deps-win32.yml - mv build/out/bitcoin-deps-0.0.5.zip inputs/ + ./bin/gbuild ../bitcoin/contrib/gitian-descriptors/boost-linux.yml + mv build/out/boost-*.zip inputs/ + ./bin/gbuild ../bitcoin/contrib/gitian-descriptors/deps-linux.yml + mv build/out/bitcoin-deps-*.zip inputs/ + ./bin/gbuild ../bitcoin/contrib/gitian-descriptors/qt-linux.yml + mv build/out/qt-*.tar.gz inputs/ + ./bin/gbuild ../bitcoin/contrib/gitian-descriptors/boost-win.yml + mv build/out/boost-*.zip inputs/ + ./bin/gbuild ../bitcoin/contrib/gitian-descriptors/deps-win.yml + mv build/out/bitcoin-deps-*.zip inputs/ + ./bin/gbuild ../bitcoin/contrib/gitian-descriptors/qt-win.yml + mv build/out/qt-*.zip inputs/ + ./bin/gbuild ../bitcoin/contrib/gitian-descriptors/protobuf-win.yml + mv build/out/protobuf-*.zip inputs/ + ./bin/gbuild ../bitcoin/contrib/gitian-descriptors/gitian-osx-native.yml + mv build/out/osx-*.tar.gz inputs/ + ./bin/gbuild ../bitcoin/contrib/gitian-descriptors/gitian-osx-depends.yml + mv build/out/osx-*.tar.gz inputs/ + ./bin/gbuild ../bitcoin/contrib/gitian-descriptors/gitian-osx-qt.yml + mv build/out/osx-*.tar.gz inputs/ + + The expected SHA256 hashes of the intermediate inputs are: + + 46710f673467e367738d8806e45b4cb5931aaeea61f4b6b55a68eea56d5006c5 bitcoin-deps-linux32-gitian-r6.zip + f03be39fb26670243d3a659e64d18e19d03dec5c11e9912011107768390b5268 bitcoin-deps-linux64-gitian-r6.zip + f29b7d9577417333fb56e023c2977f5726a7c297f320b175a4108cf7cd4c2d29 boost-linux32-1.55.0-gitian-r1.zip + 88232451c4104f7eb16e469ac6474fd1231bd485687253f7b2bdf46c0781d535 boost-linux64-1.55.0-gitian-r1.zip + 57e57dbdadc818cd270e7e00500a5e1085b3bcbdef69a885f0fb7573a8d987e1 qt-linux32-4.6.4-gitian-r1.tar.gz + 60eb4b9c5779580b7d66529efa5b2836ba1a70edde2a0f3f696d647906a826be qt-linux64-4.6.4-gitian-r1.tar.gz + 60dc2d3b61e9c7d5dbe2f90d5955772ad748a47918ff2d8b74e8db9b1b91c909 boost-win32-1.55.0-gitian-r6.zip + f65fcaf346bc7b73bc8db3a8614f4f6bee2f61fcbe495e9881133a7c2612a167 boost-win64-1.55.0-gitian-r6.zip + 70de248cd0dd7e7476194129e818402e974ca9c5751cbf591644dc9f332d3b59 bitcoin-deps-win32-gitian-r13.zip + 9eace4c76f639f4f3580a478eee4f50246e1bbb5ccdcf37a158261a5a3fa3e65 bitcoin-deps-win64-gitian-r13.zip + 963e3e5e85879010a91143c90a711a5d1d5aba992e38672cdf7b54e42c56b2f1 qt-win32-5.2.0-gitian-r3.zip + 751c579830d173ef3e6f194e83d18b92ebef6df03289db13ab77a52b6bc86ef0 qt-win64-5.2.0-gitian-r3.zip + e2e403e1a08869c7eed4d4293bce13d51ec6a63592918b90ae215a0eceb44cb4 protobuf-win32-2.5.0-gitian-r4.zip + a0999037e8b0ef9ade13efd88fee261ba401f5ca910068b7e0cd3262ba667db0 protobuf-win64-2.5.0-gitian-r4.zip Build bitcoind and bitcoin-qt on Linux32, Linux64, and Win32: - ./bin/gbuild --commit bitcoin=v${VERSION} ../bitcoin/contrib/gitian-descriptors/gitian.yml - ./bin/gsign --signer $SIGNER --release ${VERSION} --destination ../gitian.sigs/ ../bitcoin/contrib/gitian-descriptors/gitian.yml + ./bin/gbuild --commit bitcoin=v${VERSION} ../bitcoin/contrib/gitian-descriptors/gitian-linux.yml + ./bin/gsign --signer $SIGNER --release ${VERSION} --destination ../gitian.sigs/ ../bitcoin/contrib/gitian-descriptors/gitian-linux.yml pushd build/out zip -r bitcoin-${VERSION}-linux-gitian.zip * mv bitcoin-${VERSION}-linux-gitian.zip ../../../ popd - ./bin/gbuild --commit bitcoin=v${VERSION} ../bitcoin/contrib/gitian-descriptors/gitian-win32.yml - ./bin/gsign --signer $SIGNER --release ${VERSION}-win32 --destination ../gitian.sigs/ ../bitcoin/contrib/gitian-descriptors/gitian-win32.yml + ./bin/gbuild --commit bitcoin=v${VERSION} ../bitcoin/contrib/gitian-descriptors/gitian-win.yml + ./bin/gsign --signer $SIGNER --release ${VERSION}-win --destination ../gitian.sigs/ ../bitcoin/contrib/gitian-descriptors/gitian-win.yml pushd build/out - zip -r bitcoin-${VERSION}-win32-gitian.zip * - mv bitcoin-${VERSION}-win32-gitian.zip ../../../ + zip -r bitcoin-${VERSION}-win-gitian.zip * + mv bitcoin-${VERSION}-win-gitian.zip ../../../ + popd + ./bin/gbuild --commit bitcoin=v${VERSION} ../bitcoin/contrib/gitian-descriptors/gitian-osx-bitcoin.yml + ./bin/gsign --signer $SIGNER --release ${VERSION}-osx --destination ../gitian.sigs/ ../bitcoin/contrib/gitian-descriptors/gitian-osx-bitcoin.yml + pushd build/out + mv Bitcoin-Qt.dmg ../../../ popd popd Build output expected: 1. linux 32-bit and 64-bit binaries + source (bitcoin-${VERSION}-linux-gitian.zip) - 2. windows 32-bit binary, installer + source (bitcoin-${VERSION}-win32-gitian.zip) - 3. Gitian signatures (in gitian.sigs/${VERSION}[-win32]/(your gitian key)/ + 2. windows 32-bit and 64-bit binaries + installer + source (bitcoin-${VERSION}-win-gitian.zip) + 3. OSX installer (Bitcoin-Qt.dmg) + 4. Gitian signatures (in gitian.sigs/${VERSION}[-win|-osx]/(your gitian key)/ repackage gitian builds for release as stand-alone zip/tar/installer exe @@ -84,28 +142,15 @@ repackage gitian builds for release as stand-alone zip/tar/installer exe **Windows .zip and setup.exe:** - unzip bitcoin-${VERSION}-win32-gitian.zip -d bitcoin-${VERSION}-win32 - mv bitcoin-${VERSION}-win32/bitcoin-*-setup.exe . - zip -r bitcoin-${VERSION}-win32.zip bitcoin-${VERSION}-win32 - rm -rf bitcoin-${VERSION}-win32 - -**Perform Mac build:** - - OSX binaries are created by Gavin Andresen on a 32-bit, OSX 10.6 machine. - - qmake RELEASE=1 USE_UPNP=1 USE_QRCODE=1 bitcoin-qt.pro - make - export QTDIR=/opt/local/share/qt4 # needed to find translations/qt_*.qm files - T=$(contrib/qt_translations.py $QTDIR/translations src/qt/locale) - python2.7 share/qt/clean_mac_info_plist.py - python2.7 contrib/macdeploy/macdeployqtplus Bitcoin-Qt.app -add-qt-tr $T -dmg -fancy contrib/macdeploy/fancy.plist - - Build output expected: Bitcoin-Qt.dmg + unzip bitcoin-${VERSION}-win-gitian.zip -d bitcoin-${VERSION}-win + mv bitcoin-${VERSION}-win/bitcoin-*-setup.exe . + zip -r bitcoin-${VERSION}-win.zip bitcoin-${VERSION}-win + rm -rf bitcoin-${VERSION}-win ###Next steps: -* Code-sign Windows -setup.exe (in a Windows virtual machine) and - OSX Bitcoin-Qt.app (Note: only Gavin has the code-signing keys currently) +* Code-sign Windows -setup.exe (in a Windows virtual machine using signtool) + Note: only Gavin has the code-signing keys currently. * upload builds to SourceForge @@ -113,6 +158,8 @@ repackage gitian builds for release as stand-alone zip/tar/installer exe * update bitcoin.org version make sure all OS download links go to the right versions + +* update download sizes on bitcoin.org/_templates/download.html * update forum version @@ -124,7 +171,7 @@ Commit your signature to gitian.sigs: pushd gitian.sigs git add ${VERSION}/${SIGNER} - git add ${VERSION}-win32/${SIGNER} + git add ${VERSION}-win/${SIGNER} git commit -a git push # Assuming you can push to the gitian.sigs tree popd @@ -148,18 +195,29 @@ From a directory containing bitcoin source, gitian.sigs and gitian zips zip -r bitcoin-${VERSION}-linux-gitian.zip * cp bitcoin-${VERSION}-linux-gitian.zip ../ popd - mkdir bitcoin-${VERSION}-win32-gitian - pushd bitcoin-${VERSION}-win32-gitian - unzip ../bitcoin-${VERSION}-win32-gitian.zip + mkdir bitcoin-${VERSION}-win-gitian + pushd bitcoin-${VERSION}-win-gitian + unzip ../bitcoin-${VERSION}-win-gitian.zip mkdir gitian cp ../bitcoin/contrib/gitian-downloader/*.pgp ./gitian/ - for signer in $(ls ../gitian.sigs/${VERSION}-win32/); do - cp ../gitian.sigs/${VERSION}-win32/${signer}/bitcoin-build.assert ./gitian/${signer}-build.assert - cp ../gitian.sigs/${VERSION}-win32/${signer}/bitcoin-build.assert.sig ./gitian/${signer}-build.assert.sig + for signer in $(ls ../gitian.sigs/${VERSION}-win/); do + cp ../gitian.sigs/${VERSION}-win/${signer}/bitcoin-build.assert ./gitian/${signer}-build.assert + cp ../gitian.sigs/${VERSION}-win/${signer}/bitcoin-build.assert.sig ./gitian/${signer}-build.assert.sig done - zip -r bitcoin-${VERSION}-win32-gitian.zip * - cp bitcoin-${VERSION}-win32-gitian.zip ../ + zip -r bitcoin-${VERSION}-win-gitian.zip * + cp bitcoin-${VERSION}-win-gitian.zip ../ popd - Upload gitian zips to SourceForge + +- Announce the release: + + - Add the release to bitcoin.org: https://github.com/bitcoin/bitcoin.org/tree/master/_releases + + - Release sticky on bitcointalk: https://bitcointalk.org/index.php?board=1.0 + + - Bitcoin-development mailing list + + - Optionally reddit /r/Bitcoin, ... + - Celebrate diff --git a/doc/tor.md b/doc/tor.md index 86d56cff..b5eb91e1 100644 --- a/doc/tor.md +++ b/doc/tor.md @@ -11,7 +11,7 @@ configure Tor. --------------------------------- The first step is running Bitcoin behind a Tor proxy. This will already make all -outgoing connections be anonimized, but more is possible. +outgoing connections be anonymized, but more is possible. -socks=5 SOCKS5 supports connecting-to-hostname, which can be used instead of doing a (leaking) local DNS lookup. SOCKS5 is the default, @@ -21,8 +21,8 @@ outgoing connections be anonimized, but more is possible. -proxy=ip:port Set the proxy server. If SOCKS5 is selected (default), this proxy server will be used to try to reach .onion addresses as well. - -tor=ip:port Set the proxy server to use for tor hidden services. You do not - need to set this if it's the same as -proxy. You can use -notor + -onion=ip:port Set the proxy server to use for tor hidden services. You do not + need to set this if it's the same as -proxy. You can use -noonion to explicitly disable access to hidden service. -listen When using -proxy, listening is disabled by default. If you want @@ -48,6 +48,7 @@ config file): HiddenServiceDir /var/lib/tor/bitcoin-service/ HiddenServicePort 8333 127.0.0.1:8333 + HiddenServicePort 18333 127.0.0.1:18333 The directory can be different of course, but (both) port numbers should be equal to your bitcoind's P2P listen port (8333 by default). @@ -85,5 +86,5 @@ and open port 8333 on your firewall (or use -upnp). If you only want to use Tor to reach onion addresses, but not use it as a proxy for normal IPv4/IPv6 communication, use: - ./bitcoin -tor=127.0.0.1:9050 -externalip=57qr3yd1nyntf5k.onion -discover + ./bitcoin -onion=127.0.0.1:9050 -externalip=57qr3yd1nyntf5k.onion -discover diff --git a/doc/translation_process.md b/doc/translation_process.md index 1724e953..2f0845a8 100644 --- a/doc/translation_process.md +++ b/doc/translation_process.md @@ -32,14 +32,13 @@ This directory contains all translations. Filenames must adhere to this format: `src/qt/locale/bitcoin_en.ts` is treated in a special way. It is used as the source for all other translations. Whenever a string in the code is changed -this file must be updated to reflect those changes. This can be accomplished -by running `lupdate` (included in the Qt SDK). Also, a custom script is used +this file must be updated to reflect those changes. A custom script is used to extract strings from the non-Qt parts. This script makes use of `gettext`, so make sure that utility is installed (ie, `apt-get install gettext` on -Ubuntu/Debian): - - python share/qt/extract_strings_qt.py - lupdate bitcoin-qt.pro -no-obsolete -locations relative -ts src/qt/locale/bitcoin_en.ts +Ubuntu/Debian). Once this has been updated, lupdate (included in the Qt SDK) +is used to update bitcoin_en.ts. This process has been automated, from src/qt, +simply run: + make translate ##### Handling of plurals in the source file @@ -71,35 +70,18 @@ We are using https://transifex.com as a frontend for translating the client. https://www.transifex.com/projects/p/bitcoin/resource/tx/ -The "Transifex client" (see: http://help.transifex.com/features/client/) -will help with fetching new translations from Transifex. Use the following -config to be able to connect with the client: +The "Transifex client" (see: http://support.transifex.com/customer/portal/topics/440187-transifex-client/articles) +is used to fetch new translations from Transifex. The configuration for this client (`.tx/config`) +is part of the repository. -### .tx/config - - [main] - host = https://www.transifex.com - - [bitcoin.tx] - file_filter = src/qt/locale/bitcoin_.ts - source_file = src/qt/locale/bitcoin_en.ts - source_lang = en - -### .tx/config (for Windows) - - [main] - host = https://www.transifex.com - - [bitcoin.tx] - file_filter = src\qt\locale\bitcoin_.ts - source_file = src\qt\locale\bitcoin_en.ts - source_lang = en - -It is also possible to directly download new translations one by one from the Transifex website. +Do not directly download translations one by one from the Transifex website, as we do a few +postprocessing steps before committing the translations. ### Fetching new translations -1. `tx pull -a` +1. `python contrib/devtools/update-translations.py` 2. update `src/qt/bitcoin.qrc` manually or via - `ls src/qt/locale/*ts|xargs -n1 basename|sed 's/\(bitcoin_\(.*\)\).ts/locale/\1.qm<\/file>/'` -3. `git add` new translations from `src/qt/locale/` + `ls src/qt/locale/*ts|xargs -n1 basename|sed 's/\(bitcoin_\(.*\)\).ts/locale\/\1.qm<\/file>/'` +3. update `src/qt/Makefile.am` manually or via + `ls src/qt/locale/*ts|xargs -n1 basename|sed 's/\(bitcoin_\(.*\)\).ts/ locale\/\1.ts \\/'` +4. `git add` new translations from `src/qt/locale/` diff --git a/doc/unit-tests.md b/doc/unit-tests.md index d6fb2d8e..f1d3a8bc 100644 --- a/doc/unit-tests.md +++ b/doc/unit-tests.md @@ -1,35 +1,18 @@ -Compiling/running bitcoind unit tests +Compiling/running unit tests ------------------------------------ -bitcoind unit tests are in the `src/test/` directory; they -use the Boost::Test unit-testing framework. +Unit tests will be automatically compiled if dependencies were met in configure +and tests weren't explicitly disabled. -To compile and run the tests: +After configuring, they can be run with 'make check'. - cd src - make -f makefile.unix test_bitcoin # Replace makefile.unix if you're not on unix - ./test_bitcoin # Runs the unit tests +To run the bitcoind tests manually, launch src/test/test_bitcoin . -If all tests succeed the last line of output will be: -`*** No errors detected` - -To add more tests, add `BOOST_AUTO_TEST_CASE` functions to the existing +To add more bitcoind tests, add `BOOST_AUTO_TEST_CASE` functions to the existing .cpp files in the test/ directory or add new .cpp files that -implement new BOOST_AUTO_TEST_SUITE sections (the makefiles are -set up to add test/*.cpp to test_bitcoin automatically). +implement new BOOST_AUTO_TEST_SUITE sections. +To run the bitcoin-qt tests manually, launch src/qt/test/bitcoin-qt_test -Compiling/running Bitcoin-Qt unit tests ---------------------------------------- - -Bitcoin-Qt unit tests are in the src/qt/test/ directory; they -use the Qt unit-testing framework. - -To compile and run the tests: - - qmake bitcoin-qt.pro BITCOIN_QT_TEST=1 - make - ./bitcoin-qt_test - -To add more tests, add them to the `src/qt/test/` directory, -the `src/qt/test/test_main.cpp` file, and bitcoin-qt.pro. +To add more bitcoin-qt tests, add them to the `src/qt/test/` directory and +the `src/qt/test/test_main.cpp` file. diff --git a/myriad-qt.pro.linux b/myriad-qt.pro.linux deleted file mode 100644 index 0b75dbab..00000000 --- a/myriad-qt.pro.linux +++ /dev/null @@ -1,462 +0,0 @@ -TEMPLATE = app -TARGET = myriadcoin-qt -macx:TARGET = "Myriadcoin-Qt" -VERSION = 0.8.2 -INCLUDEPATH += src src/json src/qt -QT += core gui network -greaterThan(QT_MAJOR_VERSION, 4): QT += widgets -DEFINES += BOOST_THREAD_USE_LIB BOOST_SPIRIT_THREADSAFE -CONFIG += no_include_pwd -CONFIG += thread - -# for boost 1.37, add -mt to the boost libraries -# use: qmake BOOST_LIB_SUFFIX=-mt -# for boost thread win32 with _win32 sufix -# use: BOOST_THREAD_LIB_SUFFIX=_win32-... -# or when linking against a specific BerkelyDB version: BDB_LIB_SUFFIX=-4.8 - -# Dependency library locations can be customized with: -# BOOST_INCLUDE_PATH, BOOST_LIB_PATH, BDB_INCLUDE_PATH, -# BDB_LIB_PATH, OPENSSL_INCLUDE_PATH and OPENSSL_LIB_PATH respectively - -OBJECTS_DIR = build -MOC_DIR = build -UI_DIR = build - -# use: qmake "RELEASE=1" -contains(RELEASE, 1) { - # Mac: compile for maximum compatibility (10.5, 32-bit) - macx:QMAKE_CXXFLAGS += -mmacosx-version-min=10.5 -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk - macx:QMAKE_CFLAGS += -mmacosx-version-min=10.5 -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk - macx:QMAKE_OBJECTIVE_CFLAGS += -mmacosx-version-min=10.5 -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk - - !win32:!macx { - # Linux: static link and extra security (see: https://wiki.debian.org/Hardening) - LIBS += -Wl,-Bstatic -Wl,-z,relro -Wl,-z,now - } -} - -!win32 { - # for extra security against potential buffer overflows: enable GCCs Stack Smashing Protection - QMAKE_CXXFLAGS *= -fstack-protector-all - QMAKE_LFLAGS *= -fstack-protector-all - # Exclude on Windows cross compile with MinGW 4.2.x, as it will result in a non-working executable! - # This can be enabled for Windows, when we switch to MinGW >= 4.4.x. -} -# for extra security (see: https://wiki.debian.org/Hardening): this flag is GCC compiler-specific -QMAKE_CXXFLAGS *= -D_FORTIFY_SOURCE=2 -march=native -# for extra security on Windows: enable ASLR and DEP via GCC linker flags -win32:QMAKE_LFLAGS *= -Wl,--dynamicbase -Wl,--nxcompat -# on Windows: enable GCC large address aware linker flag -win32:QMAKE_LFLAGS *= -Wl,--large-address-aware - -# use: qmake "USE_QRCODE=1" -# libqrencode (http://fukuchi.org/works/qrencode/index.en.html) must be installed for support -contains(USE_QRCODE, 1) { - message(Building with QRCode support) - DEFINES += USE_QRCODE - LIBS += -lqrencode -} - -# use: qmake "USE_UPNP=1" ( enabled by default; default) -# or: qmake "USE_UPNP=0" (disabled by default) -# or: qmake "USE_UPNP=-" (not supported) -# miniupnpc (http://miniupnp.free.fr/files/) must be installed for support -contains(USE_UPNP, -) { - message(Building without UPNP support) -} else { - message(Building with UPNP support) - count(USE_UPNP, 0) { - USE_UPNP=1 - } - DEFINES += USE_UPNP=$$USE_UPNP STATICLIB - INCLUDEPATH += $$MINIUPNPC_INCLUDE_PATH - LIBS += $$join(MINIUPNPC_LIB_PATH,,-L,) -lminiupnpc - win32:LIBS += -liphlpapi -} - -# use: qmake "USE_DBUS=1" -contains(USE_DBUS, 1) { - message(Building with DBUS (Freedesktop notifications) support) - DEFINES += USE_DBUS - QT += dbus -} - -# use: qmake "USE_IPV6=1" ( enabled by default; default) -# or: qmake "USE_IPV6=0" (disabled by default) -# or: qmake "USE_IPV6=-" (not supported) -contains(USE_IPV6, -) { - message(Building without IPv6 support) -} else { - count(USE_IPV6, 0) { - USE_IPV6=1 - } - DEFINES += USE_IPV6=$$USE_IPV6 -} - -contains(BITCOIN_NEED_QT_PLUGINS, 1) { - DEFINES += BITCOIN_NEED_QT_PLUGINS - QTPLUGIN += qcncodecs qjpcodecs qtwcodecs qkrcodecs qtaccessiblewidgets -} - -INCLUDEPATH += src/leveldb/include src/leveldb/helpers -LIBS += $$PWD/src/leveldb/libleveldb.a $$PWD/src/leveldb/libmemenv.a -!win32 { - # we use QMAKE_CXXFLAGS_RELEASE even without RELEASE=1 because we use RELEASE to indicate linking preferences not -O preferences - genleveldb.commands = cd $$PWD/src/leveldb && CC=$$QMAKE_CC CXX=$$QMAKE_CXX $(MAKE) OPT=\"$$QMAKE_CXXFLAGS $$QMAKE_CXXFLAGS_RELEASE\" libleveldb.a libmemenv.a -} else { - # make an educated guess about what the ranlib command is called - isEmpty(QMAKE_RANLIB) { - QMAKE_RANLIB = $$replace(QMAKE_STRIP, strip, ranlib) - } - LIBS += -lshlwapi - genleveldb.commands = cd $$PWD/src/leveldb && CC=$$QMAKE_CC CXX=$$QMAKE_CXX TARGET_OS=OS_WINDOWS_CROSSCOMPILE $(MAKE) OPT=\"$$QMAKE_CXXFLAGS $$QMAKE_CXXFLAGS_RELEASE\" libleveldb.a libmemenv.a && $$QMAKE_RANLIB $$PWD/src/leveldb/libleveldb.a && $$QMAKE_RANLIB $$PWD/src/leveldb/libmemenv.a -} -genleveldb.target = $$PWD/src/leveldb/libleveldb.a -genleveldb.depends = FORCE -PRE_TARGETDEPS += $$PWD/src/leveldb/libleveldb.a -QMAKE_EXTRA_TARGETS += genleveldb -# Gross ugly hack that depends on qmake internals, unfortunately there is no other way to do it. -QMAKE_CLEAN += $$PWD/src/leveldb/libleveldb.a; cd $$PWD/src/leveldb ; $(MAKE) clean - -# regenerate src/build.h -!win32|contains(USE_BUILD_INFO, 1) { - genbuild.depends = FORCE - genbuild.commands = cd $$PWD; /bin/sh share/genbuild.sh $$OUT_PWD/build/build.h - genbuild.target = $$OUT_PWD/build/build.h - PRE_TARGETDEPS += $$OUT_PWD/build/build.h - QMAKE_EXTRA_TARGETS += genbuild - DEFINES += HAVE_BUILD_INFO -} - -QMAKE_CXXFLAGS_WARN_ON = -fdiagnostics-show-option -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter -Wstack-protector - -# Input -DEPENDPATH += src src/json src/qt -HEADERS += src/qt/bitcoingui.h \ - src/qt/transactiontablemodel.h \ - src/qt/addresstablemodel.h \ - src/qt/optionsdialog.h \ - src/qt/sendcoinsdialog.h \ - src/qt/addressbookpage.h \ - src/qt/signverifymessagedialog.h \ - src/qt/aboutdialog.h \ - src/qt/editaddressdialog.h \ - src/qt/bitcoinaddressvalidator.h \ - src/alert.h \ - src/addrman.h \ - src/base58.h \ - src/bignum.h \ - src/chainparams.h \ - src/checkpoints.h \ - src/compat.h \ - src/sync.h \ - src/util.h \ - src/hash.h \ - src/uint256.h \ - src/serialize.h \ - src/core.h \ - src/main.h \ - src/net.h \ - src/key.h \ - src/db.h \ - src/walletdb.h \ - src/script.h \ - src/init.h \ - src/bloom.h \ - src/mruset.h \ - src/checkqueue.h \ - src/json/json_spirit_writer_template.h \ - src/json/json_spirit_writer.h \ - src/json/json_spirit_value.h \ - src/json/json_spirit_utils.h \ - src/json/json_spirit_stream_reader.h \ - src/json/json_spirit_reader_template.h \ - src/json/json_spirit_reader.h \ - src/json/json_spirit_error_position.h \ - src/json/json_spirit.h \ - src/qt/clientmodel.h \ - src/qt/guiutil.h \ - src/qt/transactionrecord.h \ - src/qt/guiconstants.h \ - src/qt/optionsmodel.h \ - src/qt/monitoreddatamapper.h \ - src/qt/transactiondesc.h \ - src/qt/transactiondescdialog.h \ - src/qt/bitcoinamountfield.h \ - src/wallet.h \ - src/keystore.h \ - src/qt/transactionfilterproxy.h \ - src/qt/transactionview.h \ - src/qt/walletmodel.h \ - src/qt/walletview.h \ - src/qt/walletstack.h \ - src/qt/walletframe.h \ - src/bitcoinrpc.h \ - src/qt/overviewpage.h \ - src/qt/csvmodelwriter.h \ - src/crypter.h \ - src/qt/sendcoinsentry.h \ - src/qt/qvalidatedlineedit.h \ - src/qt/bitcoinunits.h \ - src/qt/qvaluecombobox.h \ - src/qt/askpassphrasedialog.h \ - src/protocol.h \ - src/qt/notificator.h \ - src/qt/paymentserver.h \ - src/allocators.h \ - src/ui_interface.h \ - src/qt/rpcconsole.h \ - src/version.h \ - src/netbase.h \ - src/clientversion.h \ - src/txdb.h \ - src/leveldb.h \ - src/threadsafety.h \ - src/limitedmap.h \ - src/qt/splashscreen.h \ - src/qt/intro.h \ - src/scrypt.h \ - src/sph_blake.h \ - src/sph_groestl.h \ - src/sph_keccak.h \ - src/sph_bmw.h \ - src/sph_jh.h \ - src/sph_skein.h \ - src/sph_types.h \ - src/sph_echo.h \ - src/sph_luffa.h \ - src/sph_simd.h \ - src/sph_cubehash.h \ - src/sph_shavite.h \ - src/hashgroestl.h \ - src/hashskein.h \ - src/hashqubit.h - -SOURCES += src/qt/bitcoin.cpp \ - src/qt/bitcoingui.cpp \ - src/qt/transactiontablemodel.cpp \ - src/qt/addresstablemodel.cpp \ - src/qt/optionsdialog.cpp \ - src/qt/sendcoinsdialog.cpp \ - src/qt/addressbookpage.cpp \ - src/qt/signverifymessagedialog.cpp \ - src/qt/aboutdialog.cpp \ - src/qt/editaddressdialog.cpp \ - src/qt/bitcoinaddressvalidator.cpp \ - src/alert.cpp \ - src/chainparams.cpp \ - src/version.cpp \ - src/sync.cpp \ - src/util.cpp \ - src/hash.cpp \ - src/netbase.cpp \ - src/key.cpp \ - src/script.cpp \ - src/core.cpp \ - src/main.cpp \ - src/init.cpp \ - src/net.cpp \ - src/bloom.cpp \ - src/checkpoints.cpp \ - src/addrman.cpp \ - src/db.cpp \ - src/walletdb.cpp \ - src/qt/clientmodel.cpp \ - src/qt/guiutil.cpp \ - src/qt/transactionrecord.cpp \ - src/qt/optionsmodel.cpp \ - src/qt/monitoreddatamapper.cpp \ - src/qt/transactiondesc.cpp \ - src/qt/transactiondescdialog.cpp \ - src/qt/bitcoinstrings.cpp \ - src/qt/bitcoinamountfield.cpp \ - src/wallet.cpp \ - src/keystore.cpp \ - src/qt/transactionfilterproxy.cpp \ - src/qt/transactionview.cpp \ - src/qt/walletmodel.cpp \ - src/qt/walletview.cpp \ - src/qt/walletstack.cpp \ - src/qt/walletframe.cpp \ - src/bitcoinrpc.cpp \ - src/rpcdump.cpp \ - src/rpcnet.cpp \ - src/rpcmining.cpp \ - src/rpcwallet.cpp \ - src/rpcblockchain.cpp \ - src/rpcrawtransaction.cpp \ - src/qt/overviewpage.cpp \ - src/qt/csvmodelwriter.cpp \ - src/crypter.cpp \ - src/qt/sendcoinsentry.cpp \ - src/qt/qvalidatedlineedit.cpp \ - src/qt/bitcoinunits.cpp \ - src/qt/qvaluecombobox.cpp \ - src/qt/askpassphrasedialog.cpp \ - src/protocol.cpp \ - src/qt/notificator.cpp \ - src/qt/paymentserver.cpp \ - src/qt/rpcconsole.cpp \ - src/noui.cpp \ - src/leveldb.cpp \ - src/txdb.cpp \ - src/qt/splashscreen.cpp \ - src/qt/intro.cpp \ - src/scrypt.cpp \ - src/scrypt-sse2.cpp \ - src/blake.c \ - src/bmw.c \ - src/groestl.c \ - src/jh.c \ - src/keccak.c \ - src/skein.c \ - src/aes_helper.c \ - src/echo.c \ - src/luffa.c \ - src/simd.c \ - src/cubehash.c \ - src/shavite.c - -RESOURCES += src/qt/bitcoin.qrc - -FORMS += src/qt/forms/sendcoinsdialog.ui \ - src/qt/forms/addressbookpage.ui \ - src/qt/forms/signverifymessagedialog.ui \ - src/qt/forms/aboutdialog.ui \ - src/qt/forms/editaddressdialog.ui \ - src/qt/forms/transactiondescdialog.ui \ - src/qt/forms/overviewpage.ui \ - src/qt/forms/sendcoinsentry.ui \ - src/qt/forms/askpassphrasedialog.ui \ - src/qt/forms/rpcconsole.ui \ - src/qt/forms/optionsdialog.ui \ - src/qt/forms/intro.ui - -contains(USE_QRCODE, 1) { -HEADERS += src/qt/qrcodedialog.h -SOURCES += src/qt/qrcodedialog.cpp -FORMS += src/qt/forms/qrcodedialog.ui -} - -contains(BITCOIN_QT_TEST, 1) { -SOURCES += src/qt/test/test_main.cpp \ - src/qt/test/uritests.cpp -HEADERS += src/qt/test/uritests.h -DEPENDPATH += src/qt/test -QT += testlib -TARGET = myriadcoin-qt_test -DEFINES += BITCOIN_QT_TEST - macx: CONFIG -= app_bundle -} - -# Todo: Remove this line when switching to Qt5, as that option was removed -CODECFORTR = UTF-8 - -# for lrelease/lupdate -# also add new translations to src/qt/bitcoin.qrc under translations/ -TRANSLATIONS = $$files(src/qt/locale/bitcoin_*.ts) - -isEmpty(QMAKE_LRELEASE) { - win32:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]\\lrelease.exe - else:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]/lrelease -} -isEmpty(QM_DIR):QM_DIR = $$PWD/src/qt/locale -# automatically build translations, so they can be included in resource file -TSQM.name = lrelease ${QMAKE_FILE_IN} -TSQM.input = TRANSLATIONS -TSQM.output = $$QM_DIR/${QMAKE_FILE_BASE}.qm -TSQM.commands = $$QMAKE_LRELEASE ${QMAKE_FILE_IN} -qm ${QMAKE_FILE_OUT} -TSQM.CONFIG = no_link -QMAKE_EXTRA_COMPILERS += TSQM - -# "Other files" to show in Qt Creator -OTHER_FILES += README.md \ - doc/*.txt \ - doc/*.md \ - src/bitcoind.cpp \ - src/qt/res/bitcoin-qt.rc \ - src/test/*.cpp \ - src/test/*.h \ - src/qt/test/*.cpp \ - src/qt/test/*.h - -# platform specific defaults, if not overridden on command line -isEmpty(BOOST_LIB_SUFFIX) { - macx:BOOST_LIB_SUFFIX = -mt - win32:BOOST_LIB_SUFFIX = -mgw44-mt-s-1_50 -} - -isEmpty(BOOST_THREAD_LIB_SUFFIX) { - BOOST_THREAD_LIB_SUFFIX = $$BOOST_LIB_SUFFIX -} - -isEmpty(BDB_LIB_PATH) { - macx:BDB_LIB_PATH = /opt/local/lib/db48 -} - -isEmpty(BDB_LIB_SUFFIX) { - macx:BDB_LIB_SUFFIX = -4.8 -} - -isEmpty(BDB_INCLUDE_PATH) { - macx:BDB_INCLUDE_PATH = /opt/local/include/db48 -} - -isEmpty(BOOST_LIB_PATH) { - macx:BOOST_LIB_PATH = /opt/local/lib -} - -isEmpty(BOOST_INCLUDE_PATH) { - macx:BOOST_INCLUDE_PATH = /opt/local/include -} - -win32:DEFINES += WIN32 -win32:RC_FILE = src/qt/res/bitcoin-qt.rc - -win32:!contains(MINGW_THREAD_BUGFIX, 0) { - # At least qmake's win32-g++-cross profile is missing the -lmingwthrd - # thread-safety flag. GCC has -mthreads to enable this, but it doesn't - # work with static linking. -lmingwthrd must come BEFORE -lmingw, so - # it is prepended to QMAKE_LIBS_QT_ENTRY. - # It can be turned off with MINGW_THREAD_BUGFIX=0, just in case it causes - # any problems on some untested qmake profile now or in the future. - DEFINES += _MT - QMAKE_LIBS_QT_ENTRY = -lmingwthrd $$QMAKE_LIBS_QT_ENTRY -} - -!win32:!macx { - DEFINES += LINUX - LIBS += -lrt - # _FILE_OFFSET_BITS=64 lets 32-bit fopen transparently support large files. - DEFINES += _FILE_OFFSET_BITS=64 -} - -macx:HEADERS += src/qt/macdockiconhandler.h src/qt/macnotificationhandler.h -macx:OBJECTIVE_SOURCES += src/qt/macdockiconhandler.mm src/qt/macnotificationhandler.mm -macx:LIBS += -framework Foundation -framework ApplicationServices -framework AppKit -framework CoreServices -macx:DEFINES += MAC_OSX MSG_NOSIGNAL=0 -macx:ICON = src/qt/res/icons/bitcoin.icns -macx:QMAKE_CFLAGS_THREAD += -pthread -macx:QMAKE_LFLAGS_THREAD += -pthread -macx:QMAKE_CXXFLAGS_THREAD += -pthread -macx:QMAKE_INFO_PLIST = share/qt/Info.plist - -# Set libraries and includes at end, to use platform-defined defaults if not overridden -INCLUDEPATH += $$BOOST_INCLUDE_PATH $$BDB_INCLUDE_PATH $$OPENSSL_INCLUDE_PATH $$QRENCODE_INCLUDE_PATH -LIBS += $$join(BOOST_LIB_PATH,,-L,) $$join(BDB_LIB_PATH,,-L,) $$join(OPENSSL_LIB_PATH,,-L,) $$join(QRENCODE_LIB_PATH,,-L,) -LIBS += -lssl -lcrypto -ldb_cxx$$BDB_LIB_SUFFIX -# -lgdi32 has to happen after -lcrypto (see #681) -win32:LIBS += -lws2_32 -lshlwapi -lmswsock -lole32 -loleaut32 -luuid -lgdi32 -LIBS += -lboost_system$$BOOST_LIB_SUFFIX -lboost_filesystem$$BOOST_LIB_SUFFIX -lboost_program_options$$BOOST_LIB_SUFFIX -lboost_thread$$BOOST_THREAD_LIB_SUFFIX -win32:LIBS += -lboost_chrono$$BOOST_LIB_SUFFIX -macx:LIBS += -lboost_chrono$$BOOST_LIB_SUFFIX - -contains(RELEASE, 1) { - !win32:!macx { - # Linux: turn dynamic linking back on for c/c++ runtime libraries - LIBS += -Wl,-Bdynamic - } -} - -system($$QMAKE_LRELEASE -silent $$TRANSLATIONS) diff --git a/myriadcoin-qt.pro b/myriadcoin-qt.pro deleted file mode 100644 index b004e452..00000000 --- a/myriadcoin-qt.pro +++ /dev/null @@ -1,462 +0,0 @@ -TEMPLATE = app -TARGET = myriadcoin-qt -macx:TARGET = "Myriadcoin-Qt" -VERSION = 0.8.2 -INCLUDEPATH += src src/json src/qt -QT += core gui network -greaterThan(QT_MAJOR_VERSION, 4): QT += widgets -DEFINES += BOOST_THREAD_USE_LIB BOOST_SPIRIT_THREADSAFE -CONFIG += no_include_pwd -CONFIG += thread - -# for boost 1.37, add -mt to the boost libraries -# use: qmake BOOST_LIB_SUFFIX=-mt -# for boost thread win32 with _win32 sufix -# use: BOOST_THREAD_LIB_SUFFIX=_win32-... -# or when linking against a specific BerkelyDB version: BDB_LIB_SUFFIX=-4.8 - -# Dependency library locations can be customized with: -# BOOST_INCLUDE_PATH, BOOST_LIB_PATH, BDB_INCLUDE_PATH, -# BDB_LIB_PATH, OPENSSL_INCLUDE_PATH and OPENSSL_LIB_PATH respectively - -OBJECTS_DIR = build -MOC_DIR = build -UI_DIR = build - -# use: qmake "RELEASE=1" -contains(RELEASE, 1) { - # Mac: compile for maximum compatibility (10.5, 32-bit) - macx:QMAKE_CXXFLAGS += -mmacosx-version-min=10.5 -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk - macx:QMAKE_CFLAGS += -mmacosx-version-min=10.5 -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk - macx:QMAKE_OBJECTIVE_CFLAGS += -mmacosx-version-min=10.5 -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk - - !win32:!macx { - # Linux: static link and extra security (see: https://wiki.debian.org/Hardening) - LIBS += -Wl,-Bstatic -Wl,-z,relro -Wl,-z,now - } -} - -!win32 { - # for extra security against potential buffer overflows: enable GCCs Stack Smashing Protection - QMAKE_CXXFLAGS *= -fstack-protector-all - QMAKE_LFLAGS *= -fstack-protector-all - # Exclude on Windows cross compile with MinGW 4.2.x, as it will result in a non-working executable! - # This can be enabled for Windows, when we switch to MinGW >= 4.4.x. -} -# for extra security (see: https://wiki.debian.org/Hardening): this flag is GCC compiler-specific -QMAKE_CXXFLAGS *= -D_FORTIFY_SOURCE=2 -# for extra security on Windows: enable ASLR and DEP via GCC linker flags -win32:QMAKE_LFLAGS *= -Wl,--dynamicbase -Wl,--nxcompat -# on Windows: enable GCC large address aware linker flag -win32:QMAKE_LFLAGS *= -Wl,--large-address-aware - -# use: qmake "USE_QRCODE=1" -# libqrencode (http://fukuchi.org/works/qrencode/index.en.html) must be installed for support -contains(USE_QRCODE, 1) { - message(Building with QRCode support) - DEFINES += USE_QRCODE - LIBS += -lqrencode -} - -# use: qmake "USE_UPNP=1" ( enabled by default; default) -# or: qmake "USE_UPNP=0" (disabled by default) -# or: qmake "USE_UPNP=-" (not supported) -# miniupnpc (http://miniupnp.free.fr/files/) must be installed for support -contains(USE_UPNP, -) { - message(Building without UPNP support) -} else { - message(Building with UPNP support) - count(USE_UPNP, 0) { - USE_UPNP=1 - } - DEFINES += USE_UPNP=$$USE_UPNP STATICLIB - INCLUDEPATH += $$MINIUPNPC_INCLUDE_PATH - LIBS += $$join(MINIUPNPC_LIB_PATH,,-L,) -lminiupnpc - win32:LIBS += -liphlpapi -} - -# use: qmake "USE_DBUS=1" -contains(USE_DBUS, 1) { - message(Building with DBUS (Freedesktop notifications) support) - DEFINES += USE_DBUS - QT += dbus -} - -# use: qmake "USE_IPV6=1" ( enabled by default; default) -# or: qmake "USE_IPV6=0" (disabled by default) -# or: qmake "USE_IPV6=-" (not supported) -contains(USE_IPV6, -) { - message(Building without IPv6 support) -} else { - count(USE_IPV6, 0) { - USE_IPV6=1 - } - DEFINES += USE_IPV6=$$USE_IPV6 -} - -contains(BITCOIN_NEED_QT_PLUGINS, 1) { - DEFINES += BITCOIN_NEED_QT_PLUGINS - QTPLUGIN += qcncodecs qjpcodecs qtwcodecs qkrcodecs qtaccessiblewidgets -} - -INCLUDEPATH += src/leveldb/include src/leveldb/helpers -LIBS += $$PWD/src/leveldb/libleveldb.a $$PWD/src/leveldb/libmemenv.a -!win32 { - # we use QMAKE_CXXFLAGS_RELEASE even without RELEASE=1 because we use RELEASE to indicate linking preferences not -O preferences - genleveldb.commands = cd $$PWD/src/leveldb && CC=$$QMAKE_CC CXX=$$QMAKE_CXX $(MAKE) OPT=\"$$QMAKE_CXXFLAGS $$QMAKE_CXXFLAGS_RELEASE\" libleveldb.a libmemenv.a -} else { - # make an educated guess about what the ranlib command is called - isEmpty(QMAKE_RANLIB) { - QMAKE_RANLIB = $$replace(QMAKE_STRIP, strip, ranlib) - } - LIBS += -lshlwapi - genleveldb.commands = cd $$PWD/src/leveldb && CC=$$QMAKE_CC CXX=$$QMAKE_CXX TARGET_OS=OS_WINDOWS_CROSSCOMPILE $(MAKE) OPT=\"$$QMAKE_CXXFLAGS $$QMAKE_CXXFLAGS_RELEASE\" libleveldb.a libmemenv.a && $$QMAKE_RANLIB $$PWD/src/leveldb/libleveldb.a && $$QMAKE_RANLIB $$PWD/src/leveldb/libmemenv.a -} -genleveldb.target = $$PWD/src/leveldb/libleveldb.a -genleveldb.depends = FORCE -PRE_TARGETDEPS += $$PWD/src/leveldb/libleveldb.a -QMAKE_EXTRA_TARGETS += genleveldb -# Gross ugly hack that depends on qmake internals, unfortunately there is no other way to do it. -QMAKE_CLEAN += $$PWD/src/leveldb/libleveldb.a; cd $$PWD/src/leveldb ; $(MAKE) clean - -# regenerate src/build.h -!win32|contains(USE_BUILD_INFO, 1) { - genbuild.depends = FORCE - genbuild.commands = cd $$PWD; /bin/sh share/genbuild.sh $$OUT_PWD/build/build.h - genbuild.target = $$OUT_PWD/build/build.h - PRE_TARGETDEPS += $$OUT_PWD/build/build.h - QMAKE_EXTRA_TARGETS += genbuild - DEFINES += HAVE_BUILD_INFO -} - -QMAKE_CXXFLAGS_WARN_ON = -fdiagnostics-show-option -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter -Wstack-protector - -# Input -DEPENDPATH += src src/json src/qt -HEADERS += src/qt/bitcoingui.h \ - src/qt/transactiontablemodel.h \ - src/qt/addresstablemodel.h \ - src/qt/optionsdialog.h \ - src/qt/sendcoinsdialog.h \ - src/qt/addressbookpage.h \ - src/qt/signverifymessagedialog.h \ - src/qt/aboutdialog.h \ - src/qt/editaddressdialog.h \ - src/qt/bitcoinaddressvalidator.h \ - src/alert.h \ - src/addrman.h \ - src/base58.h \ - src/bignum.h \ - src/chainparams.h \ - src/checkpoints.h \ - src/compat.h \ - src/sync.h \ - src/util.h \ - src/hash.h \ - src/uint256.h \ - src/serialize.h \ - src/core.h \ - src/main.h \ - src/net.h \ - src/key.h \ - src/db.h \ - src/walletdb.h \ - src/script.h \ - src/init.h \ - src/bloom.h \ - src/mruset.h \ - src/checkqueue.h \ - src/json/json_spirit_writer_template.h \ - src/json/json_spirit_writer.h \ - src/json/json_spirit_value.h \ - src/json/json_spirit_utils.h \ - src/json/json_spirit_stream_reader.h \ - src/json/json_spirit_reader_template.h \ - src/json/json_spirit_reader.h \ - src/json/json_spirit_error_position.h \ - src/json/json_spirit.h \ - src/qt/clientmodel.h \ - src/qt/guiutil.h \ - src/qt/transactionrecord.h \ - src/qt/guiconstants.h \ - src/qt/optionsmodel.h \ - src/qt/monitoreddatamapper.h \ - src/qt/transactiondesc.h \ - src/qt/transactiondescdialog.h \ - src/qt/bitcoinamountfield.h \ - src/wallet.h \ - src/keystore.h \ - src/qt/transactionfilterproxy.h \ - src/qt/transactionview.h \ - src/qt/walletmodel.h \ - src/qt/walletview.h \ - src/qt/walletstack.h \ - src/qt/walletframe.h \ - src/bitcoinrpc.h \ - src/qt/overviewpage.h \ - src/qt/csvmodelwriter.h \ - src/crypter.h \ - src/qt/sendcoinsentry.h \ - src/qt/qvalidatedlineedit.h \ - src/qt/bitcoinunits.h \ - src/qt/qvaluecombobox.h \ - src/qt/askpassphrasedialog.h \ - src/protocol.h \ - src/qt/notificator.h \ - src/qt/paymentserver.h \ - src/allocators.h \ - src/ui_interface.h \ - src/qt/rpcconsole.h \ - src/version.h \ - src/netbase.h \ - src/clientversion.h \ - src/txdb.h \ - src/leveldb.h \ - src/threadsafety.h \ - src/limitedmap.h \ - src/qt/splashscreen.h \ - src/qt/intro.h \ - src/scrypt.h \ - src/sph_blake.h \ - src/sph_groestl.h \ - src/sph_keccak.h \ - src/sph_bmw.h \ - src/sph_jh.h \ - src/sph_skein.h \ - src/sph_types.h \ - src/sph_echo.h \ - src/sph_luffa.h \ - src/sph_simd.h \ - src/sph_cubehash.h \ - src/sph_shavite.h \ - src/hashgroestl.h \ - src/hashskein.h \ - src/hashqubit.h - -SOURCES += src/qt/bitcoin.cpp \ - src/qt/bitcoingui.cpp \ - src/qt/transactiontablemodel.cpp \ - src/qt/addresstablemodel.cpp \ - src/qt/optionsdialog.cpp \ - src/qt/sendcoinsdialog.cpp \ - src/qt/addressbookpage.cpp \ - src/qt/signverifymessagedialog.cpp \ - src/qt/aboutdialog.cpp \ - src/qt/editaddressdialog.cpp \ - src/qt/bitcoinaddressvalidator.cpp \ - src/alert.cpp \ - src/chainparams.cpp \ - src/version.cpp \ - src/sync.cpp \ - src/util.cpp \ - src/hash.cpp \ - src/netbase.cpp \ - src/key.cpp \ - src/script.cpp \ - src/core.cpp \ - src/main.cpp \ - src/init.cpp \ - src/net.cpp \ - src/bloom.cpp \ - src/checkpoints.cpp \ - src/addrman.cpp \ - src/db.cpp \ - src/walletdb.cpp \ - src/qt/clientmodel.cpp \ - src/qt/guiutil.cpp \ - src/qt/transactionrecord.cpp \ - src/qt/optionsmodel.cpp \ - src/qt/monitoreddatamapper.cpp \ - src/qt/transactiondesc.cpp \ - src/qt/transactiondescdialog.cpp \ - src/qt/bitcoinstrings.cpp \ - src/qt/bitcoinamountfield.cpp \ - src/wallet.cpp \ - src/keystore.cpp \ - src/qt/transactionfilterproxy.cpp \ - src/qt/transactionview.cpp \ - src/qt/walletmodel.cpp \ - src/qt/walletview.cpp \ - src/qt/walletstack.cpp \ - src/qt/walletframe.cpp \ - src/bitcoinrpc.cpp \ - src/rpcdump.cpp \ - src/rpcnet.cpp \ - src/rpcmining.cpp \ - src/rpcwallet.cpp \ - src/rpcblockchain.cpp \ - src/rpcrawtransaction.cpp \ - src/qt/overviewpage.cpp \ - src/qt/csvmodelwriter.cpp \ - src/crypter.cpp \ - src/qt/sendcoinsentry.cpp \ - src/qt/qvalidatedlineedit.cpp \ - src/qt/bitcoinunits.cpp \ - src/qt/qvaluecombobox.cpp \ - src/qt/askpassphrasedialog.cpp \ - src/protocol.cpp \ - src/qt/notificator.cpp \ - src/qt/paymentserver.cpp \ - src/qt/rpcconsole.cpp \ - src/noui.cpp \ - src/leveldb.cpp \ - src/txdb.cpp \ - src/qt/splashscreen.cpp \ - src/qt/intro.cpp \ - src/scrypt.cpp \ - src/scrypt-sse2.cpp \ - src/blake.c \ - src/bmw.c \ - src/groestl.c \ - src/jh.c \ - src/keccak.c \ - src/skein.c \ - src/aes_helper.c \ - src/echo.c \ - src/luffa.c \ - src/simd.c \ - src/cubehash.c \ - src/shavite.c - -RESOURCES += src/qt/bitcoin.qrc - -FORMS += src/qt/forms/sendcoinsdialog.ui \ - src/qt/forms/addressbookpage.ui \ - src/qt/forms/signverifymessagedialog.ui \ - src/qt/forms/aboutdialog.ui \ - src/qt/forms/editaddressdialog.ui \ - src/qt/forms/transactiondescdialog.ui \ - src/qt/forms/overviewpage.ui \ - src/qt/forms/sendcoinsentry.ui \ - src/qt/forms/askpassphrasedialog.ui \ - src/qt/forms/rpcconsole.ui \ - src/qt/forms/optionsdialog.ui \ - src/qt/forms/intro.ui - -contains(USE_QRCODE, 1) { -HEADERS += src/qt/qrcodedialog.h -SOURCES += src/qt/qrcodedialog.cpp -FORMS += src/qt/forms/qrcodedialog.ui -} - -contains(BITCOIN_QT_TEST, 1) { -SOURCES += src/qt/test/test_main.cpp \ - src/qt/test/uritests.cpp -HEADERS += src/qt/test/uritests.h -DEPENDPATH += src/qt/test -QT += testlib -TARGET = myriadcoin-qt_test -DEFINES += BITCOIN_QT_TEST - macx: CONFIG -= app_bundle -} - -# Todo: Remove this line when switching to Qt5, as that option was removed -CODECFORTR = UTF-8 - -# for lrelease/lupdate -# also add new translations to src/qt/bitcoin.qrc under translations/ -TRANSLATIONS = $$files(src/qt/locale/bitcoin_*.ts) - -isEmpty(QMAKE_LRELEASE) { - win32:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]\\lrelease.exe - else:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]/lrelease -} -isEmpty(QM_DIR):QM_DIR = $$PWD/src/qt/locale -# automatically build translations, so they can be included in resource file -TSQM.name = lrelease ${QMAKE_FILE_IN} -TSQM.input = TRANSLATIONS -TSQM.output = $$QM_DIR/${QMAKE_FILE_BASE}.qm -TSQM.commands = $$QMAKE_LRELEASE ${QMAKE_FILE_IN} -qm ${QMAKE_FILE_OUT} -TSQM.CONFIG = no_link -QMAKE_EXTRA_COMPILERS += TSQM - -# "Other files" to show in Qt Creator -OTHER_FILES += README.md \ - doc/*.txt \ - doc/*.md \ - src/bitcoind.cpp \ - src/qt/res/bitcoin-qt.rc \ - src/test/*.cpp \ - src/test/*.h \ - src/qt/test/*.cpp \ - src/qt/test/*.h - -# platform specific defaults, if not overridden on command line -isEmpty(BOOST_LIB_SUFFIX) { - macx:BOOST_LIB_SUFFIX = -mt - win32:BOOST_LIB_SUFFIX = -mgw44-mt-s-1_50 -} - -isEmpty(BOOST_THREAD_LIB_SUFFIX) { - BOOST_THREAD_LIB_SUFFIX = $$BOOST_LIB_SUFFIX -} - -isEmpty(BDB_LIB_PATH) { - macx:BDB_LIB_PATH = /opt/local/lib/db48 -} - -isEmpty(BDB_LIB_SUFFIX) { - macx:BDB_LIB_SUFFIX = -4.8 -} - -isEmpty(BDB_INCLUDE_PATH) { - macx:BDB_INCLUDE_PATH = /opt/local/include/db48 -} - -isEmpty(BOOST_LIB_PATH) { - macx:BOOST_LIB_PATH = /opt/local/lib -} - -isEmpty(BOOST_INCLUDE_PATH) { - macx:BOOST_INCLUDE_PATH = /opt/local/include -} - -win32:DEFINES += WIN32 -win32:RC_FILE = src/qt/res/bitcoin-qt.rc - -win32:!contains(MINGW_THREAD_BUGFIX, 0) { - # At least qmake's win32-g++-cross profile is missing the -lmingwthrd - # thread-safety flag. GCC has -mthreads to enable this, but it doesn't - # work with static linking. -lmingwthrd must come BEFORE -lmingw, so - # it is prepended to QMAKE_LIBS_QT_ENTRY. - # It can be turned off with MINGW_THREAD_BUGFIX=0, just in case it causes - # any problems on some untested qmake profile now or in the future. - DEFINES += _MT - QMAKE_LIBS_QT_ENTRY = -lmingwthrd $$QMAKE_LIBS_QT_ENTRY -} - -!win32:!macx { - DEFINES += LINUX - LIBS += -lrt - # _FILE_OFFSET_BITS=64 lets 32-bit fopen transparently support large files. - DEFINES += _FILE_OFFSET_BITS=64 -} - -macx:HEADERS += src/qt/macdockiconhandler.h src/qt/macnotificationhandler.h -macx:OBJECTIVE_SOURCES += src/qt/macdockiconhandler.mm src/qt/macnotificationhandler.mm -macx:LIBS += -framework Foundation -framework ApplicationServices -framework AppKit -framework CoreServices -macx:DEFINES += MAC_OSX MSG_NOSIGNAL=0 -macx:ICON = src/qt/res/icons/bitcoin.icns -macx:QMAKE_CFLAGS_THREAD += -pthread -macx:QMAKE_LFLAGS_THREAD += -pthread -macx:QMAKE_CXXFLAGS_THREAD += -pthread -macx:QMAKE_INFO_PLIST = share/qt/Info.plist - -# Set libraries and includes at end, to use platform-defined defaults if not overridden -INCLUDEPATH += $$BOOST_INCLUDE_PATH $$BDB_INCLUDE_PATH $$OPENSSL_INCLUDE_PATH $$QRENCODE_INCLUDE_PATH -LIBS += $$join(BOOST_LIB_PATH,,-L,) $$join(BDB_LIB_PATH,,-L,) $$join(OPENSSL_LIB_PATH,,-L,) $$join(QRENCODE_LIB_PATH,,-L,) -LIBS += -lssl -lcrypto -ldb_cxx$$BDB_LIB_SUFFIX -# -lgdi32 has to happen after -lcrypto (see #681) -win32:LIBS += -lws2_32 -lshlwapi -lmswsock -lole32 -loleaut32 -luuid -lgdi32 -LIBS += -lboost_system$$BOOST_LIB_SUFFIX -lboost_filesystem$$BOOST_LIB_SUFFIX -lboost_program_options$$BOOST_LIB_SUFFIX -lboost_thread$$BOOST_THREAD_LIB_SUFFIX -win32:LIBS += -lboost_chrono$$BOOST_LIB_SUFFIX -macx:LIBS += -lboost_chrono$$BOOST_LIB_SUFFIX - -contains(RELEASE, 1) { - !win32:!macx { - # Linux: turn dynamic linking back on for c/c++ runtime libraries - LIBS += -Wl,-Bdynamic - } -} - -system($$QMAKE_LRELEASE -silent $$TRANSLATIONS) diff --git a/pkg.m4 b/pkg.m4 new file mode 100644 index 00000000..c5b26b52 --- /dev/null +++ b/pkg.m4 @@ -0,0 +1,214 @@ +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +# serial 1 (pkg-config-0.24) +# +# Copyright © 2004 Scott James Remnant . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# PKG_PROG_PKG_CONFIG([MIN-VERSION]) +# ---------------------------------- +AC_DEFUN([PKG_PROG_PKG_CONFIG], +[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) +m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) +AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) +AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) +AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=m4_default([$1], [0.9.0]) + AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + PKG_CONFIG="" + fi +fi[]dnl +])# PKG_PROG_PKG_CONFIG + +# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# +# Check to see whether a particular set of modules exists. Similar +# to PKG_CHECK_MODULES(), but does not set variables or print errors. +# +# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +# only at the first occurence in configure.ac, so if the first place +# it's called might be skipped (such as if it is within an "if", you +# have to call PKG_CHECK_EXISTS manually +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_EXISTS], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +if test -n "$PKG_CONFIG" && \ + AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then + m4_default([$2], [:]) +m4_ifvaln([$3], [else + $3])dnl +fi]) + +# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +# --------------------------------------------- +m4_define([_PKG_CONFIG], +[if test -n "$$1"; then + pkg_cv_[]$1="$$1" + elif test -n "$PKG_CONFIG"; then + PKG_CHECK_EXISTS([$3], + [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes ], + [pkg_failed=yes]) + else + pkg_failed=untried +fi[]dnl +])# _PKG_CONFIG + +# _PKG_SHORT_ERRORS_SUPPORTED +# ----------------------------- +AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi[]dnl +])# _PKG_SHORT_ERRORS_SUPPORTED + + +# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +# [ACTION-IF-NOT-FOUND]) +# +# +# Note that if there is a possibility the first call to +# PKG_CHECK_MODULES might not happen, you should be sure to include an +# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac +# +# +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_MODULES], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl +AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl + +pkg_failed=no +AC_MSG_CHECKING([for $1]) + +_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) +_PKG_CONFIG([$1][_LIBS], [libs], [$2]) + +m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS +and $1[]_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details.]) + +if test $pkg_failed = yes; then + AC_MSG_RESULT([no]) + _PKG_SHORT_ERRORS_SUPPORTED + if test $_pkg_short_errors_supported = yes; then + $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` + else + $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD + + m4_default([$4], [AC_MSG_ERROR( +[Package requirements ($2) were not met: + +$$1_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +_PKG_TEXT])[]dnl + ]) +elif test $pkg_failed = untried; then + AC_MSG_RESULT([no]) + m4_default([$4], [AC_MSG_FAILURE( +[The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +_PKG_TEXT + +To get pkg-config, see .])[]dnl + ]) +else + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS + AC_MSG_RESULT([yes]) + $3 +fi[]dnl +])# PKG_CHECK_MODULES + + +# PKG_INSTALLDIR(DIRECTORY) +# ------------------------- +# Substitutes the variable pkgconfigdir as the location where a module +# should install pkg-config .pc files. By default the directory is +# $libdir/pkgconfig, but the default can be changed by passing +# DIRECTORY. The user can override through the --with-pkgconfigdir +# parameter. +AC_DEFUN([PKG_INSTALLDIR], +[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) +m4_pushdef([pkg_description], + [pkg-config installation directory @<:@]pkg_default[@:>@]) +AC_ARG_WITH([pkgconfigdir], + [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, + [with_pkgconfigdir=]pkg_default) +AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) +m4_popdef([pkg_default]) +m4_popdef([pkg_description]) +]) dnl PKG_INSTALLDIR + + +# PKG_NOARCH_INSTALLDIR(DIRECTORY) +# ------------------------- +# Substitutes the variable noarch_pkgconfigdir as the location where a +# module should install arch-independent pkg-config .pc files. By +# default the directory is $datadir/pkgconfig, but the default can be +# changed by passing DIRECTORY. The user can override through the +# --with-noarch-pkgconfigdir parameter. +AC_DEFUN([PKG_NOARCH_INSTALLDIR], +[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) +m4_pushdef([pkg_description], + [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) +AC_ARG_WITH([noarch-pkgconfigdir], + [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, + [with_noarch_pkgconfigdir=]pkg_default) +AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) +m4_popdef([pkg_default]) +m4_popdef([pkg_description]) +]) dnl PKG_NOARCH_INSTALLDIR + + +# PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, +# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# ------------------------------------------- +# Retrieves the value of the pkg-config variable for the given module. +AC_DEFUN([PKG_CHECK_VAR], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl + +_PKG_CONFIG([$1], [variable="][$3]["], [$2]) +AS_VAR_COPY([$1], [pkg_cv_][$1]) + +AS_VAR_IF([$1], [""], [$5], [$4])dnl +])# PKG_CHECK_VAR diff --git a/qa/pull-tester/build-tests.sh.in b/qa/pull-tester/build-tests.sh.in new file mode 100755 index 00000000..ebf377a4 --- /dev/null +++ b/qa/pull-tester/build-tests.sh.in @@ -0,0 +1,101 @@ +#!/bin/bash +# Copyright (c) 2013 The Bitcoin Core developers +# Distributed under the MIT/X11 software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. +# +# Param1: The prefix to mingw staging +# Param2: Path to java comparison tool +# Param3: Number of make jobs. Defaults to 1. + +# Exit immediately if anything fails: +set -e +set -o xtrace + +MINGWPREFIX=$1 +JAVA_COMPARISON_TOOL=$2 +RUN_EXPENSIVE_TESTS=$3 +JOBS=${4-1} +OUT_DIR=${5-} + +if [ $# -lt 2 ]; then + echo "Usage: $0 [mingw-prefix] [java-comparison-tool] " + exit 1 +fi + +DISTDIR=@PACKAGE@-@VERSION@ + +# Cross-compile for windows first (breaking the mingw/windows build is most common) +cd @abs_top_srcdir@ +make distdir +mkdir -p win32-build +rsync -av $DISTDIR/ win32-build/ +rm -r $DISTDIR +cd win32-build + +if [ $RUN_EXPENSIVE_TESTS = 1 ]; then + ./configure --disable-silent-rules --disable-ccache --prefix=$MINGWPREFIX --host=i586-mingw32msvc --with-qt-bindir=$MINGWPREFIX/host/bin --with-qt-plugindir=$MINGWPREFIX/plugins --with-qt-incdir=$MINGWPREFIX/include --with-boost=$MINGWPREFIX --with-protoc-bindir=$MINGWPREFIX/host/bin CPPFLAGS=-I$MINGWPREFIX/include LDFLAGS=-L$MINGWPREFIX/lib --with-comparison-tool="$JAVA_COMPARISON_TOOL" +else + ./configure --disable-silent-rules --disable-ccache --prefix=$MINGWPREFIX --host=i586-mingw32msvc --with-qt-bindir=$MINGWPREFIX/host/bin --with-qt-plugindir=$MINGWPREFIX/plugins --with-qt-incdir=$MINGWPREFIX/include --with-boost=$MINGWPREFIX --with-protoc-bindir=$MINGWPREFIX/host/bin CPPFLAGS=-I$MINGWPREFIX/include LDFLAGS=-L$MINGWPREFIX/lib +fi +make -j$JOBS + +# And compile for Linux: +cd @abs_top_srcdir@ +make distdir +mkdir -p linux-build +rsync -av $DISTDIR/ linux-build/ +rm -r $DISTDIR +cd linux-build +if [ $RUN_EXPENSIVE_TESTS = 1 ]; then + ./configure --disable-silent-rules --disable-ccache --with-comparison-tool="$JAVA_COMPARISON_TOOL" --enable-comparison-tool-reorg-tests +else + ./configure --disable-silent-rules --disable-ccache --with-comparison-tool="$JAVA_COMPARISON_TOOL" +fi +make -j$JOBS + +# link interesting binaries to parent out/ directory, if it exists. Do this before +# running unit tests (we want bad binaries to be easy to find) +if [ -d "$OUT_DIR" -a -w "$OUT_DIR" ]; then + set +e + # Windows: + cp @abs_top_srcdir@/win32-build/src/bitcoind.exe $OUT_DIR/bitcoind.exe + cp @abs_top_srcdir@/win32-build/src/test/test_bitcoin.exe $OUT_DIR/test_bitcoin.exe + cp @abs_top_srcdir@/win32-build/src/qt/bitcoind-qt.exe $OUT_DIR/bitcoin-qt.exe + # Linux: + cp @abs_top_srcdir@/linux-build/src/bitcoind $OUT_DIR/bitcoind + cp @abs_top_srcdir@/linux-build/src/test/test_bitcoin $OUT_DIR/test_bitcoin + cp @abs_top_srcdir@/linux-build/src/qt/bitcoind-qt $OUT_DIR/bitcoin-qt + set -e +fi + +# Run unit tests and blockchain-tester on Linux: +cd @abs_top_srcdir@/linux-build +make check + +# Run RPC integration test on Linux: +@abs_top_srcdir@/qa/rpc-tests/wallet.sh @abs_top_srcdir@/linux-build/src +@abs_top_srcdir@/qa/rpc-tests/listtransactions.py --srcdir @abs_top_srcdir@/linux-build/src +# Clean up cache/ directory that the python regression tests create +rm -rf cache + +if [ $RUN_EXPENSIVE_TESTS = 1 ]; then + # Run unit tests and blockchain-tester on Windows: + cd @abs_top_srcdir@/win32-build + make check +fi + +# Clean up builds (pull-tester machine doesn't have infinite disk space) +cd @abs_top_srcdir@/linux-build +make clean +cd @abs_top_srcdir@/win32-build +make clean + +# TODO: Fix code coverage builds on pull-tester machine +# # Test code coverage +# cd @abs_top_srcdir@ +# make distdir +# mv $DISTDIR linux-coverage-build +# cd linux-coverage-build +# ./configure --enable-lcov --disable-silent-rules --disable-ccache --with-comparison-tool="$JAVA_COMPARISON_TOOL" +# make -j$JOBS +# make cov diff --git a/qa/pull-tester/pull-tester.py b/qa/pull-tester/pull-tester.py new file mode 100755 index 00000000..61ce813d --- /dev/null +++ b/qa/pull-tester/pull-tester.py @@ -0,0 +1,193 @@ +#!/usr/bin/python +# Copyright (c) 2013 The Bitcoin Core developers +# Distributed under the MIT/X11 software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. +# +import json +from urllib import urlopen +import requests +import getpass +from string import Template +import sys +import os +import subprocess + +class RunError(Exception): + def __init__(self, value): + self.value = value + def __str__(self): + return repr(self.value) + +def run(command, **kwargs): + fail_hard = kwargs.pop("fail_hard", True) + # output to /dev/null by default: + kwargs.setdefault("stdout", open('/dev/null', 'w')) + kwargs.setdefault("stderr", open('/dev/null', 'w')) + command = Template(command).substitute(os.environ) + if "TRACE" in os.environ: + if 'cwd' in kwargs: + print("[cwd=%s] %s"%(kwargs['cwd'], command)) + else: print(command) + try: + process = subprocess.Popen(command.split(' '), **kwargs) + process.wait() + except KeyboardInterrupt: + process.terminate() + raise + if process.returncode != 0 and fail_hard: + raise RunError("Failed: "+command) + return process.returncode + +def checkout_pull(clone_url, commit, out): + # Init + build_dir=os.environ["BUILD_DIR"] + run("umount ${CHROOT_COPY}/proc", fail_hard=False) + run("rsync --delete -apv ${CHROOT_MASTER}/ ${CHROOT_COPY}") + run("rm -rf ${CHROOT_COPY}${SCRIPTS_DIR}") + run("cp -a ${SCRIPTS_DIR} ${CHROOT_COPY}${SCRIPTS_DIR}") + # Merge onto upstream/master + run("rm -rf ${BUILD_DIR}") + run("mkdir -p ${BUILD_DIR}") + run("git clone ${CLONE_URL} ${BUILD_DIR}") + run("git remote add pull "+clone_url, cwd=build_dir, stdout=out, stderr=out) + run("git fetch pull", cwd=build_dir, stdout=out, stderr=out) + if run("git merge "+ commit, fail_hard=False, cwd=build_dir, stdout=out, stderr=out) != 0: + return False + run("chown -R ${BUILD_USER}:${BUILD_GROUP} ${BUILD_DIR}", stdout=out, stderr=out) + run("mount --bind /proc ${CHROOT_COPY}/proc") + return True + +def commentOn(commentUrl, success, inMerge, needTests, linkUrl): + common_message = """ +This test script verifies pulls every time they are updated. It, however, dies sometimes and fails to test properly. If you are waiting on a test, please check timestamps to verify that the test.log is moving at http://jenkins.bluematt.me/pull-tester/current/ +Contact BlueMatt on freenode if something looks broken.""" + + # Remove old BitcoinPullTester comments (I'm being lazy and not paginating here) + recentcomments = requests.get(commentUrl+"?sort=created&direction=desc", + auth=(os.environ['GITHUB_USER'], os.environ["GITHUB_AUTH_TOKEN"])).json + for comment in recentcomments: + if comment["user"]["login"] == os.environ["GITHUB_USER"] and common_message in comment["body"]: + requests.delete(comment["url"], + auth=(os.environ['GITHUB_USER'], os.environ["GITHUB_AUTH_TOKEN"])) + + if success == True: + if needTests: + message = "Automatic sanity-testing: PLEASE ADD TEST-CASES, though technically passed. See " + linkUrl + " for binaries and test log." + else: + message = "Automatic sanity-testing: PASSED, see " + linkUrl + " for binaries and test log." + + post_data = { "body" : message + common_message} + elif inMerge: + post_data = { "body" : "Automatic sanity-testing: FAILED MERGE, see " + linkUrl + " for test log." + """ + +This pull does not merge cleanly onto current master""" + common_message} + else: + post_data = { "body" : "Automatic sanity-testing: FAILED BUILD/TEST, see " + linkUrl + " for binaries and test log." + """ + +This could happen for one of several reasons: +1. It chanages changes build scripts in a way that made them incompatible with the automated testing scripts (please tweak those patches in qa/pull-tester) +2. It adds/modifies tests which test network rules (thanks for doing that), which conflicts with a patch applied at test time +3. It does not build on either Linux i386 or Win32 (via MinGW cross compile) +4. The test suite fails on either Linux i386 or Win32 +5. The block test-cases failed (lookup the first bNN identifier which failed in https://github.com/TheBlueMatt/test-scripts/blob/master/FullBlockTestGenerator.java) + +If you believe this to be in error, please ping BlueMatt on freenode or TheBlueMatt here. +""" + common_message} + + resp = requests.post(commentUrl, json.dumps(post_data), auth=(os.environ['GITHUB_USER'], os.environ["GITHUB_AUTH_TOKEN"])) + +def testpull(number, comment_url, clone_url, commit): + print("Testing pull %d: %s : %s"%(number, clone_url,commit)) + + dir = os.environ["RESULTS_DIR"] + "/" + commit + "/" + print(" ouput to %s"%dir) + if os.path.exists(dir): + os.system("rm -r " + dir) + os.makedirs(dir) + currentdir = os.environ["RESULTS_DIR"] + "/current" + os.system("rm -r "+currentdir) + os.system("ln -s " + dir + " " + currentdir) + out = open(dir + "test.log", 'w+') + + resultsurl = os.environ["RESULTS_URL"] + commit + checkedout = checkout_pull(clone_url, commit, out) + if checkedout != True: + print("Failed to test pull - sending comment to: " + comment_url) + commentOn(comment_url, False, True, False, resultsurl) + open(os.environ["TESTED_DB"], "a").write(commit + "\n") + return + + run("rm -rf ${CHROOT_COPY}/${OUT_DIR}", fail_hard=False); + run("mkdir -p ${CHROOT_COPY}/${OUT_DIR}", fail_hard=False); + run("chown -R ${BUILD_USER}:${BUILD_GROUP} ${CHROOT_COPY}/${OUT_DIR}", fail_hard=False) + + script = os.environ["BUILD_PATH"]+"/qa/pull-tester/pull-tester.sh" + script += " ${BUILD_PATH} ${MINGW_DEPS_DIR} ${SCRIPTS_DIR}/BitcoindComparisonTool_jar/BitcoindComparisonTool.jar 0 6 ${OUT_DIR}" + returncode = run("chroot ${CHROOT_COPY} sudo -u ${BUILD_USER} -H timeout ${TEST_TIMEOUT} "+script, + fail_hard=False, stdout=out, stderr=out) + + run("mv ${CHROOT_COPY}/${OUT_DIR} " + dir) + run("mv ${BUILD_DIR} " + dir) + + if returncode == 42: + print("Successfully tested pull (needs tests) - sending comment to: " + comment_url) + commentOn(comment_url, True, False, True, resultsurl) + elif returncode != 0: + print("Failed to test pull - sending comment to: " + comment_url) + commentOn(comment_url, False, False, False, resultsurl) + else: + print("Successfully tested pull - sending comment to: " + comment_url) + commentOn(comment_url, True, False, False, resultsurl) + open(os.environ["TESTED_DB"], "a").write(commit + "\n") + +def environ_default(setting, value): + if not setting in os.environ: + os.environ[setting] = value + +if getpass.getuser() != "root": + print("Run me as root!") + sys.exit(1) + +if "GITHUB_USER" not in os.environ or "GITHUB_AUTH_TOKEN" not in os.environ: + print("GITHUB_USER and/or GITHUB_AUTH_TOKEN environment variables not set") + sys.exit(1) + +environ_default("CLONE_URL", "https://github.com/bitcoin/bitcoin.git") +environ_default("MINGW_DEPS_DIR", "/mnt/w32deps") +environ_default("SCRIPTS_DIR", "/mnt/test-scripts") +environ_default("CHROOT_COPY", "/mnt/chroot-tmp") +environ_default("CHROOT_MASTER", "/mnt/chroot") +environ_default("OUT_DIR", "/mnt/out") +environ_default("BUILD_PATH", "/mnt/bitcoin") +os.environ["BUILD_DIR"] = os.environ["CHROOT_COPY"] + os.environ["BUILD_PATH"] +environ_default("RESULTS_DIR", "/mnt/www/pull-tester") +environ_default("RESULTS_URL", "http://jenkins.bluematt.me/pull-tester/") +environ_default("GITHUB_REPO", "bitcoin/bitcoin") +environ_default("TESTED_DB", "/mnt/commits-tested.txt") +environ_default("BUILD_USER", "matt") +environ_default("BUILD_GROUP", "matt") +environ_default("TEST_TIMEOUT", str(60*60*2)) + +print("Optional usage: pull-tester.py 2112") + +f = open(os.environ["TESTED_DB"]) +tested = set( line.rstrip() for line in f.readlines() ) +f.close() + +if len(sys.argv) > 1: + pull = requests.get("https://api.github.com/repos/"+os.environ["GITHUB_REPO"]+"/pulls/"+sys.argv[1], + auth=(os.environ['GITHUB_USER'], os.environ["GITHUB_AUTH_TOKEN"])).json + testpull(pull["number"], pull["_links"]["comments"]["href"], + pull["head"]["repo"]["clone_url"], pull["head"]["sha"]) + +else: + for page in range(1,100): + result = requests.get("https://api.github.com/repos/"+os.environ["GITHUB_REPO"]+"/pulls?state=open&page=%d"%(page,), + auth=(os.environ['GITHUB_USER'], os.environ["GITHUB_AUTH_TOKEN"])).json + if len(result) == 0: break; + for pull in result: + if pull["head"]["sha"] in tested: + print("Pull %d already tested"%(pull["number"],)) + continue + testpull(pull["number"], pull["_links"]["comments"]["href"], + pull["head"]["repo"]["clone_url"], pull["head"]["sha"]) diff --git a/qa/pull-tester/pull-tester.sh b/qa/pull-tester/pull-tester.sh new file mode 100755 index 00000000..d3356f73 --- /dev/null +++ b/qa/pull-tester/pull-tester.sh @@ -0,0 +1,22 @@ +#!/bin/sh +# Copyright (c) 2013 The Bitcoin Core developers +# Distributed under the MIT/X11 software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. +# +# Helper script for pull-tester. +#Param 1: path to bitcoin srcroot +#Param ...: arguments for build-test.sh + +if [ $# -lt 1 ]; then + echo "usage: $0 [bitcoin srcroot] build-test arguments..." +fi + +killall -q bitcoin-cli +killall -q bitcoind + +cd $1 +shift + +./autogen.sh +./configure +./qa/pull-tester/build-tests.sh "$@" diff --git a/qa/pull-tester/run-bitcoind-for-test.sh.in b/qa/pull-tester/run-bitcoind-for-test.sh.in new file mode 100755 index 00000000..391046ab --- /dev/null +++ b/qa/pull-tester/run-bitcoind-for-test.sh.in @@ -0,0 +1,32 @@ +#!/bin/bash +# Copyright (c) 2013 The Bitcoin Core developers +# Distributed under the MIT/X11 software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. +# +DATADIR="@abs_top_builddir@/.bitcoin" +rm -rf "$DATADIR" +mkdir -p "$DATADIR"/regtest +touch "$DATADIR/regtest/debug.log" +tail -q -n 1 -F "$DATADIR/regtest/debug.log" | grep -m 1 -q "Done loading" & +WAITER=$! +PORT=`expr $BASHPID + 10000` +"@abs_top_builddir@/src/bitcoind@EXEEXT@" -connect=0.0.0.0 -datadir="$DATADIR" -rpcuser=user -rpcpassword=pass -listen -keypool=3 -debug -debug=net -logtimestamps -port=$PORT -regtest -rpcport=`expr $PORT + 1` & +BITCOIND=$! + +#Install a watchdog. +(sleep 10 && kill -0 $WAITER 2>/dev/null && kill -9 $BITCOIND $$)& +wait $WAITER + +if [ -n "$TIMEOUT" ]; then + timeout "$TIMEOUT"s "$@" $PORT + RETURN=$? +else + "$@" $PORT + RETURN=$? +fi + +(sleep 15 && kill -0 $BITCOIND 2>/dev/null && kill -9 $BITCOIND $$)& +kill $BITCOIND && wait $BITCOIND + +# timeout returns 124 on timeout, otherwise the return value of the child +exit $RETURN diff --git a/qa/rpc-tests/.gitignore b/qa/rpc-tests/.gitignore new file mode 100644 index 00000000..cb41d944 --- /dev/null +++ b/qa/rpc-tests/.gitignore @@ -0,0 +1,2 @@ +*.pyc +cache diff --git a/qa/rpc-tests/README.md b/qa/rpc-tests/README.md new file mode 100644 index 00000000..616c0525 --- /dev/null +++ b/qa/rpc-tests/README.md @@ -0,0 +1,43 @@ +Regression tests of RPC interface +================================= + +### [python-bitcoinrpc](https://github.com/jgarzik/python-bitcoinrpc) +Git subtree of [https://github.com/jgarzik/python-bitcoinrpc](https://github.com/jgarzik/python-bitcoinrpc). +Changes to python-bitcoinrpc should be made upstream, and then +pulled here using git subtree. + +### [skeleton.py](skeleton.py) +Copy this to create new regression tests. + +### [listtransactions.py](listtransactions.py) +Tests for the listtransactions RPC call. + +### [util.py](util.sh) +Generally useful functions. + +Bash-based tests, to be ported to Python: +----------------------------------------- +- wallet.sh : Exercise wallet send/receive code. +- walletbackup.sh : Exercise wallet backup / dump / import +- txnmall.sh : Test proper accounting of malleable transactions +- conflictedbalance.sh : More testing of malleable transaction handling + +Notes +===== + +A 200-block -regtest blockchain and wallets for four nodes +is created the first time a regression test is run and +is stored in the cache/ directory. Each node has 25 mature +blocks (25*50=1250 BTC) in their wallet. + +After the first run, the cache/ blockchain and wallets are +copied into a temporary directory and used as the initial +test state. + +If you get into a bad state, you should be able +to recover with: + +```bash +rm -rf cache +killall bitcoind +``` diff --git a/qa/rpc-tests/conflictedbalance.sh b/qa/rpc-tests/conflictedbalance.sh new file mode 100755 index 00000000..849ad31f --- /dev/null +++ b/qa/rpc-tests/conflictedbalance.sh @@ -0,0 +1,146 @@ +#!/usr/bin/env bash +# Copyright (c) 2014 The Bitcoin Core developers +# Distributed under the MIT/X11 software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. + +# Test marking of spent outputs + +# Create a transaction graph with four transactions, +# A/B/C/D +# C spends A +# D spends B and C + +# Then simulate C being mutated, to create C' +# that is mined. +# A is still (correctly) considered spent. +# B should be treated as unspent + +if [ $# -lt 1 ]; then + echo "Usage: $0 path_to_binaries" + echo "e.g. $0 ../../src" + exit 1 +fi + +set -f + +BITCOIND=${1}/bitcoind +CLI=${1}/bitcoin-cli + +DIR="${BASH_SOURCE%/*}" +SENDANDWAIT="${DIR}/send.sh" +if [[ ! -d "$DIR" ]]; then DIR="$PWD"; fi +. "$DIR/util.sh" + +D=$(mktemp -d test.XXXXX) + +# Two nodes; one will play the part of merchant, the +# other an evil transaction-mutating miner. + +D1=${D}/node1 +CreateDataDir $D1 port=11000 rpcport=11001 +B1ARGS="-datadir=$D1 -debug=mempool" +$BITCOIND $B1ARGS & +B1PID=$! + +D2=${D}/node2 +CreateDataDir $D2 port=11010 rpcport=11011 +B2ARGS="-datadir=$D2 -debug=mempool" +$BITCOIND $B2ARGS & +B2PID=$! + +# Wait until all four nodes are at the same block number +function WaitBlocks { + while : + do + sleep 1 + declare -i BLOCKS1=$( GetBlocks $B1ARGS ) + declare -i BLOCKS2=$( GetBlocks $B2ARGS ) + if (( BLOCKS1 == BLOCKS2 )) + then + break + fi + done +} + +# Wait until node has $N peers +function WaitPeers { + while : + do + declare -i PEERS=$( $CLI $1 getconnectioncount ) + if (( PEERS == "$2" )) + then + break + fi + sleep 1 + done +} + +echo "Generating test blockchain..." + +# Start with B2 connected to B1: +$CLI $B2ARGS addnode 127.0.0.1:11000 onetry +WaitPeers "$B1ARGS" 1 + +# 2 block, 50 XBT each == 100 XBT +# These will be transactions "A" and "B" +$CLI $B1ARGS setgenerate true 2 + +WaitBlocks +# 100 blocks, 0 mature == 0 XBT +$CLI $B2ARGS setgenerate true 100 +WaitBlocks + +CheckBalance "$B1ARGS" 100 +CheckBalance "$B2ARGS" 0 + +# restart B2 with no connection +$CLI $B2ARGS stop > /dev/null 2>&1 +wait $B2PID +$BITCOIND $B2ARGS & +B2PID=$! + +B1ADDRESS=$( $CLI $B1ARGS getnewaddress ) +B2ADDRESS=$( $CLI $B2ARGS getnewaddress ) + +# Transaction C: send-to-self, spend A +TXID_C=$( $CLI $B1ARGS sendtoaddress $B1ADDRESS 50.0) + +# Transaction D: spends B and C +TXID_D=$( $CLI $B1ARGS sendtoaddress $B2ADDRESS 100.0) + +CheckBalance "$B1ARGS" 0 + +# Mutate TXID_C and add it to B2's memory pool: +RAWTX_C=$( $CLI $B1ARGS getrawtransaction $TXID_C ) + +# ... mutate C to create C' +L=${RAWTX_C:82:2} +NEWLEN=$( printf "%x" $(( 16#$L + 1 )) ) +MUTATEDTX_C=${RAWTX_C:0:82}${NEWLEN}4c${RAWTX_C:84} +# ... give mutated tx1 to B2: +MUTATEDTXID=$( $CLI $B2ARGS sendrawtransaction $MUTATEDTX_C ) + +echo "TXID_C: " $TXID_C +echo "Mutated: " $MUTATEDTXID + +# Re-connect nodes, and have both nodes mine some blocks: +$CLI $B2ARGS addnode 127.0.0.1:11000 onetry +WaitPeers "$B1ARGS" 1 + +# Having B2 mine the next block puts the mutated +# transaction C in the chain: +$CLI $B2ARGS setgenerate true 1 +WaitBlocks + +# B1 should still be able to spend 100, because D is conflicted +# so does not count as a spend of B +CheckBalance "$B1ARGS" 100 + +$CLI $B2ARGS stop > /dev/null 2>&1 +wait $B2PID +$CLI $B1ARGS stop > /dev/null 2>&1 +wait $B1PID + +echo "Tests successful, cleaning up" +rm -rf $D +exit 0 diff --git a/qa/rpc-tests/listtransactions.py b/qa/rpc-tests/listtransactions.py new file mode 100755 index 00000000..f16095c1 --- /dev/null +++ b/qa/rpc-tests/listtransactions.py @@ -0,0 +1,156 @@ +#!/usr/bin/env python +# Copyright (c) 2014 The Bitcoin Core developers +# Distributed under the MIT/X11 software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. + +# Exercise the listtransactions API + +# Add python-bitcoinrpc to module search path: +import os +import sys +sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "python-bitcoinrpc")) + +import json +import shutil +import subprocess +import tempfile +import traceback + +from bitcoinrpc.authproxy import AuthServiceProxy, JSONRPCException +from util import * + + +def check_array_result(object_array, to_match, expected): + """ + Pass in array of JSON objects, a dictionary with key/value pairs + to match against, and another dictionary with expected key/value + pairs. + """ + num_matched = 0 + for item in object_array: + all_match = True + for key,value in to_match.items(): + if item[key] != value: + all_match = False + if not all_match: + continue + for key,value in expected.items(): + if item[key] != value: + raise AssertionError("%s : expected %s=%s"%(str(item), str(key), str(value))) + num_matched = num_matched+1 + if num_matched == 0: + raise AssertionError("No objects matched %s"%(str(to_match))) + +def run_test(nodes): + # Simple send, 0 to 1: + txid = nodes[0].sendtoaddress(nodes[1].getnewaddress(), 0.1) + sync_mempools(nodes) + check_array_result(nodes[0].listtransactions(), + {"txid":txid}, + {"category":"send","account":"","amount":Decimal("-0.1"),"confirmations":0}) + check_array_result(nodes[1].listtransactions(), + {"txid":txid}, + {"category":"receive","account":"","amount":Decimal("0.1"),"confirmations":0}) + # mine a block, confirmations should change: + nodes[0].setgenerate(True, 1) + sync_blocks(nodes) + check_array_result(nodes[0].listtransactions(), + {"txid":txid}, + {"category":"send","account":"","amount":Decimal("-0.1"),"confirmations":1}) + check_array_result(nodes[1].listtransactions(), + {"txid":txid}, + {"category":"receive","account":"","amount":Decimal("0.1"),"confirmations":1}) + + # send-to-self: + txid = nodes[0].sendtoaddress(nodes[0].getnewaddress(), 0.2) + check_array_result(nodes[0].listtransactions(), + {"txid":txid, "category":"send"}, + {"amount":Decimal("-0.2")}) + check_array_result(nodes[0].listtransactions(), + {"txid":txid, "category":"receive"}, + {"amount":Decimal("0.2")}) + + # sendmany from node1: twice to self, twice to node2: + send_to = { nodes[0].getnewaddress() : 0.11, nodes[1].getnewaddress() : 0.22, + nodes[0].getaccountaddress("from1") : 0.33, nodes[1].getaccountaddress("toself") : 0.44 } + txid = nodes[1].sendmany("", send_to) + sync_mempools(nodes) + check_array_result(nodes[1].listtransactions(), + {"category":"send","amount":Decimal("-0.11")}, + {"txid":txid} ) + check_array_result(nodes[0].listtransactions(), + {"category":"receive","amount":Decimal("0.11")}, + {"txid":txid} ) + check_array_result(nodes[1].listtransactions(), + {"category":"send","amount":Decimal("-0.22")}, + {"txid":txid} ) + check_array_result(nodes[1].listtransactions(), + {"category":"receive","amount":Decimal("0.22")}, + {"txid":txid} ) + check_array_result(nodes[1].listtransactions(), + {"category":"send","amount":Decimal("-0.33")}, + {"txid":txid} ) + check_array_result(nodes[0].listtransactions(), + {"category":"receive","amount":Decimal("0.33")}, + {"txid":txid, "account" : "from1"} ) + check_array_result(nodes[1].listtransactions(), + {"category":"send","amount":Decimal("-0.44")}, + {"txid":txid, "account" : ""} ) + check_array_result(nodes[1].listtransactions(), + {"category":"receive","amount":Decimal("0.44")}, + {"txid":txid, "account" : "toself"} ) + + +def main(): + import optparse + + parser = optparse.OptionParser(usage="%prog [options]") + parser.add_option("--nocleanup", dest="nocleanup", default=False, action="store_true", + help="Leave bitcoinds and test.* datadir on exit or error") + parser.add_option("--srcdir", dest="srcdir", default="../../src", + help="Source directory containing bitcoind/bitcoin-cli (default: %default%)") + parser.add_option("--tmpdir", dest="tmpdir", default=tempfile.mkdtemp(prefix="test"), + help="Root directory for datadirs") + (options, args) = parser.parse_args() + + os.environ['PATH'] = options.srcdir+":"+os.environ['PATH'] + + check_json_precision() + + success = False + nodes = [] + try: + print("Initializing test directory "+options.tmpdir) + if not os.path.isdir(options.tmpdir): + os.makedirs(options.tmpdir) + initialize_chain(options.tmpdir) + + nodes = start_nodes(2, options.tmpdir) + connect_nodes(nodes[1], 0) + sync_blocks(nodes) + + run_test(nodes) + + success = True + + except AssertionError as e: + print("Assertion failed: "+e.message) + except Exception as e: + print("Unexpected exception caught during testing: "+str(e)) + traceback.print_tb(sys.exc_info()[2]) + + if not options.nocleanup: + print("Cleaning up") + stop_nodes(nodes) + wait_bitcoinds() + shutil.rmtree(options.tmpdir) + + if success: + print("Tests successful") + sys.exit(0) + else: + print("Failed") + sys.exit(1) + +if __name__ == '__main__': + main() diff --git a/qa/rpc-tests/python-bitcoinrpc/bitcoinrpc/.gitignore b/qa/rpc-tests/python-bitcoinrpc/bitcoinrpc/.gitignore new file mode 100644 index 00000000..0d20b648 --- /dev/null +++ b/qa/rpc-tests/python-bitcoinrpc/bitcoinrpc/.gitignore @@ -0,0 +1 @@ +*.pyc diff --git a/qa/rpc-tests/python-bitcoinrpc/bitcoinrpc/__init__.py b/qa/rpc-tests/python-bitcoinrpc/bitcoinrpc/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/qa/rpc-tests/python-bitcoinrpc/bitcoinrpc/authproxy.py b/qa/rpc-tests/python-bitcoinrpc/bitcoinrpc/authproxy.py new file mode 100644 index 00000000..c2e5406c --- /dev/null +++ b/qa/rpc-tests/python-bitcoinrpc/bitcoinrpc/authproxy.py @@ -0,0 +1,140 @@ + +""" + Copyright 2011 Jeff Garzik + + AuthServiceProxy has the following improvements over python-jsonrpc's + ServiceProxy class: + + - HTTP connections persist for the life of the AuthServiceProxy object + (if server supports HTTP/1.1) + - sends protocol 'version', per JSON-RPC 1.1 + - sends proper, incrementing 'id' + - sends Basic HTTP authentication headers + - parses all JSON numbers that look like floats as Decimal + - uses standard Python json lib + + Previous copyright, from python-jsonrpc/jsonrpc/proxy.py: + + Copyright (c) 2007 Jan-Klaas Kollhof + + This file is part of jsonrpc. + + jsonrpc is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + This software is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this software; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +""" + +try: + import http.client as httplib +except ImportError: + import httplib +import base64 +import json +import decimal +try: + import urllib.parse as urlparse +except ImportError: + import urlparse + +USER_AGENT = "AuthServiceProxy/0.1" + +HTTP_TIMEOUT = 30 + + +class JSONRPCException(Exception): + def __init__(self, rpc_error): + Exception.__init__(self) + self.error = rpc_error + + +class AuthServiceProxy(object): + def __init__(self, service_url, service_name=None, timeout=HTTP_TIMEOUT, connection=None): + self.__service_url = service_url + self.__service_name = service_name + self.__url = urlparse.urlparse(service_url) + if self.__url.port is None: + port = 80 + else: + port = self.__url.port + self.__id_count = 0 + (user, passwd) = (self.__url.username, self.__url.password) + try: + user = user.encode('utf8') + except AttributeError: + pass + try: + passwd = passwd.encode('utf8') + except AttributeError: + pass + authpair = user + b':' + passwd + self.__auth_header = b'Basic ' + base64.b64encode(authpair) + + if connection: + # Callables re-use the connection of the original proxy + self.__conn = connection + elif self.__url.scheme == 'https': + self.__conn = httplib.HTTPSConnection(self.__url.hostname, port, + None, None, False, + timeout) + else: + self.__conn = httplib.HTTPConnection(self.__url.hostname, port, + False, timeout) + + def __getattr__(self, name): + if name.startswith('__') and name.endswith('__'): + # Python internal stuff + raise AttributeError + if self.__service_name is not None: + name = "%s.%s" % (self.__service_name, name) + return AuthServiceProxy(self.__service_url, name, connection=self.__conn) + + def __call__(self, *args): + self.__id_count += 1 + + postdata = json.dumps({'version': '1.1', + 'method': self.__service_name, + 'params': args, + 'id': self.__id_count}) + self.__conn.request('POST', self.__url.path, postdata, + {'Host': self.__url.hostname, + 'User-Agent': USER_AGENT, + 'Authorization': self.__auth_header, + 'Content-type': 'application/json'}) + + response = self._get_response() + if response['error'] is not None: + raise JSONRPCException(response['error']) + elif 'result' not in response: + raise JSONRPCException({ + 'code': -343, 'message': 'missing JSON-RPC result'}) + else: + return response['result'] + + def _batch(self, rpc_call_list): + postdata = json.dumps(list(rpc_call_list)) + self.__conn.request('POST', self.__url.path, postdata, + {'Host': self.__url.hostname, + 'User-Agent': USER_AGENT, + 'Authorization': self.__auth_header, + 'Content-type': 'application/json'}) + + return self._get_response() + + def _get_response(self): + http_response = self.__conn.getresponse() + if http_response is None: + raise JSONRPCException({ + 'code': -342, 'message': 'missing HTTP response from server'}) + + return json.loads(http_response.read().decode('utf8'), + parse_float=decimal.Decimal) diff --git a/qa/rpc-tests/python-bitcoinrpc/setup.py b/qa/rpc-tests/python-bitcoinrpc/setup.py new file mode 100644 index 00000000..b5a217bf --- /dev/null +++ b/qa/rpc-tests/python-bitcoinrpc/setup.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python + +from distutils.core import setup + +setup(name='python-bitcoinrpc', + version='0.1', + description='Enhanced version of python-jsonrpc for use with Bitcoin', + long_description=open('README').read(), + author='Jeff Garzik', + author_email='', + maintainer='Jeff Garzik', + maintainer_email='', + url='http://www.github.com/jgarzik/python-bitcoinrpc', + packages=['bitcoinrpc'], + classifiers=['License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)', 'Operating System :: OS Independent']) diff --git a/qa/rpc-tests/send.sh b/qa/rpc-tests/send.sh new file mode 100755 index 00000000..bfbf791d --- /dev/null +++ b/qa/rpc-tests/send.sh @@ -0,0 +1,31 @@ +#!/bin/bash +# Copyright (c) 2014 The Bitcoin Core developers +# Distributed under the MIT/X11 software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. +TIMEOUT=10 +SIGNAL=HUP +PIDFILE=.send.pid +if [ $# -eq 0 ]; then + echo -e "Usage:\t$0 " + echo -e "\tRuns and wait ${TIMEOUT} seconds or until SIG${SIGNAL} is received." + echo -e "\tReturns: 0 if SIG${SIGNAL} is received, 1 otherwise." + echo -e "Or:\t$0 -STOP" + echo -e "\tsends SIG${SIGNAL} to running send.sh" + exit 0 +fi + +if [ $1 == "-STOP" ]; then + if [ -s ${PIDFILE} ]; then + kill -s ${SIGNAL} $(<${PIDFILE}) + fi + exit 0 +fi + +trap '[[ ${PID} ]] && kill ${PID}' ${SIGNAL} +trap 'rm -f ${PIDFILE}' EXIT +echo $$ > ${PIDFILE} +"$@" +sleep ${TIMEOUT} & PID=$! +wait ${PID} && exit 1 + +exit 0 diff --git a/qa/rpc-tests/skeleton.py b/qa/rpc-tests/skeleton.py new file mode 100755 index 00000000..126b6bfa --- /dev/null +++ b/qa/rpc-tests/skeleton.py @@ -0,0 +1,83 @@ +#!/usr/bin/env python +# Copyright (c) 2014 The Bitcoin Core developers +# Distributed under the MIT/X11 software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. + +# Skeleton for python-based regression tests using +# JSON-RPC + + +# Add python-bitcoinrpc to module search path: +import os +import sys +sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "python-bitcoinrpc")) + +import json +import shutil +import subprocess +import tempfile +import traceback + +from bitcoinrpc.authproxy import AuthServiceProxy, JSONRPCException +from util import * + + +def run_test(nodes): + # Replace this as appropriate + for node in nodes: + assert_equal(node.getblockcount(), 200) + assert_equal(node.getbalance(), 25*50) + +def main(): + import optparse + + parser = optparse.OptionParser(usage="%prog [options]") + parser.add_option("--nocleanup", dest="nocleanup", default=False, action="store_true", + help="Leave bitcoinds and test.* datadir on exit or error") + parser.add_option("--srcdir", dest="srcdir", default="../../src", + help="Source directory containing bitcoind/bitcoin-cli (default: %default%)") + parser.add_option("--tmpdir", dest="tmpdir", default=tempfile.mkdtemp(prefix="test"), + help="Root directory for datadirs") + (options, args) = parser.parse_args() + + os.environ['PATH'] = options.srcdir+":"+os.environ['PATH'] + + check_json_precision() + + success = False + nodes = [] + try: + print("Initializing test directory "+options.tmpdir) + if not os.path.isdir(options.tmpdir): + os.makedirs(options.tmpdir) + initialize_chain(options.tmpdir) + + nodes = start_nodes(2, options.tmpdir) + connect_nodes(nodes[1], 0) + sync_blocks(nodes) + + run_test(nodes) + + success = True + + except AssertionError as e: + print("Assertion failed: "+e.message) + except Exception as e: + print("Unexpected exception caught during testing: "+str(e)) + traceback.print_tb(sys.exc_info()[2]) + + if not options.nocleanup: + print("Cleaning up") + stop_nodes(nodes) + wait_bitcoinds() + shutil.rmtree(options.tmpdir) + + if success: + print("Tests successful") + sys.exit(0) + else: + print("Failed") + sys.exit(1) + +if __name__ == '__main__': + main() diff --git a/qa/rpc-tests/txnmall.sh b/qa/rpc-tests/txnmall.sh new file mode 100755 index 00000000..bd36967a --- /dev/null +++ b/qa/rpc-tests/txnmall.sh @@ -0,0 +1,151 @@ +#!/usr/bin/env bash +# Copyright (c) 2014 The Bitcoin Core developers +# Distributed under the MIT/X11 software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. + +# Test proper accounting with malleable transactions + +if [ $# -lt 1 ]; then + echo "Usage: $0 path_to_binaries" + echo "e.g. $0 ../../src" + exit 1 +fi + +set -f + +BITCOIND=${1}/bitcoind +CLI=${1}/bitcoin-cli + +DIR="${BASH_SOURCE%/*}" +SENDANDWAIT="${DIR}/send.sh" +if [[ ! -d "$DIR" ]]; then DIR="$PWD"; fi +. "$DIR/util.sh" + +D=$(mktemp -d test.XXXXX) + +# Two nodes; one will play the part of merchant, the +# other an evil transaction-mutating miner. + +D1=${D}/node1 +CreateDataDir $D1 port=11000 rpcport=11001 +B1ARGS="-datadir=$D1" +$BITCOIND $B1ARGS & +B1PID=$! + +D2=${D}/node2 +CreateDataDir $D2 port=11010 rpcport=11011 +B2ARGS="-datadir=$D2" +$BITCOIND $B2ARGS & +B2PID=$! + +# Wait until both nodes are at the same block number +function WaitBlocks { + while : + do + sleep 1 + declare -i BLOCKS1=$( GetBlocks $B1ARGS ) + declare -i BLOCKS2=$( GetBlocks $B2ARGS ) + if (( BLOCKS1 == BLOCKS2 )) + then + break + fi + done +} + +# Wait until node has $N peers +function WaitPeers { + while : + do + declare -i PEERS=$( $CLI $1 getconnectioncount ) + if (( PEERS == "$2" )) + then + break + fi + sleep 1 + done +} + +echo "Generating test blockchain..." + +# Start with B2 connected to B1: +$CLI $B2ARGS addnode 127.0.0.1:11000 onetry +WaitPeers "$B1ARGS" 1 + +# 1 block, 50 XBT each == 50 XBT +$CLI $B1ARGS setgenerate true 1 + +WaitBlocks +# 100 blocks, 0 mature == 0 XBT +$CLI $B2ARGS setgenerate true 100 +WaitBlocks + +CheckBalance "$B1ARGS" 50 +CheckBalance "$B2ARGS" 0 + +# restart B2 with no connection +$CLI $B2ARGS stop > /dev/null 2>&1 +wait $B2PID +$BITCOIND $B2ARGS & +B2PID=$! + +B2ADDRESS=$( $CLI $B2ARGS getaccountaddress "from1" ) + +# Have B1 create two transactions; second will +# spend change from first, since B1 starts with only a single +# 50 bitcoin output: +$CLI $B1ARGS move "" "foo" 10.0 > /dev/null +$CLI $B1ARGS move "" "bar" 10.0 > /dev/null +TXID1=$( $CLI $B1ARGS sendfrom foo $B2ADDRESS 1.0 0) +TXID2=$( $CLI $B1ARGS sendfrom bar $B2ADDRESS 2.0 0) + +# Mutate TXID1 and add it to B2's memory pool: +RAWTX1=$( $CLI $B1ARGS getrawtransaction $TXID1 ) +# RAWTX1 is hex-encoded, serialized transaction. So each +# byte is two characters; we'll prepend the first +# "push" in the scriptsig with OP_PUSHDATA1 (0x4c), +# and add one to the length of the signature. +# Fields are fixed; from the beginning: +# 4-byte version +# 1-byte varint number-of inputs (one in this case) +# 32-byte previous txid +# 4-byte previous output +# 1-byte varint length-of-scriptsig +# 1-byte PUSH this many bytes onto stack +# ... etc +# So: to mutate, we want to get byte 41 (hex characters 82-83), +# increment it, and insert 0x4c after it. +L=${RAWTX1:82:2} +NEWLEN=$( printf "%x" $(( 16#$L + 1 )) ) +MUTATEDTX1=${RAWTX1:0:82}${NEWLEN}4c${RAWTX1:84} +# ... give mutated tx1 to B2: +MUTATEDTXID=$( $CLI $B2ARGS sendrawtransaction $MUTATEDTX1 ) + +echo "TXID1: " $TXID1 +echo "Mutated: " $MUTATEDTXID + +# Re-connect nodes, and have B2 mine a block +# containing the mutant: +$CLI $B2ARGS addnode 127.0.0.1:11000 onetry +$CLI $B2ARGS setgenerate true 1 +WaitBlocks + +# B1 should have 49 BTC; the 2 BTC send is +# conflicted, and should not count in +# balances. +CheckBalance "$B1ARGS" 49 +CheckBalance "$B1ARGS" 49 "*" +CheckBalance "$B1ARGS" 9 "foo" +CheckBalance "$B1ARGS" 10 "bar" + +# B2 should have 51 BTC +CheckBalance "$B2ARGS" 51 +CheckBalance "$B2ARGS" 1 "from1" + +$CLI $B2ARGS stop > /dev/null 2>&1 +wait $B2PID +$CLI $B1ARGS stop > /dev/null 2>&1 +wait $B1PID + +echo "Tests successful, cleaning up" +rm -rf $D +exit 0 diff --git a/qa/rpc-tests/util.py b/qa/rpc-tests/util.py new file mode 100644 index 00000000..1d0896a3 --- /dev/null +++ b/qa/rpc-tests/util.py @@ -0,0 +1,152 @@ +# Copyright (c) 2014 The Bitcoin Core developers +# Distributed under the MIT/X11 software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. +# +# Helpful routines for regression testing +# + +# Add python-bitcoinrpc to module search path: +import os +import sys +sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "python-bitcoinrpc")) + +from decimal import Decimal +import json +import shutil +import subprocess +import time + +from bitcoinrpc.authproxy import AuthServiceProxy, JSONRPCException +from util import * + +START_P2P_PORT=11000 +START_RPC_PORT=11100 + +def check_json_precision(): + """Make sure json library being used does not lose precision converting BTC values""" + n = Decimal("20000000.00000003") + satoshis = int(json.loads(json.dumps(float(n)))*1.0e8) + if satoshis != 2000000000000003: + raise RuntimeError("JSON encode/decode loses precision") + +def sync_blocks(rpc_connections): + """ + Wait until everybody has the same block count + """ + while True: + counts = [ x.getblockcount() for x in rpc_connections ] + if counts == [ counts[0] ]*len(counts): + break + time.sleep(1) + +def sync_mempools(rpc_connections): + """ + Wait until everybody has the same transactions in their memory + pools + """ + while True: + pool = set(rpc_connections[0].getrawmempool()) + num_match = 1 + for i in range(1, len(rpc_connections)): + if set(rpc_connections[i].getrawmempool()) == pool: + num_match = num_match+1 + if num_match == len(rpc_connections): + break + time.sleep(1) + + +bitcoind_processes = [] + +def initialize_chain(test_dir): + """ + Create (or copy from cache) a 200-block-long chain and + 4 wallets. + bitcoind and bitcoin-cli must be in search path. + """ + + if not os.path.isdir(os.path.join("cache", "node0")): + devnull = open("/dev/null", "w+") + # Create cache directories, run bitcoinds: + for i in range(4): + datadir = os.path.join("cache", "node"+str(i)) + os.makedirs(datadir) + with open(os.path.join(datadir, "bitcoin.conf"), 'w') as f: + f.write("regtest=1\n"); + f.write("rpcuser=rt\n"); + f.write("rpcpassword=rt\n"); + f.write("port="+str(START_P2P_PORT+i)+"\n"); + f.write("rpcport="+str(START_RPC_PORT+i)+"\n"); + args = [ "bitcoind", "-keypool=1", "-datadir="+datadir ] + if i > 0: + args.append("-connect=127.0.0.1:"+str(START_P2P_PORT)) + bitcoind_processes.append(subprocess.Popen(args)) + subprocess.check_call([ "bitcoin-cli", "-datadir="+datadir, + "-rpcwait", "getblockcount"], stdout=devnull) + devnull.close() + rpcs = [] + for i in range(4): + try: + url = "http://rt:rt@127.0.0.1:%d"%(START_RPC_PORT+i,) + rpcs.append(AuthServiceProxy(url)) + except: + sys.stderr.write("Error connecting to "+url+"\n") + sys.exit(1) + + # Create a 200-block-long chain; each of the 4 nodes + # gets 25 mature blocks and 25 immature. + for i in range(4): + rpcs[i].setgenerate(True, 25) + sync_blocks(rpcs) + for i in range(4): + rpcs[i].setgenerate(True, 25) + sync_blocks(rpcs) + + # Shut them down, and remove debug.logs: + stop_nodes(rpcs) + wait_bitcoinds() + for i in range(4): + os.remove(debug_log("cache", i)) + + for i in range(4): + from_dir = os.path.join("cache", "node"+str(i)) + to_dir = os.path.join(test_dir, "node"+str(i)) + shutil.copytree(from_dir, to_dir) + +def start_nodes(num_nodes, dir): + # Start bitcoinds, and wait for RPC interface to be up and running: + devnull = open("/dev/null", "w+") + for i in range(num_nodes): + datadir = os.path.join(dir, "node"+str(i)) + args = [ "bitcoind", "-datadir="+datadir ] + bitcoind_processes.append(subprocess.Popen(args)) + subprocess.check_call([ "bitcoin-cli", "-datadir="+datadir, + "-rpcwait", "getblockcount"], stdout=devnull) + devnull.close() + # Create&return JSON-RPC connections + rpc_connections = [] + for i in range(num_nodes): + url = "http://rt:rt@127.0.0.1:%d"%(START_RPC_PORT+i,) + rpc_connections.append(AuthServiceProxy(url)) + return rpc_connections + +def debug_log(dir, n_node): + return os.path.join(dir, "node"+str(n_node), "regtest", "debug.log") + +def stop_nodes(nodes): + for i in range(len(nodes)): + nodes[i].stop() + del nodes[:] # Emptying array closes connections as a side effect + +def wait_bitcoinds(): + # Wait for all bitcoinds to cleanly exit + for bitcoind in bitcoind_processes: + bitcoind.wait() + del bitcoind_processes[:] + +def connect_nodes(from_connection, node_num): + ip_port = "127.0.0.1:"+str(START_P2P_PORT+node_num) + from_connection.addnode(ip_port, "onetry") + +def assert_equal(thing1, thing2): + if thing1 != thing2: + raise AssertionError("%s != %s"%(str(thing1),str(thing2))) diff --git a/qa/rpc-tests/util.sh b/qa/rpc-tests/util.sh new file mode 100644 index 00000000..1e7bd6a7 --- /dev/null +++ b/qa/rpc-tests/util.sh @@ -0,0 +1,95 @@ +#!/usr/bin/env bash +# Copyright (c) 2014 The Bitcoin Core developers +# Distributed under the MIT/X11 software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. + +# Functions used by more than one test + +function echoerr { + echo "$@" 1>&2; +} + +# Usage: ExtractKey "" +# Warning: this will only work for the very-well-behaved +# JSON produced by bitcoind, do NOT use it to try to +# parse arbitrary/nested/etc JSON. +function ExtractKey { + echo $2 | tr -d ' "{}\n' | awk -v RS=',' -F: "\$1 ~ /$1/ { print \$2}" +} + +function CreateDataDir { + DIR=$1 + mkdir -p $DIR + CONF=$DIR/bitcoin.conf + echo "regtest=1" >> $CONF + echo "keypool=2" >> $CONF + echo "rpcuser=rt" >> $CONF + echo "rpcpassword=rt" >> $CONF + echo "rpcwait=1" >> $CONF + echo "walletnotify=${SENDANDWAIT} -STOP" >> $CONF + shift + while (( "$#" )); do + echo $1 >> $CONF + shift + done +} + +function AssertEqual { + if (( $( echo "$1 == $2" | bc ) == 0 )) + then + echoerr "AssertEqual: $1 != $2" + exit 1 + fi +} + +# CheckBalance -datadir=... amount account minconf +function CheckBalance { + declare -i EXPECT="$2" + B=$( $CLI $1 getbalance $3 $4 ) + if (( $( echo "$B == $EXPECT" | bc ) == 0 )) + then + echoerr "bad balance: $B (expected $2)" + exit 1 + fi +} + +# Use: Address [account] +function Address { + $CLI $1 getnewaddress $2 +} + +# Send from to amount +function Send { + from=$1 + to=$2 + amount=$3 + address=$(Address $to) + txid=$( ${SENDANDWAIT} $CLI $from sendtoaddress $address $amount ) +} + +# Use: Unspent +function Unspent { + local r=$( $CLI $1 listunspent | awk -F'[ |:,"]+' "\$2 ~ /$3/ { print \$3 }" | tail -n $2 | head -n 1) + echo $r +} + +# Use: CreateTxn1 +# produces hex from signrawtransaction +function CreateTxn1 { + TXID=$(Unspent $1 $2 txid) + AMOUNT=$(Unspent $1 $2 amount) + VOUT=$(Unspent $1 $2 vout) + RAWTXN=$( $CLI $1 createrawtransaction "[{\"txid\":\"$TXID\",\"vout\":$VOUT}]" "{\"$3\":$AMOUNT}") + ExtractKey hex "$( $CLI $1 signrawtransaction $RAWTXN )" +} + +# Use: SendRawTxn +function SendRawTxn { + ${SENDANDWAIT} $CLI $1 sendrawtransaction $2 +} + +# Use: GetBlocks +# returns number of blocks from getinfo +function GetBlocks { + $CLI $1 getblockcount +} diff --git a/qa/rpc-tests/wallet.sh b/qa/rpc-tests/wallet.sh new file mode 100755 index 00000000..98532fa8 --- /dev/null +++ b/qa/rpc-tests/wallet.sh @@ -0,0 +1,117 @@ +#!/usr/bin/env bash +# Copyright (c) 2013-2014 The Bitcoin Core developers +# Distributed under the MIT/X11 software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. + +# Test block generation and basic wallet sending + +if [ $# -lt 1 ]; then + echo "Usage: $0 path_to_binaries" + echo "e.g. $0 ../../src" + exit 1 +fi + +set -f + +BITCOIND=${1}/bitcoind +CLI=${1}/bitcoin-cli + +DIR="${BASH_SOURCE%/*}" +SENDANDWAIT="${DIR}/send.sh" +if [[ ! -d "$DIR" ]]; then DIR="$PWD"; fi +. "$DIR/util.sh" + +D=$(mktemp -d test.XXXXX) + +D1=${D}/node1 +CreateDataDir "$D1" port=11000 rpcport=11001 +B1ARGS="-datadir=$D1" +$BITCOIND $B1ARGS & +B1PID=$! + +D2=${D}/node2 +CreateDataDir "$D2" port=11010 rpcport=11011 connect=127.0.0.1:11000 +B2ARGS="-datadir=$D2" +$BITCOIND $B2ARGS & +B2PID=$! + +D3=${D}/node3 +CreateDataDir "$D3" port=11020 rpcport=11021 connect=127.0.0.1:11000 +B3ARGS="-datadir=$D3" +$BITCOIND $BITCOINDARGS $B3ARGS & +B3PID=$! + +# Wait until all three nodes are at the same block number +function WaitBlocks { + while : + do + sleep 1 + declare -i BLOCKS1=$( GetBlocks $B1ARGS ) + declare -i BLOCKS2=$( GetBlocks $B2ARGS ) + declare -i BLOCKS3=$( GetBlocks $B3ARGS ) + if (( BLOCKS1 == BLOCKS2 && BLOCKS2 == BLOCKS3 )) + then + break + fi + done +} + +echo "Generating test blockchain..." + +# 1 block, 50 XBT each == 50 XBT +$CLI $B1ARGS setgenerate true 1 +WaitBlocks +# 101 blocks, 1 mature == 50 XBT +$CLI $B2ARGS setgenerate true 101 +WaitBlocks + +CheckBalance "$B1ARGS" 50 +CheckBalance "$B2ARGS" 50 + +# Send 21 XBT from 1 to 3. Second +# transaction will be child of first, and +# will require a fee +Send $B1ARGS $B3ARGS 11 +Send $B1ARGS $B3ARGS 10 + +# Have B1 mine a new block, and mature it +# to recover transaction fees +$CLI $B1ARGS setgenerate true 1 +WaitBlocks + +# Have B2 mine 100 blocks so B1's block is mature: +$CLI $B2ARGS setgenerate true 100 +WaitBlocks + +# B1 should end up with 100 XBT in block rewards plus fees, +# minus the 21 XBT sent to B3: +CheckBalance "$B1ARGS" "100-21" +CheckBalance "$B3ARGS" "21" + +# B1 should have two unspent outputs; create a couple +# of raw transactions to send them to B3, submit them through +# B2, and make sure both B1 and B3 pick them up properly: +RAW1=$(CreateTxn1 $B1ARGS 1 $(Address $B3ARGS "from1" ) ) +RAW2=$(CreateTxn1 $B1ARGS 2 $(Address $B3ARGS "from1" ) ) +RAWTXID1=$(SendRawTxn "$B2ARGS" $RAW1) +RAWTXID2=$(SendRawTxn "$B2ARGS" $RAW2) + +# Have B2 mine a block to confirm transactions: +$CLI $B2ARGS setgenerate true 1 +WaitBlocks + +# Check balances after confirmation +CheckBalance "$B1ARGS" 0 +CheckBalance "$B3ARGS" 100 +CheckBalance "$B3ARGS" "100-21" "from1" + +$CLI $B3ARGS stop > /dev/null 2>&1 +wait $B3PID +$CLI $B2ARGS stop > /dev/null 2>&1 +wait $B2PID +$CLI $B1ARGS stop > /dev/null 2>&1 +wait $B1PID + +echo "Tests successful, cleaning up" +rm -rf $D +exit 0 diff --git a/qa/rpc-tests/walletbackup.sh b/qa/rpc-tests/walletbackup.sh new file mode 100755 index 00000000..74446709 --- /dev/null +++ b/qa/rpc-tests/walletbackup.sh @@ -0,0 +1,296 @@ +#!/usr/bin/env bash +# Copyright (c) 2014 The Bitcoin Core developers +# Distributed under the MIT/X11 software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. + +# Test wallet backup / dump / restore functionality + +# Test case is: +# 4 nodes. 1 2 3 and send transactions between each other, +# fourth node is a miner. +# 1 2 3 and each mine a block to start, then +# miner creates 100 blocks so 1 2 3 each have 50 mature +# coins to spend. +# Then 5 iterations of 1/2/3 sending coins amongst +# themselves to get transactions in the wallets, +# and the miner mining one block. +# +# Wallets are backed up using dumpwallet/backupwallet. +# Then 5 more iterations of transactions, then block. +# +# Miner then generates 101 more blocks, so any +# transaction fees paid mature. +# +# Sanity checks done: +# Miner balance >= 150*50 +# Sum(1,2,3,4 balances) == 153*150 +# +# 1/2/3 are shutdown, and their wallets erased. +# Then restore using wallet.dat backup. And +# confirm 1/2/3/4 balances are same as before. +# +# Shutdown again, restore using importwallet, +# and confirm again balances are correct. +# + +if [ $# -lt 1 ]; then + echo "Usage: $0 path_to_binaries" + echo "e.g. $0 ../../src" + exit 1 +fi + +BITCOIND=${1}/bitcoind +CLI=${1}/bitcoin-cli + +DIR="${BASH_SOURCE%/*}" +SENDANDWAIT="${DIR}/send.sh" +if [[ ! -d "$DIR" ]]; then DIR="$PWD"; fi +. "$DIR/util.sh" + +D=$(mktemp -d test.XXXXX) + +echo "Starting nodes..." + +# "Miner": +D4=${D}/node4 +CreateDataDir $D4 port=11030 rpcport=11031 +B4ARGS="-datadir=$D4" +$BITCOIND $BITCOINDARGS $B4ARGS & +B4PID=$! + +# Want default keypool for 1/2/3, and +# don't need send-and-wait functionality, +# so don't use CreateDataDir: +function CreateConfDir { + DIR=$1 + mkdir -p $DIR + CONF=$DIR/bitcoin.conf + echo "regtest=1" >> $CONF + echo "rpcuser=rt" >> $CONF + echo "rpcpassword=rt" >> $CONF + echo "rpcwait=1" >> $CONF + shift + while (( "$#" )); do + echo $1 >> $CONF + shift + done +} + +# "Spenders" 1/2/3 +D1=${D}/node1 +CreateConfDir $D1 port=11000 rpcport=11001 addnode=127.0.0.1:11030 +B1ARGS="-datadir=$D1" +$BITCOIND $B1ARGS & +B1PID=$! +D2=${D}/node2 +CreateConfDir $D2 port=11010 rpcport=11011 addnode=127.0.0.1:11030 +B2ARGS="-datadir=$D2" +$BITCOIND $B2ARGS & +B2PID=$! +D3=${D}/node3 +CreateConfDir $D3 port=11020 rpcport=11021 addnode=127.0.0.1:11030 addnode=127.0.0.1:11000 +B3ARGS="-datadir=$D3" +$BITCOIND $BITCOINDARGS $B3ARGS & +B3PID=$! + +# Wait until all nodes are at the same block number +function WaitBlocks { + while : + do + sleep 1 + BLOCKS1=$( GetBlocks "$B1ARGS" ) + BLOCKS2=$( GetBlocks "$B2ARGS" ) + BLOCKS3=$( GetBlocks "$B3ARGS" ) + BLOCKS4=$( GetBlocks "$B4ARGS" ) + if (( BLOCKS1 == BLOCKS4 && BLOCKS2 == BLOCKS4 && BLOCKS3 == BLOCKS4 )) + then + break + fi + done +} + +# Wait until all nodes have the same txns in +# their memory pools +function WaitMemPools { + while : + do + sleep 1 + MEMPOOL1=$( $CLI "$B1ARGS" getrawmempool | sort | shasum ) + MEMPOOL2=$( $CLI "$B2ARGS" getrawmempool | sort | shasum ) + MEMPOOL3=$( $CLI "$B3ARGS" getrawmempool | sort | shasum ) + MEMPOOL4=$( $CLI "$B4ARGS" getrawmempool | sort | shasum ) + if [[ $MEMPOOL1 = $MEMPOOL4 && $MEMPOOL2 = $MEMPOOL4 && $MEMPOOL3 = $MEMPOOL4 ]] + then + break + fi + done +} + +echo "Generating initial blockchain..." + +# 1 block, 50 XBT each == 50 BTC +$CLI $B1ARGS setgenerate true 1 +WaitBlocks +$CLI $B2ARGS setgenerate true 1 +WaitBlocks +$CLI $B3ARGS setgenerate true 1 +WaitBlocks + +# 100 blocks, 0 mature +$CLI $B4ARGS setgenerate true 100 +WaitBlocks + +CheckBalance "$B1ARGS" 50 +CheckBalance "$B2ARGS" 50 +CheckBalance "$B3ARGS" 50 +CheckBalance "$B4ARGS" 0 + +echo "Creating transactions..." + +function S { + TXID=$( $CLI -datadir=${D}/node${1} sendtoaddress ${2} "${3}" 0 ) + if [[ $TXID == "" ]] ; then + echoerr "node${1}: error sending ${3} btc" + echo -n "node${1} balance: " + $CLI -datadir=${D}/node${1} getbalance "*" 0 + exit 1 + fi +} + +function OneRound { + A1=$( $CLI $B1ARGS getnewaddress ) + A2=$( $CLI $B2ARGS getnewaddress ) + A3=$( $CLI $B3ARGS getnewaddress ) + if [[ $(( $RANDOM%2 )) < 1 ]] ; then + N=$(( $RANDOM % 9 + 1 )) + S 1 $A2 "0.$N" + fi + if [[ $(( $RANDOM%2 )) < 1 ]] ; then + N=$(( $RANDOM % 9 + 1 )) + S 1 $A3 "0.0$N" + fi + if [[ $(( $RANDOM%2 )) < 1 ]] ; then + N=$(( $RANDOM % 9 + 1 )) + S 2 $A1 "0.$N" + fi + if [[ $(( $RANDOM%2 )) < 1 ]] ; then + N=$(( $RANDOM % 9 + 1 )) + S 2 $A3 "0.$N" + fi + if [[ $(( $RANDOM%2 )) < 1 ]] ; then + N=$(( $RANDOM % 9 + 1 )) + S 3 $A1 "0.$N" + fi + if [[ $(( $RANDOM%2 )) < 1 ]] ; then + N=$(( $RANDOM % 9 + 1 )) + S 3 $A2 "0.0$N" + fi + $CLI "$B4ARGS" setgenerate true 1 +} + +for i in {1..5}; do OneRound ; done + +echo "Backing up..." + +$CLI "$B1ARGS" backupwallet "$D1/wallet.bak" +$CLI "$B1ARGS" dumpwallet "$D1/wallet.dump" +$CLI "$B2ARGS" backupwallet "$D2/wallet.bak" +$CLI "$B2ARGS" dumpwallet "$D2/wallet.dump" +$CLI "$B3ARGS" backupwallet "$D3/wallet.bak" +$CLI "$B3ARGS" dumpwallet "$D3/wallet.dump" + +echo "More transactions..." +for i in {1..5}; do OneRound ; done + +WaitMemPools + +# Generate 101 more blocks, so any fees paid +# mature +$CLI "$B4ARGS" setgenerate true 101 + +BALANCE1=$( $CLI "$B1ARGS" getbalance ) +BALANCE2=$( $CLI "$B2ARGS" getbalance ) +BALANCE3=$( $CLI "$B3ARGS" getbalance ) +BALANCE4=$( $CLI "$B4ARGS" getbalance ) + +TOTAL=$( dc -e "$BALANCE1 $BALANCE2 $BALANCE3 $BALANCE4 + + + p" ) + +AssertEqual $TOTAL 5700.00000000 + +function StopThree { + $CLI $B1ARGS stop > /dev/null 2>&1 + $CLI $B2ARGS stop > /dev/null 2>&1 + $CLI $B3ARGS stop > /dev/null 2>&1 + wait $B1PID + wait $B2PID + wait $B3PID +} +function EraseThree { + rm $D1/regtest/wallet.dat + rm $D2/regtest/wallet.dat + rm $D3/regtest/wallet.dat +} +function StartThree { + $BITCOIND $BITCOINDARGS $B1ARGS & + B1PID=$! + $BITCOIND $BITCOINDARGS $B2ARGS & + B2PID=$! + $BITCOIND $BITCOINDARGS $B3ARGS & + B3PID=$! +} + +echo "Restoring using wallet.dat" + +StopThree +EraseThree + +# Start node3 with no chain +rm -rf $D3/regtest/blocks +rm -rf $D3/regtest/chainstate +rm -rf $D3/regtest/database + +cp $D1/wallet.bak $D1/regtest/wallet.dat +cp $D2/wallet.bak $D2/regtest/wallet.dat +cp $D3/wallet.bak $D3/regtest/wallet.dat + +StartThree +WaitBlocks + +AssertEqual $BALANCE1 $( $CLI "$B1ARGS" getbalance ) +AssertEqual $BALANCE2 $( $CLI "$B2ARGS" getbalance ) +AssertEqual $BALANCE3 $( $CLI "$B3ARGS" getbalance ) + +echo "Restoring using dumped wallet" + +StopThree +EraseThree + +# Start node3 with no chain +rm -rf $D3/regtest/blocks +rm -rf $D3/regtest/chainstate +rm -rf $D3/regtest/database + +StartThree + +AssertEqual 0 $( $CLI "$B1ARGS" getbalance ) +AssertEqual 0 $( $CLI "$B2ARGS" getbalance ) +AssertEqual 0 $( $CLI "$B3ARGS" getbalance ) + +$CLI "$B1ARGS" importwallet $D1/wallet.dump +$CLI "$B2ARGS" importwallet $D2/wallet.dump +$CLI "$B3ARGS" importwallet $D3/wallet.dump + +WaitBlocks + +AssertEqual $BALANCE1 $( $CLI "$B1ARGS" getbalance ) +AssertEqual $BALANCE2 $( $CLI "$B2ARGS" getbalance ) +AssertEqual $BALANCE3 $( $CLI "$B3ARGS" getbalance ) + +StopThree +$CLI $B4ARGS stop > /dev/null 2>&1 +wait $B4PID + +echo "Tests successful, cleaning up" +trap "" EXIT +rm -rf $D +exit 0 diff --git a/share/genbuild.sh b/share/genbuild.sh index d959877d..0800b312 100755 --- a/share/genbuild.sh +++ b/share/genbuild.sh @@ -1,5 +1,7 @@ #!/bin/sh - +if [ $# -gt 1 ]; then + cd "$2" +fi if [ $# -gt 0 ]; then FILE="$1" shift @@ -7,23 +9,35 @@ if [ $# -gt 0 ]; then INFO="$(head -n 1 "$FILE")" fi else - echo "Usage: $0 " + echo "Usage: $0 " exit 1 fi -if [ -e "$(which git)" ]; then +DESC="" +SUFFIX="" +LAST_COMMIT_DATE="" +if [ -e "$(which git 2>/dev/null)" -a -d ".git" ]; then # clean 'dirty' status of touched files that haven't been modified git diff >/dev/null 2>/dev/null - # get a string like "v0.6.0-66-g59887e8-dirty" - DESC="$(git describe --dirty 2>/dev/null)" + # if latest commit is tagged and not dirty, then override using the tag name + RAWDESC=$(git describe --abbrev=0 2>/dev/null) + if [ "$(git rev-parse HEAD)" = "$(git rev-list -1 $RAWDESC)" ]; then + git diff-index --quiet HEAD -- && DESC=$RAWDESC + fi + + # otherwise generate suffix from git, i.e. string like "59887e8-dirty" + SUFFIX=$(git rev-parse --short HEAD) + git diff-index --quiet HEAD -- || SUFFIX="$SUFFIX-dirty" # get a string like "2012-04-10 16:27:19 +0200" - TIME="$(git log -n 1 --format="%ci")" + LAST_COMMIT_DATE="$(git log -n 1 --format="%ci")" fi if [ -n "$DESC" ]; then NEWINFO="#define BUILD_DESC \"$DESC\"" +elif [ -n "$SUFFIX" ]; then + NEWINFO="#define BUILD_SUFFIX $SUFFIX" else NEWINFO="// No build information available" fi @@ -31,5 +45,7 @@ fi # only update build.h if necessary if [ "$INFO" != "$NEWINFO" ]; then echo "$NEWINFO" >"$FILE" - echo "#define BUILD_DATE \"$TIME\"" >>"$FILE" + if [ -n "$LAST_COMMIT_DATE" ]; then + echo "#define BUILD_DATE \"$LAST_COMMIT_DATE\"" >> "$FILE" + fi fi diff --git a/share/pixmaps/bitcoin128.png b/share/pixmaps/bitcoin128.png index 04b56cf2..55039b1c 100644 Binary files a/share/pixmaps/bitcoin128.png and b/share/pixmaps/bitcoin128.png differ diff --git a/share/pixmaps/bitcoin16.png b/share/pixmaps/bitcoin16.png index 16e240e7..55374790 100644 Binary files a/share/pixmaps/bitcoin16.png and b/share/pixmaps/bitcoin16.png differ diff --git a/share/pixmaps/bitcoin256.png b/share/pixmaps/bitcoin256.png index 0ba94fb4..1d42116e 100644 Binary files a/share/pixmaps/bitcoin256.png and b/share/pixmaps/bitcoin256.png differ diff --git a/share/pixmaps/bitcoin32.png b/share/pixmaps/bitcoin32.png index 97a3f280..367abfcc 100644 Binary files a/share/pixmaps/bitcoin32.png and b/share/pixmaps/bitcoin32.png differ diff --git a/share/pixmaps/bitcoin64.png b/share/pixmaps/bitcoin64.png index 8aedee81..08c676ae 100644 Binary files a/share/pixmaps/bitcoin64.png and b/share/pixmaps/bitcoin64.png differ diff --git a/share/qt/Info.plist b/share/qt/Info.plist deleted file mode 100644 index 6f64c316..00000000 --- a/share/qt/Info.plist +++ /dev/null @@ -1,37 +0,0 @@ - - - - - CFBundleIconFile - bitcoin.icns - CFBundlePackageType - APPL - CFBundleGetInfoString - $VERSION, Copyright © 2009-$YEAR The Bitcoin developers - CFBundleShortVersionString - $VERSION - CFBundleVersion - $VERSION - CFBundleSignature - ???? - CFBundleExecutable - Bitcoin-Qt - CFBundleIdentifier - org.bitcoinfoundation.Bitcoin-Qt - CFBundleURLTypes - - - CFBundleTypeRole - Editor - CFBundleURLName - org.bitcoinfoundation.BitcoinPayment - CFBundleURLSchemes - - bitcoin - - - - NSHighResolutionCapable - - - diff --git a/share/qt/Info.plist.in b/share/qt/Info.plist.in new file mode 100644 index 00000000..e79e59a5 --- /dev/null +++ b/share/qt/Info.plist.in @@ -0,0 +1,97 @@ + + + + + LSMinimumSystemVersion + 10.6.0 + + LSArchitecturePriority + + x86_64 + + + CFBundleIconFile + bitcoin.icns + + CFBundlePackageType + APPL + + CFBundleGetInfoString + @CLIENT_VERSION_MAJOR@.@CLIENT_VERSION_MINOR@.@CLIENT_VERSION_REVISION@, Copyright © 2009-@COPYRIGHT_YEAR@ The Bitcoin Core developers + + CFBundleShortVersionString + @CLIENT_VERSION_MAJOR@.@CLIENT_VERSION_MINOR@.@CLIENT_VERSION_REVISION@ + + CFBundleVersion + @CLIENT_VERSION_MAJOR@.@CLIENT_VERSION_MINOR@.@CLIENT_VERSION_REVISION@ + + CFBundleSignature + ???? + + CFBundleExecutable + Bitcoin-Qt + + CFBundleIdentifier + org.bitcoinfoundation.Bitcoin-Qt + + CFBundleURLTypes + + + CFBundleTypeRole + Editor + CFBundleURLName + org.bitcoin.BitcoinPayment + CFBundleURLSchemes + + bitcoin + + + + + UTExportedTypeDeclarations + + + UTTypeIdentifier + org.bitcoin.paymentrequest + UTTypeDescription + Bitcoin payment request + UTTypeConformsTo + + public.data + + UTTypeTagSpecification + + public.mime-type + application/x-bitcoin-payment-request + public.filename-extension + + bitcoinpaymentrequest + + + + + + CFBundleDocumentTypes + + + CFBundleTypeRole + Editor + LSItemContentTypes + + org.bitcoin.paymentrequest + + LSHandlerRank + Owner + + + + NSPrincipalClass + NSApplication + + NSHighResolutionCapable + True + + LSApplicationCategoryType + public.app-category.finance + + diff --git a/share/qt/clean_mac_info_plist.py b/share/qt/clean_mac_info_plist.py deleted file mode 100755 index df677f50..00000000 --- a/share/qt/clean_mac_info_plist.py +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env python -# Jonas Schnelli, 2013 -# make sure the Bitcoin-Qt.app contains the right plist (including the right version) -# fix made because of serval bugs in Qt mac deployment (https://bugreports.qt-project.org/browse/QTBUG-21267) - -from string import Template -from datetime import date - -bitcoinDir = "./"; - -inFile = bitcoinDir+"/share/qt/Info.plist" -outFile = "Bitcoin-Qt.app/Contents/Info.plist" -version = "unknown"; - -fileForGrabbingVersion = bitcoinDir+"bitcoin-qt.pro" -for line in open(fileForGrabbingVersion): - lineArr = line.replace(" ", "").split("="); - if lineArr[0].startswith("VERSION"): - version = lineArr[1].replace("\n", ""); - -fIn = open(inFile, "r") -fileContent = fIn.read() -s = Template(fileContent) -newFileContent = s.substitute(VERSION=version,YEAR=date.today().year) - -fOut = open(outFile, "w"); -fOut.write(newFileContent); - -print "Info.plist fresh created" \ No newline at end of file diff --git a/share/qt/extract_strings_qt.py b/share/qt/extract_strings_qt.py index 1267b185..e6afe3b4 100755 --- a/share/qt/extract_strings_qt.py +++ b/share/qt/extract_strings_qt.py @@ -6,6 +6,7 @@ they can be picked up by Qt linguist. from subprocess import Popen, PIPE import glob import operator +import os OUT_CPP="src/qt/bitcoinstrings.cpp" EMPTY=['""'] @@ -49,13 +50,17 @@ def parse_po(text): files = glob.glob('src/*.cpp') + glob.glob('src/*.h') # xgettext -n --keyword=_ $FILES -child = Popen(['xgettext','--output=-','-n','--keyword=_'] + files, stdout=PIPE) +XGETTEXT=os.getenv('XGETTEXT', 'xgettext') +child = Popen([XGETTEXT,'--output=-','-n','--keyword=_'] + files, stdout=PIPE) (out, err) = child.communicate() messages = parse_po(out) f = open(OUT_CPP, 'w') -f.write("""#include +f.write(""" + +#include + // Automatically generated by extract_strings.py #ifdef __GNUC__ #define UNUSED __attribute__((unused)) @@ -68,5 +73,5 @@ messages.sort(key=operator.itemgetter(0)) for (msgid, msgstr) in messages: if msgid != EMPTY: f.write('QT_TRANSLATE_NOOP("bitcoin-core", %s),\n' % ('\n'.join(msgid))) -f.write('};') +f.write('};\n') f.close() diff --git a/share/qt/img/reload.png b/share/qt/img/reload.png new file mode 100644 index 00000000..9068db9a Binary files /dev/null and b/share/qt/img/reload.png differ diff --git a/share/qt/make_spinner.py b/share/qt/make_spinner.py index 136aff3c..bb19e915 100755 --- a/share/qt/make_spinner.py +++ b/share/qt/make_spinner.py @@ -1,16 +1,15 @@ #!/usr/bin/env python # W.J. van der Laan, 2011 -# Make spinning .mng animation from a .png +# Make spinning animation from a .png # Requires imagemagick 6.7+ from __future__ import division from os import path from PIL import Image from subprocess import Popen -SRC='img/reload_scaled.png' -DST='../../src/qt/res/movies/update_spinner.mng' -TMPDIR='/tmp' -TMPNAME='tmp-%03i.png' +SRC='img/reload.png' +TMPDIR='../../src/qt/res/movies/' +TMPNAME='spinner-%03i.png' NUMFRAMES=35 FRAMERATE=10.0 CONVERT='convert' @@ -36,8 +35,4 @@ for frame in xrange(NUMFRAMES): im_new.save(outfile, 'png') frame_files.append(outfile) -p = Popen([CONVERT, "-delay", str(FRAMERATE), "-dispose", "2"] + frame_files + [DST]) -p.communicate() - - diff --git a/share/qt/protobuf.pri b/share/qt/protobuf.pri new file mode 100644 index 00000000..865fe865 --- /dev/null +++ b/share/qt/protobuf.pri @@ -0,0 +1,35 @@ +# Based on: http://code.google.com/p/ostinato/source/browse/protobuf.pri +# +# Qt qmake integration with Google Protocol Buffers compiler protoc +# +# To compile protocol buffers with qt qmake, specify PROTOS variable and +# include this file +# +# Example: +# PROTOS = a.proto b.proto +# include(protobuf.pri) +# +# Set PROTO_PATH if you need to set the protoc --proto_path search path +# Set PROTOC to the path to the protoc compiler if it is not in your $PATH +# + +isEmpty(PROTO_DIR):PROTO_DIR = . +isEmpty(PROTOC):PROTOC = protoc + +PROTOPATHS = +for(p, PROTO_PATH):PROTOPATHS += --proto_path=$${p} + +protobuf_decl.name = protobuf header +protobuf_decl.input = PROTOS +protobuf_decl.output = $${PROTO_DIR}/${QMAKE_FILE_BASE}.pb.h +protobuf_decl.commands = $${PROTOC} --cpp_out="$${PROTO_DIR}" $${PROTOPATHS} --proto_path=${QMAKE_FILE_IN_PATH} ${QMAKE_FILE_NAME} +protobuf_decl.variable_out = GENERATED_FILES +QMAKE_EXTRA_COMPILERS += protobuf_decl + +protobuf_impl.name = protobuf implementation +protobuf_impl.input = PROTOS +protobuf_impl.output = $${PROTO_DIR}/${QMAKE_FILE_BASE}.pb.cc +protobuf_impl.depends = $${PROTO_DIR}/${QMAKE_FILE_BASE}.pb.h +protobuf_impl.commands = $$escape_expand(\\n) +protobuf_impl.variable_out = GENERATED_SOURCES +QMAKE_EXTRA_COMPILERS += protobuf_impl diff --git a/share/setup.nsi b/share/setup.nsi.in similarity index 72% rename from share/setup.nsi rename to share/setup.nsi.in index d5f2ffc3..6c0e895b 100644 --- a/share/setup.nsi +++ b/share/setup.nsi.in @@ -1,162 +1,179 @@ -Name Bitcoin - -RequestExecutionLevel highest -SetCompressor /SOLID lzma - -# General Symbol Definitions -!define REGKEY "SOFTWARE\$(^Name)" -!define VERSION 0.8.2 -!define COMPANY "Bitcoin project" -!define URL http://www.bitcoin.org/ - -# MUI Symbol Definitions -!define MUI_ICON "../share/pixmaps/bitcoin.ico" -!define MUI_WELCOMEFINISHPAGE_BITMAP "../share/pixmaps/nsis-wizard.bmp" -!define MUI_HEADERIMAGE -!define MUI_HEADERIMAGE_RIGHT -!define MUI_HEADERIMAGE_BITMAP "../share/pixmaps/nsis-header.bmp" -!define MUI_FINISHPAGE_NOAUTOCLOSE -!define MUI_STARTMENUPAGE_REGISTRY_ROOT HKLM -!define MUI_STARTMENUPAGE_REGISTRY_KEY ${REGKEY} -!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME StartMenuGroup -!define MUI_STARTMENUPAGE_DEFAULTFOLDER Bitcoin -!define MUI_FINISHPAGE_RUN $INSTDIR\bitcoin-qt.exe -!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico" -!define MUI_UNWELCOMEFINISHPAGE_BITMAP "../share/pixmaps/nsis-wizard.bmp" -!define MUI_UNFINISHPAGE_NOAUTOCLOSE - -# Included files -!include Sections.nsh -!include MUI2.nsh - -# Variables -Var StartMenuGroup - -# Installer pages -!insertmacro MUI_PAGE_WELCOME -!insertmacro MUI_PAGE_DIRECTORY -!insertmacro MUI_PAGE_STARTMENU Application $StartMenuGroup -!insertmacro MUI_PAGE_INSTFILES -!insertmacro MUI_PAGE_FINISH -!insertmacro MUI_UNPAGE_CONFIRM -!insertmacro MUI_UNPAGE_INSTFILES - -# Installer languages -!insertmacro MUI_LANGUAGE English - -# Installer attributes -OutFile bitcoin-0.8.2-win32-setup.exe -InstallDir $PROGRAMFILES\Bitcoin -CRCCheck on -XPStyle on -BrandingText " " -ShowInstDetails show -VIProductVersion 0.8.2.2 -VIAddVersionKey ProductName Bitcoin -VIAddVersionKey ProductVersion "${VERSION}" -VIAddVersionKey CompanyName "${COMPANY}" -VIAddVersionKey CompanyWebsite "${URL}" -VIAddVersionKey FileVersion "${VERSION}" -VIAddVersionKey FileDescription "" -VIAddVersionKey LegalCopyright "" -InstallDirRegKey HKCU "${REGKEY}" Path -ShowUninstDetails show - -# Installer sections -Section -Main SEC0000 - SetOutPath $INSTDIR - SetOverwrite on - File ../release/bitcoin-qt.exe - File /oname=COPYING.txt ../COPYING - File /oname=readme.txt ../doc/README_windows.txt - SetOutPath $INSTDIR\daemon - File ../src/bitcoind.exe - SetOutPath $INSTDIR\src - File /r /x *.exe /x *.o ../src\*.* - SetOutPath $INSTDIR - WriteRegStr HKCU "${REGKEY}\Components" Main 1 - - # Remove old wxwidgets-based-bitcoin executable and locales: - Delete /REBOOTOK $INSTDIR\bitcoin.exe - RMDir /r /REBOOTOK $INSTDIR\locale -SectionEnd - -Section -post SEC0001 - WriteRegStr HKCU "${REGKEY}" Path $INSTDIR - SetOutPath $INSTDIR - WriteUninstaller $INSTDIR\uninstall.exe - !insertmacro MUI_STARTMENU_WRITE_BEGIN Application - CreateDirectory $SMPROGRAMS\$StartMenuGroup - CreateShortcut "$SMPROGRAMS\$StartMenuGroup\Bitcoin.lnk" $INSTDIR\bitcoin-qt.exe - CreateShortcut "$SMPROGRAMS\$StartMenuGroup\Uninstall Bitcoin.lnk" $INSTDIR\uninstall.exe - !insertmacro MUI_STARTMENU_WRITE_END - WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayName "$(^Name)" - WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayVersion "${VERSION}" - WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" Publisher "${COMPANY}" - WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" URLInfoAbout "${URL}" - WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayIcon $INSTDIR\uninstall.exe - WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" UninstallString $INSTDIR\uninstall.exe - WriteRegDWORD HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoModify 1 - WriteRegDWORD HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoRepair 1 - WriteRegStr HKCR "bitcoin" "URL Protocol" "" - WriteRegStr HKCR "bitcoin" "" "URL:Bitcoin" - WriteRegStr HKCR "bitcoin\DefaultIcon" "" $INSTDIR\bitcoin-qt.exe - WriteRegStr HKCR "bitcoin\shell\open\command" "" '"$INSTDIR\bitcoin-qt.exe" "%1"' -SectionEnd - -# Macro for selecting uninstaller sections -!macro SELECT_UNSECTION SECTION_NAME UNSECTION_ID - Push $R0 - ReadRegStr $R0 HKCU "${REGKEY}\Components" "${SECTION_NAME}" - StrCmp $R0 1 0 next${UNSECTION_ID} - !insertmacro SelectSection "${UNSECTION_ID}" - GoTo done${UNSECTION_ID} -next${UNSECTION_ID}: - !insertmacro UnselectSection "${UNSECTION_ID}" -done${UNSECTION_ID}: - Pop $R0 -!macroend - -# Uninstaller sections -Section /o -un.Main UNSEC0000 - Delete /REBOOTOK $INSTDIR\bitcoin-qt.exe - Delete /REBOOTOK $INSTDIR\COPYING.txt - Delete /REBOOTOK $INSTDIR\readme.txt - RMDir /r /REBOOTOK $INSTDIR\daemon - RMDir /r /REBOOTOK $INSTDIR\src - DeleteRegValue HKCU "${REGKEY}\Components" Main -SectionEnd - -Section -un.post UNSEC0001 - DeleteRegKey HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" - Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\Uninstall Bitcoin.lnk" - Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\Bitcoin.lnk" - Delete /REBOOTOK "$SMSTARTUP\Bitcoin.lnk" - Delete /REBOOTOK $INSTDIR\uninstall.exe - Delete /REBOOTOK $INSTDIR\debug.log - Delete /REBOOTOK $INSTDIR\db.log - DeleteRegValue HKCU "${REGKEY}" StartMenuGroup - DeleteRegValue HKCU "${REGKEY}" Path - DeleteRegKey /IfEmpty HKCU "${REGKEY}\Components" - DeleteRegKey /IfEmpty HKCU "${REGKEY}" - DeleteRegKey HKCR "bitcoin" - RmDir /REBOOTOK $SMPROGRAMS\$StartMenuGroup - RmDir /REBOOTOK $INSTDIR - Push $R0 - StrCpy $R0 $StartMenuGroup 1 - StrCmp $R0 ">" no_smgroup -no_smgroup: - Pop $R0 -SectionEnd - -# Installer functions -Function .onInit - InitPluginsDir -FunctionEnd - -# Uninstaller functions -Function un.onInit - ReadRegStr $INSTDIR HKCU "${REGKEY}" Path - !insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuGroup - !insertmacro SELECT_UNSECTION Main ${UNSEC0000} -FunctionEnd +Name "@PACKAGE_NAME@ (@WINDOWS_BITS@-bit)" + +RequestExecutionLevel highest +SetCompressor /SOLID lzma + +# General Symbol Definitions +!define REGKEY "SOFTWARE\$(^Name)" +!define VERSION @CLIENT_VERSION_MAJOR@.@CLIENT_VERSION_MINOR@.@CLIENT_VERSION_REVISION@ +!define COMPANY "Bitcoin Core project" +!define URL http://www.bitcoin.org/ + +# MUI Symbol Definitions +!define MUI_ICON "@abs_top_srcdir@/share/pixmaps/bitcoin.ico" +!define MUI_WELCOMEFINISHPAGE_BITMAP "@abs_top_srcdir@/share/pixmaps/nsis-wizard.bmp" +!define MUI_HEADERIMAGE +!define MUI_HEADERIMAGE_RIGHT +!define MUI_HEADERIMAGE_BITMAP "@abs_top_srcdir@/share/pixmaps/nsis-header.bmp" +!define MUI_FINISHPAGE_NOAUTOCLOSE +!define MUI_STARTMENUPAGE_REGISTRY_ROOT HKLM +!define MUI_STARTMENUPAGE_REGISTRY_KEY ${REGKEY} +!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME StartMenuGroup +!define MUI_STARTMENUPAGE_DEFAULTFOLDER "@PACKAGE_NAME@" +!define MUI_FINISHPAGE_RUN $INSTDIR\bitcoin-qt.exe +!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico" +!define MUI_UNWELCOMEFINISHPAGE_BITMAP "@abs_top_srcdir@/share/pixmaps/nsis-wizard.bmp" +!define MUI_UNFINISHPAGE_NOAUTOCLOSE + +# Included files +!include Sections.nsh +!include MUI2.nsh +!if "@WINDOWS_BITS@" == "64" +!include x64.nsh +!endif + +# Variables +Var StartMenuGroup + +# Installer pages +!insertmacro MUI_PAGE_WELCOME +!insertmacro MUI_PAGE_DIRECTORY +!insertmacro MUI_PAGE_STARTMENU Application $StartMenuGroup +!insertmacro MUI_PAGE_INSTFILES +!insertmacro MUI_PAGE_FINISH +!insertmacro MUI_UNPAGE_CONFIRM +!insertmacro MUI_UNPAGE_INSTFILES + +# Installer languages +!insertmacro MUI_LANGUAGE English + +# Installer attributes +OutFile @abs_top_srcdir@/bitcoin-${VERSION}-win@WINDOWS_BITS@-setup.exe +!if "@WINDOWS_BITS@" == "64" +InstallDir $PROGRAMFILES64\Bitcoin +!else +InstallDir $PROGRAMFILES\Bitcoin +!endif +CRCCheck on +XPStyle on +BrandingText " " +ShowInstDetails show +VIProductVersion ${VERSION}.@CLIENT_VERSION_BUILD@ +VIAddVersionKey ProductName "Bitcoin Core" +VIAddVersionKey ProductVersion "${VERSION}" +VIAddVersionKey CompanyName "${COMPANY}" +VIAddVersionKey CompanyWebsite "${URL}" +VIAddVersionKey FileVersion "${VERSION}" +VIAddVersionKey FileDescription "" +VIAddVersionKey LegalCopyright "" +InstallDirRegKey HKCU "${REGKEY}" Path +ShowUninstDetails show + +# Installer sections +Section -Main SEC0000 + SetOutPath $INSTDIR + SetOverwrite on + File @abs_top_srcdir@/release/bitcoin-qt.exe + File /oname=COPYING.txt @abs_top_srcdir@/COPYING + File /oname=readme.txt @abs_top_srcdir@/doc/README_windows.txt + SetOutPath $INSTDIR\daemon + File @abs_top_srcdir@/release/bitcoind.exe + File @abs_top_srcdir@/release/bitcoin-cli.exe + SetOutPath $INSTDIR\doc + File /r @abs_top_srcdir@/doc\*.* + SetOutPath $INSTDIR + WriteRegStr HKCU "${REGKEY}\Components" Main 1 + + # Remove old wxwidgets-based-bitcoin executable and locales: + Delete /REBOOTOK $INSTDIR\bitcoin.exe + RMDir /r /REBOOTOK $INSTDIR\locale +SectionEnd + +Section -post SEC0001 + WriteRegStr HKCU "${REGKEY}" Path $INSTDIR + SetOutPath $INSTDIR + WriteUninstaller $INSTDIR\uninstall.exe + !insertmacro MUI_STARTMENU_WRITE_BEGIN Application + CreateDirectory $SMPROGRAMS\$StartMenuGroup + CreateShortcut "$SMPROGRAMS\$StartMenuGroup\$(^Name).lnk" $INSTDIR\bitcoin-qt.exe + CreateShortcut "$SMPROGRAMS\$StartMenuGroup\Uninstall $(^Name).lnk" $INSTDIR\uninstall.exe + !insertmacro MUI_STARTMENU_WRITE_END + WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayName "$(^Name)" + WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayVersion "${VERSION}" + WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" Publisher "${COMPANY}" + WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" URLInfoAbout "${URL}" + WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayIcon $INSTDIR\uninstall.exe + WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" UninstallString $INSTDIR\uninstall.exe + WriteRegDWORD HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoModify 1 + WriteRegDWORD HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoRepair 1 + WriteRegStr HKCR "bitcoin" "URL Protocol" "" + WriteRegStr HKCR "bitcoin" "" "URL:Bitcoin" + WriteRegStr HKCR "bitcoin\DefaultIcon" "" $INSTDIR\bitcoin-qt.exe + WriteRegStr HKCR "bitcoin\shell\open\command" "" '"$INSTDIR\bitcoin-qt.exe" "%1"' +SectionEnd + +# Macro for selecting uninstaller sections +!macro SELECT_UNSECTION SECTION_NAME UNSECTION_ID + Push $R0 + ReadRegStr $R0 HKCU "${REGKEY}\Components" "${SECTION_NAME}" + StrCmp $R0 1 0 next${UNSECTION_ID} + !insertmacro SelectSection "${UNSECTION_ID}" + GoTo done${UNSECTION_ID} +next${UNSECTION_ID}: + !insertmacro UnselectSection "${UNSECTION_ID}" +done${UNSECTION_ID}: + Pop $R0 +!macroend + +# Uninstaller sections +Section /o -un.Main UNSEC0000 + Delete /REBOOTOK $INSTDIR\bitcoin-qt.exe + Delete /REBOOTOK $INSTDIR\COPYING.txt + Delete /REBOOTOK $INSTDIR\readme.txt + RMDir /r /REBOOTOK $INSTDIR\daemon + RMDir /r /REBOOTOK $INSTDIR\doc + DeleteRegValue HKCU "${REGKEY}\Components" Main +SectionEnd + +Section -un.post UNSEC0001 + DeleteRegKey HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" + Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\Uninstall $(^Name).lnk" + Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\$(^Name).lnk" + Delete /REBOOTOK "$SMSTARTUP\Bitcoin.lnk" + Delete /REBOOTOK $INSTDIR\uninstall.exe + Delete /REBOOTOK $INSTDIR\debug.log + Delete /REBOOTOK $INSTDIR\db.log + DeleteRegValue HKCU "${REGKEY}" StartMenuGroup + DeleteRegValue HKCU "${REGKEY}" Path + DeleteRegKey /IfEmpty HKCU "${REGKEY}\Components" + DeleteRegKey /IfEmpty HKCU "${REGKEY}" + DeleteRegKey HKCR "bitcoin" + RmDir /REBOOTOK $SMPROGRAMS\$StartMenuGroup + RmDir /REBOOTOK $INSTDIR + Push $R0 + StrCpy $R0 $StartMenuGroup 1 + StrCmp $R0 ">" no_smgroup +no_smgroup: + Pop $R0 +SectionEnd + +# Installer functions +Function .onInit + InitPluginsDir +!if "@WINDOWS_BITS@" == "64" + ${If} ${RunningX64} + ; disable registry redirection (enable access to 64-bit portion of registry) + SetRegView 64 + ${Else} + MessageBox MB_OK|MB_ICONSTOP "Cannot install 64-bit version on a 32-bit system." + Abort + ${EndIf} +!endif +FunctionEnd + +# Uninstaller functions +Function un.onInit + ReadRegStr $INSTDIR HKCU "${REGKEY}" Path + !insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuGroup + !insertmacro SELECT_UNSECTION Main ${UNSEC0000} +FunctionEnd diff --git a/src/Makefile.am b/src/Makefile.am new file mode 100644 index 00000000..be84683c --- /dev/null +++ b/src/Makefile.am @@ -0,0 +1,233 @@ +include Makefile.include + +AM_CPPFLAGS += -I$(builddir) + +noinst_LIBRARIES = \ + libbitcoin_server.a \ + libbitcoin_common.a \ + libbitcoin_cli.a +if ENABLE_WALLET +noinst_LIBRARIES += libbitcoin_wallet.a +endif + +bin_PROGRAMS = + +if BUILD_BITCOIND + bin_PROGRAMS += myriadcoind +endif + +if BUILD_BITCOIN_CLI + bin_PROGRAMS += myriadcoin-cli +endif + +SUBDIRS = . $(BUILD_QT) $(BUILD_TEST) +DIST_SUBDIRS = . qt test +.PHONY: FORCE +# bitcoin core # +BITCOIN_CORE_H = \ + addrman.h \ + alert.h \ + allocators.h \ + base58.h bignum.h \ + bloom.h \ + chainparams.h \ + checkpoints.h \ + checkqueue.h \ + clientversion.h \ + coincontrol.h \ + coins.h \ + compat.h \ + core.h \ + crypter.h \ + db.h \ + hash.h \ + init.h \ + key.h \ + keystore.h \ + leveldbwrapper.h \ + limitedmap.h \ + main.h \ + miner.h \ + mruset.h \ + netbase.h \ + net.h \ + noui.h \ + protocol.h \ + rpcclient.h \ + rpcprotocol.h \ + rpcserver.h \ + script.h \ + serialize.h \ + sync.h \ + threadsafety.h \ + tinyformat.h \ + txdb.h \ + txmempool.h \ + ui_interface.h \ + uint256.h \ + util.h \ + version.h \ + walletdb.h \ + wallet.h \ + scrypt.h \ + sph_blake.h \ + sph_groestl.h \ + sph_keccak.h \ + sph_bmw.h \ + sph_jh.h \ + sph_skein.h \ + sph_types.h \ + sph_echo.h \ + sph_luffa.h \ + sph_simd.h \ + sph_cubehash.h \ + sph_shavite.h \ + hashgroestl.h \ + hashskein.h \ + hashqubit.h + +JSON_H = \ + json/json_spirit.h \ + json/json_spirit_error_position.h \ + json/json_spirit_reader.h \ + json/json_spirit_reader_template.h \ + json/json_spirit_stream_reader.h \ + json/json_spirit_utils.h \ + json/json_spirit_value.h \ + json/json_spirit_writer.h \ + json/json_spirit_writer_template.h + +obj/build.h: FORCE + @$(MKDIR_P) $(abs_top_builddir)/src/obj + @$(top_srcdir)/share/genbuild.sh $(abs_top_builddir)/src/obj/build.h \ + $(abs_top_srcdir) +version.o: obj/build.h + +libbitcoin_server_a_SOURCES = \ + addrman.cpp \ + alert.cpp \ + bloom.cpp \ + checkpoints.cpp \ + coins.cpp \ + init.cpp \ + keystore.cpp \ + leveldbwrapper.cpp \ + main.cpp \ + miner.cpp \ + net.cpp \ + noui.cpp \ + rpcblockchain.cpp \ + rpcmining.cpp \ + rpcmisc.cpp \ + rpcnet.cpp \ + rpcrawtransaction.cpp \ + rpcserver.cpp \ + txdb.cpp \ + txmempool.cpp \ + $(JSON_H) \ + $(BITCOIN_CORE_H) + +libbitcoin_wallet_a_SOURCES = \ + db.cpp \ + crypter.cpp \ + rpcdump.cpp \ + rpcwallet.cpp \ + wallet.cpp \ + walletdb.cpp \ + $(BITCOIN_CORE_H) + +libbitcoin_common_a_SOURCES = \ + base58.cpp \ + allocators.cpp \ + chainparams.cpp \ + core.cpp \ + hash.cpp \ + key.cpp \ + netbase.cpp \ + protocol.cpp \ + rpcprotocol.cpp \ + script.cpp \ + sync.cpp \ + util.cpp \ + version.cpp \ + scrypt.cpp \ + scrypt-sse2.cpp \ + blake.c \ + bmw.c \ + groestl.c \ + jh.c \ + keccak.c \ + skein.c \ + aes_helper.c \ + echo.c \ + luffa.c \ + simd.c \ + cubehash.c \ + shavite.c \ + $(BITCOIN_CORE_H) + +if GLIBC_BACK_COMPAT +libbitcoin_common_a_SOURCES += compat/glibc_compat.cpp +libbitcoin_common_a_SOURCES += compat/glibcxx_compat.cpp +endif + +libbitcoin_cli_a_SOURCES = \ + rpcclient.cpp \ + $(BITCOIN_CORE_H) + +nodist_libbitcoin_common_a_SOURCES = $(top_srcdir)/src/obj/build.h +# + +# bitcoind binary # +myriadcoind_LDADD = \ + libbitcoin_server.a \ + libbitcoin_cli.a \ + libbitcoin_common.a \ + $(LIBLEVELDB) \ + $(LIBMEMENV) +if ENABLE_WALLET +myriadcoind_LDADD += libbitcoin_wallet.a +endif +myriadcoind_SOURCES = bitcoind.cpp +# + +if TARGET_WINDOWS +myriadcoind_SOURCES += bitcoind-res.rc +endif + +AM_CPPFLAGS += $(BDB_CPPFLAGS) +myriadcoind_LDADD += $(BOOST_LIBS) $(BDB_LIBS) + +# bitcoin-cli binary # +myriadcoin_cli_LDADD = \ + libbitcoin_cli.a \ + libbitcoin_common.a \ + $(BOOST_LIBS) +myriadcoin_cli_SOURCES = bitcoin-cli.cpp +# + +if TARGET_WINDOWS +myriadcoin_cli_SOURCES += bitcoin-cli-res.rc +endif + +# NOTE: This dependency is not strictly necessary, but without it make may try to build both in parallel, which breaks the LevelDB build system in a race +leveldb/libleveldb.a: leveldb/libmemenv.a + +leveldb/%.a: + @echo "Building LevelDB ..." && $(MAKE) -C $(@D) $(@F) CXX="$(CXX)" \ + CC="$(CC)" PLATFORM=$(TARGET_OS) AR="$(AR)" $(LEVELDB_TARGET_FLAGS) \ + OPT="$(CXXFLAGS) $(CPPFLAGS)" + +qt/bitcoinstrings.cpp: $(libbitcoin_server_a_SOURCES) $(libbitcoin_common_a_SOURCES) $(libbitcoin_cli_a_SOURCES) + @test -n $(XGETTEXT) || echo "xgettext is required for updating translations" + @cd $(top_srcdir); XGETTEXT=$(XGETTEXT) share/qt/extract_strings_qt.py + +CLEANFILES = leveldb/libleveldb.a leveldb/libmemenv.a *.gcda *.gcno + +DISTCLEANFILES = obj/build.h + +EXTRA_DIST = leveldb Makefile.include + +clean-local: + -$(MAKE) -C leveldb clean + rm -f leveldb/*/*.gcno leveldb/helpers/memenv/*.gcno diff --git a/src/Makefile.include b/src/Makefile.include new file mode 100644 index 00000000..1644e79d --- /dev/null +++ b/src/Makefile.include @@ -0,0 +1,80 @@ +if EMBEDDED_LEVELDB +LEVELDB_CPPFLAGS += -I$(top_srcdir)/src/leveldb/include +LEVELDB_CPPFLAGS += -I$(top_srcdir)/src/leveldb/helpers/memenv +LIBLEVELDB += $(top_builddir)/src/leveldb/libleveldb.a +LIBMEMENV += $(top_builddir)/src/leveldb/libmemenv.a +endif + +AM_CPPFLAGS = $(INCLUDES) \ + -I$(top_builddir)/src/obj \ + $(BDB_CPPFLAGS) \ + $(BOOST_CPPFLAGS) $(BOOST_INCLUDES) +AM_CPPFLAGS += $(LEVELDB_CPPFLAGS) +AM_LDFLAGS = $(PTHREAD_CFLAGS) +AM_CFLAGS = -fPIC + +LIBBITCOIN_SERVER=$(top_builddir)/src/libbitcoin_server.a +LIBBITCOIN_WALLET=$(top_builddir)/src/libbitcoin_wallet.a +LIBBITCOIN_COMMON=$(top_builddir)/src/libbitcoin_common.a +LIBBITCOIN_CLI=$(top_builddir)/src/libbitcoin_cli.a +LIBBITCOINQT=$(top_builddir)/src/qt/libbitcoinqt.a + +$(LIBBITCOIN): + $(MAKE) -C $(top_builddir)/src $(@F) + +if EMBEDDED_LEVELDB +$(LIBLEVELDB) $(LIBMEMENV): + $(MAKE) -C $(top_builddir)/src leveldb/$(@F) +endif + +$(LIBBITCOINQT): + $(MAKE) -C $(top_builddir)/src/qt $(@F) + +.mm.o: + $(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CXXFLAGS) $(QT_INCLUDES) $(CXXFLAGS) -c -o $@ $< + +.rc.o: + @test -f $(WINDRES) && $(WINDRES) -i $< -o $@ || \ + echo error: could not build $@ + +ui_%.h: %.ui + @test -d $(abs_builddir)/$(@D) || $(MKDIR_P) $(abs_builddir)/$(@D) + @test -f $(UIC) && QT_SELECT=$(QT_SELECT) $(UIC) -o $(abs_builddir)/$@ $(abs_srcdir)/$< || echo error: could not build $(abs_builddir)/$@ + $(SED) -e '/^\*\*.*Created:/d' $(abs_builddir)/$@ > $(abs_builddir)/$@.n && mv $(abs_builddir)/$@{.n,} + $(SED) -e '/^\*\*.*by:/d' $(abs_builddir)/$@ > $(abs_builddir)/$@.n && mv $(abs_builddir)/$@{.n,} + +%.moc: %.cpp + QT_SELECT=$(QT_SELECT) $(MOC) $(QT_INCLUDES) $(MOC_DEFS) -o $@ $< + $(SED) -e '/^\*\*.*Created:/d' $@ > $@.n && mv $@{.n,} + $(SED) -e '/^\*\*.*by:/d' $@ > $@.n && mv $@{.n,} + +moc_%.cpp: %.h + QT_SELECT=$(QT_SELECT) $(MOC) $(QT_INCLUDES) $(MOC_DEFS) -o $@ $< + $(SED) -e '/^\*\*.*Created:/d' $@ > $@.n && mv $@{.n,} + $(SED) -e '/^\*\*.*by:/d' $@ > $@.n && mv $@{.n,} + +%.qm: %.ts + @test -d $(abs_builddir)/$(@D) || $(MKDIR_P) $(abs_builddir)/$(@D) + @test -f $(LRELEASE) && QT_SELECT=$(QT_SELECT) $(LRELEASE) $(abs_srcdir)/$< -qm $(abs_builddir)/$@ || \ + echo error: could not build $(abs_builddir)/$@ + +%.pb.cc %.pb.h: %.proto + test -f $(PROTOC) && $(PROTOC) --cpp_out=$(@D) --proto_path=$(abspath $( $@ + @echo "static unsigned const char $(*F)[] = {" >> $@ + @$(HEXDUMP) -v -e '8/1 "0x%02x, "' -e '"\n"' $< | $(SED) -e 's/0x ,//g' >> $@ + @echo "};};" >> $@ + @echo "Generated $@" + +%.raw.h: %.raw + @$(MKDIR_P) $(@D) + @echo "namespace alert_tests{" > $@ + @echo "static unsigned const char $(*F)[] = {" >> $@ + @$(HEXDUMP) -v -e '8/1 "0x%02x, "' -e '"\n"' $< | $(SED) -e 's/0x ,//g' >> $@ + @echo "};};" >> $@ + @echo "Generated $@" diff --git a/src/addrman.cpp b/src/addrman.cpp index e8917f7f..3628af2e 100644 --- a/src/addrman.cpp +++ b/src/addrman.cpp @@ -3,7 +3,9 @@ // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "addrman.h" + #include "hash.h" +#include "serialize.h" using namespace std; @@ -12,12 +14,12 @@ int CAddrInfo::GetTriedBucket(const std::vector &nKey) const CDataStream ss1(SER_GETHASH, 0); std::vector vchKey = GetKey(); ss1 << nKey << vchKey; - uint64 hash1 = Hash(ss1.begin(), ss1.end()).Get64(); + uint64_t hash1 = Hash(ss1.begin(), ss1.end()).GetLow64(); CDataStream ss2(SER_GETHASH, 0); std::vector vchGroupKey = GetGroup(); ss2 << nKey << vchGroupKey << (hash1 % ADDRMAN_TRIED_BUCKETS_PER_GROUP); - uint64 hash2 = Hash(ss2.begin(), ss2.end()).Get64(); + uint64_t hash2 = Hash(ss2.begin(), ss2.end()).GetLow64(); return hash2 % ADDRMAN_TRIED_BUCKET_COUNT; } @@ -27,40 +29,40 @@ int CAddrInfo::GetNewBucket(const std::vector &nKey, const CNetAd std::vector vchGroupKey = GetGroup(); std::vector vchSourceGroupKey = src.GetGroup(); ss1 << nKey << vchGroupKey << vchSourceGroupKey; - uint64 hash1 = Hash(ss1.begin(), ss1.end()).Get64(); + uint64_t hash1 = Hash(ss1.begin(), ss1.end()).GetLow64(); CDataStream ss2(SER_GETHASH, 0); ss2 << nKey << vchSourceGroupKey << (hash1 % ADDRMAN_NEW_BUCKETS_PER_SOURCE_GROUP); - uint64 hash2 = Hash(ss2.begin(), ss2.end()).Get64(); + uint64_t hash2 = Hash(ss2.begin(), ss2.end()).GetLow64(); return hash2 % ADDRMAN_NEW_BUCKET_COUNT; } -bool CAddrInfo::IsTerrible(int64 nNow) const +bool CAddrInfo::IsTerrible(int64_t nNow) const { - if (nLastTry && nLastTry >= nNow - 60) // never remove things tried the last minute + if (nLastTry && nLastTry >= nNow-60) // never remove things tried the last minute return false; if (nTime > nNow + 10*60) // came in a flying DeLorean return true; - if (nTime==0 || nNow-nTime > ADDRMAN_HORIZON_DAYS*86400) // not seen in over 2 months + if (nTime==0 || nNow-nTime > ADDRMAN_HORIZON_DAYS*86400) // not seen in over a month return true; - if (nLastSuccess==0 && nAttempts >= ADDRMAN_RETRIES) // tried three times and never a success + if (nLastSuccess==0 && nAttempts>=ADDRMAN_RETRIES) // tried three times and never a success return true; - if (nNow-nLastSuccess > ADDRMAN_MIN_FAIL_DAYS*86400 && nAttempts>=ADDRMAN_MAX_FAILURES) // 20 successive failures in the last week + if (nNow-nLastSuccess > ADDRMAN_MIN_FAIL_DAYS*86400 && nAttempts>=ADDRMAN_MAX_FAILURES) // 10 successive failures in the last week return true; return false; } -double CAddrInfo::GetChance(int64 nNow) const +double CAddrInfo::GetChance(int64_t nNow) const { double fChance = 1.0; - int64 nSinceLastSeen = nNow - nTime; - int64 nSinceLastTry = nNow - nLastTry; + int64_t nSinceLastSeen = nNow - nTime; + int64_t nSinceLastTry = nNow - nLastTry; if (nSinceLastSeen < 0) nSinceLastSeen = 0; if (nSinceLastTry < 0) nSinceLastTry = 0; @@ -129,7 +131,7 @@ int CAddrMan::SelectTried(int nKBucket) // random shuffle the first few elements (using the entire list) // find the least recently tried among them - int64 nOldest = -1; + int64_t nOldest = -1; int nOldestPos = -1; for (unsigned int i = 0; i < ADDRMAN_TRIED_ENTRIES_INSPECT_ON_EVICT && i < vTried.size(); i++) { @@ -259,10 +261,8 @@ void CAddrMan::MakeTried(CAddrInfo& info, int nId, int nOrigin) return; } -void CAddrMan::Good_(const CService &addr, int64 nTime) +void CAddrMan::Good_(const CService &addr, int64_t nTime) { -// printf("Good: addr=%s\n", addr.ToString().c_str()); - int nId; CAddrInfo *pinfo = Find(addr, &nId); @@ -304,13 +304,13 @@ void CAddrMan::Good_(const CService &addr, int64 nTime) // TODO: maybe re-add the node, but for now, just bail out if (nUBucket == -1) return; - printf("Moving %s to tried\n", addr.ToString().c_str()); + LogPrint("addrman", "Moving %s to tried\n", addr.ToString()); // move nId to the tried tables MakeTried(info, nId, nUBucket); } -bool CAddrMan::Add_(const CAddress &addr, const CNetAddr& source, int64 nTimePenalty) +bool CAddrMan::Add_(const CAddress &addr, const CNetAddr& source, int64_t nTimePenalty) { if (!addr.IsRoutable()) return false; @@ -323,9 +323,9 @@ bool CAddrMan::Add_(const CAddress &addr, const CNetAddr& source, int64 nTimePen { // periodically update nTime bool fCurrentlyOnline = (GetAdjustedTime() - addr.nTime < 24 * 60 * 60); - int64 nUpdateInterval = (fCurrentlyOnline ? 60 * 60 : 24 * 60 * 60); + int64_t nUpdateInterval = (fCurrentlyOnline ? 60 * 60 : 24 * 60 * 60); if (addr.nTime && (!pinfo->nTime || pinfo->nTime < addr.nTime - nUpdateInterval - nTimePenalty)) - pinfo->nTime = max((int64)0, addr.nTime - nTimePenalty); + pinfo->nTime = max((int64_t)0, addr.nTime - nTimePenalty); // add services pinfo->nServices |= addr.nServices; @@ -350,8 +350,7 @@ bool CAddrMan::Add_(const CAddress &addr, const CNetAddr& source, int64 nTimePen return false; } else { pinfo = Create(addr, source, &nId); - pinfo->nTime = max((int64)0, (int64)pinfo->nTime - nTimePenalty); -// printf("Added %s [nTime=%fhr]\n", pinfo->ToString().c_str(), (GetAdjustedTime() - pinfo->nTime) / 3600.0); + pinfo->nTime = max((int64_t)0, (int64_t)pinfo->nTime - nTimePenalty); nNew++; fNew = true; } @@ -368,7 +367,7 @@ bool CAddrMan::Add_(const CAddress &addr, const CNetAddr& source, int64 nTimePen return fNew; } -void CAddrMan::Attempt_(const CService &addr, int64 nTime) +void CAddrMan::Attempt_(const CService &addr, int64_t nTime) { CAddrInfo *pinfo = Find(addr); @@ -507,7 +506,7 @@ void CAddrMan::GetAddr_(std::vector &vAddr) } } -void CAddrMan::Connected_(const CService &addr, int64 nTime) +void CAddrMan::Connected_(const CService &addr, int64_t nTime) { CAddrInfo *pinfo = Find(addr); @@ -522,7 +521,7 @@ void CAddrMan::Connected_(const CService &addr, int64 nTime) return; // update info - int64 nUpdateInterval = 20 * 60; + int64_t nUpdateInterval = 20 * 60; if (nTime - info.nTime > nUpdateInterval) info.nTime = nTime; } diff --git a/src/addrman.h b/src/addrman.h index 3a6c740a..e2b0cb10 100644 --- a/src/addrman.h +++ b/src/addrman.h @@ -1,21 +1,22 @@ // Copyright (c) 2012 Pieter Wuille // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef _BITCOIN_ADDRMAN #define _BITCOIN_ADDRMAN 1 #include "netbase.h" #include "protocol.h" -#include "util.h" #include "sync.h" - +#include "util.h" #include +#include +#include #include #include - /** Extended statistics about a CAddress */ class CAddrInfo : public CAddress { @@ -24,10 +25,10 @@ private: CNetAddr source; // last successful connection by us - int64 nLastSuccess; + int64_t nLastSuccess; // last try whatsoever by us: - // int64 CAddress::nLastTry + // int64_t CAddress::nLastTry // connection attempts since last successful attempt int nAttempts; @@ -86,10 +87,10 @@ public: } // Determine whether the statistics about this entry are bad enough so that it can just be deleted - bool IsTerrible(int64 nNow = GetAdjustedTime()) const; + bool IsTerrible(int64_t nNow = GetAdjustedTime()) const; // Calculate the relative chance this entry should be given when selecting nodes to connect to - double GetChance(int64 nNow = GetAdjustedTime()) const; + double GetChance(int64_t nNow = GetAdjustedTime()) const; }; @@ -144,13 +145,13 @@ public: #define ADDRMAN_TRIED_ENTRIES_INSPECT_ON_EVICT 4 // how old addresses can maximally be -#define ADDRMAN_HORIZON_DAYS 60 +#define ADDRMAN_HORIZON_DAYS 30 // after how many failed attempts we give up on a new node #define ADDRMAN_RETRIES 3 // how many successive failures are allowed ... -#define ADDRMAN_MAX_FAILURES 20 +#define ADDRMAN_MAX_FAILURES 10 // ... in at least this many days #define ADDRMAN_MIN_FAIL_DAYS 7 @@ -220,13 +221,13 @@ protected: void MakeTried(CAddrInfo& info, int nId, int nOrigin); // Mark an entry "good", possibly moving it from "new" to "tried". - void Good_(const CService &addr, int64 nTime); + void Good_(const CService &addr, int64_t nTime); // Add an entry to the "new" table. - bool Add_(const CAddress &addr, const CNetAddr& source, int64 nTimePenalty); + bool Add_(const CAddress &addr, const CNetAddr& source, int64_t nTimePenalty); // Mark an entry as attempted to connect. - void Attempt_(const CService &addr, int64 nTime); + 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) @@ -241,7 +242,7 @@ protected: void GetAddr_(std::vector &vAddr); // Mark an entry as currently-connected-to. - void Connected_(const CService &addr, int64 nTime); + void Connected_(const CService &addr, int64_t nTime); public: @@ -403,13 +404,13 @@ public: LOCK(cs); int err; if ((err=Check_())) - printf("ADDRMAN CONSISTENCY CHECK FAILED!!! err=%i\n", err); + LogPrintf("ADDRMAN CONSISTENCY CHECK FAILED!!! err=%i\n", err); } #endif } // Add a single address. - bool Add(const CAddress &addr, const CNetAddr& source, int64 nTimePenalty = 0) + bool Add(const CAddress &addr, const CNetAddr& source, int64_t nTimePenalty = 0) { bool fRet = false; { @@ -419,12 +420,12 @@ public: Check(); } if (fRet) - printf("Added %s from %s: %i tried, %i new\n", addr.ToStringIPPort().c_str(), source.ToString().c_str(), nTried, nNew); + LogPrint("addrman", "Added %s from %s: %i tried, %i new\n", addr.ToStringIPPort().c_str(), source.ToString().c_str(), nTried, nNew); return fRet; } // Add multiple addresses. - bool Add(const std::vector &vAddr, const CNetAddr& source, int64 nTimePenalty = 0) + bool Add(const std::vector &vAddr, const CNetAddr& source, int64_t nTimePenalty = 0) { int nAdd = 0; { @@ -435,12 +436,12 @@ public: Check(); } if (nAdd) - printf("Added %i addresses from %s: %i tried, %i new\n", nAdd, source.ToString().c_str(), nTried, nNew); + LogPrint("addrman", "Added %i addresses from %s: %i tried, %i new\n", nAdd, source.ToString().c_str(), nTried, nNew); return nAdd > 0; } // Mark an entry as accessible. - void Good(const CService &addr, int64 nTime = GetAdjustedTime()) + void Good(const CService &addr, int64_t nTime = GetAdjustedTime()) { { LOCK(cs); @@ -451,7 +452,7 @@ public: } // Mark an entry as connection attempted to. - void Attempt(const CService &addr, int64 nTime = GetAdjustedTime()) + void Attempt(const CService &addr, int64_t nTime = GetAdjustedTime()) { { LOCK(cs); @@ -489,7 +490,7 @@ public: } // Mark an entry as currently-connected-to. - void Connected(const CService &addr, int64 nTime = GetAdjustedTime()) + void Connected(const CService &addr, int64_t nTime = GetAdjustedTime()) { { LOCK(cs); diff --git a/src/alert.cpp b/src/alert.cpp index e00847aa..99164d63 100644 --- a/src/alert.cpp +++ b/src/alert.cpp @@ -1,18 +1,22 @@ -// -// Alert system -// +// Copyright (c) 2010 Satoshi Nakamoto +// Copyright (c) 2009-2014 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. +#include "alert.h" + +#include "key.h" +#include "net.h" +#include "ui_interface.h" +#include "util.h" + +#include #include +#include + #include #include #include -#include - -#include "alert.h" -#include "key.h" -#include "net.h" -#include "sync.h" -#include "ui_interface.h" using namespace std; @@ -48,8 +52,8 @@ std::string CUnsignedAlert::ToString() const return strprintf( "CAlert(\n" " nVersion = %d\n" - " nRelayUntil = %"PRI64d"\n" - " nExpiration = %"PRI64d"\n" + " nRelayUntil = %d\n" + " nExpiration = %d\n" " nID = %d\n" " nCancel = %d\n" " setCancel = %s\n" @@ -65,18 +69,18 @@ std::string CUnsignedAlert::ToString() const nExpiration, nID, nCancel, - strSetCancel.c_str(), + strSetCancel, nMinVer, nMaxVer, - strSetSubVer.c_str(), + strSetSubVer, nPriority, - strComment.c_str(), - strStatusBar.c_str()); + strComment, + strStatusBar); } void CUnsignedAlert::print() const { - printf("%s", ToString().c_str()); + LogPrintf("%s", ToString()); } void CAlert::SetNull() @@ -200,13 +204,13 @@ bool CAlert::ProcessAlert(bool fThread) const CAlert& alert = (*mi).second; if (Cancels(alert)) { - printf("cancelling alert %d\n", alert.nID); + LogPrint("alert", "cancelling alert %d\n", alert.nID); uiInterface.NotifyAlertChanged((*mi).first, CT_DELETED); mapAlerts.erase(mi++); } else if (!alert.IsInEffect()) { - printf("expiring alert %d\n", alert.nID); + LogPrint("alert", "expiring alert %d\n", alert.nID); uiInterface.NotifyAlertChanged((*mi).first, CT_DELETED); mapAlerts.erase(mi++); } @@ -220,7 +224,7 @@ bool CAlert::ProcessAlert(bool fThread) const CAlert& alert = item.second; if (alert.Cancels(*this)) { - printf("alert already cancelled by %d\n", alert.nID); + LogPrint("alert", "alert already cancelled by %d\n", alert.nID); return false; } } @@ -238,15 +242,7 @@ bool CAlert::ProcessAlert(bool fThread) // be safe we first strip anything not in safeChars, then add single quotes around // the whole string before passing it to the shell: std::string singleQuote("'"); - // safeChars chosen to allow simple messages/URLs/email addresses, but avoid anything - // even possibly remotely dangerous like & or > - std::string safeChars("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890 .,;_/:?@"); - std::string safeStatus; - for (std::string::size_type i = 0; i < strStatusBar.size(); i++) - { - if (safeChars.find(strStatusBar[i]) != std::string::npos) - safeStatus.push_back(strStatusBar[i]); - } + std::string safeStatus = SanitizeString(strStatusBar); safeStatus = singleQuote+safeStatus+singleQuote; boost::replace_all(strCmd, "%s", safeStatus); @@ -258,6 +254,6 @@ bool CAlert::ProcessAlert(bool fThread) } } - printf("accepted alert %d, AppliesToMe()=%d\n", nID, AppliesToMe()); + LogPrint("alert", "accepted alert %d, AppliesToMe()=%d\n", nID, AppliesToMe()); return true; } diff --git a/src/alert.h b/src/alert.h index 25e140f5..da140be5 100644 --- a/src/alert.h +++ b/src/alert.h @@ -1,18 +1,25 @@ // Copyright (c) 2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2013 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #ifndef _BITCOINALERT_H_ #define _BITCOINALERT_H_ 1 +#include "serialize.h" +#include "sync.h" + +#include #include +#include #include -#include "uint256.h" -#include "util.h" - +class CAlert; class CNode; +class uint256; + +extern std::map mapAlerts; +extern CCriticalSection cs_mapAlerts; /** Alerts are for notifying old versions if they become too obsolete and * need to upgrade. The message is displayed in the status bar. @@ -24,8 +31,8 @@ class CUnsignedAlert { public: int nVersion; - int64 nRelayUntil; // when newer nodes stop relaying to newer nodes - int64 nExpiration; + int64_t nRelayUntil; // when newer nodes stop relaying to newer nodes + int64_t nExpiration; int nID; int nCancel; std::set setCancel; diff --git a/src/allocators.cpp b/src/allocators.cpp new file mode 100644 index 00000000..15f34aa2 --- /dev/null +++ b/src/allocators.cpp @@ -0,0 +1,67 @@ +// Copyright (c) 2009-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "allocators.h" + +#ifdef WIN32 +#ifdef _WIN32_WINNT +#undef _WIN32_WINNT +#endif +#define _WIN32_WINNT 0x0501 +#define WIN32_LEAN_AND_MEAN 1 +#ifndef NOMINMAX +#define NOMINMAX +#endif +#include +// This is used to attempt to keep keying material out of swap +// Note that VirtualLock does not provide this as a guarantee on Windows, +// but, in practice, memory that has been VirtualLock'd almost never gets written to +// the pagefile except in rare circumstances where memory is extremely low. +#else +#include +#include // for PAGESIZE +#include // for sysconf +#endif + +LockedPageManager* LockedPageManager::_instance = NULL; +boost::once_flag LockedPageManager::init_flag = BOOST_ONCE_INIT; + +/** Determine system page size in bytes */ +static inline size_t GetSystemPageSize() +{ + size_t page_size; +#if defined(WIN32) + SYSTEM_INFO sSysInfo; + GetSystemInfo(&sSysInfo); + page_size = sSysInfo.dwPageSize; +#elif defined(PAGESIZE) // defined in limits.h + page_size = PAGESIZE; +#else // assume some POSIX OS + page_size = sysconf(_SC_PAGESIZE); +#endif + return page_size; +} + +bool MemoryPageLocker::Lock(const void *addr, size_t len) +{ +#ifdef WIN32 + return VirtualLock(const_cast(addr), len); +#else + return mlock(addr, len) == 0; +#endif +} + +bool MemoryPageLocker::Unlock(const void *addr, size_t len) +{ +#ifdef WIN32 + return VirtualUnlock(const_cast(addr), len); +#else + return munlock(addr, len) == 0; +#endif +} + +LockedPageManager::LockedPageManager() : LockedPageManagerBase(GetSystemPageSize()) +{ +} + diff --git a/src/allocators.h b/src/allocators.h index 85af8fe3..7012ef7e 100644 --- a/src/allocators.h +++ b/src/allocators.h @@ -1,35 +1,18 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2013 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef BITCOIN_ALLOCATORS_H #define BITCOIN_ALLOCATORS_H -#include -#include -#include #include -#include // for OPENSSL_cleanse() +#include +#include -#ifdef WIN32 -#ifdef _WIN32_WINNT -#undef _WIN32_WINNT -#endif -#define _WIN32_WINNT 0x0501 -#define WIN32_LEAN_AND_MEAN 1 -#ifndef NOMINMAX -#define NOMINMAX -#endif -#include -// This is used to attempt to keep keying material out of swap -// Note that VirtualLock does not provide this as a guarantee on Windows, -// but, in practice, memory that has been VirtualLock'd almost never gets written to -// the pagefile except in rare circumstances where memory is extremely low. -#else -#include -#include // for PAGESIZE -#include // for sysconf -#endif +#include +#include +#include // for OPENSSL_cleanse() /** * Thread-safe class to keep track of locked (ie, non-swappable) memory pages. @@ -53,6 +36,12 @@ public: page_mask = ~(page_size - 1); } + ~LockedPageManagerBase() + { + assert(this->GetLockedPageCount() == 0); + } + + // For all pages in affected range, increase lock count void LockRange(void *p, size_t size) { @@ -115,21 +104,6 @@ private: Histogram histogram; }; -/** Determine system page size in bytes */ -static inline size_t GetSystemPageSize() -{ - size_t page_size; -#if defined(WIN32) - SYSTEM_INFO sSysInfo; - GetSystemInfo(&sSysInfo); - page_size = sSysInfo.dwPageSize; -#elif defined(PAGESIZE) // defined in limits.h - page_size = PAGESIZE; -#else // assume some POSIX OS - page_size = sysconf(_SC_PAGESIZE); -#endif - return page_size; -} /** * OS-dependent memory page locking/unlocking. @@ -141,39 +115,49 @@ public: /** Lock memory pages. * addr and len must be a multiple of the system page size */ - bool Lock(const void *addr, size_t len) - { -#ifdef WIN32 - return VirtualLock(const_cast(addr), len); -#else - return mlock(addr, len) == 0; -#endif - } + bool Lock(const void *addr, size_t len); /** Unlock memory pages. * addr and len must be a multiple of the system page size */ - bool Unlock(const void *addr, size_t len) - { -#ifdef WIN32 - return VirtualUnlock(const_cast(addr), len); -#else - return munlock(addr, len) == 0; -#endif - } + bool Unlock(const void *addr, size_t len); }; /** * Singleton class to keep track of locked (ie, non-swappable) memory pages, for use in * std::allocator templates. + * + * Some implementations of the STL allocate memory in some constructors (i.e., see + * MSVC's vector implementation where it allocates 1 byte of memory in the allocator.) + * Due to the unpredictable order of static initializers, we have to make sure the + * LockedPageManager instance exists before any other STL-based objects that use + * secure_allocator are created. So instead of having LockedPageManager also be + * static-intialized, it is created on demand. */ class LockedPageManager: public LockedPageManagerBase { public: - static LockedPageManager instance; // instantiated in util.cpp + static LockedPageManager& Instance() + { + boost::call_once(LockedPageManager::CreateInstance, LockedPageManager::init_flag); + return *LockedPageManager::_instance; + } + private: - LockedPageManager(): - LockedPageManagerBase(GetSystemPageSize()) - {} + LockedPageManager(); + + static void CreateInstance() + { + // Using a local static instance guarantees that the object is initialized + // when it's first needed and also deinitialized after all objects that use + // it are done with it. I can think of one unlikely scenario where we may + // have a static deinitialization order/problem, but the check in + // LockedPageManagerBase's destructor helps us detect if that ever happens. + static LockedPageManager instance; + LockedPageManager::_instance = &instance; + } + + static LockedPageManager* _instance; + static boost::once_flag init_flag; }; // @@ -181,12 +165,12 @@ private: // Intended for non-dynamically allocated structures. // template void LockObject(const T &t) { - LockedPageManager::instance.LockRange((void*)(&t), sizeof(T)); + LockedPageManager::Instance().LockRange((void*)(&t), sizeof(T)); } template void UnlockObject(const T &t) { OPENSSL_cleanse((void*)(&t), sizeof(T)); - LockedPageManager::instance.UnlockRange((void*)(&t), sizeof(T)); + LockedPageManager::Instance().UnlockRange((void*)(&t), sizeof(T)); } // @@ -218,7 +202,7 @@ struct secure_allocator : public std::allocator T *p; p = std::allocator::allocate(n, hint); if (p != NULL) - LockedPageManager::instance.LockRange(p, sizeof(T) * n); + LockedPageManager::Instance().LockRange(p, sizeof(T) * n); return p; } @@ -227,7 +211,7 @@ struct secure_allocator : public std::allocator if (p != NULL) { OPENSSL_cleanse(p, sizeof(T) * n); - LockedPageManager::instance.UnlockRange(p, sizeof(T) * n); + LockedPageManager::Instance().UnlockRange(p, sizeof(T) * n); } std::allocator::deallocate(p, n); } diff --git a/src/base58.cpp b/src/base58.cpp new file mode 100644 index 00000000..59757038 --- /dev/null +++ b/src/base58.cpp @@ -0,0 +1,274 @@ +// Copyright (c) 2014 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "base58.h" + +#include "hash.h" +#include "uint256.h" + +#include +#include +#include +#include +#include +#include +#include + +/* All alphanumeric characters except for "0", "I", "O", and "l" */ +static const char* pszBase58 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; + +bool DecodeBase58(const char *psz, std::vector& vch) { + // Skip leading spaces. + while (*psz && isspace(*psz)) + psz++; + // Skip and count leading '1's. + int zeroes = 0; + while (*psz == '1') { + zeroes++; + psz++; + } + // Allocate enough space in big-endian base256 representation. + std::vector b256(strlen(psz) * 733 / 1000 + 1); // log(58) / log(256), rounded up. + // Process the characters. + while (*psz && !isspace(*psz)) { + // Decode base58 character + const char *ch = strchr(pszBase58, *psz); + if (ch == NULL) + return false; + // Apply "b256 = b256 * 58 + ch". + int carry = ch - pszBase58; + for (std::vector::reverse_iterator it = b256.rbegin(); it != b256.rend(); it++) { + carry += 58 * (*it); + *it = carry % 256; + carry /= 256; + } + assert(carry == 0); + psz++; + } + // Skip trailing spaces. + while (isspace(*psz)) + psz++; + if (*psz != 0) + return false; + // Skip leading zeroes in b256. + std::vector::iterator it = b256.begin(); + while (it != b256.end() && *it == 0) + it++; + // Copy result into output vector. + vch.reserve(zeroes + (b256.end() - it)); + vch.assign(zeroes, 0x00); + while (it != b256.end()) + vch.push_back(*(it++)); + return true; +} + +std::string EncodeBase58(const unsigned char* pbegin, const unsigned char* pend) { + // Skip & count leading zeroes. + int zeroes = 0; + while (pbegin != pend && *pbegin == 0) { + pbegin++; + zeroes++; + } + // Allocate enough space in big-endian base58 representation. + std::vector b58((pend - pbegin) * 138 / 100 + 1); // log(256) / log(58), rounded up. + // Process the bytes. + while (pbegin != pend) { + int carry = *pbegin; + // Apply "b58 = b58 * 256 + ch". + for (std::vector::reverse_iterator it = b58.rbegin(); it != b58.rend(); it++) { + carry += 256 * (*it); + *it = carry % 58; + carry /= 58; + } + assert(carry == 0); + pbegin++; + } + // Skip leading zeroes in base58 result. + std::vector::iterator it = b58.begin(); + while (it != b58.end() && *it == 0) + it++; + // Translate the result into a string. + std::string str; + str.reserve(zeroes + (b58.end() - it)); + str.assign(zeroes, '1'); + while (it != b58.end()) + str += pszBase58[*(it++)]; + return str; +} + +std::string EncodeBase58(const std::vector& vch) { + return EncodeBase58(&vch[0], &vch[0] + vch.size()); +} + +bool DecodeBase58(const std::string& str, std::vector& vchRet) { + return DecodeBase58(str.c_str(), vchRet); +} + +std::string EncodeBase58Check(const std::vector& vchIn) { + // add 4-byte hash check to the end + std::vector vch(vchIn); + uint256 hash = Hash(vch.begin(), vch.end()); + vch.insert(vch.end(), (unsigned char*)&hash, (unsigned char*)&hash + 4); + return EncodeBase58(vch); +} + +bool DecodeBase58Check(const char* psz, std::vector& vchRet) { + if (!DecodeBase58(psz, vchRet)) + return false; + if (vchRet.size() < 4) + { + vchRet.clear(); + return false; + } + // re-calculate the checksum, insure it matches the included 4-byte checksum + uint256 hash = Hash(vchRet.begin(), vchRet.end()-4); + if (memcmp(&hash, &vchRet.end()[-4], 4) != 0) + { + vchRet.clear(); + return false; + } + vchRet.resize(vchRet.size()-4); + return true; +} + +bool DecodeBase58Check(const std::string& str, std::vector& vchRet) { + return DecodeBase58Check(str.c_str(), vchRet); +} + +CBase58Data::CBase58Data() { + vchVersion.clear(); + vchData.clear(); +} + +void CBase58Data::SetData(const std::vector &vchVersionIn, const void* pdata, size_t nSize) { + vchVersion = vchVersionIn; + vchData.resize(nSize); + if (!vchData.empty()) + memcpy(&vchData[0], pdata, nSize); +} + +void CBase58Data::SetData(const std::vector &vchVersionIn, const unsigned char *pbegin, const unsigned char *pend) { + SetData(vchVersionIn, (void*)pbegin, pend - pbegin); +} + +bool CBase58Data::SetString(const char* psz, unsigned int nVersionBytes) { + std::vector vchTemp; + DecodeBase58Check(psz, vchTemp); + if (vchTemp.size() < nVersionBytes) { + vchData.clear(); + vchVersion.clear(); + return false; + } + vchVersion.assign(vchTemp.begin(), vchTemp.begin() + nVersionBytes); + vchData.resize(vchTemp.size() - nVersionBytes); + if (!vchData.empty()) + memcpy(&vchData[0], &vchTemp[nVersionBytes], vchData.size()); + OPENSSL_cleanse(&vchTemp[0], vchData.size()); + return true; +} + +bool CBase58Data::SetString(const std::string& str) { + return SetString(str.c_str()); +} + +std::string CBase58Data::ToString() const { + std::vector vch = vchVersion; + vch.insert(vch.end(), vchData.begin(), vchData.end()); + return EncodeBase58Check(vch); +} + +int CBase58Data::CompareTo(const CBase58Data& b58) const { + if (vchVersion < b58.vchVersion) return -1; + if (vchVersion > b58.vchVersion) return 1; + if (vchData < b58.vchData) return -1; + if (vchData > b58.vchData) return 1; + return 0; +} + +namespace { + class CBitcoinAddressVisitor : public boost::static_visitor { + private: + CBitcoinAddress *addr; + public: + CBitcoinAddressVisitor(CBitcoinAddress *addrIn) : addr(addrIn) { } + + bool operator()(const CKeyID &id) const { return addr->Set(id); } + bool operator()(const CScriptID &id) const { return addr->Set(id); } + bool operator()(const CNoDestination &no) const { return false; } + }; +}; + +bool CBitcoinAddress::Set(const CKeyID &id) { + SetData(Params().Base58Prefix(CChainParams::PUBKEY_ADDRESS), &id, 20); + return true; +} + +bool CBitcoinAddress::Set(const CScriptID &id) { + SetData(Params().Base58Prefix(CChainParams::SCRIPT_ADDRESS), &id, 20); + return true; +} + +bool CBitcoinAddress::Set(const CTxDestination &dest) { + return boost::apply_visitor(CBitcoinAddressVisitor(this), dest); +} + +bool CBitcoinAddress::IsValid() const { + bool fCorrectSize = vchData.size() == 20; + bool fKnownVersion = vchVersion == Params().Base58Prefix(CChainParams::PUBKEY_ADDRESS) || + vchVersion == Params().Base58Prefix(CChainParams::SCRIPT_ADDRESS); + return fCorrectSize && fKnownVersion; +} + +CTxDestination CBitcoinAddress::Get() const { + if (!IsValid()) + return CNoDestination(); + uint160 id; + memcpy(&id, &vchData[0], 20); + if (vchVersion == Params().Base58Prefix(CChainParams::PUBKEY_ADDRESS)) + return CKeyID(id); + else if (vchVersion == Params().Base58Prefix(CChainParams::SCRIPT_ADDRESS)) + return CScriptID(id); + else + return CNoDestination(); +} + +bool CBitcoinAddress::GetKeyID(CKeyID &keyID) const { + if (!IsValid() || vchVersion != Params().Base58Prefix(CChainParams::PUBKEY_ADDRESS)) + return false; + uint160 id; + memcpy(&id, &vchData[0], 20); + keyID = CKeyID(id); + return true; +} + +bool CBitcoinAddress::IsScript() const { + return IsValid() && vchVersion == Params().Base58Prefix(CChainParams::SCRIPT_ADDRESS); +} + +void CBitcoinSecret::SetKey(const CKey& vchSecret) { + assert(vchSecret.IsValid()); + SetData(Params().Base58Prefix(CChainParams::SECRET_KEY), vchSecret.begin(), vchSecret.size()); + if (vchSecret.IsCompressed()) + vchData.push_back(1); +} + +CKey CBitcoinSecret::GetKey() { + CKey ret; + ret.Set(&vchData[0], &vchData[32], vchData.size() > 32 && vchData[32] == 1); + return ret; +} + +bool CBitcoinSecret::IsValid() const { + bool fExpectedFormat = vchData.size() == 32 || (vchData.size() == 33 && vchData[32] == 1); + bool fCorrectVersion = vchVersion == Params().Base58Prefix(CChainParams::SECRET_KEY); + return fExpectedFormat && fCorrectVersion; +} + +bool CBitcoinSecret::SetString(const char* pszSecret) { + return CBase58Data::SetString(pszSecret) && IsValid(); +} + +bool CBitcoinSecret::SetString(const std::string& strSecret) { + return SetString(strSecret.c_str()); +} diff --git a/src/base58.h b/src/base58.h index 630d6fe9..70681f58 100644 --- a/src/base58.h +++ b/src/base58.h @@ -1,9 +1,8 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin Developers +// Copyright (c) 2009-2013 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. - // // Why base-58 instead of standard base-64 encoding? // - Don't want 0OIl characters that look the same in some fonts and @@ -15,233 +14,76 @@ #ifndef BITCOIN_BASE58_H #define BITCOIN_BASE58_H +#include "chainparams.h" +#include "key.h" +#include "script.h" + #include #include -#include "chainparams.h" -#include "bignum.h" -#include "key.h" -#include "script.h" -#include "allocators.h" +/** + * Encode a byte sequence as a base58-encoded string. + * pbegin and pend cannot be NULL, unless both are. + */ +std::string EncodeBase58(const unsigned char* pbegin, const unsigned char* pend); -static const char* pszBase58 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; +/** + * Encode a byte vector as a base58-encoded string + */ +std::string EncodeBase58(const std::vector& vch); -// Encode a byte sequence as a base58-encoded string -inline std::string EncodeBase58(const unsigned char* pbegin, const unsigned char* pend) -{ - CAutoBN_CTX pctx; - CBigNum bn58 = 58; - CBigNum bn0 = 0; +/** + * Decode a base58-encoded string (psz) into a byte vector (vchRet). + * return true if decoding is successful. + * psz cannot be NULL. + */ +bool DecodeBase58(const char* psz, std::vector& vchRet); - // Convert big endian data to little endian - // Extra zero at the end make sure bignum will interpret as a positive number - std::vector vchTmp(pend-pbegin+1, 0); - reverse_copy(pbegin, pend, vchTmp.begin()); +/** + * Decode a base58-encoded string (str) into a byte vector (vchRet). + * return true if decoding is successful. + */ +bool DecodeBase58(const std::string& str, std::vector& vchRet); - // Convert little endian data to bignum - CBigNum bn; - bn.setvch(vchTmp); +/** + * Encode a byte vector into a base58-encoded string, including checksum + */ +std::string EncodeBase58Check(const std::vector& vchIn); - // Convert bignum to std::string - std::string str; - // Expected size increase from base58 conversion is approximately 137% - // use 138% to be safe - str.reserve((pend - pbegin) * 138 / 100 + 1); - CBigNum dv; - CBigNum rem; - while (bn > bn0) - { - if (!BN_div(&dv, &rem, &bn, &bn58, pctx)) - throw bignum_error("EncodeBase58 : BN_div failed"); - bn = dv; - unsigned int c = rem.getulong(); - str += pszBase58[c]; - } +/** + * Decode a base58-encoded string (psz) that includes a checksum into a byte + * vector (vchRet), return true if decoding is successful + */ +inline bool DecodeBase58Check(const char* psz, std::vector& vchRet); - // Leading zeroes encoded as base58 zeros - for (const unsigned char* p = pbegin; p < pend && *p == 0; p++) - str += pszBase58[0]; +/** + * Decode a base58-encoded string (str) that includes a checksum into a byte + * vector (vchRet), return true if decoding is successful + */ +inline bool DecodeBase58Check(const std::string& str, std::vector& vchRet); - // Convert little endian std::string to big endian - reverse(str.begin(), str.end()); - return str; -} - -// Encode a byte vector as a base58-encoded string -inline std::string EncodeBase58(const std::vector& vch) -{ - return EncodeBase58(&vch[0], &vch[0] + vch.size()); -} - -// Decode a base58-encoded string psz into byte vector vchRet -// returns true if decoding is successful -inline bool DecodeBase58(const char* psz, std::vector& vchRet) -{ - CAutoBN_CTX pctx; - vchRet.clear(); - CBigNum bn58 = 58; - CBigNum bn = 0; - CBigNum bnChar; - while (isspace(*psz)) - psz++; - - // Convert big endian string to bignum - for (const char* p = psz; *p; p++) - { - const char* p1 = strchr(pszBase58, *p); - if (p1 == NULL) - { - while (isspace(*p)) - p++; - if (*p != '\0') - return false; - break; - } - bnChar.setulong(p1 - pszBase58); - if (!BN_mul(&bn, &bn, &bn58, pctx)) - throw bignum_error("DecodeBase58 : BN_mul failed"); - bn += bnChar; - } - - // Get bignum as little endian data - std::vector vchTmp = bn.getvch(); - - // Trim off sign byte if present - if (vchTmp.size() >= 2 && vchTmp.end()[-1] == 0 && vchTmp.end()[-2] >= 0x80) - vchTmp.erase(vchTmp.end()-1); - - // Restore leading zeros - int nLeadingZeros = 0; - for (const char* p = psz; *p == pszBase58[0]; p++) - nLeadingZeros++; - vchRet.assign(nLeadingZeros + vchTmp.size(), 0); - - // Convert little endian data to big endian - reverse_copy(vchTmp.begin(), vchTmp.end(), vchRet.end() - vchTmp.size()); - return true; -} - -// Decode a base58-encoded string str into byte vector vchRet -// returns true if decoding is successful -inline bool DecodeBase58(const std::string& str, std::vector& vchRet) -{ - return DecodeBase58(str.c_str(), vchRet); -} - - - - -// Encode a byte vector to a base58-encoded string, including checksum -inline std::string EncodeBase58Check(const std::vector& vchIn) -{ - // add 4-byte hash check to the end - std::vector vch(vchIn); - uint256 hash = Hash(vch.begin(), vch.end()); - vch.insert(vch.end(), (unsigned char*)&hash, (unsigned char*)&hash + 4); - return EncodeBase58(vch); -} - -// Decode a base58-encoded string psz that includes a checksum, into byte vector vchRet -// returns true if decoding is successful -inline bool DecodeBase58Check(const char* psz, std::vector& vchRet) -{ - if (!DecodeBase58(psz, vchRet)) - return false; - if (vchRet.size() < 4) - { - vchRet.clear(); - return false; - } - uint256 hash = Hash(vchRet.begin(), vchRet.end()-4); - if (memcmp(&hash, &vchRet.end()[-4], 4) != 0) - { - vchRet.clear(); - return false; - } - vchRet.resize(vchRet.size()-4); - return true; -} - -// Decode a base58-encoded string str that includes a checksum, into byte vector vchRet -// returns true if decoding is successful -inline bool DecodeBase58Check(const std::string& str, std::vector& vchRet) -{ - return DecodeBase58Check(str.c_str(), vchRet); -} - - - - - -/** Base class for all base58-encoded data */ +/** + * Base class for all base58-encoded data + */ class CBase58Data { protected: - // the version byte - unsigned char nVersion; + // the version byte(s) + std::vector vchVersion; // the actually encoded data typedef std::vector > vector_uchar; vector_uchar vchData; - CBase58Data() - { - nVersion = 0; - vchData.clear(); - } - - void SetData(int nVersionIn, const void* pdata, size_t nSize) - { - nVersion = nVersionIn; - vchData.resize(nSize); - if (!vchData.empty()) - memcpy(&vchData[0], pdata, nSize); - } - - void SetData(int nVersionIn, const unsigned char *pbegin, const unsigned char *pend) - { - SetData(nVersionIn, (void*)pbegin, pend - pbegin); - } + CBase58Data(); + void SetData(const std::vector &vchVersionIn, const void* pdata, size_t nSize); + void SetData(const std::vector &vchVersionIn, const unsigned char *pbegin, const unsigned char *pend); public: - bool SetString(const char* psz) - { - std::vector vchTemp; - DecodeBase58Check(psz, vchTemp); - if (vchTemp.empty()) - { - vchData.clear(); - nVersion = 0; - return false; - } - nVersion = vchTemp[0]; - vchData.resize(vchTemp.size() - 1); - if (!vchData.empty()) - memcpy(&vchData[0], &vchTemp[1], vchData.size()); - OPENSSL_cleanse(&vchTemp[0], vchData.size()); - return true; - } - - bool SetString(const std::string& str) - { - return SetString(str.c_str()); - } - - std::string ToString() const - { - std::vector vch(1, nVersion); - vch.insert(vch.end(), vchData.begin(), vchData.end()); - return EncodeBase58Check(vch); - } - - int CompareTo(const CBase58Data& b58) const - { - if (nVersion < b58.nVersion) return -1; - if (nVersion > b58.nVersion) return 1; - if (vchData < b58.vchData) return -1; - if (vchData > b58.vchData) return 1; - return 0; - } + bool SetString(const char* psz, unsigned int nVersionBytes = 1); + bool SetString(const std::string& str); + std::string ToString() const; + int CompareTo(const CBase58Data& b58) const; bool operator==(const CBase58Data& b58) const { return CompareTo(b58) == 0; } bool operator<=(const CBase58Data& b58) const { return CompareTo(b58) <= 0; } @@ -256,138 +98,62 @@ public: * Script-hash-addresses have version 5 (or 196 testnet). * The data vector contains RIPEMD160(SHA256(cscript)), where cscript is the serialized redemption script. */ -class CBitcoinAddress; -class CBitcoinAddressVisitor : public boost::static_visitor -{ -private: - CBitcoinAddress *addr; +class CBitcoinAddress : public CBase58Data { public: - CBitcoinAddressVisitor(CBitcoinAddress *addrIn) : addr(addrIn) { } - bool operator()(const CKeyID &id) const; - bool operator()(const CScriptID &id) const; - bool operator()(const CNoDestination &no) const; + bool Set(const CKeyID &id); + bool Set(const CScriptID &id); + bool Set(const CTxDestination &dest); + bool IsValid() const; + + CBitcoinAddress() {} + CBitcoinAddress(const CTxDestination &dest) { Set(dest); } + CBitcoinAddress(const std::string& strAddress) { SetString(strAddress); } + CBitcoinAddress(const char* pszAddress) { SetString(pszAddress); } + + CTxDestination Get() const; + bool GetKeyID(CKeyID &keyID) const; + bool IsScript() const; }; -class CBitcoinAddress : public CBase58Data -{ -public: - bool Set(const CKeyID &id) { - SetData(Params().Base58Prefix(CChainParams::PUBKEY_ADDRESS), &id, 20); - return true; - } - - bool Set(const CScriptID &id) { - SetData(Params().Base58Prefix(CChainParams::SCRIPT_ADDRESS), &id, 20); - return true; - } - - bool Set(const CTxDestination &dest) - { - return boost::apply_visitor(CBitcoinAddressVisitor(this), dest); - } - - bool IsValid() const - { - bool fCorrectSize = vchData.size() == 20; - bool fKnownVersion = nVersion == Params().Base58Prefix(CChainParams::PUBKEY_ADDRESS) || - nVersion == Params().Base58Prefix(CChainParams::SCRIPT_ADDRESS); - return fCorrectSize && fKnownVersion; - } - - CBitcoinAddress() - { - } - - CBitcoinAddress(const CTxDestination &dest) - { - Set(dest); - } - - CBitcoinAddress(const std::string& strAddress) - { - SetString(strAddress); - } - - CBitcoinAddress(const char* pszAddress) - { - SetString(pszAddress); - } - - CTxDestination Get() const { - if (!IsValid()) - return CNoDestination(); - uint160 id; - memcpy(&id, &vchData[0], 20); - if (nVersion == Params().Base58Prefix(CChainParams::PUBKEY_ADDRESS)) - return CKeyID(id); - else if (nVersion == Params().Base58Prefix(CChainParams::SCRIPT_ADDRESS)) - return CScriptID(id); - else - return CNoDestination(); - } - - bool GetKeyID(CKeyID &keyID) const { - if (!IsValid() || nVersion != Params().Base58Prefix(CChainParams::PUBKEY_ADDRESS)) - return false; - uint160 id; - memcpy(&id, &vchData[0], 20); - keyID = CKeyID(id); - return true; - } - - bool IsScript() const { - return IsValid() && nVersion == Params().Base58Prefix(CChainParams::SCRIPT_ADDRESS); - } -}; - -bool inline CBitcoinAddressVisitor::operator()(const CKeyID &id) const { return addr->Set(id); } -bool inline CBitcoinAddressVisitor::operator()(const CScriptID &id) const { return addr->Set(id); } -bool inline CBitcoinAddressVisitor::operator()(const CNoDestination &id) const { return false; } - -/** A base58-encoded secret key */ +/** + * A base58-encoded secret key + */ class CBitcoinSecret : public CBase58Data { public: - void SetKey(const CKey& vchSecret) - { - assert(vchSecret.IsValid()); - SetData(Params().Base58Prefix(CChainParams::SECRET_KEY), vchSecret.begin(), vchSecret.size()); - if (vchSecret.IsCompressed()) - vchData.push_back(1); + void SetKey(const CKey& vchSecret); + CKey GetKey(); + bool IsValid() const; + bool SetString(const char* pszSecret); + bool SetString(const std::string& strSecret); + + CBitcoinSecret(const CKey& vchSecret) { SetKey(vchSecret); } + CBitcoinSecret() {} +}; + +template class CBitcoinExtKeyBase : public CBase58Data +{ +public: + void SetKey(const K &key) { + unsigned char vch[Size]; + key.Encode(vch); + SetData(Params().Base58Prefix(Type), vch, vch+Size); } - CKey GetKey() - { - CKey ret; - ret.Set(&vchData[0], &vchData[32], vchData.size() > 32 && vchData[32] == 1); + K GetKey() { + K ret; + ret.Decode(&vchData[0], &vchData[Size]); return ret; } - bool IsValid() const - { - bool fExpectedFormat = vchData.size() == 32 || (vchData.size() == 33 && vchData[32] == 1); - bool fCorrectVersion = nVersion == Params().Base58Prefix(CChainParams::SECRET_KEY); - return fExpectedFormat && fCorrectVersion; + CBitcoinExtKeyBase(const K &key) { + SetKey(key); } - bool SetString(const char* pszSecret) - { - return CBase58Data::SetString(pszSecret) && IsValid(); - } - - bool SetString(const std::string& strSecret) - { - return SetString(strSecret.c_str()); - } - - CBitcoinSecret(const CKey& vchSecret) - { - SetKey(vchSecret); - } - - CBitcoinSecret() - { - } + CBitcoinExtKeyBase() {} }; +typedef CBitcoinExtKeyBase CBitcoinExtKey; +typedef CBitcoinExtKeyBase CBitcoinExtPubKey; + #endif // BITCOIN_BASE58_H diff --git a/src/bignum.h b/src/bignum.h index 0881807d..0259338b 100644 --- a/src/bignum.h +++ b/src/bignum.h @@ -1,15 +1,20 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2013 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef BITCOIN_BIGNUM_H #define BITCOIN_BIGNUM_H -#include -#include -#include +#include "serialize.h" +#include "uint256.h" +#include "version.h" -#include "util.h" // for uint64 +#include +#include +#include + +#include /** Errors thrown by the bignum class */ class bignum_error : public std::runtime_error @@ -79,17 +84,17 @@ public: } //CBigNum(char n) is not portable. Use 'signed char' or 'unsigned char'. - CBigNum(signed char n) { BN_init(this); if (n >= 0) setulong(n); else setint64(n); } - CBigNum(short n) { BN_init(this); if (n >= 0) setulong(n); else setint64(n); } - CBigNum(int n) { BN_init(this); if (n >= 0) setulong(n); else setint64(n); } - CBigNum(long n) { BN_init(this); if (n >= 0) setulong(n); else setint64(n); } - CBigNum(int64 n) { BN_init(this); setint64(n); } - CBigNum(unsigned char n) { BN_init(this); setulong(n); } - CBigNum(unsigned short n) { BN_init(this); setulong(n); } - CBigNum(unsigned int n) { BN_init(this); setulong(n); } - CBigNum(unsigned long n) { BN_init(this); setulong(n); } - CBigNum(uint64 n) { BN_init(this); setuint64(n); } - explicit CBigNum(uint256 n) { BN_init(this); setuint256(n); } + CBigNum(signed char n) { BN_init(this); if (n >= 0) setulong(n); else setint64(n); } + CBigNum(short n) { BN_init(this); if (n >= 0) setulong(n); else setint64(n); } + CBigNum(int n) { BN_init(this); if (n >= 0) setulong(n); else setint64(n); } + CBigNum(long n) { BN_init(this); if (n >= 0) setulong(n); else setint64(n); } + CBigNum(long long n) { BN_init(this); setint64(n); } + CBigNum(unsigned char n) { BN_init(this); setulong(n); } + CBigNum(unsigned short n) { BN_init(this); setulong(n); } + CBigNum(unsigned int n) { BN_init(this); setulong(n); } + CBigNum(unsigned long n) { BN_init(this); setulong(n); } + CBigNum(unsigned long long n) { BN_init(this); setuint64(n); } + explicit CBigNum(uint256 n) { BN_init(this); setuint256(n); } explicit CBigNum(const std::vector& vch) { @@ -122,14 +127,14 @@ public: return (n > (unsigned long)std::numeric_limits::max() ? std::numeric_limits::min() : -(int)n); } - void setint64(int64 sn) + void setint64(int64_t sn) { unsigned char pch[sizeof(sn) + 6]; unsigned char* p = pch + 4; bool fNegative; - uint64 n; + uint64_t n; - if (sn < (int64)0) + if (sn < (int64_t)0) { // Since the minimum signed integer cannot be represented as positive so long as its type is signed, // and it's not well-defined what happens if you make it unsigned before negating it, @@ -167,7 +172,7 @@ public: BN_mpi2bn(pch, p - pch, this); } - void setuint64(uint64 n) + void setuint64(uint64_t n) { unsigned char pch[sizeof(n) + 6]; unsigned char* p = pch + 4; @@ -347,13 +352,13 @@ public: psz++; // hex string to bignum - static const signed char phexdigit[256] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0, 0,0xa,0xb,0xc,0xd,0xe,0xf,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0xa,0xb,0xc,0xd,0xe,0xf,0,0,0,0,0,0,0,0,0 }; *this = 0; - while (isxdigit(*psz)) + int n; + while ((n = HexDigit(*psz)) != -1) { *this <<= 4; - int n = phexdigit[(unsigned char)*psz++]; *this += n; + ++psz; } if (fNegative) *this = 0 - *this; diff --git a/src/bitcoin-cli.cpp b/src/bitcoin-cli.cpp new file mode 100644 index 00000000..f94e17a3 --- /dev/null +++ b/src/bitcoin-cli.cpp @@ -0,0 +1,87 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Copyright (c) 2009-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "util.h" +#include "init.h" +#include "rpcclient.h" +#include "rpcprotocol.h" +#include "ui_interface.h" /* for _(...) */ +#include "chainparams.h" + +#include + +////////////////////////////////////////////////////////////////////////////// +// +// Start +// +static bool AppInitRPC(int argc, char* argv[]) +{ + // + // Parameters + // + ParseParameters(argc, argv); + if (!boost::filesystem::is_directory(GetDataDir(false))) + { + fprintf(stderr, "Error: Specified data directory \"%s\" does not exist.\n", mapArgs["-datadir"].c_str()); + return false; + } + try { + ReadConfigFile(mapArgs, mapMultiArgs); + } catch(std::exception &e) { + fprintf(stderr,"Error reading configuration file: %s\n", e.what()); + return false; + } + // Check for -testnet or -regtest parameter (TestNet() calls are only valid after this clause) + if (!SelectParamsFromCommandLine()) { + fprintf(stderr, "Error: Invalid combination of -regtest and -testnet.\n"); + return false; + } + + if (argc<2 || mapArgs.count("-?") || mapArgs.count("--help")) + { + // First part of help message is specific to RPC client + std::string strUsage = _("Myriadcoin Core RPC client version") + " " + FormatFullVersion() + "\n\n" + + _("Usage:") + "\n" + + " myriadcoin-cli [options] [params] " + _("Send command to Myriadcoin Core") + "\n" + + " myriadcoin-cli [options] help " + _("List commands") + "\n" + + " myriadcoin-cli [options] help " + _("Get help for a command") + "\n"; + + strUsage += "\n" + HelpMessageCli(true); + + fprintf(stdout, "%s", strUsage.c_str()); + return false; + } + return true; +} + +int main(int argc, char* argv[]) +{ + SetupEnvironment(); + + try + { + if(!AppInitRPC(argc, argv)) + return abs(RPC_MISC_ERROR); + } + catch (std::exception& e) { + PrintExceptionContinue(&e, "AppInitRPC()"); + return abs(RPC_MISC_ERROR); + } catch (...) { + PrintExceptionContinue(NULL, "AppInitRPC()"); + return abs(RPC_MISC_ERROR); + } + + int ret = abs(RPC_MISC_ERROR); + try + { + ret = CommandLineRPC(argc, argv); + } + catch (std::exception& e) { + PrintExceptionContinue(&e, "CommandLineRPC()"); + } catch (...) { + PrintExceptionContinue(NULL, "CommandLineRPC()"); + } + return ret; +} diff --git a/src/bitcoind.cpp b/src/bitcoind.cpp index 31f9fb2f..fd864eaa 100644 --- a/src/bitcoind.cpp +++ b/src/bitcoind.cpp @@ -1,23 +1,51 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2013 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. +#include "rpcserver.h" +#include "rpcclient.h" #include "init.h" -#include "bitcoinrpc.h" +#include "main.h" +#include "noui.h" +#include "ui_interface.h" +#include "util.h" + #include +#include + +/* Introduction text for doxygen: */ + +/*! \mainpage Developer documentation + * + * \section intro_sec Introduction + * + * This is the developer documentation of the reference client for an experimental new digital currency called Bitcoin (http://www.bitcoin.org/), + * which enables instant payments to anyone, anywhere in the world. Bitcoin uses peer-to-peer technology to operate + * with no central authority: managing transactions and issuing money are carried out collectively by the network. + * + * The software is a community-driven open source project, released under the MIT license. + * + * \section Navigation + * Use the buttons Namespaces, Classes or Files at the top of the page to start navigating the code. + */ + +static bool fDaemon; void DetectShutdownThread(boost::thread_group* threadGroup) { - bool shutdown = ShutdownRequested(); + bool fShutdown = ShutdownRequested(); // Tell the main threads to shutdown. - while (!shutdown) + while (!fShutdown) { MilliSleep(200); - shutdown = ShutdownRequested(); + fShutdown = ShutdownRequested(); } if (threadGroup) + { threadGroup->interrupt_all(); + threadGroup->join_all(); + } } ////////////////////////////////////////////////////////////////////////////// @@ -35,49 +63,61 @@ bool AppInit(int argc, char* argv[]) // // Parameters // - // If Qt is used, parameters/myriadcoin.conf are parsed in qt/bitcoin.cpp's main() + // If Qt is used, parameters/bitcoin.conf are parsed in qt/bitcoin.cpp's main() ParseParameters(argc, argv); if (!boost::filesystem::is_directory(GetDataDir(false))) { - fprintf(stderr, "Error: Specified directory does not exist\n"); - Shutdown(); + fprintf(stderr, "Error: Specified data directory \"%s\" does not exist.\n", mapArgs["-datadir"].c_str()); + return false; + } + try + { + ReadConfigFile(mapArgs, mapMultiArgs); + } catch(std::exception &e) { + fprintf(stderr,"Error reading configuration file: %s\n", e.what()); + return false; + } + // Check for -testnet or -regtest parameter (TestNet() calls are only valid after this clause) + if (!SelectParamsFromCommandLine()) { + fprintf(stderr, "Error: Invalid combination of -regtest and -testnet.\n"); + return false; } - ReadConfigFile(mapArgs, mapMultiArgs); if (mapArgs.count("-?") || mapArgs.count("--help")) { - // First part of help message is specific to myriadcoind / RPC client - std::string strUsage = _("Myriadcoin version") + " " + FormatFullVersion() + "\n\n" + + // First part of help message is specific to bitcoind / RPC client + std::string strUsage = _("Myriadcoin Core Daemon") + " " + _("version") + " " + FormatFullVersion() + "\n\n" + _("Usage:") + "\n" + - " myriadcoind [options] " + "\n" + - " myriadcoind [options] [params] " + _("Send command to -server or myriadcoind") + "\n" + + " myriadcoind [options] " + _("Start Myriadcoin Core Daemon") + "\n" + + _("Usage (deprecated, use myriadcoin-cli):") + "\n" + + " myriadcoind [options] [params] " + _("Send command to Myriadcoin Core") + "\n" + " myriadcoind [options] help " + _("List commands") + "\n" + " myriadcoind [options] help " + _("Get help for a command") + "\n"; - strUsage += "\n" + HelpMessage(); + strUsage += "\n" + HelpMessage(HMM_BITCOIND); + strUsage += "\n" + HelpMessageCli(false); fprintf(stdout, "%s", strUsage.c_str()); return false; } // Command-line RPC + bool fCommandLine = false; for (int i = 1; i < argc; i++) if (!IsSwitchChar(argv[i][0]) && !boost::algorithm::istarts_with(argv[i], "myriadcoin:")) fCommandLine = true; if (fCommandLine) { - if (!SelectParamsFromCommandLine()) { - fprintf(stderr, "Error: invalid combination of -regtest and -testnet.\n"); - return false; - } int ret = CommandLineRPC(argc, argv); exit(ret); } -#if !defined(WIN32) +#ifndef WIN32 fDaemon = GetBoolArg("-daemon", false); if (fDaemon) { + fprintf(stdout, "Myriadcoin server starting\n"); + // Daemonize pid_t pid = fork(); if (pid < 0) @@ -97,6 +137,7 @@ bool AppInit(int argc, char* argv[]) fprintf(stderr, "Error: setsid() returned %d errno %d\n", sid, errno); } #endif + SoftSetBoolArg("-server", true); detectShutdownThread = new boost::thread(boost::bind(&DetectShutdownThread, &threadGroup)); fRet = AppInit2(threadGroup); @@ -106,10 +147,16 @@ bool AppInit(int argc, char* argv[]) } catch (...) { PrintExceptionContinue(NULL, "AppInit()"); } - if (!fRet) { + + if (!fRet) + { if (detectShutdownThread) detectShutdownThread->interrupt(); + threadGroup.interrupt_all(); + // threadGroup.join_all(); was left out intentionally here, because we didn't re-test all of + // the startup-failure cases to make sure they don't result in a hang due to some + // thread-blocking-waiting-for-another-thread-during-startup case } if (detectShutdownThread) @@ -123,13 +170,13 @@ bool AppInit(int argc, char* argv[]) return fRet; } -extern void noui_connect(); int main(int argc, char* argv[]) { - bool fRet = false; - fHaveGUI = false; + SetupEnvironment(); - // Connect myriadcoind signal handlers + bool fRet = false; + + // Connect bitcoind signal handlers noui_connect(); fRet = AppInit(argc, argv); diff --git a/src/bloom.cpp b/src/bloom.cpp index b6799e14..1bfcbd40 100644 --- a/src/bloom.cpp +++ b/src/bloom.cpp @@ -1,20 +1,20 @@ // Copyright (c) 2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include -#include #include "bloom.h" + #include "core.h" #include "script.h" +#include +#include + #define LN2SQUARED 0.4804530139182014246671025263266649717305529515945455 #define LN2 0.6931471805599453094172321214581765680755001343602552 using namespace std; -static const unsigned char bit_mask[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; - CBloomFilter::CBloomFilter(unsigned int nElements, double nFPRate, unsigned int nTweakIn, unsigned char nFlagsIn) : // The ideal size for a bloom filter with a given number of elements and false positive rate is: // - nElements * log(fp rate) / ln(2)^2 @@ -23,6 +23,8 @@ vData(min((unsigned int)(-1 / LN2SQUARED * nElements * log(nFPRate)), MAX_BLOOM // The ideal number of hash functions is filter size * ln(2) / number of elements // Again, we ignore filter parameters which will create a bloom filter with more hash functions than the protocol limits // See http://en.wikipedia.org/wiki/Bloom_filter for an explanation of these formulas +isFull(false), +isEmpty(false), nHashFuncs(min((unsigned int)(vData.size() * 8 / nElements * LN2), MAX_HASH_FUNCS)), nTweak(nTweakIn), nFlags(nFlagsIn) @@ -37,14 +39,15 @@ inline unsigned int CBloomFilter::Hash(unsigned int nHashNum, const std::vector< void CBloomFilter::insert(const vector& vKey) { - if (vData.size() == 1 && vData[0] == 0xff) + if (isFull) return; for (unsigned int i = 0; i < nHashFuncs; i++) { unsigned int nIndex = Hash(i, vKey); // Sets bit nIndex of vData - vData[nIndex >> 3] |= bit_mask[7 & nIndex]; + vData[nIndex >> 3] |= (1 << (7 & nIndex)); } + isEmpty = false; } void CBloomFilter::insert(const COutPoint& outpoint) @@ -63,13 +66,15 @@ void CBloomFilter::insert(const uint256& hash) bool CBloomFilter::contains(const vector& vKey) const { - if (vData.size() == 1 && vData[0] == 0xff) + if (isFull) return true; + if (isEmpty) + return false; for (unsigned int i = 0; i < nHashFuncs; i++) { unsigned int nIndex = Hash(i, vKey); // Checks bit nIndex of vData - if (!(vData[nIndex >> 3] & bit_mask[7 & nIndex])) + if (!(vData[nIndex >> 3] & (1 << (7 & nIndex)))) return false; } return true; @@ -99,6 +104,10 @@ bool CBloomFilter::IsRelevantAndUpdate(const CTransaction& tx, const uint256& ha bool fFound = false; // Match if the filter contains the hash of tx // for finding tx when they appear in a block + if (isFull) + return true; + if (isEmpty) + return false; if (contains(hash)) fFound = true; @@ -158,3 +167,16 @@ bool CBloomFilter::IsRelevantAndUpdate(const CTransaction& tx, const uint256& ha return false; } + +void CBloomFilter::UpdateEmptyFull() +{ + bool full = true; + bool empty = true; + for (unsigned int i = 0; i < vData.size(); i++) + { + full &= vData[i] == 0xff; + empty &= vData[i] == 0; + } + isFull = full; + isEmpty = empty; +} diff --git a/src/bloom.h b/src/bloom.h index 389ae748..75e3f38c 100644 --- a/src/bloom.h +++ b/src/bloom.h @@ -1,16 +1,17 @@ // Copyright (c) 2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef BITCOIN_BLOOM_H #define BITCOIN_BLOOM_H -#include - -#include "uint256.h" #include "serialize.h" +#include + class COutPoint; class CTransaction; +class uint256; // 20,000 items with fp rate < 0.1% or 10,000 items and <0.0001% static const unsigned int MAX_BLOOM_FILTER_SIZE = 36000; // bytes @@ -42,6 +43,8 @@ class CBloomFilter { private: std::vector vData; + bool isFull; + bool isEmpty; unsigned int nHashFuncs; unsigned int nTweak; unsigned char nFlags; @@ -57,9 +60,7 @@ public: // It should generally always be a random value (and is largely only exposed for unit testing) // nFlags should be one of the BLOOM_UPDATE_* enums (not _MASK) CBloomFilter(unsigned int nElements, double nFPRate, unsigned int nTweak, unsigned char nFlagsIn); - // Using a filter initialized with this results in undefined behavior - // Should only be used for deserialization - CBloomFilter() {} + CBloomFilter() : isFull(true) {} IMPLEMENT_SERIALIZE ( @@ -83,6 +84,9 @@ public: // Also adds any outputs which match the filter to the filter (to match their spending txes) bool IsRelevantAndUpdate(const CTransaction& tx, const uint256& hash); + + // Checks for empty and full filters to avoid wasting cpu + void UpdateEmptyFull(); }; #endif /* BITCOIN_BLOOM_H */ diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 6aa9aa2a..3d33251c 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -1,15 +1,19 @@ // Copyright (c) 2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2014 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include "assert.h" - #include "chainparams.h" + +#include "assert.h" #include "core.h" #include "protocol.h" #include "util.h" +#include + +using namespace boost::assign; + // // Main network // @@ -23,6 +27,8 @@ class CMainParams : public CChainParams { public: CMainParams() { // The message start string is designed to be unlikely to occur in normal data. + // The characters are rarely used upper ASCII, not valid as UTF-8, and produce + // a large 4-byte int at any alignment. pchMessageStart[0] = 0xaf; pchMessageStart[1] = 0x45; pchMessageStart[2] = 0x76; @@ -39,7 +45,6 @@ public: // Build the genesis block. Note that the output of the genesis coinbase cannot // be spent as it did not originally exist in the database. - const char* pszTimestamp = "2014-02-23 FT - G20 aims to add $2tn to global economy"; CTransaction txNew; txNew.vin.resize(1); @@ -54,19 +59,8 @@ public: genesis.nTime = 1393164995; genesis.nBits = 0x1e0fffff; genesis.nNonce = 2092903596; - - //// debug print - hashGenesisBlock = genesis.GetHash(); - //while (hashGenesisBlock > bnProofOfWorkLimit[ALGO_SHA256D].getuint256()){ - // if (++genesis.nNonce==0) break; - // hashGenesisBlock = genesis.GetHash(); - //} - //printf("MAIN: %s\n", hashGenesisBlock.ToString().c_str()); - //printf("%s\n", genesis.hashMerkleRoot.ToString().c_str()); - //printf("%x\n", bnProofOfWorkLimit[ALGO_SHA256D].GetCompact()); - //genesis.print(); - + hashGenesisBlock = genesis.GetHash(); assert(hashGenesisBlock == uint256("0x00000ffde4c020b5938441a0ea3d314bf619eff0b38f32f78f7583cffa1ea485")); assert(genesis.hashMerkleRoot == uint256("0x3f75db3c18e92f46c21530dc1222e1fddf4ccebbf88e289a6c9dc787fd6469da")); @@ -75,21 +69,24 @@ public: vSeeds.push_back(CDNSSeedData("seed3.myriadcoin.org", "seed3.myriadcoin.org")); vSeeds.push_back(CDNSSeedData("seed4.myriadcoin.org", "seed4.myriadcoin.org")); - base58Prefixes[PUBKEY_ADDRESS] = 50; - base58Prefixes[SCRIPT_ADDRESS] = 9; - base58Prefixes[SECRET_KEY] = 178; + base58Prefixes[PUBKEY_ADDRESS] = list_of(50); + base58Prefixes[SCRIPT_ADDRESS] = list_of(9); + base58Prefixes[SECRET_KEY] = list_of(178); + base58Prefixes[EXT_PUBLIC_KEY] = list_of(0x04)(0x88)(0xB2)(0x1E); + base58Prefixes[EXT_SECRET_KEY] = list_of(0x04)(0x88)(0xAD)(0xE4); // Convert the pnSeeds array into usable address objects. for (unsigned int i = 0; i < ARRAYLEN(pnSeed); i++) { // It'll only connect to one or two seed nodes because once it connects, // it'll get a pile of addresses with newer timestamps. - // Seed nodes are given a random 'last seen time' - const int64 nTwoDays = 2 * 24 * 60 * 60; + // Seed nodes are given a random 'last seen time' of between one and two + // weeks ago. + const int64_t nOneWeek = 7*24*60*60; struct in_addr ip; memcpy(&ip, &pnSeed[i], sizeof(ip)); CAddress addr(CService(ip, GetDefaultPort())); - addr.nTime = GetTime() - GetRand(nTwoDays) - nTwoDays; + addr.nTime = GetTime() - GetRand(nOneWeek) - nOneWeek; vFixedSeeds.push_back(addr); } } @@ -114,6 +111,8 @@ class CTestNetParams : public CMainParams { public: CTestNetParams() { // The message start string is designed to be unlikely to occur in normal data. + // The characters are rarely used upper ASCII, not valid as UTF-8, and produce + // a large 4-byte int at any alignment. pchMessageStart[0] = 0x01; pchMessageStart[1] = 0xf5; pchMessageStart[2] = 0x55; @@ -126,28 +125,18 @@ public: // Modify the testnet genesis block so the timestamp is valid for a later start. genesis.nTime = 1392876393; genesis.nNonce = 416875379; - - //// debug print hashGenesisBlock = genesis.GetHash(); - //while (hashGenesisBlock > bnProofOfWorkLimit[ALGO_SHA256D].getuint256()){ - // if (++genesis.nNonce==0) break; - // hashGenesisBlock = genesis.GetHash(); - //} - - //printf("TEST: %s\n", hashGenesisBlock.ToString().c_str()); - //printf("%s\n", genesis.hashMerkleRoot.ToString().c_str()); - //genesis.print(); - assert(hashGenesisBlock == uint256("0x0000017ce2a79c8bddafbbe47c004aa92b20678c354b34085f62b762084b9788")); vFixedSeeds.clear(); vSeeds.clear(); vSeeds.push_back(CDNSSeedData("testseed1.myriadcoin.org", "testseed1.myriadcoin.org")); - base58Prefixes[PUBKEY_ADDRESS] = 88; - base58Prefixes[SCRIPT_ADDRESS] = 188; - base58Prefixes[SECRET_KEY] = 239; - + base58Prefixes[PUBKEY_ADDRESS] = list_of(88); + base58Prefixes[SCRIPT_ADDRESS] = list_of(188); + base58Prefixes[SECRET_KEY] = list_of(239); + base58Prefixes[EXT_PUBLIC_KEY] = list_of(0x04)(0x35)(0x87)(0xCF); + base58Prefixes[EXT_SECRET_KEY] = list_of(0x04)(0x35)(0x83)(0x94); } virtual Network NetworkID() const { return CChainParams::TESTNET; } }; @@ -176,25 +165,13 @@ public: hashGenesisBlock = genesis.GetHash(); nDefaultPort = 18444; strDataDir = "regtest"; - - //// debug print - hashGenesisBlock = genesis.GetHash(); - //while (hashGenesisBlock > bnProofOfWorkLimit[ALGO_SHA256D].getuint256()){ - // if (++genesis.nNonce==0) break; - // hashGenesisBlock = genesis.GetHash(); - //} - - //printf("REG: %s\n", hashGenesisBlock.ToString().c_str()); - //printf("%s\n", genesis.hashMerkleRoot.ToString().c_str()); - //genesis.print(); - assert(hashGenesisBlock == uint256("0x63b92987ddc93808aa33dddc80b3e52948bdfffaf2420bf4cd9c5137b54ea37c")); vSeeds.clear(); // Regtest mode doesn't have any DNS seeds. - - base58Prefixes[PUBKEY_ADDRESS] = 0; - base58Prefixes[SCRIPT_ADDRESS] = 5; - base58Prefixes[SECRET_KEY] = 128; + + base58Prefixes[PUBKEY_ADDRESS] = list_of(0); + base58Prefixes[SCRIPT_ADDRESS] = list_of(5); + base58Prefixes[SECRET_KEY] = list_of(128); } virtual bool RequireRPCPassword() const { return false; } diff --git a/src/chainparams.h b/src/chainparams.h index ad2b45d7..d9468243 100644 --- a/src/chainparams.h +++ b/src/chainparams.h @@ -40,12 +40,16 @@ public: MAIN, TESTNET, REGTEST, + + MAX_NETWORK_TYPES }; enum Base58Type { PUBKEY_ADDRESS, SCRIPT_ADDRESS, SECRET_KEY, + EXT_PUBLIC_KEY, + EXT_SECRET_KEY, MAX_BASE58_TYPES }; @@ -61,11 +65,11 @@ public: const string& DataDir() const { return strDataDir; } virtual Network NetworkID() const = 0; const vector& DNSSeeds() const { return vSeeds; } - int Base58Prefix(Base58Type type) const { return base58Prefixes[type]; } + const std::vector &Base58Prefix(Base58Type type) const { return base58Prefixes[type]; } virtual const vector& FixedSeeds() const = 0; int RPCPort() const { return nRPCPort; } protected: - CChainParams() {}; + CChainParams() {} uint256 hashGenesisBlock; MessageStartChars pchMessageStart; @@ -77,7 +81,7 @@ protected: int nSubsidyHalvingInterval; string strDataDir; vector vSeeds; - int base58Prefixes[MAX_BASE58_TYPES]; + std::vector base58Prefixes[MAX_BASE58_TYPES]; }; /** @@ -100,4 +104,8 @@ inline bool TestNet() { return Params().NetworkID() == CChainParams::TESTNET; } +inline bool RegTest() { + return Params().NetworkID() == CChainParams::REGTEST; +} + #endif diff --git a/src/checkpoints.cpp b/src/checkpoints.cpp index 62684b4f..2cf03b5f 100644 --- a/src/checkpoints.cpp +++ b/src/checkpoints.cpp @@ -1,15 +1,17 @@ -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2014 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include // for 'map_list_of()' -#include - #include "checkpoints.h" #include "main.h" #include "uint256.h" +#include + +#include // for 'map_list_of()' +#include + namespace Checkpoints { typedef std::map MapCheckpoints; @@ -19,12 +21,12 @@ namespace Checkpoints // every system. When reindexing from a fast disk with a slow CPU, it // can be up to 20, while when downloading from a slow network with a // fast multicore CPU, it won't be much higher than 1. - static const double fSigcheckVerificationFactor = 5.0; + static const double SIGCHECK_VERIFICATION_FACTOR = 5.0; struct CCheckpointData { const MapCheckpoints *mapCheckpoints; - int64 nTimeLastCheckpoint; - int64 nTransactionsLastCheckpoint; + int64_t nTimeLastCheckpoint; + int64_t nTransactionsLastCheckpoint; double fTransactionsPerDay; }; @@ -66,11 +68,24 @@ namespace Checkpoints 2880 }; + static MapCheckpoints mapCheckpointsRegtest = + boost::assign::map_list_of + ( 0, uint256("0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206")) + ; + static const CCheckpointData dataRegtest = { + &mapCheckpointsRegtest, + 0, + 0, + 0 + }; + const CCheckpointData &Checkpoints() { - if (TestNet()) + if (Params().NetworkID() == CChainParams::TESTNET) return dataTestnet; - else + else if (Params().NetworkID() == CChainParams::MAIN) return data; + else + return dataRegtest; } bool CheckBlock(int nHeight, const uint256& hash) @@ -86,15 +101,16 @@ namespace Checkpoints } // Guess how far we are in the verification process at the given block index - double GuessVerificationProgress(CBlockIndex *pindex) { + double GuessVerificationProgress(CBlockIndex *pindex, bool fSigchecks) { if (pindex==NULL) return 0.0; - int64 nNow = time(NULL); + int64_t nNow = time(NULL); + double fSigcheckVerificationFactor = fSigchecks ? SIGCHECK_VERIFICATION_FACTOR : 1.0; double fWorkBefore = 0.0; // Amount of work done before pindex double fWorkAfter = 0.0; // Amount of work left after pindex (estimated) - // Work is defined as: 1.0 per transaction before the last checkoint, and + // Work is defined as: 1.0 per transaction before the last checkpoint, and // fSigcheckVerificationFactor per transaction after. const CCheckpointData &data = Checkpoints(); diff --git a/src/checkpoints.h b/src/checkpoints.h index a49a908a..1b4aacee 100644 --- a/src/checkpoints.h +++ b/src/checkpoints.h @@ -1,13 +1,14 @@ -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2013 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef BITCOIN_CHECKPOINT_H #define BITCOIN_CHECKPOINT_H #include -class uint256; class CBlockIndex; +class uint256; /** Block-chain checkpoints are compiled-in sanity checks. * They are updated every release or three. @@ -23,7 +24,7 @@ namespace Checkpoints // Returns last CBlockIndex* in mapBlockIndex that is a checkpoint CBlockIndex* GetLastCheckpoint(const std::map& mapBlockIndex); - double GuessVerificationProgress(CBlockIndex *pindex); + double GuessVerificationProgress(CBlockIndex *pindex, bool fSigchecks = true); extern bool fEnabled; } diff --git a/src/checkqueue.h b/src/checkqueue.h index eba424fb..ef7b4ca4 100644 --- a/src/checkqueue.h +++ b/src/checkqueue.h @@ -1,15 +1,17 @@ // Copyright (c) 2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef CHECKQUEUE_H #define CHECKQUEUE_H -#include -#include -#include - -#include #include +#include + +#include +#include +#include +#include template class CCheckQueueControl; diff --git a/src/clientversion.h b/src/clientversion.h index 7a5b0720..6b362ca9 100644 --- a/src/clientversion.h +++ b/src/clientversion.h @@ -1,15 +1,18 @@ #ifndef CLIENTVERSION_H #define CLIENTVERSION_H +#if defined(HAVE_CONFIG_H) +#include "bitcoin-config.h" +#else // // client versioning and copyright year // // These need to be macros, as version.cpp's and bitcoin-qt.rc's voodoo requires it #define CLIENT_VERSION_MAJOR 0 -#define CLIENT_VERSION_MINOR 8 -#define CLIENT_VERSION_REVISION 99 -#define CLIENT_VERSION_BUILD 12 +#define CLIENT_VERSION_MINOR 9 +#define CLIENT_VERSION_REVISION 2 +#define CLIENT_VERSION_BUILD 1 // Set to true for release, false for prerelease or test build #define CLIENT_VERSION_IS_RELEASE true @@ -18,6 +21,8 @@ // Todo: update this when changing our copyright comments in the source #define COPYRIGHT_YEAR 2014 +#endif //HAVE_CONFIG_H + // Converts the parameter X to a string after macro replacement on X has been performed. // Don't merge these into one macro! #define STRINGIZE(X) DO_STRINGIZE(X) diff --git a/src/coincontrol.h b/src/coincontrol.h new file mode 100644 index 00000000..97c30c27 --- /dev/null +++ b/src/coincontrol.h @@ -0,0 +1,63 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef COINCONTROL_H +#define COINCONTROL_H + +#include "core.h" + +/** Coin Control Features. */ +class CCoinControl +{ +public: + CTxDestination destChange; + + CCoinControl() + { + SetNull(); + } + + void SetNull() + { + destChange = CNoDestination(); + setSelected.clear(); + } + + bool HasSelected() const + { + return (setSelected.size() > 0); + } + + bool IsSelected(const uint256& hash, unsigned int n) const + { + COutPoint outpt(hash, n); + return (setSelected.count(outpt) > 0); + } + + void Select(COutPoint& output) + { + setSelected.insert(output); + } + + void UnSelect(COutPoint& output) + { + setSelected.erase(output); + } + + void UnSelectAll() + { + setSelected.clear(); + } + + void ListSelected(std::vector& vOutpoints) + { + vOutpoints.assign(setSelected.begin(), setSelected.end()); + } + +private: + std::set setSelected; + +}; + +#endif // COINCONTROL_H diff --git a/src/coins.cpp b/src/coins.cpp new file mode 100644 index 00000000..86b2a6ef --- /dev/null +++ b/src/coins.cpp @@ -0,0 +1,196 @@ +// Copyright (c) 2012-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "coins.h" + +#include + +// calculate number of bytes for the bitmask, and its number of non-zero bytes +// each bit in the bitmask represents the availability of one output, but the +// availabilities of the first two outputs are encoded separately +void CCoins::CalcMaskSize(unsigned int &nBytes, unsigned int &nNonzeroBytes) const { + unsigned int nLastUsedByte = 0; + for (unsigned int b = 0; 2+b*8 < vout.size(); b++) { + bool fZero = true; + for (unsigned int i = 0; i < 8 && 2+b*8+i < vout.size(); i++) { + if (!vout[2+b*8+i].IsNull()) { + fZero = false; + continue; + } + } + if (!fZero) { + nLastUsedByte = b + 1; + nNonzeroBytes++; + } + } + nBytes += nLastUsedByte; +} + +bool CCoins::Spend(const COutPoint &out, CTxInUndo &undo) { + if (out.n >= vout.size()) + return false; + if (vout[out.n].IsNull()) + return false; + undo = CTxInUndo(vout[out.n]); + vout[out.n].SetNull(); + Cleanup(); + if (vout.size() == 0) { + undo.nHeight = nHeight; + undo.fCoinBase = fCoinBase; + undo.nVersion = this->nVersion; + } + return true; +} + +bool CCoins::Spend(int nPos) { + CTxInUndo undo; + COutPoint out(0, nPos); + return Spend(out, undo); +} + + +bool CCoinsView::GetCoins(const uint256 &txid, CCoins &coins) { return false; } +bool CCoinsView::SetCoins(const uint256 &txid, const CCoins &coins) { return false; } +bool CCoinsView::HaveCoins(const uint256 &txid) { return false; } +uint256 CCoinsView::GetBestBlock() { return uint256(0); } +bool CCoinsView::SetBestBlock(const uint256 &hashBlock) { return false; } +bool CCoinsView::BatchWrite(const std::map &mapCoins, const uint256 &hashBlock) { return false; } +bool CCoinsView::GetStats(CCoinsStats &stats) { return false; } + + +CCoinsViewBacked::CCoinsViewBacked(CCoinsView &viewIn) : base(&viewIn) { } +bool CCoinsViewBacked::GetCoins(const uint256 &txid, CCoins &coins) { return base->GetCoins(txid, coins); } +bool CCoinsViewBacked::SetCoins(const uint256 &txid, const CCoins &coins) { return base->SetCoins(txid, coins); } +bool CCoinsViewBacked::HaveCoins(const uint256 &txid) { return base->HaveCoins(txid); } +uint256 CCoinsViewBacked::GetBestBlock() { return base->GetBestBlock(); } +bool CCoinsViewBacked::SetBestBlock(const uint256 &hashBlock) { return base->SetBestBlock(hashBlock); } +void CCoinsViewBacked::SetBackend(CCoinsView &viewIn) { base = &viewIn; } +bool CCoinsViewBacked::BatchWrite(const std::map &mapCoins, const uint256 &hashBlock) { return base->BatchWrite(mapCoins, hashBlock); } +bool CCoinsViewBacked::GetStats(CCoinsStats &stats) { return base->GetStats(stats); } + +CCoinsViewCache::CCoinsViewCache(CCoinsView &baseIn, bool fDummy) : CCoinsViewBacked(baseIn), hashBlock(0) { } + +bool CCoinsViewCache::GetCoins(const uint256 &txid, CCoins &coins) { + if (cacheCoins.count(txid)) { + coins = cacheCoins[txid]; + return true; + } + if (base->GetCoins(txid, coins)) { + cacheCoins[txid] = coins; + return true; + } + return false; +} + +std::map::iterator CCoinsViewCache::FetchCoins(const uint256 &txid) { + std::map::iterator it = cacheCoins.lower_bound(txid); + if (it != cacheCoins.end() && it->first == txid) + return it; + CCoins tmp; + if (!base->GetCoins(txid,tmp)) + return cacheCoins.end(); + std::map::iterator ret = cacheCoins.insert(it, std::make_pair(txid, CCoins())); + tmp.swap(ret->second); + return ret; +} + +CCoins &CCoinsViewCache::GetCoins(const uint256 &txid) { + std::map::iterator it = FetchCoins(txid); + assert(it != cacheCoins.end()); + return it->second; +} + +bool CCoinsViewCache::SetCoins(const uint256 &txid, const CCoins &coins) { + cacheCoins[txid] = coins; + return true; +} + +bool CCoinsViewCache::HaveCoins(const uint256 &txid) { + return FetchCoins(txid) != cacheCoins.end(); +} + +uint256 CCoinsViewCache::GetBestBlock() { + if (hashBlock == uint256(0)) + hashBlock = base->GetBestBlock(); + return hashBlock; +} + +bool CCoinsViewCache::SetBestBlock(const uint256 &hashBlockIn) { + hashBlock = hashBlockIn; + return true; +} + +bool CCoinsViewCache::BatchWrite(const std::map &mapCoins, const uint256 &hashBlockIn) { + for (std::map::const_iterator it = mapCoins.begin(); it != mapCoins.end(); it++) + cacheCoins[it->first] = it->second; + hashBlock = hashBlockIn; + return true; +} + +bool CCoinsViewCache::Flush() { + bool fOk = base->BatchWrite(cacheCoins, hashBlock); + if (fOk) + cacheCoins.clear(); + return fOk; +} + +unsigned int CCoinsViewCache::GetCacheSize() { + return cacheCoins.size(); +} + +const CTxOut &CCoinsViewCache::GetOutputFor(const CTxIn& input) +{ + const CCoins &coins = GetCoins(input.prevout.hash); + assert(coins.IsAvailable(input.prevout.n)); + return coins.vout[input.prevout.n]; +} + +int64_t CCoinsViewCache::GetValueIn(const CTransaction& tx) +{ + if (tx.IsCoinBase()) + return 0; + + int64_t nResult = 0; + for (unsigned int i = 0; i < tx.vin.size(); i++) + nResult += GetOutputFor(tx.vin[i]).nValue; + + return nResult; +} + +bool CCoinsViewCache::HaveInputs(const CTransaction& tx) +{ + if (!tx.IsCoinBase()) { + // first check whether information about the prevout hash is available + for (unsigned int i = 0; i < tx.vin.size(); i++) { + const COutPoint &prevout = tx.vin[i].prevout; + if (!HaveCoins(prevout.hash)) + return false; + } + + // then check whether the actual outputs are available + for (unsigned int i = 0; i < tx.vin.size(); i++) { + const COutPoint &prevout = tx.vin[i].prevout; + const CCoins &coins = GetCoins(prevout.hash); + if (!coins.IsAvailable(prevout.n)) + return false; + } + } + return true; +} + +double CCoinsViewCache::GetPriority(const CTransaction &tx, int nHeight) +{ + if (tx.IsCoinBase()) + return 0.0; + double dResult = 0.0; + BOOST_FOREACH(const CTxIn& txin, tx.vin) + { + const CCoins &coins = GetCoins(txin.prevout.hash); + if (!coins.IsAvailable(txin.prevout.n)) continue; + if (coins.nHeight < nHeight) { + dResult += coins.vout[txin.prevout.n].nValue * (nHeight-coins.nHeight); + } + } + return tx.ComputePriority(dResult); +} diff --git a/src/coins.h b/src/coins.h new file mode 100644 index 00000000..0ad28524 --- /dev/null +++ b/src/coins.h @@ -0,0 +1,358 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Copyright (c) 2009-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. +#ifndef BITCOIN_COINS_H +#define BITCOIN_COINS_H + +#include "core.h" +#include "serialize.h" +#include "uint256.h" + +#include +#include + +#include + +/** pruned version of CTransaction: only retains metadata and unspent transaction outputs + * + * Serialized format: + * - VARINT(nVersion) + * - VARINT(nCode) + * - unspentness bitvector, for vout[2] and further; least significant byte first + * - the non-spent CTxOuts (via CTxOutCompressor) + * - VARINT(nHeight) + * + * The nCode value consists of: + * - bit 1: IsCoinBase() + * - bit 2: vout[0] is not spent + * - bit 4: vout[1] is not spent + * - The higher bits encode N, the number of non-zero bytes in the following bitvector. + * - In case both bit 2 and bit 4 are unset, they encode N-1, as there must be at + * least one non-spent output). + * + * Example: 0104835800816115944e077fe7c803cfa57f29b36bf87c1d358bb85e + * <><><--------------------------------------------><----> + * | \ | / + * version code vout[1] height + * + * - version = 1 + * - code = 4 (vout[1] is not spent, and 0 non-zero bytes of bitvector follow) + * - unspentness bitvector: as 0 non-zero bytes follow, it has length 0 + * - vout[1]: 835800816115944e077fe7c803cfa57f29b36bf87c1d35 + * * 8358: compact amount representation for 60000000000 (600 BTC) + * * 00: special txout type pay-to-pubkey-hash + * * 816115944e077fe7c803cfa57f29b36bf87c1d35: address uint160 + * - height = 203998 + * + * + * Example: 0109044086ef97d5790061b01caab50f1b8e9c50a5057eb43c2d9563a4eebbd123008c988f1a4a4de2161e0f50aac7f17e7f9555caa486af3b + * <><><--><--------------------------------------------------><----------------------------------------------><----> + * / \ \ | | / + * version code unspentness vout[4] vout[16] height + * + * - version = 1 + * - code = 9 (coinbase, neither vout[0] or vout[1] are unspent, + * 2 (1, +1 because both bit 2 and bit 4 are unset) non-zero bitvector bytes follow) + * - unspentness bitvector: bits 2 (0x04) and 14 (0x4000) are set, so vout[2+2] and vout[14+2] are unspent + * - vout[4]: 86ef97d5790061b01caab50f1b8e9c50a5057eb43c2d9563a4ee + * * 86ef97d579: compact amount representation for 234925952 (2.35 BTC) + * * 00: special txout type pay-to-pubkey-hash + * * 61b01caab50f1b8e9c50a5057eb43c2d9563a4ee: address uint160 + * - vout[16]: bbd123008c988f1a4a4de2161e0f50aac7f17e7f9555caa4 + * * bbd123: compact amount representation for 110397 (0.001 BTC) + * * 00: special txout type pay-to-pubkey-hash + * * 8c988f1a4a4de2161e0f50aac7f17e7f9555caa4: address uint160 + * - height = 120891 + */ +class CCoins +{ +public: + // whether transaction is a coinbase + bool fCoinBase; + + // unspent transaction outputs; spent outputs are .IsNull(); spent outputs at the end of the array are dropped + std::vector vout; + + // at which height this transaction was included in the active block chain + int nHeight; + + // version of the CTransaction; accesses to this value should probably check for nHeight as well, + // as new tx version will probably only be introduced at certain heights + int nVersion; + + // construct a CCoins from a CTransaction, at a given height + CCoins(const CTransaction &tx, int nHeightIn) : fCoinBase(tx.IsCoinBase()), vout(tx.vout), nHeight(nHeightIn), nVersion(tx.nVersion) { + ClearUnspendable(); + } + + // empty constructor + CCoins() : fCoinBase(false), vout(0), nHeight(0), nVersion(0) { } + + // remove spent outputs at the end of vout + void Cleanup() { + while (vout.size() > 0 && vout.back().IsNull()) + vout.pop_back(); + if (vout.empty()) + std::vector().swap(vout); + } + + void ClearUnspendable() { + BOOST_FOREACH(CTxOut &txout, vout) { + if (txout.scriptPubKey.IsUnspendable()) + txout.SetNull(); + } + Cleanup(); + } + + void swap(CCoins &to) { + std::swap(to.fCoinBase, fCoinBase); + to.vout.swap(vout); + std::swap(to.nHeight, nHeight); + std::swap(to.nVersion, nVersion); + } + + // equality test + friend bool operator==(const CCoins &a, const CCoins &b) { + // Empty CCoins objects are always equal. + if (a.IsPruned() && b.IsPruned()) + return true; + return a.fCoinBase == b.fCoinBase && + a.nHeight == b.nHeight && + a.nVersion == b.nVersion && + a.vout == b.vout; + } + friend bool operator!=(const CCoins &a, const CCoins &b) { + return !(a == b); + } + + void CalcMaskSize(unsigned int &nBytes, unsigned int &nNonzeroBytes) const; + + bool IsCoinBase() const { + return fCoinBase; + } + + unsigned int GetSerializeSize(int nType, int nVersion) const { + unsigned int nSize = 0; + unsigned int nMaskSize = 0, nMaskCode = 0; + CalcMaskSize(nMaskSize, nMaskCode); + bool fFirst = vout.size() > 0 && !vout[0].IsNull(); + bool fSecond = vout.size() > 1 && !vout[1].IsNull(); + assert(fFirst || fSecond || nMaskCode); + unsigned int nCode = 8*(nMaskCode - (fFirst || fSecond ? 0 : 1)) + (fCoinBase ? 1 : 0) + (fFirst ? 2 : 0) + (fSecond ? 4 : 0); + // version + nSize += ::GetSerializeSize(VARINT(this->nVersion), nType, nVersion); + // size of header code + nSize += ::GetSerializeSize(VARINT(nCode), nType, nVersion); + // spentness bitmask + nSize += nMaskSize; + // txouts themself + for (unsigned int i = 0; i < vout.size(); i++) + if (!vout[i].IsNull()) + nSize += ::GetSerializeSize(CTxOutCompressor(REF(vout[i])), nType, nVersion); + // height + nSize += ::GetSerializeSize(VARINT(nHeight), nType, nVersion); + return nSize; + } + + template + void Serialize(Stream &s, int nType, int nVersion) const { + unsigned int nMaskSize = 0, nMaskCode = 0; + CalcMaskSize(nMaskSize, nMaskCode); + bool fFirst = vout.size() > 0 && !vout[0].IsNull(); + bool fSecond = vout.size() > 1 && !vout[1].IsNull(); + assert(fFirst || fSecond || nMaskCode); + unsigned int nCode = 8*(nMaskCode - (fFirst || fSecond ? 0 : 1)) + (fCoinBase ? 1 : 0) + (fFirst ? 2 : 0) + (fSecond ? 4 : 0); + // version + ::Serialize(s, VARINT(this->nVersion), nType, nVersion); + // header code + ::Serialize(s, VARINT(nCode), nType, nVersion); + // spentness bitmask + for (unsigned int b = 0; b + void Unserialize(Stream &s, int nType, int nVersion) { + unsigned int nCode = 0; + // version + ::Unserialize(s, VARINT(this->nVersion), nType, nVersion); + // header code + ::Unserialize(s, VARINT(nCode), nType, nVersion); + fCoinBase = nCode & 1; + std::vector vAvail(2, false); + vAvail[0] = nCode & 2; + vAvail[1] = nCode & 4; + unsigned int nMaskCode = (nCode / 8) + ((nCode & 6) != 0 ? 0 : 1); + // spentness bitmask + while (nMaskCode > 0) { + unsigned char chAvail = 0; + ::Unserialize(s, chAvail, nType, nVersion); + for (unsigned int p = 0; p < 8; p++) { + bool f = (chAvail & (1 << p)) != 0; + vAvail.push_back(f); + } + if (chAvail != 0) + nMaskCode--; + } + // txouts themself + vout.assign(vAvail.size(), CTxOut()); + for (unsigned int i = 0; i < vAvail.size(); i++) { + if (vAvail[i]) + ::Unserialize(s, REF(CTxOutCompressor(vout[i])), nType, nVersion); + } + // coinbase height + ::Unserialize(s, VARINT(nHeight), nType, nVersion); + Cleanup(); + } + + // mark an outpoint spent, and construct undo information + bool Spend(const COutPoint &out, CTxInUndo &undo); + + // mark a vout spent + bool Spend(int nPos); + + // check whether a particular output is still available + bool IsAvailable(unsigned int nPos) const { + return (nPos < vout.size() && !vout[nPos].IsNull()); + } + + // check whether the entire CCoins is spent + // note that only !IsPruned() CCoins can be serialized + bool IsPruned() const { + BOOST_FOREACH(const CTxOut &out, vout) + if (!out.IsNull()) + return false; + return true; + } +}; + + +struct CCoinsStats +{ + int nHeight; + uint256 hashBlock; + uint64_t nTransactions; + uint64_t nTransactionOutputs; + uint64_t nSerializedSize; + uint256 hashSerialized; + int64_t nTotalAmount; + + CCoinsStats() : nHeight(0), hashBlock(0), nTransactions(0), nTransactionOutputs(0), nSerializedSize(0), hashSerialized(0), nTotalAmount(0) {} +}; + + +/** Abstract view on the open txout dataset. */ +class CCoinsView +{ +public: + // Retrieve the CCoins (unspent transaction outputs) for a given txid + virtual bool GetCoins(const uint256 &txid, CCoins &coins); + + // Modify the CCoins for a given txid + virtual bool SetCoins(const uint256 &txid, const CCoins &coins); + + // Just check whether we have data for a given txid. + // This may (but cannot always) return true for fully spent transactions + virtual bool HaveCoins(const uint256 &txid); + + // Retrieve the block hash whose state this CCoinsView currently represents + virtual uint256 GetBestBlock(); + + // Modify the currently active block hash + virtual bool SetBestBlock(const uint256 &hashBlock); + + // Do a bulk modification (multiple SetCoins + one SetBestBlock) + virtual bool BatchWrite(const std::map &mapCoins, const uint256 &hashBlock); + + // Calculate statistics about the unspent transaction output set + virtual bool GetStats(CCoinsStats &stats); + + // As we use CCoinsViews polymorphically, have a virtual destructor + virtual ~CCoinsView() {} +}; + + +/** CCoinsView backed by another CCoinsView */ +class CCoinsViewBacked : public CCoinsView +{ +protected: + CCoinsView *base; + +public: + CCoinsViewBacked(CCoinsView &viewIn); + bool GetCoins(const uint256 &txid, CCoins &coins); + bool SetCoins(const uint256 &txid, const CCoins &coins); + bool HaveCoins(const uint256 &txid); + uint256 GetBestBlock(); + bool SetBestBlock(const uint256 &hashBlock); + void SetBackend(CCoinsView &viewIn); + bool BatchWrite(const std::map &mapCoins, const uint256 &hashBlock); + bool GetStats(CCoinsStats &stats); +}; + + +/** CCoinsView that adds a memory cache for transactions to another CCoinsView */ +class CCoinsViewCache : public CCoinsViewBacked +{ +protected: + uint256 hashBlock; + std::map cacheCoins; + +public: + CCoinsViewCache(CCoinsView &baseIn, bool fDummy = false); + + // Standard CCoinsView methods + bool GetCoins(const uint256 &txid, CCoins &coins); + bool SetCoins(const uint256 &txid, const CCoins &coins); + bool HaveCoins(const uint256 &txid); + uint256 GetBestBlock(); + bool SetBestBlock(const uint256 &hashBlock); + bool BatchWrite(const std::map &mapCoins, const uint256 &hashBlock); + + // Return a modifiable reference to a CCoins. Check HaveCoins first. + // Many methods explicitly require a CCoinsViewCache because of this method, to reduce + // copying. + CCoins &GetCoins(const uint256 &txid); + + // Push the modifications applied to this cache to its base. + // Failure to call this method before destruction will cause the changes to be forgotten. + bool Flush(); + + // Calculate the size of the cache (in number of transactions) + unsigned int GetCacheSize(); + + /** Amount of bitcoins coming in to a transaction + Note that lightweight clients may not know anything besides the hash of previous transactions, + so may not be able to calculate this. + + @param[in] tx transaction for which we are checking input total + @return Sum of value of all inputs (scriptSigs) + */ + int64_t GetValueIn(const CTransaction& tx); + + // Check whether all prevouts of the transaction are present in the UTXO set represented by this view + bool HaveInputs(const CTransaction& tx); + + // Return priority of tx at height nHeight + double GetPriority(const CTransaction &tx, int nHeight); + + const CTxOut &GetOutputFor(const CTxIn& input); + +private: + std::map::iterator FetchCoins(const uint256 &txid); +}; + +#endif diff --git a/src/compat.h b/src/compat.h index 70622169..8fbafb6c 100644 --- a/src/compat.h +++ b/src/compat.h @@ -1,37 +1,50 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2013 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef _BITCOIN_COMPAT_H -#define _BITCOIN_COMPAT_H 1 +#define _BITCOIN_COMPAT_H #ifdef WIN32 +#ifdef _WIN32_WINNT +#undef _WIN32_WINNT +#endif #define _WIN32_WINNT 0x0501 +#ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN 1 +#endif #ifndef NOMINMAX #define NOMINMAX #endif +#ifdef FD_SETSIZE +#undef FD_SETSIZE // prevent redefinition compiler warning +#endif #define FD_SETSIZE 1024 // max number of fds in fd_set -#include + +#include // Must be included before mswsock.h and windows.h + #include +#include #include #else -#include -#include #include -#include -#include +#include +#include +#include #include #include +#include #include +#include +#include +#include #endif -typedef u_int SOCKET; #ifdef WIN32 -#define MSG_NOSIGNAL 0 #define MSG_DONTWAIT 0 -typedef int socklen_t; #else +typedef u_int SOCKET; #include "errno.h" #define WSAGetLastError() errno #define WSAEINVAL EINVAL diff --git a/src/compat/glibc_compat.cpp b/src/compat/glibc_compat.cpp new file mode 100644 index 00000000..5b73e605 --- /dev/null +++ b/src/compat/glibc_compat.cpp @@ -0,0 +1,19 @@ +#include "bitcoin-config.h" +#include +#include + +// Prior to GLIBC_2.14, memcpy was aliased to memmove. +extern "C" void* memmove(void* a, const void* b, size_t c); +extern "C" void* memcpy(void* a, const void* b, size_t c) +{ + return memmove(a, b, c); +} + +extern "C" void __chk_fail (void) __attribute__((__noreturn__)); +extern "C" FDELT_TYPE __fdelt_warn(FDELT_TYPE a) +{ + if (a >= FD_SETSIZE) + __chk_fail (); + return a / __NFDBITS; +} +extern "C" FDELT_TYPE __fdelt_chk(FDELT_TYPE) __attribute__((weak, alias("__fdelt_warn"))); diff --git a/src/compat/glibcxx_compat.cpp b/src/compat/glibcxx_compat.cpp new file mode 100644 index 00000000..e91376f8 --- /dev/null +++ b/src/compat/glibcxx_compat.cpp @@ -0,0 +1,87 @@ +#include +#include +#include +#include + +#ifndef _GLIBCXX_USE_NOEXCEPT + #define _GLIBCXX_USE_NOEXCEPT throw() +#endif + +namespace std { + +const char* bad_exception::what() const throw() +{ + return "std::bad_exception"; +} + +const char* bad_cast::what() const throw() +{ + return "std::bad_cast"; +} + +const char* bad_alloc::what() const throw() +{ + return "std::bad_alloc"; +} + +namespace __detail +{ +struct _List_node_base +{ + void _M_hook(std::__detail::_List_node_base* const __position) throw () __attribute__((used)) + { + _M_next = __position; + _M_prev = __position->_M_prev; + __position->_M_prev->_M_next = this; + __position->_M_prev = this; + } + void _M_unhook() __attribute__((used)) + { + _List_node_base* const __next_node = _M_next; + _List_node_base* const __prev_node = _M_prev; + __prev_node->_M_next = __next_node; + __next_node->_M_prev = __prev_node; + } + _List_node_base* _M_next; + _List_node_base* _M_prev; +}; +} // namespace detail + +template ostream& ostream::_M_insert(bool); +template ostream& ostream::_M_insert(long); +template ostream& ostream::_M_insert(double); +template ostream& ostream::_M_insert(unsigned long); +template ostream& ostream::_M_insert(const void*); +template ostream& __ostream_insert(ostream&, const char*, streamsize); +template istream& istream::_M_extract(long&); +template istream& istream::_M_extract(unsigned short&); + +out_of_range::~out_of_range() _GLIBCXX_USE_NOEXCEPT { } + +// Used with permission. +// See: https://github.com/madlib/madlib/commit/c3db418c0d34d6813608f2137fef1012ce03043d + +void +ctype::_M_widen_init() const { + char __tmp[sizeof(_M_widen)]; + for (unsigned __i = 0; __i < sizeof(_M_widen); ++__i) + __tmp[__i] = __i; + do_widen(__tmp, __tmp + sizeof(__tmp), _M_widen); + + _M_widen_ok = 1; + // Set _M_widen_ok to 2 if memcpy can't be used. + for (unsigned __i = 0; __i < sizeof(_M_widen); ++__i) + if (__tmp[__i] != _M_widen[__i]) { + _M_widen_ok = 2; + break; + } +} + +void __throw_out_of_range_fmt(const char*, ...) __attribute__((__noreturn__)); +void __throw_out_of_range_fmt(const char* err, ...) +{ + // Safe and over-simplified version. Ignore the format and print it as-is. + __throw_out_of_range(err); +} + +}// namespace std diff --git a/src/core.cpp b/src/core.cpp index 62e21455..78833e4c 100644 --- a/src/core.cpp +++ b/src/core.cpp @@ -1,19 +1,20 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2013 The Bitcoin developers +// Copyright (c) 2009-2014 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "core.h" + #include "util.h" std::string COutPoint::ToString() const { - return strprintf("COutPoint(%s, %u)", hash.ToString().substr(0,10).c_str(), n); + return strprintf("COutPoint(%s, %u)", hash.ToString().substr(0,10), n); } void COutPoint::print() const { - printf("%s\n", ToString().c_str()); + LogPrintf("%s\n", ToString()); } CTxIn::CTxIn(COutPoint prevoutIn, CScript scriptSigIn, unsigned int nSequenceIn) @@ -36,9 +37,9 @@ std::string CTxIn::ToString() const str += "CTxIn("; str += prevout.ToString(); if (prevout.IsNull()) - str += strprintf(", coinbase %s", HexStr(scriptSig).c_str()); + str += strprintf(", coinbase %s", HexStr(scriptSig)); else - str += strprintf(", scriptSig=%s", scriptSig.ToString().substr(0,24).c_str()); + str += strprintf(", scriptSig=%s", scriptSig.ToString().substr(0,24)); if (nSequence != std::numeric_limits::max()) str += strprintf(", nSequence=%u", nSequence); str += ")"; @@ -47,10 +48,10 @@ std::string CTxIn::ToString() const void CTxIn::print() const { - printf("%s\n", ToString().c_str()); + LogPrintf("%s\n", ToString()); } -CTxOut::CTxOut(int64 nValueIn, CScript scriptPubKeyIn) +CTxOut::CTxOut(int64_t nValueIn, CScript scriptPubKeyIn) { nValue = nValueIn; scriptPubKey = scriptPubKeyIn; @@ -63,14 +64,12 @@ uint256 CTxOut::GetHash() const std::string CTxOut::ToString() const { - if (scriptPubKey.size() < 6) - return "CTxOut(error)"; - return strprintf("CTxOut(nValue=%"PRI64d".%08"PRI64d", scriptPubKey=%s)", nValue / COIN, nValue % COIN, scriptPubKey.ToString().substr(0,30).c_str()); + return strprintf("CTxOut(nValue=%d.%08d, scriptPubKey=%s)", nValue / COIN, nValue % COIN, scriptPubKey.ToString().substr(0,30)); } void CTxOut::print() const { - printf("%s\n", ToString().c_str()); + LogPrintf("%s\n", ToString()); } uint256 CTransaction::GetHash() const @@ -107,11 +106,42 @@ bool CTransaction::IsNewerThan(const CTransaction& old) const return fNewer; } +int64_t CTransaction::GetValueOut() const +{ + int64_t nValueOut = 0; + BOOST_FOREACH(const CTxOut& txout, vout) + { + nValueOut += txout.nValue; + if (!MoneyRange(txout.nValue) || !MoneyRange(nValueOut)) + throw std::runtime_error("CTransaction::GetValueOut() : value out of range"); + } + return nValueOut; +} + +double CTransaction::ComputePriority(double dPriorityInputs, unsigned int nTxSize) const +{ + // In order to avoid disincentivizing cleaning up the UTXO set we don't count + // the constant overhead for each txin and up to 110 bytes of scriptSig (which + // is enough to cover a compressed pubkey p2sh redemption) for priority. + // Providing any more cleanup incentive than making additional inputs free would + // risk encouraging people to create junk outputs to redeem later. + if (nTxSize == 0) + nTxSize = ::GetSerializeSize(*this, SER_NETWORK, PROTOCOL_VERSION); + BOOST_FOREACH(const CTxIn& txin, vin) + { + unsigned int offset = 41U + std::min(110U, (unsigned int)txin.scriptSig.size()); + if (nTxSize > offset) + nTxSize -= offset; + } + if (nTxSize == 0) return 0.0; + return dPriorityInputs / nTxSize; +} + std::string CTransaction::ToString() const { std::string str; - str += strprintf("CTransaction(hash=%s, ver=%d, vin.size=%"PRIszu", vout.size=%"PRIszu", nLockTime=%u)\n", - GetHash().ToString().substr(0,10).c_str(), + str += strprintf("CTransaction(hash=%s, ver=%d, vin.size=%u, vout.size=%u, nLockTime=%u)\n", + GetHash().ToString().substr(0,10), nVersion, vin.size(), vout.size(), @@ -125,7 +155,7 @@ std::string CTransaction::ToString() const void CTransaction::print() const { - printf("%s", ToString().c_str()); + LogPrintf("%s", ToString()); } // Amount compression: @@ -137,7 +167,7 @@ void CTransaction::print() const // * if e==9, we only know the resulting number is not zero, so output 1 + 10*(n - 1) + 9 // (this is decodable, as d is in [1-9] and e is in [0-9]) -uint64 CTxOutCompressor::CompressAmount(uint64 n) +uint64_t CTxOutCompressor::CompressAmount(uint64_t n) { if (n == 0) return 0; @@ -156,7 +186,7 @@ uint64 CTxOutCompressor::CompressAmount(uint64 n) } } -uint64 CTxOutCompressor::DecompressAmount(uint64 x) +uint64_t CTxOutCompressor::DecompressAmount(uint64_t x) { // x = 0 OR x = 1+10*(9*n + d - 1) + e OR x = 1+10*(n - 1) + 9 if (x == 0) @@ -165,7 +195,7 @@ uint64 CTxOutCompressor::DecompressAmount(uint64 x) // x = 10*(9*n + d - 1) + e int e = x % 10; x /= 10; - uint64 n = 0; + uint64_t n = 0; if (e < 9) { // x = 9*n + d - 1 int d = (x % 9) + 1; @@ -182,49 +212,6 @@ uint64 CTxOutCompressor::DecompressAmount(uint64 x) return n; } -// calculate number of bytes for the bitmask, and its number of non-zero bytes -// each bit in the bitmask represents the availability of one output, but the -// availabilities of the first two outputs are encoded separately -void CCoins::CalcMaskSize(unsigned int &nBytes, unsigned int &nNonzeroBytes) const { - unsigned int nLastUsedByte = 0; - for (unsigned int b = 0; 2+b*8 < vout.size(); b++) { - bool fZero = true; - for (unsigned int i = 0; i < 8 && 2+b*8+i < vout.size(); i++) { - if (!vout[2+b*8+i].IsNull()) { - fZero = false; - continue; - } - } - if (!fZero) { - nLastUsedByte = b + 1; - nNonzeroBytes++; - } - } - nBytes += nLastUsedByte; -} - -bool CCoins::Spend(const COutPoint &out, CTxInUndo &undo) { - if (out.n >= vout.size()) - return false; - if (vout[out.n].IsNull()) - return false; - undo = CTxInUndo(vout[out.n]); - vout[out.n].SetNull(); - Cleanup(); - if (vout.size() == 0) { - undo.nHeight = nHeight; - undo.fCoinBase = fCoinBase; - undo.nVersion = this->nVersion; - } - return true; -} - -bool CCoins::Spend(int nPos) { - CTxInUndo undo; - COutPoint out(0, nPos); - return Spend(out, undo); -} - uint256 CBlockHeader::GetHash() const { return Hash(BEGIN(nVersion), END(nNonce)); @@ -282,21 +269,21 @@ uint256 CBlock::CheckMerkleBranch(uint256 hash, const std::vector& vMer void CBlock::print() const { - printf("CBlock(hash=%s, ver=%d, pow_algo=%d, pow_hash=%s, hashPrevBlock=%s, hashMerkleRoot=%s, nTime=%u, nBits=%08x, nNonce=%u, vtx=%"PRIszu")\n", - GetHash().ToString().c_str(), + LogPrintf("CBlock(hash=%s, ver=%d, pow_algo=%d, pow_hash=%s, hashPrevBlock=%s, hashMerkleRoot=%s, nTime=%u, nBits=%08x, nNonce=%u, vtx=%u)\n", + GetHash().ToString(), nVersion, GetAlgo(), GetPoWHash(GetAlgo()).ToString().c_str(), - hashPrevBlock.ToString().c_str(), - hashMerkleRoot.ToString().c_str(), + hashPrevBlock.ToString(), + hashMerkleRoot.ToString(), nTime, nBits, nNonce, vtx.size()); for (unsigned int i = 0; i < vtx.size(); i++) { - printf(" "); + LogPrintf(" "); vtx[i].print(); } - printf(" vMerkleTree: "); + LogPrintf(" vMerkleTree: "); for (unsigned int i = 0; i < vMerkleTree.size(); i++) - printf("%s ", vMerkleTree[i].ToString().c_str()); - printf("\n"); + LogPrintf("%s ", vMerkleTree[i].ToString()); + LogPrintf("\n"); } diff --git a/src/core.h b/src/core.h index a258da6a..444b799b 100644 --- a/src/core.h +++ b/src/core.h @@ -2,18 +2,19 @@ // Copyright (c) 2009-2013 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef BITCOIN_CORE_H #define BITCOIN_CORE_H -#include "uint256.h" -#include "serialize.h" #include "script.h" +#include "serialize.h" +#include "uint256.h" #include "scrypt.h" #include "hashgroestl.h" #include "hashskein.h" #include "hashqubit.h" -#include +#include enum { ALGO_SHA256D = 0, @@ -22,7 +23,7 @@ enum { ALGO_SKEIN = 3, ALGO_QUBIT = 4, NUM_ALGOS }; - + enum { // primary version @@ -74,6 +75,10 @@ inline std::string GetAlgoName(int Algo) class CTransaction; +/** No amount larger than this (in satoshi) is valid */ +static const int64_t MAX_MONEY = 21000000 * COIN; +inline bool MoneyRange(int64_t nValue) { return (nValue >= 0 && nValue <= MAX_MONEY); } + /** An outpoint - a combination of a transaction hash and an index n into its vout */ class COutPoint { @@ -110,11 +115,11 @@ public: class CInPoint { public: - CTransaction* ptx; + const CTransaction* ptx; unsigned int n; CInPoint() { SetNull(); } - CInPoint(CTransaction* ptxIn, unsigned int nIn) { ptx = ptxIn; n = nIn; } + CInPoint(const CTransaction* ptxIn, unsigned int nIn) { ptx = ptxIn; n = nIn; } void SetNull() { ptx = NULL; n = (unsigned int) -1; } bool IsNull() const { return (ptx == NULL && n == (unsigned int) -1); } }; @@ -175,7 +180,7 @@ public: class CTxOut { public: - int64 nValue; + int64_t nValue; CScript scriptPubKey; CTxOut() @@ -183,7 +188,7 @@ public: SetNull(); } - CTxOut(int64 nValueIn, CScript scriptPubKeyIn); + CTxOut(int64_t nValueIn, CScript scriptPubKeyIn); IMPLEMENT_SERIALIZE ( @@ -204,7 +209,7 @@ public: uint256 GetHash() const; - bool IsDust(int64 nMinRelayTxFee) const + bool IsDust(int64_t nMinRelayTxFee) const { // "Dust" is defined in terms of CTransaction::nMinRelayTxFee, // which has units satoshis-per-kilobyte. @@ -212,8 +217,8 @@ public: // to spend something, then we consider it dust. // A typical txout is 34 bytes big, and will // need a CTxIn of at least 148 bytes to spend, - // so dust is a txout less than 54 uBTC - // (5460 satoshis) with default nMinRelayTxFee + // so dust is a txout less than 546 satoshis + // with default nMinRelayTxFee. return ((nValue*1000)/(3*((int)GetSerializeSize(SER_DISK,0)+148)) < nMinRelayTxFee); } @@ -239,8 +244,8 @@ public: class CTransaction { public: - static int64 nMinTxFee; - static int64 nMinRelayTxFee; + static int64_t nMinTxFee; + static int64_t nMinRelayTxFee; static const int CURRENT_VERSION=1; int nVersion; std::vector vin; @@ -277,6 +282,14 @@ public: uint256 GetHash() const; bool IsNewerThan(const CTransaction& old) const; + // Return sum of txouts. + int64_t GetValueOut() const; + // GetValueIn() is a method on CCoinsViewCache, because + // inputs must be known to compute value in. + + // Compute priority, given priority of inputs and (optionally) tx size + double ComputePriority(double dPriorityInputs, unsigned int nTxSize=0) const; + bool IsCoinBase() const { return (vin.size() == 1 && vin[0].prevout.IsNull()); @@ -307,17 +320,17 @@ private: CTxOut &txout; public: - static uint64 CompressAmount(uint64 nAmount); - static uint64 DecompressAmount(uint64 nAmount); + static uint64_t CompressAmount(uint64_t nAmount); + static uint64_t DecompressAmount(uint64_t nAmount); CTxOutCompressor(CTxOut &txoutIn) : txout(txoutIn) { } IMPLEMENT_SERIALIZE(({ if (!fRead) { - uint64 nVal = CompressAmount(txout.nValue); + uint64_t nVal = CompressAmount(txout.nValue); READWRITE(VARINT(nVal)); } else { - uint64 nVal = 0; + uint64_t nVal = 0; READWRITE(VARINT(nVal)); txout.nValue = DecompressAmount(nVal); } @@ -382,219 +395,6 @@ public: }; -/** pruned version of CTransaction: only retains metadata and unspent transaction outputs - * - * Serialized format: - * - VARINT(nVersion) - * - VARINT(nCode) - * - unspentness bitvector, for vout[2] and further; least significant byte first - * - the non-spent CTxOuts (via CTxOutCompressor) - * - VARINT(nHeight) - * - * The nCode value consists of: - * - bit 1: IsCoinBase() - * - bit 2: vout[0] is not spent - * - bit 4: vout[1] is not spent - * - The higher bits encode N, the number of non-zero bytes in the following bitvector. - * - In case both bit 2 and bit 4 are unset, they encode N-1, as there must be at - * least one non-spent output). - * - * Example: 0104835800816115944e077fe7c803cfa57f29b36bf87c1d358bb85e - * <><><--------------------------------------------><----> - * | \ | / - * version code vout[1] height - * - * - version = 1 - * - code = 4 (vout[1] is not spent, and 0 non-zero bytes of bitvector follow) - * - unspentness bitvector: as 0 non-zero bytes follow, it has length 0 - * - vout[1]: 835800816115944e077fe7c803cfa57f29b36bf87c1d35 - * * 8358: compact amount representation for 60000000000 (600 BTC) - * * 00: special txout type pay-to-pubkey-hash - * * 816115944e077fe7c803cfa57f29b36bf87c1d35: address uint160 - * - height = 203998 - * - * - * Example: 0109044086ef97d5790061b01caab50f1b8e9c50a5057eb43c2d9563a4eebbd123008c988f1a4a4de2161e0f50aac7f17e7f9555caa486af3b - * <><><--><--------------------------------------------------><----------------------------------------------><----> - * / \ \ | | / - * version code unspentness vout[4] vout[16] height - * - * - version = 1 - * - code = 9 (coinbase, neither vout[0] or vout[1] are unspent, - * 2 (1, +1 because both bit 2 and bit 4 are unset) non-zero bitvector bytes follow) - * - unspentness bitvector: bits 2 (0x04) and 14 (0x4000) are set, so vout[2+2] and vout[14+2] are unspent - * - vout[4]: 86ef97d5790061b01caab50f1b8e9c50a5057eb43c2d9563a4ee - * * 86ef97d579: compact amount representation for 234925952 (2.35 BTC) - * * 00: special txout type pay-to-pubkey-hash - * * 61b01caab50f1b8e9c50a5057eb43c2d9563a4ee: address uint160 - * - vout[16]: bbd123008c988f1a4a4de2161e0f50aac7f17e7f9555caa4 - * * bbd123: compact amount representation for 110397 (0.001 BTC) - * * 00: special txout type pay-to-pubkey-hash - * * 8c988f1a4a4de2161e0f50aac7f17e7f9555caa4: address uint160 - * - height = 120891 - */ -class CCoins -{ -public: - // whether transaction is a coinbase - bool fCoinBase; - - // unspent transaction outputs; spent outputs are .IsNull(); spent outputs at the end of the array are dropped - std::vector vout; - - // at which height this transaction was included in the active block chain - int nHeight; - - // version of the CTransaction; accesses to this value should probably check for nHeight as well, - // as new tx version will probably only be introduced at certain heights - int nVersion; - - // construct a CCoins from a CTransaction, at a given height - CCoins(const CTransaction &tx, int nHeightIn) : fCoinBase(tx.IsCoinBase()), vout(tx.vout), nHeight(nHeightIn), nVersion(tx.nVersion) { } - - // empty constructor - CCoins() : fCoinBase(false), vout(0), nHeight(0), nVersion(0) { } - - // remove spent outputs at the end of vout - void Cleanup() { - while (vout.size() > 0 && vout.back().IsNull()) - vout.pop_back(); - if (vout.empty()) - std::vector().swap(vout); - } - - void swap(CCoins &to) { - std::swap(to.fCoinBase, fCoinBase); - to.vout.swap(vout); - std::swap(to.nHeight, nHeight); - std::swap(to.nVersion, nVersion); - } - - // equality test - friend bool operator==(const CCoins &a, const CCoins &b) { - return a.fCoinBase == b.fCoinBase && - a.nHeight == b.nHeight && - a.nVersion == b.nVersion && - a.vout == b.vout; - } - friend bool operator!=(const CCoins &a, const CCoins &b) { - return !(a == b); - } - - void CalcMaskSize(unsigned int &nBytes, unsigned int &nNonzeroBytes) const; - - bool IsCoinBase() const { - return fCoinBase; - } - - unsigned int GetSerializeSize(int nType, int nVersion) const { - unsigned int nSize = 0; - unsigned int nMaskSize = 0, nMaskCode = 0; - CalcMaskSize(nMaskSize, nMaskCode); - bool fFirst = vout.size() > 0 && !vout[0].IsNull(); - bool fSecond = vout.size() > 1 && !vout[1].IsNull(); - assert(fFirst || fSecond || nMaskCode); - unsigned int nCode = 8*(nMaskCode - (fFirst || fSecond ? 0 : 1)) + (fCoinBase ? 1 : 0) + (fFirst ? 2 : 0) + (fSecond ? 4 : 0); - // version - nSize += ::GetSerializeSize(VARINT(this->nVersion), nType, nVersion); - // size of header code - nSize += ::GetSerializeSize(VARINT(nCode), nType, nVersion); - // spentness bitmask - nSize += nMaskSize; - // txouts themself - for (unsigned int i = 0; i < vout.size(); i++) - if (!vout[i].IsNull()) - nSize += ::GetSerializeSize(CTxOutCompressor(REF(vout[i])), nType, nVersion); - // height - nSize += ::GetSerializeSize(VARINT(nHeight), nType, nVersion); - return nSize; - } - - template - void Serialize(Stream &s, int nType, int nVersion) const { - unsigned int nMaskSize = 0, nMaskCode = 0; - CalcMaskSize(nMaskSize, nMaskCode); - bool fFirst = vout.size() > 0 && !vout[0].IsNull(); - bool fSecond = vout.size() > 1 && !vout[1].IsNull(); - assert(fFirst || fSecond || nMaskCode); - unsigned int nCode = 8*(nMaskCode - (fFirst || fSecond ? 0 : 1)) + (fCoinBase ? 1 : 0) + (fFirst ? 2 : 0) + (fSecond ? 4 : 0); - // version - ::Serialize(s, VARINT(this->nVersion), nType, nVersion); - // header code - ::Serialize(s, VARINT(nCode), nType, nVersion); - // spentness bitmask - for (unsigned int b = 0; b - void Unserialize(Stream &s, int nType, int nVersion) { - unsigned int nCode = 0; - // version - ::Unserialize(s, VARINT(this->nVersion), nType, nVersion); - // header code - ::Unserialize(s, VARINT(nCode), nType, nVersion); - fCoinBase = nCode & 1; - std::vector vAvail(2, false); - vAvail[0] = nCode & 2; - vAvail[1] = nCode & 4; - unsigned int nMaskCode = (nCode / 8) + ((nCode & 6) != 0 ? 0 : 1); - // spentness bitmask - while (nMaskCode > 0) { - unsigned char chAvail = 0; - ::Unserialize(s, chAvail, nType, nVersion); - for (unsigned int p = 0; p < 8; p++) { - bool f = (chAvail & (1 << p)) != 0; - vAvail.push_back(f); - } - if (chAvail != 0) - nMaskCode--; - } - // txouts themself - vout.assign(vAvail.size(), CTxOut()); - for (unsigned int i = 0; i < vAvail.size(); i++) { - if (vAvail[i]) - ::Unserialize(s, REF(CTxOutCompressor(vout[i])), nType, nVersion); - } - // coinbase height - ::Unserialize(s, VARINT(nHeight), nType, nVersion); - Cleanup(); - } - - // mark an outpoint spent, and construct undo information - bool Spend(const COutPoint &out, CTxInUndo &undo); - - // mark a vout spent - bool Spend(int nPos); - - // check whether a particular output is still available - bool IsAvailable(unsigned int nPos) const { - return (nPos < vout.size() && !vout[nPos].IsNull()); - } - - // check whether the entire CCoins is spent - // note that only !IsPruned() CCoins can be serialized - bool IsPruned() const { - BOOST_FOREACH(const CTxOut &out, vout) - if (!out.IsNull()) - return false; - return true; - } -}; - - /** Nodes collect new transactions into a block, hash them into a hash tree, * and scan through nonce values to make the block's hash satisfy proof-of-work * requirements. When they solve the proof-of-work, they broadcast the block @@ -674,9 +474,9 @@ public: return GetHash(); } - int64 GetBlockTime() const + int64_t GetBlockTime() const { - return (int64)nTime; + return (int64_t)nTime; } }; @@ -700,7 +500,7 @@ public: SetNull(); *((CBlockHeader*)this) = header; } - + IMPLEMENT_SERIALIZE ( READWRITE(*(CBlockHeader*)this); @@ -739,4 +539,38 @@ public: void print() const; }; + +/** Describes a place in the block chain to another node such that if the + * other node doesn't have the same branch, it can find a recent common trunk. + * The further back it is, the further before the fork it may be. + */ +struct CBlockLocator +{ + std::vector vHave; + + CBlockLocator() {} + + CBlockLocator(const std::vector& vHaveIn) + { + vHave = vHaveIn; + } + + IMPLEMENT_SERIALIZE + ( + if (!(nType & SER_GETHASH)) + READWRITE(nVersion); + READWRITE(vHave); + ) + + void SetNull() + { + vHave.clear(); + } + + bool IsNull() + { + return vHave.empty(); + } +}; + #endif diff --git a/src/crypter.cpp b/src/crypter.cpp index 32baabd6..4c43e3a7 100644 --- a/src/crypter.cpp +++ b/src/crypter.cpp @@ -1,16 +1,16 @@ -// Copyright (c) 2009-2012 The Bitcoin Developers +// Copyright (c) 2009-2013 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. +#include "crypter.h" + +#include "script.h" + +#include +#include +#include #include #include -#include -#include -#ifdef WIN32 -#include -#endif - -#include "crypter.h" bool CCrypter::SetKeyFromPassphrase(const SecureString& strKeyData, const std::vector& chSalt, const unsigned int nRounds, const unsigned int nDerivationMethod) { @@ -119,3 +119,156 @@ bool DecryptSecret(const CKeyingMaterial& vMasterKey, const std::vector &vchCryptedSecret = (*mi).second.second; + CKeyingMaterial vchSecret; + if(!DecryptSecret(vMasterKeyIn, vchCryptedSecret, vchPubKey.GetHash(), vchSecret)) + return false; + if (vchSecret.size() != 32) + return false; + CKey key; + key.Set(vchSecret.begin(), vchSecret.end(), vchPubKey.IsCompressed()); + if (key.GetPubKey() == vchPubKey) + break; + return false; + } + vMasterKey = vMasterKeyIn; + } + NotifyStatusChanged(this); + return true; +} + +bool CCryptoKeyStore::AddKeyPubKey(const CKey& key, const CPubKey &pubkey) +{ + { + LOCK(cs_KeyStore); + if (!IsCrypted()) + return CBasicKeyStore::AddKeyPubKey(key, pubkey); + + if (IsLocked()) + return false; + + std::vector vchCryptedSecret; + CKeyingMaterial vchSecret(key.begin(), key.end()); + if (!EncryptSecret(vMasterKey, vchSecret, pubkey.GetHash(), vchCryptedSecret)) + return false; + + if (!AddCryptedKey(pubkey, vchCryptedSecret)) + return false; + } + return true; +} + + +bool CCryptoKeyStore::AddCryptedKey(const CPubKey &vchPubKey, const std::vector &vchCryptedSecret) +{ + { + LOCK(cs_KeyStore); + if (!SetCrypted()) + return false; + + mapCryptedKeys[vchPubKey.GetID()] = make_pair(vchPubKey, vchCryptedSecret); + } + return true; +} + +bool CCryptoKeyStore::GetKey(const CKeyID &address, CKey& keyOut) const +{ + { + LOCK(cs_KeyStore); + if (!IsCrypted()) + return CBasicKeyStore::GetKey(address, keyOut); + + CryptedKeyMap::const_iterator mi = mapCryptedKeys.find(address); + if (mi != mapCryptedKeys.end()) + { + const CPubKey &vchPubKey = (*mi).second.first; + const std::vector &vchCryptedSecret = (*mi).second.second; + CKeyingMaterial vchSecret; + if (!DecryptSecret(vMasterKey, vchCryptedSecret, vchPubKey.GetHash(), vchSecret)) + return false; + if (vchSecret.size() != 32) + return false; + keyOut.Set(vchSecret.begin(), vchSecret.end(), vchPubKey.IsCompressed()); + return true; + } + } + return false; +} + +bool CCryptoKeyStore::GetPubKey(const CKeyID &address, CPubKey& vchPubKeyOut) const +{ + { + LOCK(cs_KeyStore); + if (!IsCrypted()) + return CKeyStore::GetPubKey(address, vchPubKeyOut); + + CryptedKeyMap::const_iterator mi = mapCryptedKeys.find(address); + if (mi != mapCryptedKeys.end()) + { + vchPubKeyOut = (*mi).second.first; + return true; + } + } + return false; +} + +bool CCryptoKeyStore::EncryptKeys(CKeyingMaterial& vMasterKeyIn) +{ + { + LOCK(cs_KeyStore); + if (!mapCryptedKeys.empty() || IsCrypted()) + return false; + + fUseCrypto = true; + BOOST_FOREACH(KeyMap::value_type& mKey, mapKeys) + { + const CKey &key = mKey.second; + CPubKey vchPubKey = key.GetPubKey(); + CKeyingMaterial vchSecret(key.begin(), key.end()); + std::vector vchCryptedSecret; + if (!EncryptSecret(vMasterKeyIn, vchSecret, vchPubKey.GetHash(), vchCryptedSecret)) + return false; + if (!AddCryptedKey(vchPubKey, vchCryptedSecret)) + return false; + } + mapKeys.clear(); + } + return true; +} diff --git a/src/crypter.h b/src/crypter.h index 4134c1b4..4791428b 100644 --- a/src/crypter.h +++ b/src/crypter.h @@ -1,12 +1,15 @@ -// Copyright (c) 2009-2012 The Bitcoin Developers +// Copyright (c) 2009-2013 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef __CRYPTER_H__ #define __CRYPTER_H__ -#include "allocators.h" /* for SecureString */ -#include "key.h" +#include "allocators.h" #include "serialize.h" +#include "keystore.h" + +class uint256; const unsigned int WALLET_CRYPTO_KEY_SIZE = 32; const unsigned int WALLET_CRYPTO_SALT_SIZE = 8; @@ -88,20 +91,102 @@ public: // Try to keep the key data out of swap (and be a bit over-careful to keep the IV that we don't even use out of swap) // Note that this does nothing about suspend-to-disk (which will put all our key data on disk) // Note as well that at no point in this program is any attempt made to prevent stealing of keys by reading the memory of the running process. - LockedPageManager::instance.LockRange(&chKey[0], sizeof chKey); - LockedPageManager::instance.LockRange(&chIV[0], sizeof chIV); + LockedPageManager::Instance().LockRange(&chKey[0], sizeof chKey); + LockedPageManager::Instance().LockRange(&chIV[0], sizeof chIV); } ~CCrypter() { CleanKey(); - LockedPageManager::instance.UnlockRange(&chKey[0], sizeof chKey); - LockedPageManager::instance.UnlockRange(&chIV[0], sizeof chIV); + LockedPageManager::Instance().UnlockRange(&chKey[0], sizeof chKey); + LockedPageManager::Instance().UnlockRange(&chIV[0], sizeof chIV); } }; bool EncryptSecret(const CKeyingMaterial& vMasterKey, const CKeyingMaterial &vchPlaintext, const uint256& nIV, std::vector &vchCiphertext); bool DecryptSecret(const CKeyingMaterial& vMasterKey, const std::vector& vchCiphertext, const uint256& nIV, CKeyingMaterial& vchPlaintext); +/** Keystore which keeps the private keys encrypted. + * It derives from the basic key store, which is used if no encryption is active. + */ +class CCryptoKeyStore : public CBasicKeyStore +{ +private: + CryptedKeyMap mapCryptedKeys; + + CKeyingMaterial vMasterKey; + + // if fUseCrypto is true, mapKeys must be empty + // if fUseCrypto is false, vMasterKey must be empty + bool fUseCrypto; + +protected: + bool SetCrypted(); + + // will encrypt previously unencrypted keys + bool EncryptKeys(CKeyingMaterial& vMasterKeyIn); + + bool Unlock(const CKeyingMaterial& vMasterKeyIn); + +public: + CCryptoKeyStore() : fUseCrypto(false) + { + } + + bool IsCrypted() const + { + return fUseCrypto; + } + + bool IsLocked() const + { + if (!IsCrypted()) + return false; + bool result; + { + LOCK(cs_KeyStore); + result = vMasterKey.empty(); + } + return result; + } + + bool Lock(); + + virtual bool AddCryptedKey(const CPubKey &vchPubKey, const std::vector &vchCryptedSecret); + bool AddKeyPubKey(const CKey& key, const CPubKey &pubkey); + bool HaveKey(const CKeyID &address) const + { + { + LOCK(cs_KeyStore); + if (!IsCrypted()) + return CBasicKeyStore::HaveKey(address); + return mapCryptedKeys.count(address) > 0; + } + return false; + } + bool GetKey(const CKeyID &address, CKey& keyOut) const; + bool GetPubKey(const CKeyID &address, CPubKey& vchPubKeyOut) const; + void GetKeys(std::set &setAddress) const + { + if (!IsCrypted()) + { + CBasicKeyStore::GetKeys(setAddress); + return; + } + setAddress.clear(); + CryptedKeyMap::const_iterator mi = mapCryptedKeys.begin(); + while (mi != mapCryptedKeys.end()) + { + setAddress.insert((*mi).first); + mi++; + } + } + + /* Wallet status (encrypted, locked) changed. + * Note: Called without locks held. + */ + boost::signals2::signal NotifyStatusChanged; +}; + #endif diff --git a/src/db.cpp b/src/db.cpp index 03f46f3c..eb40f3cc 100644 --- a/src/db.cpp +++ b/src/db.cpp @@ -1,21 +1,25 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2014 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include "chainparams.h" #include "db.h" -#include "util.h" -#include "hash.h" + #include "addrman.h" -#include -#include -#include +#include "hash.h" +#include "protocol.h" +#include "util.h" + +#include #ifndef WIN32 -#include "sys/stat.h" +#include #endif +#include +#include +#include + using namespace std; using namespace boost; @@ -38,7 +42,7 @@ void CDBEnv::EnvShutdown() fDbEnvInit = false; int ret = dbenv.close(0); if (ret != 0) - printf("EnvShutdown exception: %s (%d)\n", DbEnv::strerror(ret), ret); + LogPrintf("CDBEnv::EnvShutdown : Error %d shutting down database environment: %s\n", ret, DbEnv::strerror(ret)); if (!fMockDb) DbEnv(0).remove(path.string().c_str(), 0); } @@ -68,9 +72,9 @@ bool CDBEnv::Open(const boost::filesystem::path& pathIn) path = pathIn; filesystem::path pathLogDir = path / "database"; - filesystem::create_directory(pathLogDir); + TryCreateDirectory(pathLogDir); filesystem::path pathErrorFile = path / "db.log"; - printf("dbenv.open LogDir=%s ErrorFile=%s\n", pathLogDir.string().c_str(), pathErrorFile.string().c_str()); + LogPrintf("CDBEnv::Open : LogDir=%s ErrorFile=%s\n", pathLogDir.string(), pathErrorFile.string()); unsigned int nEnvFlags = 0; if (GetBoolArg("-privdb", true)) @@ -97,7 +101,7 @@ bool CDBEnv::Open(const boost::filesystem::path& pathIn) nEnvFlags, S_IRUSR | S_IWUSR); if (ret != 0) - return error("CDB() : error %s (%d) opening database environment", DbEnv::strerror(ret), ret); + return error("CDBEnv::Open : Error %d opening database environment: %s\n", ret, DbEnv::strerror(ret)); fDbEnvInit = true; fMockDb = false; @@ -107,11 +111,11 @@ bool CDBEnv::Open(const boost::filesystem::path& pathIn) void CDBEnv::MakeMock() { if (fDbEnvInit) - throw runtime_error("CDBEnv::MakeMock(): already initialized"); + throw runtime_error("CDBEnv::MakeMock : Already initialized"); boost::this_thread::interruption_point(); - printf("CDBEnv::MakeMock()\n"); + LogPrint("db", "CDBEnv::MakeMock\n"); dbenv.set_cachesize(1, 0, 1); dbenv.set_lg_bsize(10485760*4); @@ -130,7 +134,7 @@ void CDBEnv::MakeMock() DB_PRIVATE, S_IRUSR | S_IWUSR); if (ret > 0) - throw runtime_error(strprintf("CDBEnv::MakeMock(): error %d opening database environment", ret)); + throw runtime_error(strprintf("CDBEnv::MakeMock : Error %d opening database environment.", ret)); fDbEnvInit = true; fMockDb = true; @@ -168,16 +172,16 @@ bool CDBEnv::Salvage(std::string strFile, bool fAggressive, int result = db.verify(strFile.c_str(), NULL, &strDump, flags); if (result == DB_VERIFY_BAD) { - printf("Error: Salvage found errors, all data may not be recoverable.\n"); + LogPrintf("CDBEnv::Salvage : Database salvage found errors, all data may not be recoverable.\n"); if (!fAggressive) { - printf("Error: Rerun with aggressive mode to ignore errors and continue.\n"); + LogPrintf("CDBEnv::Salvage : Rerun with aggressive mode to ignore errors and continue.\n"); return false; } } if (result != 0 && result != DB_VERIFY_BAD) { - printf("ERROR: db salvage failed: %d\n",result); + LogPrintf("CDBEnv::Salvage : Database salvage failed with result %d.\n", result); return false; } @@ -233,7 +237,7 @@ CDB::CDB(const char *pszFile, const char* pszMode) : { LOCK(bitdb.cs_db); if (!bitdb.Open(GetDataDir())) - throw runtime_error("env open failed"); + throw runtime_error("CDB : Failed to open database environment."); strFile = pszFile; ++bitdb.mapFileUseCount[strFile]; @@ -248,7 +252,7 @@ CDB::CDB(const char *pszFile, const char* pszMode) : DbMpoolFile*mpf = pdb->get_mpf(); ret = mpf->set_flags(DB_MPOOL_NOFILE, 1); if (ret != 0) - throw runtime_error(strprintf("CDB() : failed to configure for no temp file backing for database %s", pszFile)); + throw runtime_error(strprintf("CDB : Failed to configure for no temp file backing for database %s", pszFile)); } ret = pdb->open(NULL, // Txn pointer @@ -264,7 +268,7 @@ CDB::CDB(const char *pszFile, const char* pszMode) : pdb = NULL; --bitdb.mapFileUseCount[strFile]; strFile = ""; - throw runtime_error(strprintf("CDB() : can't open database file %s, error %d", pszFile, ret)); + throw runtime_error(strprintf("CDB : Error %d, can't open database %s", ret, pszFile)); } if (fCreate && !Exists(string("version"))) @@ -348,7 +352,7 @@ bool CDB::Rewrite(const string& strFile, const char* pszSkip) bitdb.mapFileUseCount.erase(strFile); bool fSuccess = true; - printf("Rewriting %s...\n", strFile.c_str()); + LogPrintf("CDB::Rewrite : Rewriting %s...\n", strFile); string strFileRes = strFile + ".rewrite"; { // surround usage of db with extra {} CDB db(strFile.c_str(), "r"); @@ -362,7 +366,7 @@ bool CDB::Rewrite(const string& strFile, const char* pszSkip) 0); if (ret > 0) { - printf("Cannot create database file %s\n", strFileRes.c_str()); + LogPrintf("CDB::Rewrite : Can't create database file %s\n", strFileRes); fSuccess = false; } @@ -418,7 +422,7 @@ bool CDB::Rewrite(const string& strFile, const char* pszSkip) fSuccess = false; } if (!fSuccess) - printf("Rewriting of %s FAILED!\n", strFileRes.c_str()); + LogPrintf("CDB::Rewrite : Failed to rewrite database file %s\n", strFileRes); return fSuccess; } } @@ -430,10 +434,9 @@ bool CDB::Rewrite(const string& strFile, const char* pszSkip) void CDBEnv::Flush(bool fShutdown) { - int64 nStart = GetTimeMillis(); - // Flush log data to the actual data file - // on all files that are not in use - printf("Flush(%s)%s\n", fShutdown ? "true" : "false", fDbEnvInit ? "" : " db not started"); + int64_t nStart = GetTimeMillis(); + // Flush log data to the actual data file on all files that are not in use + LogPrint("db", "CDBEnv::Flush : Flush(%s)%s\n", fShutdown ? "true" : "false", fDbEnvInit ? "" : " database not started"); if (!fDbEnvInit) return; { @@ -443,23 +446,23 @@ void CDBEnv::Flush(bool fShutdown) { string strFile = (*mi).first; int nRefCount = (*mi).second; - printf("%s refcount=%d\n", strFile.c_str(), nRefCount); + LogPrint("db", "CDBEnv::Flush : Flushing %s (refcount = %d)...\n", strFile, nRefCount); if (nRefCount == 0) { // Move log data to the dat file CloseDb(strFile); - printf("%s checkpoint\n", strFile.c_str()); + LogPrint("db", "CDBEnv::Flush : %s checkpoint\n", strFile); dbenv.txn_checkpoint(0, 0, 0); - printf("%s detach\n", strFile.c_str()); + LogPrint("db", "CDBEnv::Flush : %s detach\n", strFile); if (!fMockDb) dbenv.lsn_reset(strFile.c_str(), 0); - printf("%s closed\n", strFile.c_str()); + LogPrint("db", "CDBEnv::Flush : %s closed\n", strFile); mapFileUseCount.erase(mi++); } else mi++; } - printf("DBFlush(%s)%s ended %15"PRI64d"ms\n", fShutdown ? "true" : "false", fDbEnvInit ? "" : " db not started", GetTimeMillis() - nStart); + LogPrint("db", "CDBEnv::Flush : Flush(%s)%s took %15dms\n", fShutdown ? "true" : "false", fDbEnvInit ? "" : " database not started", GetTimeMillis() - nStart); if (fShutdown) { char** listp; @@ -474,113 +477,3 @@ void CDBEnv::Flush(bool fShutdown) } } - - - - - - - - - - -// -// CAddrDB -// - -CAddrDB::CAddrDB() -{ - pathAddr = GetDataDir() / "peers.dat"; -} - -bool CAddrDB::Write(const CAddrMan& addr) -{ - // Generate random temporary filename - unsigned short randv = 0; - RAND_bytes((unsigned char *)&randv, sizeof(randv)); - std::string tmpfn = strprintf("peers.dat.%04x", randv); - - // serialize addresses, checksum data up to that point, then append csum - CDataStream ssPeers(SER_DISK, CLIENT_VERSION); - ssPeers << FLATDATA(Params().MessageStart()); - ssPeers << addr; - uint256 hash = Hash(ssPeers.begin(), ssPeers.end()); - ssPeers << hash; - - // open temp output file, and associate with CAutoFile - boost::filesystem::path pathTmp = GetDataDir() / tmpfn; - FILE *file = fopen(pathTmp.string().c_str(), "wb"); - CAutoFile fileout = CAutoFile(file, SER_DISK, CLIENT_VERSION); - if (!fileout) - return error("CAddrman::Write() : open failed"); - - // Write and commit header, data - try { - fileout << ssPeers; - } - catch (std::exception &e) { - return error("CAddrman::Write() : I/O error"); - } - FileCommit(fileout); - fileout.fclose(); - - // replace existing peers.dat, if any, with new peers.dat.XXXX - if (!RenameOver(pathTmp, pathAddr)) - return error("CAddrman::Write() : Rename-into-place failed"); - - return true; -} - -bool CAddrDB::Read(CAddrMan& addr) -{ - // open input file, and associate with CAutoFile - FILE *file = fopen(pathAddr.string().c_str(), "rb"); - CAutoFile filein = CAutoFile(file, SER_DISK, CLIENT_VERSION); - if (!filein) - return error("CAddrman::Read() : open failed"); - - // use file size to size memory buffer - int fileSize = GetFilesize(filein); - int dataSize = fileSize - sizeof(uint256); - //Don't try to resize to a negative number if file is small - if ( dataSize < 0 ) dataSize = 0; - vector vchData; - vchData.resize(dataSize); - uint256 hashIn; - - // read data and checksum from file - try { - filein.read((char *)&vchData[0], dataSize); - filein >> hashIn; - } - catch (std::exception &e) { - return error("CAddrman::Read() 2 : I/O error or stream data corrupted"); - } - filein.fclose(); - - CDataStream ssPeers(vchData, SER_DISK, CLIENT_VERSION); - - // verify stored checksum matches input data - uint256 hashTmp = Hash(ssPeers.begin(), ssPeers.end()); - if (hashIn != hashTmp) - return error("CAddrman::Read() : checksum mismatch; data corrupted"); - - unsigned char pchMsgTmp[4]; - try { - // de-serialize file header (network specific magic number) and .. - ssPeers >> FLATDATA(pchMsgTmp); - - // ... verify the network matches ours - if (memcmp(pchMsgTmp, Params().MessageStart(), sizeof(pchMsgTmp))) - return error("CAddrman::Read() : invalid network magic number"); - - // de-serialize address data into one CAddrMan object - ssPeers >> addr; - } - catch (std::exception &e) { - return error("CAddrman::Read() : I/O error or stream data corrupted"); - } - - return true; -} - diff --git a/src/db.h b/src/db.h index b3f269f3..66d7f319 100644 --- a/src/db.h +++ b/src/db.h @@ -1,31 +1,30 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2013 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef BITCOIN_DB_H #define BITCOIN_DB_H -#include "sync.h" #include "serialize.h" +#include "sync.h" +#include "version.h" #include #include #include -#include +#include #include class CAddrMan; -class CBlockLocator; +struct CBlockLocator; class CDiskBlockIndex; -class CMasterKey; class COutPoint; -class CWallet; extern unsigned int nWalletDBUpdated; void ThreadFlushWalletDB(const std::string& strWalletFile); -bool BackupWallet(const CWallet& wallet, const std::string& strDest); class CDBEnv @@ -306,22 +305,4 @@ public: bool static Rewrite(const std::string& strFile, const char* pszSkip = NULL); }; - - - - - - - -/** Access to the (IP) address database (peers.dat) */ -class CAddrDB -{ -private: - boost::filesystem::path pathAddr; -public: - CAddrDB(); - bool Write(const CAddrMan& addr); - bool Read(CAddrMan& addr); -}; - #endif // BITCOIN_DB_H diff --git a/src/hash.cpp b/src/hash.cpp index bddd8abf..7b054bd1 100644 --- a/src/hash.cpp +++ b/src/hash.cpp @@ -56,3 +56,44 @@ unsigned int MurmurHash3(unsigned int nHashSeed, const std::vectorctxOuter); + SHA512_Update(&pctx->ctxOuter, key, 128); + + for (int n=0; n<128; n++) + key[n] ^= 0x5c ^ 0x36; + SHA512_Init(&pctx->ctxInner); + return SHA512_Update(&pctx->ctxInner, key, 128); +} + +int HMAC_SHA512_Update(HMAC_SHA512_CTX *pctx, const void *pdata, size_t len) +{ + return SHA512_Update(&pctx->ctxInner, pdata, len); +} + +int HMAC_SHA512_Final(unsigned char *pmd, HMAC_SHA512_CTX *pctx) +{ + unsigned char buf[64]; + SHA512_Final(buf, &pctx->ctxInner); + SHA512_Update(&pctx->ctxOuter, buf, 64); + return SHA512_Final(pmd, &pctx->ctxOuter); +} diff --git a/src/hash.h b/src/hash.h index 536ab711..7dbf1b64 100644 --- a/src/hash.h +++ b/src/hash.h @@ -1,17 +1,20 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2013 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef BITCOIN_HASH_H #define BITCOIN_HASH_H -#include "uint256.h" #include "serialize.h" +#include "uint256.h" +#include "version.h" -#include -#include #include +#include +#include + template inline uint256 Hash(const T1 pbegin, const T1 pend) { @@ -123,4 +126,14 @@ inline uint160 Hash160(const std::vector& vch) unsigned int MurmurHash3(unsigned int nHashSeed, const std::vector& vDataToHash); +typedef struct +{ + SHA512_CTX ctxInner; + SHA512_CTX ctxOuter; +} HMAC_SHA512_CTX; + +int HMAC_SHA512_Init(HMAC_SHA512_CTX *pctx, const void *pkey, size_t len); +int HMAC_SHA512_Update(HMAC_SHA512_CTX *pctx, const void *pdata, size_t len); +int HMAC_SHA512_Final(unsigned char *pmd, HMAC_SHA512_CTX *pctx); + #endif diff --git a/src/init.cpp b/src/init.cpp index bfcae3b4..68761f89 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -1,37 +1,48 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2014 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include "init.h" -#include "main.h" -#include "core.h" -#include "chainparams.h" -#include "txdb.h" -#include "walletdb.h" -#include "bitcoinrpc.h" -#include "net.h" -#include "util.h" -#include "ui_interface.h" -#include "checkpoints.h" +#if defined(HAVE_CONFIG_H) +#include "bitcoin-config.h" +#endif -#include -#include -#include -#include -#include -#include +#include "init.h" + +#include "addrman.h" +#include "checkpoints.h" +#include "main.h" +#include "miner.h" +#include "net.h" +#include "rpcserver.h" +#include "txdb.h" +#include "ui_interface.h" +#include "util.h" +#ifdef ENABLE_WALLET +#include "db.h" +#include "wallet.h" +#include "walletdb.h" +#endif + +#include +#include #ifndef WIN32 #include #endif +#include +#include +#include +#include + using namespace std; using namespace boost; +#ifdef ENABLE_WALLET std::string strWalletFile; CWallet* pwalletMain; -CClientUIInterface uiInterface; +#endif #ifdef WIN32 // Win32 LevelDB doesn't use filedescriptors, and the ones used for @@ -95,21 +106,28 @@ static CCoinsViewDB *pcoinsdbview; void Shutdown() { + LogPrintf("Shutdown : In progress...\n"); static CCriticalSection cs_Shutdown; TRY_LOCK(cs_Shutdown, lockShutdown); if (!lockShutdown) return; RenameThread("bitcoin-shutoff"); - nTransactionsUpdated++; + mempool.AddTransactionsUpdated(1); StopRPCThreads(); ShutdownRPCMining(); - bitdb.Flush(false); - GenerateBitcoins(false, NULL); +#ifdef ENABLE_WALLET + if (pwalletMain) + bitdb.Flush(false); + GenerateBitcoins(false, NULL, 0); +#endif StopNode(); + UnregisterNodeSignals(GetNodeSignals()); { LOCK(cs_main); +#ifdef ENABLE_WALLET if (pwalletMain) - pwalletMain->SetBestChain(CBlockLocator(pindexBest)); + pwalletMain->SetBestChain(chainActive.GetLocator()); +#endif if (pblocktree) pblocktree->Flush(); if (pcoinsTip) @@ -118,10 +136,17 @@ void Shutdown() delete pcoinsdbview; pcoinsdbview = NULL; delete pblocktree; pblocktree = NULL; } - bitdb.Flush(true); +#ifdef ENABLE_WALLET + if (pwalletMain) + bitdb.Flush(true); +#endif boost::filesystem::remove(GetPidFile()); UnregisterAllWallets(); - delete pwalletMain; +#ifdef ENABLE_WALLET + if (pwalletMain) + delete pwalletMain; +#endif + LogPrintf("Shutdown : done\n"); } // @@ -139,13 +164,13 @@ void HandleSIGHUP(int) bool static InitError(const std::string &str) { - uiInterface.ThreadSafeMessageBox(str, "", CClientUIInterface::MSG_ERROR); + uiInterface.ThreadSafeMessageBox(str, "", CClientUIInterface::MSG_ERROR | CClientUIInterface::NOSHOWGUI); return false; } bool static InitWarning(const std::string &str) { - uiInterface.ThreadSafeMessageBox(str, "", CClientUIInterface::MSG_WARNING); + uiInterface.ThreadSafeMessageBox(str, "", CClientUIInterface::MSG_WARNING | CClientUIInterface::NOSHOWGUI); return true; } @@ -161,38 +186,52 @@ bool static Bind(const CService &addr, unsigned int flags) { return true; } -// Core-specific options shared between UI and daemon -std::string HelpMessage() +// Core-specific options shared between UI, daemon and RPC client +std::string HelpMessage(HelpMessageMode hmm) { string strUsage = _("Options:") + "\n"; strUsage += " -? " + _("This help message") + "\n"; + strUsage += " -alertnotify= " + _("Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message)") + "\n"; + strUsage += " -blocknotify= " + _("Execute command when the best block changes (%s in cmd is replaced by block hash)") + "\n"; + strUsage += " -checkblocks= " + _("How many blocks to check at startup (default: 288, 0 = all)") + "\n"; + strUsage += " -checklevel= " + _("How thorough the block verification of -checkblocks is (0-4, default: 3)") + "\n"; strUsage += " -conf= " + _("Specify configuration file (default: myriadcoin.conf)") + "\n"; - strUsage += " -pid= " + _("Specify pid file (default: myriadcoind.pid)") + "\n"; - strUsage += " -gen " + _("Generate coins (default: 0)") + "\n"; + if (hmm == HMM_BITCOIND) + { +#if !defined(WIN32) + strUsage += " -daemon " + _("Run in the background as a daemon and accept commands") + "\n"; +#endif + } strUsage += " -datadir= " + _("Specify data directory") + "\n"; - strUsage += " -wallet= " + _("Specify wallet file (within data directory)") + "\n"; - strUsage += " -dbcache= " + _("Set database cache size in megabytes (default: 25)") + "\n"; - strUsage += " -timeout= " + _("Specify connection timeout in milliseconds (default: 5000)") + "\n"; - strUsage += " -proxy= " + _("Connect through socks proxy") + "\n"; - strUsage += " -socks= " + _("Select the version of socks proxy to use (4-5, default: 5)") + "\n"; - strUsage += " -tor= " + _("Use proxy to reach tor hidden services (default: same as -proxy)") + "\n"; - strUsage += " -dns " + _("Allow DNS lookups for -addnode, -seednode and -connect") + "\n"; - strUsage += " -port= " + _("Listen for connections on (default: 8333 or testnet: 18333)") + "\n"; - strUsage += " -maxconnections= " + _("Maintain at most connections to peers (default: 125)") + "\n"; + strUsage += " -dbcache= " + strprintf(_("Set database cache size in megabytes (%d to %d, default: %d)"), nMinDbCache, nMaxDbCache, nDefaultDbCache) + "\n"; + strUsage += " -keypool= " + _("Set key pool size to (default: 100)") + "\n"; + strUsage += " -loadblock= " + _("Imports blocks from external blk000??.dat file") + " " + _("on startup") + "\n"; + strUsage += " -par= " + strprintf(_("Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d)"), -(int)boost::thread::hardware_concurrency(), MAX_SCRIPTCHECK_THREADS, DEFAULT_SCRIPTCHECK_THREADS) + "\n"; + strUsage += " -pid= " + _("Specify pid file (default: myriadcoind.pid)") + "\n"; + strUsage += " -reindex " + _("Rebuild block chain index from current blk000??.dat files") + " " + _("on startup") + "\n"; + strUsage += " -txindex " + _("Maintain a full transaction index (default: 0)") + "\n"; + + strUsage += "\n" + _("Connection options:") + "\n"; strUsage += " -addnode= " + _("Add a node to connect to and attempt to keep the connection open") + "\n"; - strUsage += " -connect= " + _("Connect only to the specified node(s)") + "\n"; - strUsage += " -seednode= " + _("Connect to a node to retrieve peer addresses, and disconnect") + "\n"; - strUsage += " -externalip= " + _("Specify your own public address") + "\n"; - strUsage += " -onlynet= " + _("Only connect to nodes in network (IPv4, IPv6 or Tor)") + "\n"; - strUsage += " -discover " + _("Discover own IP address (default: 1 when listening and no -externalip)") + "\n"; - strUsage += " -checkpoints " + _("Only accept block chain matching built-in checkpoints (default: 1)") + "\n"; - strUsage += " -listen " + _("Accept connections from outside (default: 1 if no -proxy or -connect)") + "\n"; - strUsage += " -bind= " + _("Bind to given address and always listen on it. Use [host]:port notation for IPv6") + "\n"; - strUsage += " -dnsseed " + _("Find peers using DNS lookup (default: 1 unless -connect)") + "\n"; strUsage += " -banscore= " + _("Threshold for disconnecting misbehaving peers (default: 100)") + "\n"; strUsage += " -bantime= " + _("Number of seconds to keep misbehaving peers from reconnecting (default: 86400)") + "\n"; + strUsage += " -bind= " + _("Bind to given address and always listen on it. Use [host]:port notation for IPv6") + "\n"; + strUsage += " -connect= " + _("Connect only to the specified node(s)") + "\n"; + strUsage += " -discover " + _("Discover own IP address (default: 1 when listening and no -externalip)") + "\n"; + strUsage += " -dns " + _("Allow DNS lookups for -addnode, -seednode and -connect") + " " + _("(default: 1)") + "\n"; + strUsage += " -dnsseed " + _("Find peers using DNS lookup (default: 1 unless -connect)") + "\n"; + strUsage += " -externalip= " + _("Specify your own public address") + "\n"; + strUsage += " -listen " + _("Accept connections from outside (default: 1 if no -proxy or -connect)") + "\n"; + strUsage += " -maxconnections= " + _("Maintain at most connections to peers (default: 125)") + "\n"; strUsage += " -maxreceivebuffer= " + _("Maximum per-connection receive buffer, *1000 bytes (default: 5000)") + "\n"; strUsage += " -maxsendbuffer= " + _("Maximum per-connection send buffer, *1000 bytes (default: 1000)") + "\n"; + strUsage += " -onion= " + _("Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy)") + "\n"; + strUsage += " -onlynet= " + _("Only connect to nodes in network (IPv4, IPv6 or Tor)") + "\n"; + strUsage += " -port= " + _("Listen for connections on (default: 8333 or testnet: 18333)") + "\n"; + strUsage += " -proxy= " + _("Connect through SOCKS proxy") + "\n"; + strUsage += " -seednode= " + _("Connect to a node to retrieve peer addresses, and disconnect") + "\n"; + strUsage += " -socks= " + _("Select SOCKS version for -proxy (4 or 5, default: 5)") + "\n"; + strUsage += " -timeout= " + _("Specify connection timeout in milliseconds (default: 5000)") + "\n"; #ifdef USE_UPNP #if USE_UPNP strUsage += " -upnp " + _("Use UPnP to map the listening port (default: 1 when listening)") + "\n"; @@ -200,55 +239,82 @@ std::string HelpMessage() strUsage += " -upnp " + _("Use UPnP to map the listening port (default: 0)") + "\n"; #endif #endif - strUsage += " -paytxfee= " + _("Fee per KB to add to transactions you send") + "\n"; - if (fHaveGUI) - strUsage += " -server " + _("Accept command line and JSON-RPC commands") + "\n"; -#if !defined(WIN32) - if (fHaveGUI) - strUsage += " -daemon " + _("Run in the background as a daemon and accept commands") + "\n"; + +#ifdef ENABLE_WALLET + strUsage += "\n" + _("Wallet options:") + "\n"; + strUsage += " -disablewallet " + _("Do not load the wallet and disable wallet RPC calls") + "\n"; + strUsage += " -paytxfee= " + _("Fee per kB to add to transactions you send") + "\n"; + strUsage += " -rescan " + _("Rescan the block chain for missing wallet transactions") + " " + _("on startup") + "\n"; + strUsage += " -salvagewallet " + _("Attempt to recover private keys from a corrupt wallet.dat") + " " + _("on startup") + "\n"; + strUsage += " -spendzeroconfchange " + _("Spend unconfirmed change when sending transactions (default: 1)") + "\n"; + strUsage += " -upgradewallet " + _("Upgrade wallet to latest format") + " " + _("on startup") + "\n"; + strUsage += " -wallet= " + _("Specify wallet file (within data directory)") + " " + _("(default: wallet.dat)") + "\n"; + strUsage += " -walletnotify= " + _("Execute command when a wallet transaction changes (%s in cmd is replaced by TxID)") + "\n"; + strUsage += " -zapwallettxes " + _("Clear list of wallet transactions (diagnostic tool; implies -rescan)") + "\n"; #endif - strUsage += " -testnet " + _("Use the test network") + "\n"; - strUsage += " -debug " + _("Output extra debugging information. Implies all other -debug* options") + "\n"; - strUsage += " -debugnet " + _("Output extra network debugging information") + "\n"; - strUsage += " -logtimestamps " + _("Prepend debug output with timestamp") + "\n"; - strUsage += " -shrinkdebugfile " + _("Shrink debug.log file on client startup (default: 1 when no -debug)") + "\n"; + + strUsage += "\n" + _("Debugging/Testing options:") + "\n"; + if (GetBoolArg("-help-debug", false)) + { + strUsage += " -benchmark " + _("Show benchmark information (default: 0)") + "\n"; + strUsage += " -checkpoints " + _("Only accept block chain matching built-in checkpoints (default: 1)") + "\n"; + strUsage += " -dblogsize= " + _("Flush database activity from memory pool to disk log every megabytes (default: 100)") + "\n"; + strUsage += " -disablesafemode " + _("Disable safemode, override a real safe mode event (default: 0)") + "\n"; + strUsage += " -testsafemode " + _("Force safe mode (default: 0)") + "\n"; + strUsage += " -dropmessagestest= " + _("Randomly drop 1 of every network messages") + "\n"; + strUsage += " -fuzzmessagestest= " + _("Randomly fuzz 1 of every network messages") + "\n"; + strUsage += " -flushwallet " + _("Run a thread to flush wallet periodically (default: 1)") + "\n"; + } + strUsage += " -debug= " + _("Output debugging information (default: 0, supplying is optional)") + "\n"; + strUsage += " " + _("If is not supplied, output all debugging information.") + "\n"; + strUsage += " " + _(" can be:"); + strUsage += " addrman, alert, coindb, db, lock, rand, rpc, selectcoins, mempool, net"; // Don't translate these and qt below + if (hmm == HMM_BITCOIN_QT) + strUsage += ", qt"; + strUsage += ".\n"; + strUsage += " -gen " + _("Generate coins (default: 0)") + "\n"; + strUsage += " -genproclimit= " + _("Set the processor limit for when generation is on (-1 = unlimited, default: -1)") + "\n"; + strUsage += " -help-debug " + _("Show all debugging options (usage: --help -help-debug)") + "\n"; + strUsage += " -logtimestamps " + _("Prepend debug output with timestamp (default: 1)") + "\n"; + if (GetBoolArg("-help-debug", false)) + { + strUsage += " -limitfreerelay= " + _("Continuously rate-limit free transactions to *1000 bytes per minute (default:15)") + "\n"; + strUsage += " -maxsigcachesize= " + _("Limit size of signature cache to entries (default: 50000)") + "\n"; + } + strUsage += " -mintxfee= " + _("Fees smaller than this are considered zero fee (for transaction creation) (default:") + " " + FormatMoney(CTransaction::nMinTxFee) + ")" + "\n"; + strUsage += " -minrelaytxfee= " + _("Fees smaller than this are considered zero fee (for relaying) (default:") + " " + FormatMoney(CTransaction::nMinRelayTxFee) + ")" + "\n"; strUsage += " -printtoconsole " + _("Send trace/debug info to console instead of debug.log file") + "\n"; - strUsage += " -regtest " + _("Enter regression test mode, which uses a special chain in which blocks can be " - "solved instantly. This is intended for regression testing tools and app development.") + "\n"; -#ifdef WIN32 - strUsage += " -printtodebugger " + _("Send trace/debug info to debugger") + "\n"; -#endif + if (GetBoolArg("-help-debug", false)) + { + strUsage += " -printblock= " + _("Print block on startup, if found in block index") + "\n"; + strUsage += " -printblocktree " + _("Print block tree on startup (default: 0)") + "\n"; + strUsage += " -printpriority " + _("Log transaction priority and fee per kB when mining blocks (default: 0)") + "\n"; + strUsage += " -privdb " + _("Sets the DB_PRIVATE flag in the wallet db environment (default: 1)") + "\n"; + strUsage += " -regtest " + _("Enter regression test mode, which uses a special chain in which blocks can be solved instantly.") + "\n"; + strUsage += " " + _("This is intended for regression testing tools and app development.") + "\n"; + strUsage += " " + _("In this mode -genproclimit controls how many blocks are generated immediately.") + "\n"; + } + strUsage += " -shrinkdebugfile " + _("Shrink debug.log file on client startup (default: 1 when no -debug)") + "\n"; + strUsage += " -testnet " + _("Use the test network") + "\n"; + + strUsage += "\n" + _("Block creation options:") + "\n"; + strUsage += " -blockminsize= " + _("Set minimum block size in bytes (default: 0)") + "\n"; + strUsage += " -blockmaxsize= " + strprintf(_("Set maximum block size in bytes (default: %d)"), DEFAULT_BLOCK_MAX_SIZE) + "\n"; + strUsage += " -blockprioritysize= " + strprintf(_("Set maximum size of high-priority/low-fee transactions in bytes (default: %d)"), DEFAULT_BLOCK_PRIORITY_SIZE) + "\n"; + + strUsage += "\n" + _("RPC server options:") + "\n"; + strUsage += " -server " + _("Accept command line and JSON-RPC commands") + "\n"; strUsage += " -rpcuser= " + _("Username for JSON-RPC connections") + "\n"; strUsage += " -rpcpassword= " + _("Password for JSON-RPC connections") + "\n"; strUsage += " -rpcport= " + _("Listen for JSON-RPC connections on (default: 8332 or testnet: 18332)") + "\n"; strUsage += " -rpcallowip= " + _("Allow JSON-RPC connections from specified IP address") + "\n"; - if (!fHaveGUI) - strUsage += " -rpcconnect= " + _("Send commands to node running on (default: 127.0.0.1)") + "\n"; strUsage += " -rpcthreads= " + _("Set the number of threads to service RPC calls (default: 4)") + "\n"; - strUsage += " -blocknotify= " + _("Execute command when the best block changes (%s in cmd is replaced by block hash)") + "\n"; - strUsage += " -walletnotify= " + _("Execute command when a wallet transaction changes (%s in cmd is replaced by TxID)") + "\n"; - strUsage += " -alertnotify= " + _("Execute command when a relevant alert is received (%s in cmd is replaced by message)") + "\n"; - strUsage += " -upgradewallet " + _("Upgrade wallet to latest format") + "\n"; - strUsage += " -keypool= " + _("Set key pool size to (default: 100)") + "\n"; - strUsage += " -rescan " + _("Rescan the block chain for missing wallet transactions") + "\n"; - strUsage += " -salvagewallet " + _("Attempt to recover private keys from a corrupt wallet.dat") + "\n"; - strUsage += " -checkblocks= " + _("How many blocks to check at startup (default: 288, 0 = all)") + "\n"; - strUsage += " -checklevel= " + _("How thorough the block verification is (0-4, default: 3)") + "\n"; - strUsage += " -txindex " + _("Maintain a full transaction index (default: 0)") + "\n"; - strUsage += " -loadblock= " + _("Imports blocks from external blk000??.dat file") + "\n"; - strUsage += " -reindex " + _("Rebuild block chain index from current blk000??.dat files") + "\n"; - strUsage += " -par= " + _("Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0)") + "\n"; - strUsage += " -algo= " + _("Mining algorithm: sha256d, scrypt, groestl, skein, qubit") + "\n"; - strUsage += "\n" + _("Block creation options:") + "\n"; - strUsage += " -blockminsize= " + _("Set minimum block size in bytes (default: 0)") + "\n"; - strUsage += " -blockmaxsize= " + _("Set maximum block size in bytes (default: 250000)") + "\n"; - strUsage += " -blockprioritysize= " + _("Set maximum size of high-priority/low-fee transactions in bytes (default: 27000)") + "\n"; - strUsage += "\n" + _("SSL options: (see the Bitcoin Wiki for SSL setup instructions)") + "\n"; + strUsage += "\n" + _("RPC SSL options: (see the Bitcoin Wiki for SSL setup instructions)") + "\n"; strUsage += " -rpcssl " + _("Use OpenSSL (https) for JSON-RPC connections") + "\n"; strUsage += " -rpcsslcertificatechainfile= " + _("Server certificate file (default: server.cert)") + "\n"; strUsage += " -rpcsslprivatekeyfile= " + _("Server private key (default: server.pem)") + "\n"; - strUsage += " -rpcsslciphers= " + _("Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)") + "\n"; + strUsage += " -rpcsslciphers= " + _("Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH)") + "\n"; return strUsage; } @@ -279,13 +345,13 @@ void ThreadImport(std::vector vImportFiles) FILE *file = OpenBlockFile(pos, true); if (!file) break; - printf("Reindexing block file blk%05u.dat...\n", (unsigned int)nFile); + LogPrintf("Reindexing block file blk%05u.dat...\n", (unsigned int)nFile); LoadExternalBlockFile(file, &pos); nFile++; } pblocktree->WriteReindexing(false); fReindex = false; - printf("Reindexing finished\n"); + LogPrintf("Reindexing finished\n"); // To avoid ending up in a situation without genesis block, re-try initializing (no-op if reindexing worked): InitBlockIndex(); } @@ -297,9 +363,11 @@ void ThreadImport(std::vector vImportFiles) if (file) { CImportingNow imp; filesystem::path pathBootstrapOld = GetDataDir() / "bootstrap.dat.old"; - printf("Importing bootstrap.dat...\n"); + LogPrintf("Importing bootstrap.dat...\n"); LoadExternalBlockFile(file); RenameOver(pathBootstrap, pathBootstrapOld); + } else { + LogPrintf("Warning: Could not open bootstrap file %s\n", pathBootstrap.string()); } } @@ -308,8 +376,10 @@ void ThreadImport(std::vector vImportFiles) FILE *file = fopen(path.string().c_str(), "rb"); if (file) { CImportingNow imp; - printf("Importing %s...\n", path.string().c_str()); + LogPrintf("Importing blocks file %s...\n", path.string()); LoadExternalBlockFile(file); + } else { + LogPrintf("Warning: Could not open blocks file %s\n", path.string()); } } } @@ -334,8 +404,8 @@ bool AppInit2(boost::thread_group& threadGroup) // Minimum supported OS versions: WinXP SP3, WinVista >= SP1, Win Server 2008 // A failure is non-critical and needs no further attention! #ifndef PROCESS_DEP_ENABLE -// We define this here, because GCCs winbase.h limits this to _WIN32_WINNT >= 0x0601 (Windows 7), -// which is not correct. Can be removed, when GCCs winbase.h is fixed! + // We define this here, because GCCs winbase.h limits this to _WIN32_WINNT >= 0x0601 (Windows 7), + // which is not correct. Can be removed, when GCCs winbase.h is fixed! #define PROCESS_DEP_ENABLE 0x00000001 #endif typedef BOOL (WINAPI *PSETPROCDEPPOL)(DWORD); @@ -367,64 +437,62 @@ bool AppInit2(boost::thread_group& threadGroup) sigemptyset(&sa_hup.sa_mask); sa_hup.sa_flags = 0; sigaction(SIGHUP, &sa_hup, NULL); + +#if defined (__SVR4) && defined (__sun) + // ignore SIGPIPE on Solaris + signal(SIGPIPE, SIG_IGN); +#endif #endif // ********************************************************* Step 2: parameter interactions - Checkpoints::fEnabled = GetBoolArg("-checkpoints", true); - if (!SelectParamsFromCommandLine()) { - return InitError("Invalid combination of -testnet and -regtest."); - } - if (mapArgs.count("-bind")) { // when specifying an explicit binding address, you want to listen on it // even when -connect or -proxy is specified - SoftSetBoolArg("-listen", true); + if (SoftSetBoolArg("-listen", true)) + LogPrintf("AppInit2 : parameter interaction: -bind set -> setting -listen=1\n"); } if (mapArgs.count("-connect") && mapMultiArgs["-connect"].size() > 0) { // when only connecting to trusted nodes, do not seed via DNS, or listen by default - SoftSetBoolArg("-dnsseed", false); - SoftSetBoolArg("-listen", false); + if (SoftSetBoolArg("-dnsseed", false)) + LogPrintf("AppInit2 : parameter interaction: -connect set -> setting -dnsseed=0\n"); + if (SoftSetBoolArg("-listen", false)) + LogPrintf("AppInit2 : parameter interaction: -connect set -> setting -listen=0\n"); } if (mapArgs.count("-proxy")) { - // to protect privacy, do not listen by default if a proxy server is specified - SoftSetBoolArg("-listen", false); + // to protect privacy, do not listen by default if a default proxy server is specified + if (SoftSetBoolArg("-listen", false)) + LogPrintf("AppInit2 : parameter interaction: -proxy set -> setting -listen=0\n"); } if (!GetBoolArg("-listen", true)) { // do not map ports or try to retrieve public IP when not listening (pointless) - SoftSetBoolArg("-upnp", false); - SoftSetBoolArg("-discover", false); + if (SoftSetBoolArg("-upnp", false)) + LogPrintf("AppInit2 : parameter interaction: -listen=0 -> setting -upnp=0\n"); + if (SoftSetBoolArg("-discover", false)) + LogPrintf("AppInit2 : parameter interaction: -listen=0 -> setting -discover=0\n"); } if (mapArgs.count("-externalip")) { // if an explicit public IP is specified, do not try to find others - SoftSetBoolArg("-discover", false); + if (SoftSetBoolArg("-discover", false)) + LogPrintf("AppInit2 : parameter interaction: -externalip set -> setting -discover=0\n"); } if (GetBoolArg("-salvagewallet", false)) { // Rewrite just private keys: rescan to find transactions - SoftSetBoolArg("-rescan", true); + if (SoftSetBoolArg("-rescan", true)) + LogPrintf("AppInit2 : parameter interaction: -salvagewallet=1 -> setting -rescan=1\n"); + } + + // -zapwallettx implies a rescan + if (GetBoolArg("-zapwallettxes", false)) { + if (SoftSetBoolArg("-rescan", true)) + LogPrintf("AppInit2 : parameter interaction: -zapwallettxes=1 -> setting -rescan=1\n"); } - // Algo - std::string strAlgo = GetArg("-algo", "sha256d"); - transform(strAlgo.begin(),strAlgo.end(),strAlgo.begin(),::tolower); - if (strAlgo == "sha" || strAlgo == "sha256" || strAlgo == "sha256d") - miningAlgo = ALGO_SHA256D; - else if (strAlgo == "scrypt") - miningAlgo = ALGO_SCRYPT; - else if (strAlgo == "groestl" || strAlgo == "groestlsha2") - miningAlgo = ALGO_GROESTL; - else if (strAlgo == "skein" || strAlgo == "skeinsha2") - miningAlgo = ALGO_SKEIN; - else if (strAlgo == "q2c" || strAlgo == "qubit") - miningAlgo = ALGO_QUBIT; - else - miningAlgo = ALGO_SHA256D; - // Make sure enough file descriptors are available int nBind = std::max((int)mapArgs.count("-bind"), 1); nMaxConnections = GetArg("-maxconnections", 125); @@ -437,11 +505,22 @@ bool AppInit2(boost::thread_group& threadGroup) // ********************************************************* Step 3: parameter-to-internal-flags - fDebug = GetBoolArg("-debug", false); + fDebug = !mapMultiArgs["-debug"].empty(); + // Special-case: if -debug=0/-nodebug is set, turn off debugging messages + const vector& categories = mapMultiArgs["-debug"]; + if (GetBoolArg("-nodebug", false) || find(categories.begin(), categories.end(), string("0")) != categories.end()) + fDebug = false; + + // Check for -debugnet (deprecated) + if (GetBoolArg("-debugnet", false)) + InitWarning(_("Warning: Deprecated argument -debugnet ignored, use -debug=net")); + fBenchmark = GetBoolArg("-benchmark", false); + mempool.setSanityCheck(GetBoolArg("-checkmempool", RegTest())); + Checkpoints::fEnabled = GetBoolArg("-checkpoints", true); // -par=0 means autodetect, but nScriptCheckThreads==0 means no concurrency - nScriptCheckThreads = GetArg("-par", 0); + nScriptCheckThreads = GetArg("-par", DEFAULT_SCRIPTCHECK_THREADS); if (nScriptCheckThreads <= 0) nScriptCheckThreads += boost::thread::hardware_concurrency(); if (nScriptCheckThreads <= 1) @@ -449,23 +528,13 @@ bool AppInit2(boost::thread_group& threadGroup) else if (nScriptCheckThreads > MAX_SCRIPTCHECK_THREADS) nScriptCheckThreads = MAX_SCRIPTCHECK_THREADS; - // -debug implies fDebug* - if (fDebug) - fDebugNet = true; - else - fDebugNet = GetBoolArg("-debugnet", false); - - if (fDaemon) - fServer = true; - else - fServer = GetBoolArg("-server", false); - - /* force fServer when running without GUI */ - if (!fHaveGUI) - fServer = true; + fServer = GetBoolArg("-server", false); fPrintToConsole = GetBoolArg("-printtoconsole", false); - fPrintToDebugger = GetBoolArg("-printtodebugger", false); - fLogTimestamps = GetBoolArg("-logtimestamps", false); + fLogTimestamps = GetBoolArg("-logtimestamps", true); + setvbuf(stdout, NULL, _IOLBF, 0); +#ifdef ENABLE_WALLET + bool fDisableWallet = GetBoolArg("-disablewallet", false); +#endif if (mapArgs.count("-timeout")) { @@ -488,116 +557,121 @@ bool AppInit2(boost::thread_group& threadGroup) // cost to you of processing a transaction. if (mapArgs.count("-mintxfee")) { - int64 n = 0; + int64_t n = 0; if (ParseMoney(mapArgs["-mintxfee"], n) && n > 0) CTransaction::nMinTxFee = n; else - return InitError(strprintf(_("Invalid amount for -mintxfee=: '%s'"), mapArgs["-mintxfee"].c_str())); + return InitError(strprintf(_("Invalid amount for -mintxfee=: '%s'"), mapArgs["-mintxfee"])); } if (mapArgs.count("-minrelaytxfee")) { - int64 n = 0; + int64_t n = 0; if (ParseMoney(mapArgs["-minrelaytxfee"], n) && n > 0) CTransaction::nMinRelayTxFee = n; else - return InitError(strprintf(_("Invalid amount for -minrelaytxfee=: '%s'"), mapArgs["-minrelaytxfee"].c_str())); + return InitError(strprintf(_("Invalid amount for -minrelaytxfee=: '%s'"), mapArgs["-minrelaytxfee"])); } +#ifdef ENABLE_WALLET if (mapArgs.count("-paytxfee")) { if (!ParseMoney(mapArgs["-paytxfee"], nTransactionFee)) - return InitError(strprintf(_("Invalid amount for -paytxfee=: '%s'"), mapArgs["-paytxfee"].c_str())); - if (nTransactionFee > 0.25 * COIN) + return InitError(strprintf(_("Invalid amount for -paytxfee=: '%s'"), mapArgs["-paytxfee"])); + if (nTransactionFee > nHighTransactionFeeWarning) InitWarning(_("Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction.")); } + bSpendZeroConfChange = GetArg("-spendzeroconfchange", true); strWalletFile = GetArg("-wallet", "wallet.dat"); - +#endif // ********************************************************* Step 4: application initialization: dir lock, daemonize, pidfile, debug log std::string strDataDir = GetDataDir().string(); - +#ifdef ENABLE_WALLET // Wallet file must be a plain filename without a directory if (strWalletFile != boost::filesystem::basename(strWalletFile) + boost::filesystem::extension(strWalletFile)) - return InitError(strprintf(_("Wallet %s resides outside data directory %s\n"), strWalletFile.c_str(), strDataDir.c_str())); - + return InitError(strprintf(_("Wallet %s resides outside data directory %s"), strWalletFile, strDataDir)); +#endif // Make sure only a single Bitcoin process is using the data directory. 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. Myriadcoin is probably already running."), strDataDir.c_str())); + return InitError(strprintf(_("Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running."), strDataDir)); if (GetBoolArg("-shrinkdebugfile", !fDebug)) ShrinkDebugFile(); - printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); - printf("Myriadcoin version %s (%s)\n", FormatFullVersion().c_str(), CLIENT_DATE.c_str()); - printf("Using OpenSSL version %s\n", SSLeay_version(SSLEAY_VERSION)); + LogPrintf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); + LogPrintf("Myriadcoin version %s (%s)\n", FormatFullVersion(), CLIENT_DATE); + LogPrintf("Using OpenSSL version %s\n", SSLeay_version(SSLEAY_VERSION)); +#ifdef ENABLE_WALLET + LogPrintf("Using BerkeleyDB version %s\n", DbEnv::version(0, 0, 0)); +#endif if (!fLogTimestamps) - printf("Startup time: %s\n", DateTimeStrFormat("%Y-%m-%d %H:%M:%S", GetTime()).c_str()); - printf("Default data directory %s\n", GetDefaultDataDir().string().c_str()); - printf("Using data directory %s\n", strDataDir.c_str()); - printf("Using at most %i connections (%i file descriptors available)\n", nMaxConnections, nFD); + LogPrintf("Startup time: %s\n", DateTimeStrFormat("%Y-%m-%d %H:%M:%S", GetTime())); + LogPrintf("Default data directory %s\n", GetDefaultDataDir().string()); + LogPrintf("Using data directory %s\n", strDataDir); + LogPrintf("Using at most %i connections (%i file descriptors available)\n", nMaxConnections, nFD); std::ostringstream strErrors; - if (fDaemon) - fprintf(stdout, "Myriadcoin server starting\n"); - if (nScriptCheckThreads) { - printf("Using %u threads for script verification\n", nScriptCheckThreads); + LogPrintf("Using %u threads for script verification\n", nScriptCheckThreads); for (int i=0; i 4) { -#ifdef USE_IPV6 if (!IsLimited(NET_IPV6)) SetProxy(NET_IPV6, addrProxy, nSocksVersion); -#endif SetNameProxy(addrProxy, nSocksVersion); } fProxy = true; } - // -tor can override normal proxy, -notor disables tor entirely - if (!(mapArgs.count("-tor") && mapArgs["-tor"] == "0") && (fProxy || mapArgs.count("-tor"))) { + // -onion can override normal proxy, -noonion disables tor entirely + // -tor here is a temporary backwards compatibility measure + if (mapArgs.count("-tor")) + printf("Notice: option -tor has been replaced with -onion and will be removed in a later version.\n"); + if (!(mapArgs.count("-onion") && mapArgs["-onion"] == "0") && + !(mapArgs.count("-tor") && mapArgs["-tor"] == "0") && + (fProxy || mapArgs.count("-onion") || mapArgs.count("-tor"))) { CService addrOnion; - if (!mapArgs.count("-tor")) + if (!mapArgs.count("-onion") && !mapArgs.count("-tor")) addrOnion = addrProxy; else - addrOnion = CService(mapArgs["-tor"], 9050); + addrOnion = mapArgs.count("-onion")?CService(mapArgs["-onion"], 9050):CService(mapArgs["-tor"], 9050); if (!addrOnion.IsValid()) - return InitError(strprintf(_("Invalid -tor address: '%s'"), mapArgs["-tor"].c_str())); + return InitError(strprintf(_("Invalid -onion address: '%s'"), mapArgs.count("-onion")?mapArgs["-onion"]:mapArgs["-tor"])); SetProxy(NET_TOR, addrOnion, 5); SetReachable(NET_TOR); } @@ -670,16 +741,14 @@ bool AppInit2(boost::thread_group& threadGroup) BOOST_FOREACH(std::string strBind, mapMultiArgs["-bind"]) { CService addrBind; if (!Lookup(strBind.c_str(), addrBind, GetListenPort(), false)) - return InitError(strprintf(_("Cannot resolve -bind address: '%s'"), strBind.c_str())); + return InitError(strprintf(_("Cannot resolve -bind address: '%s'"), strBind)); fBound |= Bind(addrBind, (BF_EXPLICIT | BF_REPORT_ERROR)); } } else { struct in_addr inaddr_any; inaddr_any.s_addr = INADDR_ANY; -#ifdef USE_IPV6 fBound |= Bind(CService(in6addr_any, GetListenPort()), BF_NONE); -#endif fBound |= Bind(CService(inaddr_any, GetListenPort()), !fBound ? BF_REPORT_ERROR : BF_NONE); } if (!fBound) @@ -690,7 +759,7 @@ bool AppInit2(boost::thread_group& threadGroup) BOOST_FOREACH(string strAddr, mapMultiArgs["-externalip"]) { CService addrLocal(strAddr, GetListenPort(), fNameLookup); if (!addrLocal.IsValid()) - return InitError(strprintf(_("Cannot resolve -externalip address: '%s'"), strAddr.c_str())); + return InitError(strprintf(_("Cannot resolve -externalip address: '%s'"), strAddr)); AddLocal(CService(strAddr, GetListenPort(), fNameLookup), LOCAL_MANUAL); } } @@ -714,12 +783,12 @@ bool AppInit2(boost::thread_group& threadGroup) filesystem::path dest = blocksDir / strprintf("blk%05u.dat", i-1); try { filesystem::create_hard_link(source, dest); - printf("Hardlinked %s -> %s\n", source.string().c_str(), dest.string().c_str()); + LogPrintf("Hardlinked %s -> %s\n", source.string(), dest.string()); linked = true; } catch (filesystem::filesystem_error & e) { // Note: hardlink creation failing is not a disaster, it just means // blocks will get re-downloaded from peers. - printf("Error hardlinking blk%04u.dat : %s\n", i, e.what()); + LogPrintf("Error hardlinking blk%04u.dat : %s\n", i, e.what()); break; } } @@ -730,9 +799,11 @@ bool AppInit2(boost::thread_group& threadGroup) } // cache size calculations - size_t nTotalCache = GetArg("-dbcache", 25) << 20; - if (nTotalCache < (1 << 22)) - nTotalCache = (1 << 22); // total cache cannot be less than 4 MiB + 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; if (nBlockTreeDBCache > (1 << 21) && !GetBoolArg("-txindex", false)) nBlockTreeDBCache = (1 << 21); // block tree db cache shouldn't be larger than 2 MiB @@ -770,7 +841,7 @@ bool AppInit2(boost::thread_group& threadGroup) // If the loaded chain has a wrong genesis, bail out immediately // (we're likely using a testnet datadir, or the other way around). - if (!mapBlockIndex.empty() && pindexGenesisBlock == NULL) + if (!mapBlockIndex.empty() && chainActive.Genesis() == NULL) return InitError(_("Incorrect or no genesis block found. Wrong datadir for network?")); // Initialize the block index (no-op if non-empty database was already loaded) @@ -787,11 +858,12 @@ bool AppInit2(boost::thread_group& threadGroup) uiInterface.InitMessage(_("Verifying blocks...")); if (!VerifyDB(GetArg("-checklevel", 3), - GetArg( "-checkblocks", 288))) { + GetArg("-checkblocks", 288))) { strLoadError = _("Corrupted block database detected"); break; } } catch(std::exception &e) { + if (fDebug) LogPrintf("%s\n", e.what()); strLoadError = _("Error opening block database"); break; } @@ -809,7 +881,7 @@ bool AppInit2(boost::thread_group& threadGroup) fReindex = true; fRequestShutdown = false; } else { - printf("Aborted block database rebuild. Exiting.\n"); + LogPrintf("Aborted block database rebuild. Exiting.\n"); return false; } } else { @@ -818,15 +890,15 @@ bool AppInit2(boost::thread_group& threadGroup) } } - // as LoadBlockIndex can take several minutes, it's possible the user - // requested to kill bitcoin-qt during the last operation. If so, exit. + // As LoadBlockIndex can take several minutes, it's possible the user + // requested to kill the GUI during the last operation. If so, exit. // As the program has not fully started yet, Shutdown() is possibly overkill. if (fRequestShutdown) { - printf("Shutdown requested. Exiting.\n"); + LogPrintf("Shutdown requested. Exiting.\n"); return false; } - printf(" block index %15"PRI64d"ms\n", GetTimeMillis() - nStart); + LogPrintf(" block index %15dms\n", GetTimeMillis() - nStart); if (GetBoolArg("-printblockindex", false) || GetBoolArg("-printblocktree", false)) { @@ -848,109 +920,130 @@ bool AppInit2(boost::thread_group& threadGroup) ReadBlockFromDisk(block, pindex); block.BuildMerkleTree(); block.print(); - printf("\n"); + LogPrintf("\n"); nFound++; } } if (nFound == 0) - printf("No blocks matching %s were found\n", strMatch.c_str()); + LogPrintf("No blocks matching %s were found\n", strMatch); return false; } // ********************************************************* Step 8: load wallet +#ifdef ENABLE_WALLET + if (fDisableWallet) { + pwalletMain = NULL; + LogPrintf("Wallet disabled!\n"); + } else { + if (GetBoolArg("-zapwallettxes", false)) { + uiInterface.InitMessage(_("Zapping all transactions from wallet...")); - uiInterface.InitMessage(_("Loading wallet...")); + pwalletMain = new CWallet(strWalletFile); + DBErrors nZapWalletRet = pwalletMain->ZapWalletTx(); + if (nZapWalletRet != DB_LOAD_OK) { + uiInterface.InitMessage(_("Error loading wallet.dat: Wallet corrupted")); + return false; + } - nStart = GetTimeMillis(); - bool fFirstRun = true; - pwalletMain = new CWallet(strWalletFile); - DBErrors nLoadWalletRet = pwalletMain->LoadWallet(fFirstRun); - if (nLoadWalletRet != DB_LOAD_OK) - { - if (nLoadWalletRet == DB_CORRUPT) - strErrors << _("Error loading wallet.dat: Wallet corrupted") << "\n"; - else if (nLoadWalletRet == DB_NONCRITICAL_ERROR) - { - string msg(_("Warning: error reading wallet.dat! All keys read correctly, but transaction data" - " or address book entries might be missing or incorrect.")); - InitWarning(msg); - } - else if (nLoadWalletRet == DB_TOO_NEW) - strErrors << _("Error loading wallet.dat: Wallet requires newer version of Myriadcoin") << "\n"; - else if (nLoadWalletRet == DB_NEED_REWRITE) - { - strErrors << _("Wallet needed to be rewritten: restart Myriadcoin to complete") << "\n"; - printf("%s", strErrors.str().c_str()); - return InitError(strErrors.str()); - } - else - strErrors << _("Error loading wallet.dat") << "\n"; - } - - if (GetBoolArg("-upgradewallet", fFirstRun)) - { - int nMaxVersion = GetArg("-upgradewallet", 0); - if (nMaxVersion == 0) // the -upgradewallet without argument case - { - printf("Performing wallet upgrade to %i\n", FEATURE_LATEST); - nMaxVersion = CLIENT_VERSION; - pwalletMain->SetMinVersion(FEATURE_LATEST); // permanently upgrade the wallet immediately - } - else - printf("Allowing wallet upgrade up to %i\n", nMaxVersion); - if (nMaxVersion < pwalletMain->GetVersion()) - strErrors << _("Cannot downgrade wallet") << "\n"; - pwalletMain->SetMaxVersion(nMaxVersion); - } - - if (fFirstRun) - { - // Create new keyUser and set as default key - RandAddSeedPerfmon(); - - CPubKey newDefaultKey; - if (pwalletMain->GetKeyFromPool(newDefaultKey, false)) { - pwalletMain->SetDefaultKey(newDefaultKey); - if (!pwalletMain->SetAddressBookName(pwalletMain->vchDefaultKey.GetID(), "")) - strErrors << _("Cannot write default address") << "\n"; + delete pwalletMain; + pwalletMain = NULL; } - pwalletMain->SetBestChain(CBlockLocator(pindexBest)); - } + uiInterface.InitMessage(_("Loading wallet...")); - printf("%s", strErrors.str().c_str()); - printf(" wallet %15"PRI64d"ms\n", GetTimeMillis() - nStart); - - RegisterWallet(pwalletMain); - - CBlockIndex *pindexRescan = pindexBest; - if (GetBoolArg("-rescan", false)) - pindexRescan = pindexGenesisBlock; - else - { - CWalletDB walletdb(strWalletFile); - CBlockLocator locator; - if (walletdb.ReadBestBlock(locator)) - pindexRescan = locator.GetBlockIndex(); - else - pindexRescan = pindexGenesisBlock; - } - if (pindexBest && pindexBest != pindexRescan) - { - uiInterface.InitMessage(_("Rescanning...")); - printf("Rescanning last %i blocks (from block %i)...\n", pindexBest->nHeight - pindexRescan->nHeight, pindexRescan->nHeight); nStart = GetTimeMillis(); - pwalletMain->ScanForWalletTransactions(pindexRescan, true); - printf(" rescan %15"PRI64d"ms\n", GetTimeMillis() - nStart); - pwalletMain->SetBestChain(CBlockLocator(pindexBest)); - nWalletDBUpdated++; - } + bool fFirstRun = true; + pwalletMain = new CWallet(strWalletFile); + DBErrors nLoadWalletRet = pwalletMain->LoadWallet(fFirstRun); + if (nLoadWalletRet != DB_LOAD_OK) + { + if (nLoadWalletRet == DB_CORRUPT) + strErrors << _("Error loading wallet.dat: Wallet corrupted") << "\n"; + else if (nLoadWalletRet == DB_NONCRITICAL_ERROR) + { + string msg(_("Warning: error reading wallet.dat! All keys read correctly, but transaction data" + " or address book entries might be missing or incorrect.")); + InitWarning(msg); + } + else if (nLoadWalletRet == DB_TOO_NEW) + strErrors << _("Error loading wallet.dat: Wallet requires newer version of Myriadcoin") << "\n"; + else if (nLoadWalletRet == DB_NEED_REWRITE) + { + strErrors << _("Wallet needed to be rewritten: restart Myriadcoin to complete") << "\n"; + LogPrintf("%s", strErrors.str()); + return InitError(strErrors.str()); + } + else + strErrors << _("Error loading wallet.dat") << "\n"; + } + if (GetBoolArg("-upgradewallet", fFirstRun)) + { + int nMaxVersion = GetArg("-upgradewallet", 0); + if (nMaxVersion == 0) // the -upgradewallet without argument case + { + LogPrintf("Performing wallet upgrade to %i\n", FEATURE_LATEST); + nMaxVersion = CLIENT_VERSION; + pwalletMain->SetMinVersion(FEATURE_LATEST); // permanently upgrade the wallet immediately + } + else + LogPrintf("Allowing wallet upgrade up to %i\n", nMaxVersion); + if (nMaxVersion < pwalletMain->GetVersion()) + strErrors << _("Cannot downgrade wallet") << "\n"; + pwalletMain->SetMaxVersion(nMaxVersion); + } + + if (fFirstRun) + { + // Create new keyUser and set as default key + RandAddSeedPerfmon(); + + CPubKey newDefaultKey; + if (pwalletMain->GetKeyFromPool(newDefaultKey)) { + pwalletMain->SetDefaultKey(newDefaultKey); + if (!pwalletMain->SetAddressBook(pwalletMain->vchDefaultKey.GetID(), "", "receive")) + strErrors << _("Cannot write default address") << "\n"; + } + + pwalletMain->SetBestChain(chainActive.GetLocator()); + } + + LogPrintf("%s", strErrors.str()); + LogPrintf(" wallet %15dms\n", GetTimeMillis() - nStart); + + RegisterWallet(pwalletMain); + + CBlockIndex *pindexRescan = chainActive.Tip(); + if (GetBoolArg("-rescan", false)) + pindexRescan = chainActive.Genesis(); + else + { + CWalletDB walletdb(strWalletFile); + CBlockLocator locator; + if (walletdb.ReadBestBlock(locator)) + pindexRescan = chainActive.FindFork(locator); + else + pindexRescan = chainActive.Genesis(); + } + if (chainActive.Tip() && chainActive.Tip() != pindexRescan) + { + uiInterface.InitMessage(_("Rescanning...")); + LogPrintf("Rescanning last %i blocks (from block %i)...\n", chainActive.Height() - pindexRescan->nHeight, pindexRescan->nHeight); + nStart = GetTimeMillis(); + pwalletMain->ScanForWalletTransactions(pindexRescan, true); + LogPrintf(" rescan %15dms\n", GetTimeMillis() - nStart); + pwalletMain->SetBestChain(chainActive.GetLocator()); + nWalletDBUpdated++; + } + } // (!fDisableWallet) +#else // ENABLE_WALLET + LogPrintf("No wallet compiled in!\n"); +#endif // !ENABLE_WALLET // ********************************************************* Step 9: import blocks // scan for better chains in the block chain database, that are not yet connected in the active best chain CValidationState state; - if (!ConnectBestBlock(state)) + if (!ActivateBestChain(state)) strErrors << "Failed to connect best block"; std::vector vImportFiles; @@ -970,10 +1063,10 @@ bool AppInit2(boost::thread_group& threadGroup) { CAddrDB adb; if (!adb.Read(addrman)) - printf("Invalid or missing peers.dat; recreating\n"); + LogPrintf("Invalid or missing peers.dat; recreating\n"); } - printf("Loaded %i addresses from peers.dat %"PRI64d"ms\n", + LogPrintf("Loaded %i addresses from peers.dat %dms\n", addrman.size(), GetTimeMillis() - nStart); // ********************************************************* Step 11: start node @@ -987,31 +1080,39 @@ bool AppInit2(boost::thread_group& threadGroup) RandAddSeedPerfmon(); //// debug print - printf("mapBlockIndex.size() = %"PRIszu"\n", mapBlockIndex.size()); - printf("nBestHeight = %d\n", nBestHeight); - printf("setKeyPool.size() = %"PRIszu"\n", pwalletMain->setKeyPool.size()); - printf("mapWallet.size() = %"PRIszu"\n", pwalletMain->mapWallet.size()); - printf("mapAddressBook.size() = %"PRIszu"\n", pwalletMain->mapAddressBook.size()); + LogPrintf("mapBlockIndex.size() = %u\n", mapBlockIndex.size()); + LogPrintf("nBestHeight = %d\n", chainActive.Height()); +#ifdef ENABLE_WALLET + LogPrintf("setKeyPool.size() = %u\n", pwalletMain ? pwalletMain->setKeyPool.size() : 0); + LogPrintf("mapWallet.size() = %u\n", pwalletMain ? pwalletMain->mapWallet.size() : 0); + LogPrintf("mapAddressBook.size() = %u\n", pwalletMain ? pwalletMain->mapAddressBook.size() : 0); +#endif StartNode(threadGroup); - // InitRPCMining is needed here so getwork/getblocktemplate in the GUI debug console works properly. InitRPCMining(); if (fServer) StartRPCThreads(); +#ifdef ENABLE_WALLET // Generate coins in the background - GenerateBitcoins(GetBoolArg("-gen", false), pwalletMain); + if (pwalletMain) + GenerateBitcoins(GetBoolArg("-gen", false), pwalletMain, GetArg("-genproclimit", -1)); +#endif // ********************************************************* Step 12: finished uiInterface.InitMessage(_("Done loading")); - // Add wallet transactions that aren't already in a block to mapTransactions - pwalletMain->ReacceptWalletTransactions(); +#ifdef ENABLE_WALLET + if (pwalletMain) { + // Add wallet transactions that aren't already in a block to mapTransactions + pwalletMain->ReacceptWalletTransactions(); - // Run a thread to flush wallet periodically - threadGroup.create_thread(boost::bind(&ThreadFlushWalletDB, boost::ref(pwalletMain->strWalletFile))); + // Run a thread to flush wallet periodically + threadGroup.create_thread(boost::bind(&ThreadFlushWalletDB, boost::ref(pwalletMain->strWalletFile))); + } +#endif return !fRequestShutdown; } diff --git a/src/init.h b/src/init.h index a4d5a672..2f569230 100644 --- a/src/init.h +++ b/src/init.h @@ -1,11 +1,18 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2013 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef BITCOIN_INIT_H #define BITCOIN_INIT_H -#include "wallet.h" +#include + +class CWallet; + +namespace boost { + class thread_group; +}; extern std::string strWalletFile; extern CWallet* pwalletMain; @@ -14,6 +21,14 @@ void StartShutdown(); bool ShutdownRequested(); void Shutdown(); bool AppInit2(boost::thread_group& threadGroup); -std::string HelpMessage(); + +/* The help message mode determines what help message to show */ +enum HelpMessageMode +{ + HMM_BITCOIND, + HMM_BITCOIN_QT +}; + +std::string HelpMessage(HelpMessageMode mode); #endif diff --git a/src/json/json_spirit_reader_template.h b/src/json/json_spirit_reader_template.h index 4dec00e6..46f5892f 100644 --- a/src/json/json_spirit_reader_template.h +++ b/src/json/json_spirit_reader_template.h @@ -33,8 +33,8 @@ namespace json_spirit { - const spirit_namespace::int_parser < boost::int64_t > int64_p = spirit_namespace::int_parser < boost::int64_t >(); - const spirit_namespace::uint_parser< boost::uint64_t > uint64_p = spirit_namespace::uint_parser< boost::uint64_t >(); + const spirit_namespace::int_parser < int64_t > int64_p = spirit_namespace::int_parser < int64_t >(); + const spirit_namespace::uint_parser< uint64_t > uint64_p = spirit_namespace::uint_parser< uint64_t >(); template< class Iter_type > bool is_eq( Iter_type first, Iter_type last, const char* c_str ) @@ -270,12 +270,12 @@ namespace json_spirit add_to_current( Value_type() ); } - void new_int( boost::int64_t i ) + void new_int( int64_t i ) { add_to_current( i ); } - void new_uint64( boost::uint64_t ui ) + void new_uint64( uint64_t ui ) { add_to_current( ui ); } @@ -425,8 +425,8 @@ namespace json_spirit typedef boost::function< void( Char_type ) > Char_action; typedef boost::function< void( Iter_type, Iter_type ) > Str_action; typedef boost::function< void( double ) > Real_action; - typedef boost::function< void( boost::int64_t ) > Int_action; - typedef boost::function< void( boost::uint64_t ) > Uint64_action; + typedef boost::function< void( int64_t ) > Int_action; + typedef boost::function< void( uint64_t ) > Uint64_action; Char_action begin_obj ( boost::bind( &Semantic_actions_t::begin_obj, &self.actions_, _1 ) ); Char_action end_obj ( boost::bind( &Semantic_actions_t::end_obj, &self.actions_, _1 ) ); diff --git a/src/json/json_spirit_value.h b/src/json/json_spirit_value.h index 7e83a2a7..13cc8921 100644 --- a/src/json/json_spirit_value.h +++ b/src/json/json_spirit_value.h @@ -16,8 +16,8 @@ #include #include #include +#include #include -#include #include #include @@ -45,8 +45,8 @@ namespace json_spirit Value_impl( const Array& value ); Value_impl( bool value ); Value_impl( int value ); - Value_impl( boost::int64_t value ); - Value_impl( boost::uint64_t value ); + Value_impl( int64_t value ); + Value_impl( uint64_t value ); Value_impl( double value ); Value_impl( const Value_impl& other ); @@ -65,8 +65,8 @@ namespace json_spirit const Array& get_array() const; bool get_bool() const; int get_int() const; - boost::int64_t get_int64() const; - boost::uint64_t get_uint64() const; + int64_t get_int64() const; + uint64_t get_uint64() const; double get_real() const; Object& get_obj(); @@ -83,7 +83,7 @@ namespace json_spirit typedef boost::variant< String_type, boost::recursive_wrapper< Object >, boost::recursive_wrapper< Array >, - bool, boost::int64_t, double > Variant; + bool, int64_t, double > Variant; Value_type type_; Variant v_; @@ -258,13 +258,13 @@ namespace json_spirit template< class Config > Value_impl< Config >::Value_impl( int value ) : type_( int_type ) - , v_( static_cast< boost::int64_t >( value ) ) + , v_( static_cast< int64_t >( value ) ) , is_uint64_( false ) { } template< class Config > - Value_impl< Config >::Value_impl( boost::int64_t value ) + Value_impl< Config >::Value_impl( int64_t value ) : type_( int_type ) , v_( value ) , is_uint64_( false ) @@ -272,9 +272,9 @@ namespace json_spirit } template< class Config > - Value_impl< Config >::Value_impl( boost::uint64_t value ) + Value_impl< Config >::Value_impl( uint64_t value ) : type_( int_type ) - , v_( static_cast< boost::int64_t >( value ) ) + , v_( static_cast< int64_t >( value ) ) , is_uint64_( true ) { } @@ -390,19 +390,19 @@ namespace json_spirit } template< class Config > - boost::int64_t Value_impl< Config >::get_int64() const + int64_t Value_impl< Config >::get_int64() const { check_type( int_type ); - return boost::get< boost::int64_t >( v_ ); + return boost::get< int64_t >( v_ ); } template< class Config > - boost::uint64_t Value_impl< Config >::get_uint64() const + uint64_t Value_impl< Config >::get_uint64() const { check_type( int_type ); - return static_cast< boost::uint64_t >( get_int64() ); + return static_cast< uint64_t >( get_int64() ); } template< class Config > @@ -481,13 +481,13 @@ namespace json_spirit } template< class Value > - boost::int64_t get_value( const Value& value, Type_to_type< boost::int64_t > ) + int64_t get_value( const Value& value, Type_to_type< int64_t > ) { return value.get_int64(); } template< class Value > - boost::uint64_t get_value( const Value& value, Type_to_type< boost::uint64_t > ) + uint64_t get_value( const Value& value, Type_to_type< uint64_t > ) { return value.get_uint64(); } diff --git a/src/json/json_spirit_writer_template.h b/src/json/json_spirit_writer_template.h index 28c49ddc..6b4978a1 100644 --- a/src/json/json_spirit_writer_template.h +++ b/src/json/json_spirit_writer_template.h @@ -28,7 +28,8 @@ namespace json_spirit template< class String_type > String_type non_printable_to_string( unsigned int c ) { - typedef typename String_type::value_type Char_type; + // Silence the warning: typedef ‘Char_type’ locally defined but not used [-Wunused-local-typedefs] + // typedef typename String_type::value_type Char_type; String_type result( 6, '\\' ); diff --git a/src/key.cpp b/src/key.cpp index 1ab4c62e..b57b7c50 100644 --- a/src/key.cpp +++ b/src/key.cpp @@ -1,13 +1,13 @@ -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2013 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include -#include -#include - #include "key.h" +#include +#include +#include +#include // anonymous namespace with local implementation code (OpenSSL interaction) namespace { @@ -148,10 +148,13 @@ public: } void SetSecretBytes(const unsigned char vch[32]) { + bool ret; BIGNUM bn; BN_init(&bn); - assert(BN_bin2bn(vch, 32, &bn)); - assert(EC_KEY_regenerate_key(pkey, &bn)); + ret = BN_bin2bn(vch, 32, &bn); + assert(ret); + ret = EC_KEY_regenerate_key(pkey, &bn); + assert(ret); BN_clear_free(&bn); } @@ -165,9 +168,12 @@ public: assert(nSize == nSize2); } - bool SetPrivKey(const CPrivKey &privkey) { + bool SetPrivKey(const CPrivKey &privkey, bool fSkipCheck=false) { const unsigned char* pbegin = &privkey[0]; if (d2i_ECPrivateKey(&pkey, &pbegin, privkey.size())) { + if(fSkipCheck) + return true; + // d2i_ECPrivateKey returns true if parsing succeeds. // This doesn't necessarily mean the key is valid. if (EC_KEY_check_key(pkey)) @@ -194,9 +200,28 @@ public: } bool Sign(const uint256 &hash, std::vector& vchSig) { + vchSig.clear(); + ECDSA_SIG *sig = ECDSA_do_sign((unsigned char*)&hash, sizeof(hash), pkey); + if (sig == NULL) + return false; + BN_CTX *ctx = BN_CTX_new(); + BN_CTX_start(ctx); + const EC_GROUP *group = EC_KEY_get0_group(pkey); + BIGNUM *order = BN_CTX_get(ctx); + BIGNUM *halforder = BN_CTX_get(ctx); + EC_GROUP_get_order(group, order, ctx); + BN_rshift1(halforder, order); + if (BN_cmp(sig->s, halforder) > 0) { + // enforce low S values, by negating the value (modulo the order) if above order/2. + BN_sub(sig->s, order, sig->s); + } + BN_CTX_end(ctx); + BN_CTX_free(ctx); unsigned int nSize = ECDSA_size(pkey); vchSig.resize(nSize); // Make sure it is big enough - assert(ECDSA_sign(0, (unsigned char*)&hash, sizeof(hash), &vchSig[0], &nSize, pkey)); + unsigned char *pos = &vchSig[0]; + nSize = i2d_ECDSA_SIG(sig, &pos); + ECDSA_SIG_free(sig); vchSig.resize(nSize); // Shrink to fit actual size return true; } @@ -254,6 +279,57 @@ public: ECDSA_SIG_free(sig); return ret; } + + static bool TweakSecret(unsigned char vchSecretOut[32], const unsigned char vchSecretIn[32], const unsigned char vchTweak[32]) + { + bool ret = true; + BN_CTX *ctx = BN_CTX_new(); + BN_CTX_start(ctx); + BIGNUM *bnSecret = BN_CTX_get(ctx); + BIGNUM *bnTweak = BN_CTX_get(ctx); + BIGNUM *bnOrder = BN_CTX_get(ctx); + EC_GROUP *group = EC_GROUP_new_by_curve_name(NID_secp256k1); + EC_GROUP_get_order(group, bnOrder, ctx); // what a grossly inefficient way to get the (constant) group order... + BN_bin2bn(vchTweak, 32, bnTweak); + if (BN_cmp(bnTweak, bnOrder) >= 0) + ret = false; // extremely unlikely + BN_bin2bn(vchSecretIn, 32, bnSecret); + BN_add(bnSecret, bnSecret, bnTweak); + BN_nnmod(bnSecret, bnSecret, bnOrder, ctx); + if (BN_is_zero(bnSecret)) + ret = false; // ridiculously unlikely + int nBits = BN_num_bits(bnSecret); + memset(vchSecretOut, 0, 32); + BN_bn2bin(bnSecret, &vchSecretOut[32-(nBits+7)/8]); + EC_GROUP_free(group); + BN_CTX_end(ctx); + BN_CTX_free(ctx); + return ret; + } + + bool TweakPublic(const unsigned char vchTweak[32]) { + bool ret = true; + BN_CTX *ctx = BN_CTX_new(); + BN_CTX_start(ctx); + BIGNUM *bnTweak = BN_CTX_get(ctx); + BIGNUM *bnOrder = BN_CTX_get(ctx); + BIGNUM *bnOne = BN_CTX_get(ctx); + const EC_GROUP *group = EC_KEY_get0_group(pkey); + EC_GROUP_get_order(group, bnOrder, ctx); // what a grossly inefficient way to get the (constant) group order... + BN_bin2bn(vchTweak, 32, bnTweak); + if (BN_cmp(bnTweak, bnOrder) >= 0) + ret = false; // extremely unlikely + EC_POINT *point = EC_POINT_dup(EC_KEY_get0_public_key(pkey), group); + BN_one(bnOne); + EC_POINT_mul(group, point, bnTweak, point, bnOne, ctx); + if (EC_POINT_is_at_infinity(group, point)) + ret = false; // ridiculously unlikely + EC_KEY_set_public_key(pkey, point); + EC_POINT_free(point); + BN_CTX_end(ctx); + BN_CTX_free(ctx); + return ret; + } }; }; // end of anonymous namespace @@ -340,6 +416,24 @@ bool CKey::SignCompact(const uint256 &hash, std::vector& vchSig) return true; } +bool CKey::Load(CPrivKey &privkey, CPubKey &vchPubKey, bool fSkipCheck=false) { + CECKey key; + if (!key.SetPrivKey(privkey, fSkipCheck)) + return false; + + key.GetSecretBytes(vch); + fCompressed = vchPubKey.IsCompressed(); + fValid = true; + + if (fSkipCheck) + return true; + + if (GetPubKey() != vchPubKey) + return false; + + return true; +} + bool CPubKey::Verify(const uint256 &hash, const std::vector& vchSig) const { if (!IsValid()) return false; @@ -394,3 +488,131 @@ bool CPubKey::Decompress() { key.GetPubKey(*this, false); return true; } + +void static BIP32Hash(const unsigned char chainCode[32], unsigned int nChild, unsigned char header, const unsigned char data[32], unsigned char output[64]) { + unsigned char num[4]; + num[0] = (nChild >> 24) & 0xFF; + num[1] = (nChild >> 16) & 0xFF; + num[2] = (nChild >> 8) & 0xFF; + num[3] = (nChild >> 0) & 0xFF; + HMAC_SHA512_CTX ctx; + HMAC_SHA512_Init(&ctx, chainCode, 32); + HMAC_SHA512_Update(&ctx, &header, 1); + HMAC_SHA512_Update(&ctx, data, 32); + HMAC_SHA512_Update(&ctx, num, 4); + HMAC_SHA512_Final(output, &ctx); +} + +bool CKey::Derive(CKey& keyChild, unsigned char ccChild[32], unsigned int nChild, const unsigned char cc[32]) const { + assert(IsValid()); + assert(IsCompressed()); + unsigned char out[64]; + LockObject(out); + if ((nChild >> 31) == 0) { + CPubKey pubkey = GetPubKey(); + assert(pubkey.begin() + 33 == pubkey.end()); + BIP32Hash(cc, nChild, *pubkey.begin(), pubkey.begin()+1, out); + } else { + assert(begin() + 32 == end()); + BIP32Hash(cc, nChild, 0, begin(), out); + } + memcpy(ccChild, out+32, 32); + bool ret = CECKey::TweakSecret((unsigned char*)keyChild.begin(), begin(), out); + UnlockObject(out); + keyChild.fCompressed = true; + keyChild.fValid = ret; + return ret; +} + +bool CPubKey::Derive(CPubKey& pubkeyChild, unsigned char ccChild[32], unsigned int nChild, const unsigned char cc[32]) const { + assert(IsValid()); + assert((nChild >> 31) == 0); + assert(begin() + 33 == end()); + unsigned char out[64]; + BIP32Hash(cc, nChild, *begin(), begin()+1, out); + memcpy(ccChild, out+32, 32); + CECKey key; + bool ret = key.SetPubKey(*this); + ret &= key.TweakPublic(out); + key.GetPubKey(pubkeyChild, true); + return ret; +} + +bool CExtKey::Derive(CExtKey &out, unsigned int nChild) const { + out.nDepth = nDepth + 1; + CKeyID id = key.GetPubKey().GetID(); + memcpy(&out.vchFingerprint[0], &id, 4); + out.nChild = nChild; + return key.Derive(out.key, out.vchChainCode, nChild, vchChainCode); +} + +void CExtKey::SetMaster(const unsigned char *seed, unsigned int nSeedLen) { + static const char hashkey[] = {'B','i','t','c','o','i','n',' ','s','e','e','d'}; + HMAC_SHA512_CTX ctx; + HMAC_SHA512_Init(&ctx, hashkey, sizeof(hashkey)); + HMAC_SHA512_Update(&ctx, seed, nSeedLen); + unsigned char out[64]; + LockObject(out); + HMAC_SHA512_Final(out, &ctx); + key.Set(&out[0], &out[32], true); + memcpy(vchChainCode, &out[32], 32); + UnlockObject(out); + nDepth = 0; + nChild = 0; + memset(vchFingerprint, 0, sizeof(vchFingerprint)); +} + +CExtPubKey CExtKey::Neuter() const { + CExtPubKey ret; + ret.nDepth = nDepth; + memcpy(&ret.vchFingerprint[0], &vchFingerprint[0], 4); + ret.nChild = nChild; + ret.pubkey = key.GetPubKey(); + memcpy(&ret.vchChainCode[0], &vchChainCode[0], 32); + return ret; +} + +void CExtKey::Encode(unsigned char code[74]) const { + code[0] = nDepth; + memcpy(code+1, vchFingerprint, 4); + code[5] = (nChild >> 24) & 0xFF; code[6] = (nChild >> 16) & 0xFF; + code[7] = (nChild >> 8) & 0xFF; code[8] = (nChild >> 0) & 0xFF; + memcpy(code+9, vchChainCode, 32); + code[41] = 0; + assert(key.size() == 32); + memcpy(code+42, key.begin(), 32); +} + +void CExtKey::Decode(const unsigned char code[74]) { + nDepth = code[0]; + memcpy(vchFingerprint, code+1, 4); + nChild = (code[5] << 24) | (code[6] << 16) | (code[7] << 8) | code[8]; + memcpy(vchChainCode, code+9, 32); + key.Set(code+42, code+74, true); +} + +void CExtPubKey::Encode(unsigned char code[74]) const { + code[0] = nDepth; + memcpy(code+1, vchFingerprint, 4); + code[5] = (nChild >> 24) & 0xFF; code[6] = (nChild >> 16) & 0xFF; + code[7] = (nChild >> 8) & 0xFF; code[8] = (nChild >> 0) & 0xFF; + memcpy(code+9, vchChainCode, 32); + assert(pubkey.size() == 33); + memcpy(code+41, pubkey.begin(), 33); +} + +void CExtPubKey::Decode(const unsigned char code[74]) { + nDepth = code[0]; + memcpy(vchFingerprint, code+1, 4); + nChild = (code[5] << 24) | (code[6] << 16) | (code[7] << 8) | code[8]; + memcpy(vchChainCode, code+9, 32); + pubkey.Set(code+41, code+74); +} + +bool CExtPubKey::Derive(CExtPubKey &out, unsigned int nChild) const { + out.nDepth = nDepth + 1; + CKeyID id = pubkey.GetID(); + memcpy(&out.vchFingerprint[0], &id, 4); + out.nChild = nChild; + return pubkey.Derive(out.pubkey, out.vchChainCode, nChild, vchChainCode); +} diff --git a/src/key.h b/src/key.h index ce469ad2..cf1165d3 100644 --- a/src/key.h +++ b/src/key.h @@ -2,15 +2,17 @@ // Copyright (c) 2009-2013 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef BITCOIN_KEY_H #define BITCOIN_KEY_H -#include - #include "allocators.h" +#include "hash.h" #include "serialize.h" #include "uint256.h" -#include "hash.h" + +#include +#include // secp256k1: // const unsigned int PRIVATE_KEY_SIZE = 279; @@ -135,7 +137,9 @@ public: return Hash(vch, vch+size()); } - // just check syntactic correctness. + // Check syntactic correctness. + // + // Note that this is consensus critical as CheckSig() calls it! bool IsValid() const { return size() > 0; } @@ -161,6 +165,9 @@ public: // Turn this public key into an uncompressed public key. bool Decompress(); + + // Derive BIP32 child pubkey. + bool Derive(CPubKey& pubkeyChild, unsigned char ccChild[32], unsigned int nChild, const unsigned char cc[32]) const; }; @@ -201,6 +208,11 @@ public: UnlockObject(vch); } + friend bool operator==(const CKey &a, const CKey &b) { + return a.fCompressed == b.fCompressed && a.size() == b.size() && + memcmp(&a.vch[0], &b.vch[0], a.size()) == 0; + } + // Initialize using begin and end iterators to byte data. template void Set(const T pbegin, const T pend, bool fCompressedIn) { @@ -251,6 +263,48 @@ public: // 0x1D = second key with even y, 0x1E = second key with odd y, // add 0x04 for compressed keys. bool SignCompact(const uint256 &hash, std::vector& vchSig) const; + + // Derive BIP32 child key. + bool Derive(CKey& keyChild, unsigned char ccChild[32], unsigned int nChild, const unsigned char cc[32]) const; + + // Load private key and check that public key matches. + bool Load(CPrivKey &privkey, CPubKey &vchPubKey, bool fSkipCheck); +}; + +struct CExtPubKey { + unsigned char nDepth; + unsigned char vchFingerprint[4]; + unsigned int nChild; + unsigned char vchChainCode[32]; + CPubKey pubkey; + + friend bool operator==(const CExtPubKey &a, const CExtPubKey &b) { + return a.nDepth == b.nDepth && memcmp(&a.vchFingerprint[0], &b.vchFingerprint[0], 4) == 0 && a.nChild == b.nChild && + memcmp(&a.vchChainCode[0], &b.vchChainCode[0], 32) == 0 && a.pubkey == b.pubkey; + } + + void Encode(unsigned char code[74]) const; + void Decode(const unsigned char code[74]); + bool Derive(CExtPubKey &out, unsigned int nChild) const; +}; + +struct CExtKey { + unsigned char nDepth; + unsigned char vchFingerprint[4]; + unsigned int nChild; + unsigned char vchChainCode[32]; + CKey key; + + friend bool operator==(const CExtKey &a, const CExtKey &b) { + return a.nDepth == b.nDepth && memcmp(&a.vchFingerprint[0], &b.vchFingerprint[0], 4) == 0 && a.nChild == b.nChild && + memcmp(&a.vchChainCode[0], &b.vchChainCode[0], 32) == 0 && a.key == b.key; + } + + void Encode(unsigned char code[74]) const; + void Decode(const unsigned char code[74]); + bool Derive(CExtKey &out, unsigned int nChild) const; + CExtPubKey Neuter() const; + void SetMaster(const unsigned char *seed, unsigned int nSeedLen); }; #endif diff --git a/src/keystore.cpp b/src/keystore.cpp index 808f8c24..46402ea2 100644 --- a/src/keystore.cpp +++ b/src/keystore.cpp @@ -1,11 +1,16 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2013 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "keystore.h" + +#include "crypter.h" +#include "key.h" #include "script.h" +#include + bool CKeyStore::GetPubKey(const CKeyID &address, CPubKey &vchPubKeyOut) const { CKey key; @@ -51,155 +56,3 @@ bool CBasicKeyStore::GetCScript(const CScriptID &hash, CScript& redeemScriptOut) return false; } -bool CCryptoKeyStore::SetCrypted() -{ - LOCK(cs_KeyStore); - if (fUseCrypto) - return true; - if (!mapKeys.empty()) - return false; - fUseCrypto = true; - return true; -} - -bool CCryptoKeyStore::Lock() -{ - if (!SetCrypted()) - return false; - - { - LOCK(cs_KeyStore); - vMasterKey.clear(); - } - - NotifyStatusChanged(this); - return true; -} - -bool CCryptoKeyStore::Unlock(const CKeyingMaterial& vMasterKeyIn) -{ - { - LOCK(cs_KeyStore); - if (!SetCrypted()) - return false; - - CryptedKeyMap::const_iterator mi = mapCryptedKeys.begin(); - for (; mi != mapCryptedKeys.end(); ++mi) - { - const CPubKey &vchPubKey = (*mi).second.first; - const std::vector &vchCryptedSecret = (*mi).second.second; - CKeyingMaterial vchSecret; - if(!DecryptSecret(vMasterKeyIn, vchCryptedSecret, vchPubKey.GetHash(), vchSecret)) - return false; - if (vchSecret.size() != 32) - return false; - CKey key; - key.Set(vchSecret.begin(), vchSecret.end(), vchPubKey.IsCompressed()); - if (key.GetPubKey() == vchPubKey) - break; - return false; - } - vMasterKey = vMasterKeyIn; - } - NotifyStatusChanged(this); - return true; -} - -bool CCryptoKeyStore::AddKeyPubKey(const CKey& key, const CPubKey &pubkey) -{ - { - LOCK(cs_KeyStore); - if (!IsCrypted()) - return CBasicKeyStore::AddKeyPubKey(key, pubkey); - - if (IsLocked()) - return false; - - std::vector vchCryptedSecret; - CKeyingMaterial vchSecret(key.begin(), key.end()); - if (!EncryptSecret(vMasterKey, vchSecret, pubkey.GetHash(), vchCryptedSecret)) - return false; - - if (!AddCryptedKey(pubkey, vchCryptedSecret)) - return false; - } - return true; -} - - -bool CCryptoKeyStore::AddCryptedKey(const CPubKey &vchPubKey, const std::vector &vchCryptedSecret) -{ - { - LOCK(cs_KeyStore); - if (!SetCrypted()) - return false; - - mapCryptedKeys[vchPubKey.GetID()] = make_pair(vchPubKey, vchCryptedSecret); - } - return true; -} - -bool CCryptoKeyStore::GetKey(const CKeyID &address, CKey& keyOut) const -{ - { - LOCK(cs_KeyStore); - if (!IsCrypted()) - return CBasicKeyStore::GetKey(address, keyOut); - - CryptedKeyMap::const_iterator mi = mapCryptedKeys.find(address); - if (mi != mapCryptedKeys.end()) - { - const CPubKey &vchPubKey = (*mi).second.first; - const std::vector &vchCryptedSecret = (*mi).second.second; - CKeyingMaterial vchSecret; - if (!DecryptSecret(vMasterKey, vchCryptedSecret, vchPubKey.GetHash(), vchSecret)) - return false; - if (vchSecret.size() != 32) - return false; - keyOut.Set(vchSecret.begin(), vchSecret.end(), vchPubKey.IsCompressed()); - return true; - } - } - return false; -} - -bool CCryptoKeyStore::GetPubKey(const CKeyID &address, CPubKey& vchPubKeyOut) const -{ - { - LOCK(cs_KeyStore); - if (!IsCrypted()) - return CKeyStore::GetPubKey(address, vchPubKeyOut); - - CryptedKeyMap::const_iterator mi = mapCryptedKeys.find(address); - if (mi != mapCryptedKeys.end()) - { - vchPubKeyOut = (*mi).second.first; - return true; - } - } - return false; -} - -bool CCryptoKeyStore::EncryptKeys(CKeyingMaterial& vMasterKeyIn) -{ - { - LOCK(cs_KeyStore); - if (!mapCryptedKeys.empty() || IsCrypted()) - return false; - - fUseCrypto = true; - BOOST_FOREACH(KeyMap::value_type& mKey, mapKeys) - { - const CKey &key = mKey.second; - CPubKey vchPubKey = key.GetPubKey(); - CKeyingMaterial vchSecret(key.begin(), key.end()); - std::vector vchCryptedSecret; - if (!EncryptSecret(vMasterKeyIn, vchSecret, vchPubKey.GetHash(), vchCryptedSecret)) - return false; - if (!AddCryptedKey(vchPubKey, vchCryptedSecret)) - return false; - } - mapKeys.clear(); - } - return true; -} diff --git a/src/keystore.h b/src/keystore.h index 49a7bf56..79d8661a 100644 --- a/src/keystore.h +++ b/src/keystore.h @@ -1,12 +1,14 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2013 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef BITCOIN_KEYSTORE_H #define BITCOIN_KEYSTORE_H -#include "crypter.h" +#include "key.h" #include "sync.h" + #include class CScript; @@ -30,7 +32,7 @@ public: virtual void GetKeys(std::set &setAddress) const =0; virtual bool GetPubKey(const CKeyID &address, CPubKey& vchPubKeyOut) const; - // Support for BIP 0013 : see https://en.bitcoin.it/wiki/BIP_0013 + // Support for BIP 0013 : see https://github.com/bitcoin/bips/blob/master/bip-0013.mediawiki virtual bool AddCScript(const CScript& redeemScript) =0; virtual bool HaveCScript(const CScriptID &hash) const =0; virtual bool GetCScript(const CScriptID &hash, CScript& redeemScriptOut) const =0; @@ -88,88 +90,7 @@ public: virtual bool GetCScript(const CScriptID &hash, CScript& redeemScriptOut) const; }; +typedef std::vector > CKeyingMaterial; typedef std::map > > CryptedKeyMap; -/** Keystore which keeps the private keys encrypted. - * It derives from the basic key store, which is used if no encryption is active. - */ -class CCryptoKeyStore : public CBasicKeyStore -{ -private: - CryptedKeyMap mapCryptedKeys; - - CKeyingMaterial vMasterKey; - - // if fUseCrypto is true, mapKeys must be empty - // if fUseCrypto is false, vMasterKey must be empty - bool fUseCrypto; - -protected: - bool SetCrypted(); - - // will encrypt previously unencrypted keys - bool EncryptKeys(CKeyingMaterial& vMasterKeyIn); - - bool Unlock(const CKeyingMaterial& vMasterKeyIn); - -public: - CCryptoKeyStore() : fUseCrypto(false) - { - } - - bool IsCrypted() const - { - return fUseCrypto; - } - - bool IsLocked() const - { - if (!IsCrypted()) - return false; - bool result; - { - LOCK(cs_KeyStore); - result = vMasterKey.empty(); - } - return result; - } - - bool Lock(); - - virtual bool AddCryptedKey(const CPubKey &vchPubKey, const std::vector &vchCryptedSecret); - bool AddKeyPubKey(const CKey& key, const CPubKey &pubkey); - bool HaveKey(const CKeyID &address) const - { - { - LOCK(cs_KeyStore); - if (!IsCrypted()) - return CBasicKeyStore::HaveKey(address); - return mapCryptedKeys.count(address) > 0; - } - return false; - } - bool GetKey(const CKeyID &address, CKey& keyOut) const; - bool GetPubKey(const CKeyID &address, CPubKey& vchPubKeyOut) const; - void GetKeys(std::set &setAddress) const - { - if (!IsCrypted()) - { - CBasicKeyStore::GetKeys(setAddress); - return; - } - setAddress.clear(); - CryptedKeyMap::const_iterator mi = mapCryptedKeys.begin(); - while (mi != mapCryptedKeys.end()) - { - setAddress.insert((*mi).first); - mi++; - } - } - - /* Wallet status (encrypted, locked) changed. - * Note: Called without locks held. - */ - boost::signals2::signal NotifyStatusChanged; -}; - #endif diff --git a/src/leveldb/.gitignore b/src/leveldb/.gitignore index 55ba072e..71d87a4e 100644 --- a/src/leveldb/.gitignore +++ b/src/leveldb/.gitignore @@ -6,6 +6,7 @@ build_config.mk *.so.* *_test db_bench +leveldbutil Release Debug Benchmark diff --git a/src/leveldb/AUTHORS b/src/leveldb/AUTHORS index fc40194a..2439d7a4 100644 --- a/src/leveldb/AUTHORS +++ b/src/leveldb/AUTHORS @@ -9,3 +9,4 @@ Sanjay Ghemawat # Partial list of contributors: Kevin Regan +Johan Bilien diff --git a/src/leveldb/Makefile b/src/leveldb/Makefile index 38b9bf77..f8903b69 100644 --- a/src/leveldb/Makefile +++ b/src/leveldb/Makefile @@ -12,7 +12,7 @@ OPT ?= -O2 -DNDEBUG # (A) Production use (optimized mode) #----------------------------------------------- # detect what platform we're building on -$(shell CC=$(CC) CXX=$(CXX) TARGET_OS=$(TARGET_OS) \ +$(shell CC="$(CC)" CXX="$(CXX)" TARGET_OS="$(TARGET_OS)" \ ./build_detect_platform build_config.mk ./) # this file is generated by the previous line to set build flags and sources include build_config.mk @@ -31,6 +31,7 @@ TESTHARNESS = ./util/testharness.o $(TESTUTIL) TESTS = \ arena_test \ + autocompact_test \ bloom_test \ c_test \ cache_test \ @@ -43,6 +44,7 @@ TESTS = \ filename_test \ filter_block_test \ issue178_test \ + issue200_test \ log_test \ memenv_test \ skiplist_test \ @@ -70,7 +72,7 @@ SHARED = $(SHARED1) else # Update db.h if you change these. SHARED_MAJOR = 1 -SHARED_MINOR = 12 +SHARED_MINOR = 17 SHARED1 = libleveldb.$(PLATFORM_SHARED_EXT) SHARED2 = $(SHARED1).$(SHARED_MAJOR) SHARED3 = $(SHARED1).$(SHARED_MAJOR).$(SHARED_MINOR) @@ -114,6 +116,9 @@ leveldbutil: db/leveldb_main.o $(LIBOBJECTS) arena_test: util/arena_test.o $(LIBOBJECTS) $(TESTHARNESS) $(CXX) $(LDFLAGS) util/arena_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS) +autocompact_test: db/autocompact_test.o $(LIBOBJECTS) $(TESTHARNESS) + $(CXX) $(LDFLAGS) db/autocompact_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS) + bloom_test: util/bloom_test.o $(LIBOBJECTS) $(TESTHARNESS) $(CXX) $(LDFLAGS) util/bloom_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS) @@ -150,6 +155,9 @@ filter_block_test: table/filter_block_test.o $(LIBOBJECTS) $(TESTHARNESS) issue178_test: issues/issue178_test.o $(LIBOBJECTS) $(TESTHARNESS) $(CXX) $(LDFLAGS) issues/issue178_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS) +issue200_test: issues/issue200_test.o $(LIBOBJECTS) $(TESTHARNESS) + $(CXX) $(LDFLAGS) issues/issue200_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS) + log_test: db/log_test.o $(LIBOBJECTS) $(TESTHARNESS) $(CXX) $(LDFLAGS) db/log_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS) @@ -182,19 +190,20 @@ PLATFORMSROOT=/Applications/Xcode.app/Contents/Developer/Platforms SIMULATORROOT=$(PLATFORMSROOT)/iPhoneSimulator.platform/Developer DEVICEROOT=$(PLATFORMSROOT)/iPhoneOS.platform/Developer IOSVERSION=$(shell defaults read $(PLATFORMSROOT)/iPhoneOS.platform/version CFBundleShortVersionString) +IOSARCH=-arch armv6 -arch armv7 -arch armv7s -arch arm64 .cc.o: mkdir -p ios-x86/$(dir $@) - $(CXX) $(CXXFLAGS) -isysroot $(SIMULATORROOT)/SDKs/iPhoneSimulator$(IOSVERSION).sdk -arch i686 -c $< -o ios-x86/$@ + $(CXX) $(CXXFLAGS) -isysroot $(SIMULATORROOT)/SDKs/iPhoneSimulator$(IOSVERSION).sdk -arch i686 -arch x86_64 -c $< -o ios-x86/$@ mkdir -p ios-arm/$(dir $@) - $(DEVICEROOT)/usr/bin/$(CXX) $(CXXFLAGS) -isysroot $(DEVICEROOT)/SDKs/iPhoneOS$(IOSVERSION).sdk -arch armv6 -arch armv7 -c $< -o ios-arm/$@ + xcrun -sdk iphoneos $(CXX) $(CXXFLAGS) -isysroot $(DEVICEROOT)/SDKs/iPhoneOS$(IOSVERSION).sdk $(IOSARCH) -c $< -o ios-arm/$@ lipo ios-x86/$@ ios-arm/$@ -create -output $@ .c.o: mkdir -p ios-x86/$(dir $@) - $(CC) $(CFLAGS) -isysroot $(SIMULATORROOT)/SDKs/iPhoneSimulator$(IOSVERSION).sdk -arch i686 -c $< -o ios-x86/$@ + $(CC) $(CFLAGS) -isysroot $(SIMULATORROOT)/SDKs/iPhoneSimulator$(IOSVERSION).sdk -arch i686 -arch x86_64 -c $< -o ios-x86/$@ mkdir -p ios-arm/$(dir $@) - $(DEVICEROOT)/usr/bin/$(CC) $(CFLAGS) -isysroot $(DEVICEROOT)/SDKs/iPhoneOS$(IOSVERSION).sdk -arch armv6 -arch armv7 -c $< -o ios-arm/$@ + xcrun -sdk iphoneos $(CC) $(CFLAGS) -isysroot $(DEVICEROOT)/SDKs/iPhoneOS$(IOSVERSION).sdk $(IOSARCH) -c $< -o ios-arm/$@ lipo ios-x86/$@ ios-arm/$@ -create -output $@ else diff --git a/src/leveldb/build_detect_platform b/src/leveldb/build_detect_platform index a3ad057e..85b1ce02 100755 --- a/src/leveldb/build_detect_platform +++ b/src/leveldb/build_detect_platform @@ -44,6 +44,10 @@ if test -z "$CXX"; then CXX=g++ fi +if test -z "$TMPDIR"; then + TMPDIR=/tmp +fi + # Detect OS if test -z "$TARGET_OS"; then TARGET_OS=`uname -s` @@ -133,6 +137,16 @@ case "$TARGET_OS" in # man ld: +h internal_name PLATFORM_SHARED_LDFLAGS="-shared -Wl,+h -Wl," ;; + IOS) + PLATFORM=IOS + COMMON_FLAGS="$MEMCMP_FLAG -DOS_MACOSX" + [ -z "$INSTALL_PATH" ] && INSTALL_PATH=`pwd` + PORT_FILE=port/port_posix.cc + PLATFORM_SHARED_EXT= + PLATFORM_SHARED_LDFLAGS= + PLATFORM_SHARED_CFLAGS= + PLATFORM_SHARED_VERSIONED= + ;; OS_WINDOWS_CROSSCOMPILE | NATIVE_WINDOWS) PLATFORM=OS_WINDOWS COMMON_FLAGS="-fno-builtin-memcmp -D_REENTRANT -DOS_WINDOWS -DLEVELDB_PLATFORM_WINDOWS -DWINVER=0x0500 -D__USE_MINGW_ANSI_STDIO=1" @@ -169,8 +183,10 @@ if [ "$CROSS_COMPILE" = "true" ]; then # Cross-compiling; do not try any compilation tests. true else + CXXOUTPUT="${TMPDIR}/leveldb_build_detect_platform-cxx.$$" + # If -std=c++0x works, use . Otherwise use port_posix.h. - $CXX $CXXFLAGS -std=c++0x -x c++ - -o /dev/null 2>/dev/null </dev/null < int main() {} EOF @@ -182,12 +198,14 @@ EOF fi # Test whether tcmalloc is available - $CXX $CXXFLAGS -x c++ - -o /dev/null -ltcmalloc 2>/dev/null </dev/null </dev/null fi PLATFORM_CCFLAGS="$PLATFORM_CCFLAGS $COMMON_FLAGS" diff --git a/src/leveldb/db/autocompact_test.cc b/src/leveldb/db/autocompact_test.cc new file mode 100644 index 00000000..d20a2362 --- /dev/null +++ b/src/leveldb/db/autocompact_test.cc @@ -0,0 +1,118 @@ +// Copyright (c) 2013 The LevelDB Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. See the AUTHORS file for names of contributors. + +#include "leveldb/db.h" +#include "db/db_impl.h" +#include "leveldb/cache.h" +#include "util/testharness.h" +#include "util/testutil.h" + +namespace leveldb { + +class AutoCompactTest { + public: + std::string dbname_; + Cache* tiny_cache_; + Options options_; + DB* db_; + + AutoCompactTest() { + dbname_ = test::TmpDir() + "/autocompact_test"; + tiny_cache_ = NewLRUCache(100); + options_.block_cache = tiny_cache_; + DestroyDB(dbname_, options_); + options_.create_if_missing = true; + options_.compression = kNoCompression; + ASSERT_OK(DB::Open(options_, dbname_, &db_)); + } + + ~AutoCompactTest() { + delete db_; + DestroyDB(dbname_, Options()); + delete tiny_cache_; + } + + std::string Key(int i) { + char buf[100]; + snprintf(buf, sizeof(buf), "key%06d", i); + return std::string(buf); + } + + uint64_t Size(const Slice& start, const Slice& limit) { + Range r(start, limit); + uint64_t size; + db_->GetApproximateSizes(&r, 1, &size); + return size; + } + + void DoReads(int n); +}; + +static const int kValueSize = 200 * 1024; +static const int kTotalSize = 100 * 1024 * 1024; +static const int kCount = kTotalSize / kValueSize; + +// Read through the first n keys repeatedly and check that they get +// compacted (verified by checking the size of the key space). +void AutoCompactTest::DoReads(int n) { + std::string value(kValueSize, 'x'); + DBImpl* dbi = reinterpret_cast(db_); + + // Fill database + for (int i = 0; i < kCount; i++) { + ASSERT_OK(db_->Put(WriteOptions(), Key(i), value)); + } + ASSERT_OK(dbi->TEST_CompactMemTable()); + + // Delete everything + for (int i = 0; i < kCount; i++) { + ASSERT_OK(db_->Delete(WriteOptions(), Key(i))); + } + ASSERT_OK(dbi->TEST_CompactMemTable()); + + // Get initial measurement of the space we will be reading. + const int64_t initial_size = Size(Key(0), Key(n)); + const int64_t initial_other_size = Size(Key(n), Key(kCount)); + + // Read until size drops significantly. + std::string limit_key = Key(n); + for (int read = 0; true; read++) { + ASSERT_LT(read, 100) << "Taking too long to compact"; + Iterator* iter = db_->NewIterator(ReadOptions()); + for (iter->SeekToFirst(); + iter->Valid() && iter->key().ToString() < limit_key; + iter->Next()) { + // Drop data + } + delete iter; + // Wait a little bit to allow any triggered compactions to complete. + Env::Default()->SleepForMicroseconds(1000000); + uint64_t size = Size(Key(0), Key(n)); + fprintf(stderr, "iter %3d => %7.3f MB [other %7.3f MB]\n", + read+1, size/1048576.0, Size(Key(n), Key(kCount))/1048576.0); + if (size <= initial_size/10) { + break; + } + } + + // Verify that the size of the key space not touched by the reads + // is pretty much unchanged. + const int64_t final_other_size = Size(Key(n), Key(kCount)); + ASSERT_LE(final_other_size, initial_other_size + 1048576); + ASSERT_GE(final_other_size, initial_other_size/5 - 1048576); +} + +TEST(AutoCompactTest, ReadAll) { + DoReads(kCount); +} + +TEST(AutoCompactTest, ReadHalf) { + DoReads(kCount/2); +} + +} // namespace leveldb + +int main(int argc, char** argv) { + return leveldb::test::RunAllTests(); +} diff --git a/src/leveldb/db/corruption_test.cc b/src/leveldb/db/corruption_test.cc index 31b2d5f4..96afc689 100644 --- a/src/leveldb/db/corruption_test.cc +++ b/src/leveldb/db/corruption_test.cc @@ -35,6 +35,7 @@ class CorruptionTest { CorruptionTest() { tiny_cache_ = NewLRUCache(100); options_.env = &env_; + options_.block_cache = tiny_cache_; dbname_ = test::TmpDir() + "/db_test"; DestroyDB(dbname_, options_); @@ -50,17 +51,14 @@ class CorruptionTest { delete tiny_cache_; } - Status TryReopen(Options* options = NULL) { + Status TryReopen() { delete db_; db_ = NULL; - Options opt = (options ? *options : options_); - opt.env = &env_; - opt.block_cache = tiny_cache_; - return DB::Open(opt, dbname_, &db_); + return DB::Open(options_, dbname_, &db_); } - void Reopen(Options* options = NULL) { - ASSERT_OK(TryReopen(options)); + void Reopen() { + ASSERT_OK(TryReopen()); } void RepairDB() { @@ -77,7 +75,13 @@ class CorruptionTest { Slice key = Key(i, &key_space); batch.Clear(); batch.Put(key, Value(i, &value_space)); - ASSERT_OK(db_->Write(WriteOptions(), &batch)); + WriteOptions options; + // Corrupt() doesn't work without this sync on windows; stat reports 0 for + // the file size. + if (i == n - 1) { + options.sync = true; + } + ASSERT_OK(db_->Write(options, &batch)); } } @@ -92,6 +96,10 @@ class CorruptionTest { for (iter->SeekToFirst(); iter->Valid(); iter->Next()) { uint64_t key; Slice in(iter->key()); + if (in == "" || in == "~") { + // Ignore boundary keys. + continue; + } if (!ConsumeDecimalNumber(&in, &key) || !in.empty() || key < next_expected) { @@ -123,7 +131,7 @@ class CorruptionTest { FileType type; std::string fname; int picked_number = -1; - for (int i = 0; i < filenames.size(); i++) { + for (size_t i = 0; i < filenames.size(); i++) { if (ParseFileName(filenames[i], &number, &type) && type == filetype && int(number) > picked_number) { // Pick latest file @@ -233,7 +241,23 @@ TEST(CorruptionTest, TableFile) { dbi->TEST_CompactRange(1, NULL, NULL); Corrupt(kTableFile, 100, 1); - Check(99, 99); + Check(90, 99); +} + +TEST(CorruptionTest, TableFileRepair) { + options_.block_size = 2 * kValueSize; // Limit scope of corruption + options_.paranoid_checks = true; + Reopen(); + Build(100); + DBImpl* dbi = reinterpret_cast(db_); + dbi->TEST_CompactMemTable(); + dbi->TEST_CompactRange(0, NULL, NULL); + dbi->TEST_CompactRange(1, NULL, NULL); + + Corrupt(kTableFile, 100, 1); + RepairDB(); + Reopen(); + Check(95, 99); } TEST(CorruptionTest, TableFileIndexData) { @@ -299,7 +323,7 @@ TEST(CorruptionTest, CompactionInputError) { ASSERT_EQ(1, Property("leveldb.num-files-at-level" + NumberToString(last))); Corrupt(kTableFile, 100, 1); - Check(9, 9); + Check(5, 9); // Force compactions by writing lots of values Build(10000); @@ -307,32 +331,23 @@ TEST(CorruptionTest, CompactionInputError) { } TEST(CorruptionTest, CompactionInputErrorParanoid) { - Options options; - options.paranoid_checks = true; - options.write_buffer_size = 1048576; - Reopen(&options); + options_.paranoid_checks = true; + options_.write_buffer_size = 512 << 10; + Reopen(); DBImpl* dbi = reinterpret_cast(db_); - // Fill levels >= 1 so memtable compaction outputs to level 1 - for (int level = 1; level < config::kNumLevels; level++) { - dbi->Put(WriteOptions(), "", "begin"); - dbi->Put(WriteOptions(), "~", "end"); + // Make multiple inputs so we need to compact. + for (int i = 0; i < 2; i++) { + Build(10); dbi->TEST_CompactMemTable(); + Corrupt(kTableFile, 100, 1); + env_.SleepForMicroseconds(100000); } + dbi->CompactRange(NULL, NULL); - Build(10); - dbi->TEST_CompactMemTable(); - ASSERT_EQ(1, Property("leveldb.num-files-at-level0")); - - Corrupt(kTableFile, 100, 1); - Check(9, 9); - - // Write must eventually fail because of corrupted table - Status s; + // Write must fail because of corrupted table std::string tmp1, tmp2; - for (int i = 0; i < 10000 && s.ok(); i++) { - s = db_->Put(WriteOptions(), Key(i, &tmp1), Value(i, &tmp2)); - } + Status s = db_->Put(WriteOptions(), Key(5, &tmp1), Value(5, &tmp2)); ASSERT_TRUE(!s.ok()) << "write did not fail in corrupted paranoid db"; } diff --git a/src/leveldb/db/db_bench.cc b/src/leveldb/db/db_bench.cc index 7abdf875..fc46d896 100644 --- a/src/leveldb/db/db_bench.cc +++ b/src/leveldb/db/db_bench.cc @@ -128,7 +128,7 @@ class RandomGenerator { pos_ = 0; } - Slice Generate(int len) { + Slice Generate(size_t len) { if (pos_ + len > data_.size()) { pos_ = 0; assert(len < data_.size()); @@ -139,11 +139,11 @@ class RandomGenerator { }; static Slice TrimSpace(Slice s) { - int start = 0; + size_t start = 0; while (start < s.size() && isspace(s[start])) { start++; } - int limit = s.size(); + size_t limit = s.size(); while (limit > start && isspace(s[limit-1])) { limit--; } @@ -399,7 +399,7 @@ class Benchmark { heap_counter_(0) { std::vector files; Env::Default()->GetChildren(FLAGS_db, &files); - for (int i = 0; i < files.size(); i++) { + for (size_t i = 0; i < files.size(); i++) { if (Slice(files[i]).starts_with("heap-")) { Env::Default()->DeleteFile(std::string(FLAGS_db) + "/" + files[i]); } diff --git a/src/leveldb/db/db_impl.cc b/src/leveldb/db/db_impl.cc index af02467b..faf5e7d7 100644 --- a/src/leveldb/db/db_impl.cc +++ b/src/leveldb/db/db_impl.cc @@ -113,14 +113,14 @@ Options SanitizeOptions(const std::string& dbname, return result; } -DBImpl::DBImpl(const Options& options, const std::string& dbname) - : env_(options.env), - internal_comparator_(options.comparator), - internal_filter_policy_(options.filter_policy), - options_(SanitizeOptions( - dbname, &internal_comparator_, &internal_filter_policy_, options)), - owns_info_log_(options_.info_log != options.info_log), - owns_cache_(options_.block_cache != options.block_cache), +DBImpl::DBImpl(const Options& raw_options, const std::string& dbname) + : env_(raw_options.env), + internal_comparator_(raw_options.comparator), + internal_filter_policy_(raw_options.filter_policy), + options_(SanitizeOptions(dbname, &internal_comparator_, + &internal_filter_policy_, raw_options)), + owns_info_log_(options_.info_log != raw_options.info_log), + owns_cache_(options_.block_cache != raw_options.block_cache), dbname_(dbname), db_lock_(NULL), shutting_down_(NULL), @@ -130,15 +130,15 @@ DBImpl::DBImpl(const Options& options, const std::string& dbname) logfile_(NULL), logfile_number_(0), log_(NULL), + seed_(0), tmp_batch_(new WriteBatch), bg_compaction_scheduled_(false), - manual_compaction_(NULL), - consecutive_compaction_errors_(0) { + manual_compaction_(NULL) { mem_->Ref(); has_imm_.Release_Store(NULL); // Reserve ten files or so for other uses and give the rest to TableCache. - const int table_cache_size = options.max_open_files - kNumNonTableCacheFiles; + const int table_cache_size = options_.max_open_files - kNumNonTableCacheFiles; table_cache_ = new TableCache(dbname_, &options_, table_cache_size); versions_ = new VersionSet(dbname_, &options_, table_cache_, @@ -216,6 +216,12 @@ void DBImpl::MaybeIgnoreError(Status* s) const { } void DBImpl::DeleteObsoleteFiles() { + if (!bg_error_.ok()) { + // After a background error, we don't know whether a new version may + // or may not have been committed, so we cannot safely garbage collect. + return; + } + // Make a set of all of the live files std::set live = pending_outputs_; versions_->AddLiveFiles(&live); @@ -322,7 +328,7 @@ Status DBImpl::Recover(VersionEdit* edit) { if (ParseFileName(filenames[i], &number, &type)) { expected.erase(number); if (type == kLogFile && ((number >= min_log) || (number == prev_log))) - logs.push_back(number); + logs.push_back(number); } } if (!expected.empty()) { @@ -494,7 +500,7 @@ Status DBImpl::WriteLevel0Table(MemTable* mem, VersionEdit* edit, return s; } -Status DBImpl::CompactMemTable() { +void DBImpl::CompactMemTable() { mutex_.AssertHeld(); assert(imm_ != NULL); @@ -522,9 +528,9 @@ Status DBImpl::CompactMemTable() { imm_ = NULL; has_imm_.Release_Store(NULL); DeleteObsoleteFiles(); + } else { + RecordBackgroundError(s); } - - return s; } void DBImpl::CompactRange(const Slice* begin, const Slice* end) { @@ -567,16 +573,18 @@ void DBImpl::TEST_CompactRange(int level, const Slice* begin,const Slice* end) { } MutexLock l(&mutex_); - while (!manual.done) { - while (manual_compaction_ != NULL) { - bg_cv_.Wait(); - } - manual_compaction_ = &manual; - MaybeScheduleCompaction(); - while (manual_compaction_ == &manual) { + while (!manual.done && !shutting_down_.Acquire_Load() && bg_error_.ok()) { + if (manual_compaction_ == NULL) { // Idle + manual_compaction_ = &manual; + MaybeScheduleCompaction(); + } else { // Running either my compaction or another compaction. bg_cv_.Wait(); } } + if (manual_compaction_ == &manual) { + // Cancel my manual compaction since we aborted early for some reason. + manual_compaction_ = NULL; + } } Status DBImpl::TEST_CompactMemTable() { @@ -595,12 +603,22 @@ Status DBImpl::TEST_CompactMemTable() { return s; } +void DBImpl::RecordBackgroundError(const Status& s) { + mutex_.AssertHeld(); + if (bg_error_.ok()) { + bg_error_ = s; + bg_cv_.SignalAll(); + } +} + void DBImpl::MaybeScheduleCompaction() { mutex_.AssertHeld(); if (bg_compaction_scheduled_) { // Already scheduled } else if (shutting_down_.Acquire_Load()) { // DB is being deleted; no more background compactions + } else if (!bg_error_.ok()) { + // Already got an error; no more changes } else if (imm_ == NULL && manual_compaction_ == NULL && !versions_->NeedsCompaction()) { @@ -618,30 +636,12 @@ void DBImpl::BGWork(void* db) { void DBImpl::BackgroundCall() { MutexLock l(&mutex_); assert(bg_compaction_scheduled_); - if (!shutting_down_.Acquire_Load()) { - Status s = BackgroundCompaction(); - if (s.ok()) { - // Success - consecutive_compaction_errors_ = 0; - } else if (shutting_down_.Acquire_Load()) { - // Error most likely due to shutdown; do not wait - } else { - // Wait a little bit before retrying background compaction in - // case this is an environmental problem and we do not want to - // chew up resources for failed compactions for the duration of - // the problem. - bg_cv_.SignalAll(); // In case a waiter can proceed despite the error - Log(options_.info_log, "Waiting after background compaction error: %s", - s.ToString().c_str()); - mutex_.Unlock(); - ++consecutive_compaction_errors_; - int seconds_to_sleep = 1; - for (int i = 0; i < 3 && i < consecutive_compaction_errors_ - 1; ++i) { - seconds_to_sleep *= 2; - } - env_->SleepForMicroseconds(seconds_to_sleep * 1000000); - mutex_.Lock(); - } + if (shutting_down_.Acquire_Load()) { + // No more background work when shutting down. + } else if (!bg_error_.ok()) { + // No more background work after a background error. + } else { + BackgroundCompaction(); } bg_compaction_scheduled_ = false; @@ -652,11 +652,12 @@ void DBImpl::BackgroundCall() { bg_cv_.SignalAll(); } -Status DBImpl::BackgroundCompaction() { +void DBImpl::BackgroundCompaction() { mutex_.AssertHeld(); if (imm_ != NULL) { - return CompactMemTable(); + CompactMemTable(); + return; } Compaction* c; @@ -690,6 +691,9 @@ Status DBImpl::BackgroundCompaction() { c->edit()->AddFile(c->level() + 1, f->number, f->file_size, f->smallest, f->largest); status = versions_->LogAndApply(c->edit(), &mutex_); + if (!status.ok()) { + RecordBackgroundError(status); + } VersionSet::LevelSummaryStorage tmp; Log(options_.info_log, "Moved #%lld to level-%d %lld bytes %s: %s\n", static_cast(f->number), @@ -700,6 +704,9 @@ Status DBImpl::BackgroundCompaction() { } else { CompactionState* compact = new CompactionState(c); status = DoCompactionWork(compact); + if (!status.ok()) { + RecordBackgroundError(status); + } CleanupCompaction(compact); c->ReleaseInputs(); DeleteObsoleteFiles(); @@ -713,9 +720,6 @@ Status DBImpl::BackgroundCompaction() { } else { Log(options_.info_log, "Compaction error: %s", status.ToString().c_str()); - if (options_.paranoid_checks && bg_error_.ok()) { - bg_error_ = status; - } } if (is_manual) { @@ -731,7 +735,6 @@ Status DBImpl::BackgroundCompaction() { } manual_compaction_ = NULL; } - return status; } void DBImpl::CleanupCompaction(CompactionState* compact) { @@ -822,9 +825,6 @@ Status DBImpl::FinishCompactionOutputFile(CompactionState* compact, (unsigned long long) output_number, (unsigned long long) current_entries, (unsigned long long) current_bytes); - - // rate-limit compaction file creation with a 100ms pause - env_->SleepForMicroseconds(100000); } } return s; @@ -1004,6 +1004,9 @@ Status DBImpl::DoCompactionWork(CompactionState* compact) { if (status.ok()) { status = InstallCompactionResults(compact); } + if (!status.ok()) { + RecordBackgroundError(status); + } VersionSet::LevelSummaryStorage tmp; Log(options_.info_log, "compacted to: %s", versions_->LevelSummary(&tmp)); @@ -1030,7 +1033,8 @@ static void CleanupIteratorState(void* arg1, void* arg2) { } // namespace Iterator* DBImpl::NewInternalIterator(const ReadOptions& options, - SequenceNumber* latest_snapshot) { + SequenceNumber* latest_snapshot, + uint32_t* seed) { IterState* cleanup = new IterState; mutex_.Lock(); *latest_snapshot = versions_->LastSequence(); @@ -1054,13 +1058,15 @@ Iterator* DBImpl::NewInternalIterator(const ReadOptions& options, cleanup->version = versions_->current(); internal_iter->RegisterCleanup(CleanupIteratorState, cleanup, NULL); + *seed = ++seed_; mutex_.Unlock(); return internal_iter; } Iterator* DBImpl::TEST_NewInternalIterator() { SequenceNumber ignored; - return NewInternalIterator(ReadOptions(), &ignored); + uint32_t ignored_seed; + return NewInternalIterator(ReadOptions(), &ignored, &ignored_seed); } int64_t DBImpl::TEST_MaxNextLevelOverlappingBytes() { @@ -1117,12 +1123,21 @@ Status DBImpl::Get(const ReadOptions& options, Iterator* DBImpl::NewIterator(const ReadOptions& options) { SequenceNumber latest_snapshot; - Iterator* internal_iter = NewInternalIterator(options, &latest_snapshot); + uint32_t seed; + Iterator* iter = NewInternalIterator(options, &latest_snapshot, &seed); return NewDBIterator( - &dbname_, env_, user_comparator(), internal_iter, + this, user_comparator(), iter, (options.snapshot != NULL ? reinterpret_cast(options.snapshot)->number_ - : latest_snapshot)); + : latest_snapshot), + seed); +} + +void DBImpl::RecordReadSample(Slice key) { + MutexLock l(&mutex_); + if (versions_->current()->RecordReadSample(key)) { + MaybeScheduleCompaction(); + } } const Snapshot* DBImpl::GetSnapshot() { @@ -1175,13 +1190,23 @@ Status DBImpl::Write(const WriteOptions& options, WriteBatch* my_batch) { { mutex_.Unlock(); status = log_->AddRecord(WriteBatchInternal::Contents(updates)); + bool sync_error = false; if (status.ok() && options.sync) { status = logfile_->Sync(); + if (!status.ok()) { + sync_error = true; + } } if (status.ok()) { status = WriteBatchInternal::InsertInto(updates, mem_); } mutex_.Lock(); + if (sync_error) { + // The state of the log file is indeterminate: the log record we + // just added may or may not show up when the DB is re-opened. + // So we force the DB into a mode where all future writes fail. + RecordBackgroundError(status); + } } if (updates == tmp_batch_) tmp_batch_->Clear(); diff --git a/src/leveldb/db/db_impl.h b/src/leveldb/db/db_impl.h index 3c8d711a..cfc99816 100644 --- a/src/leveldb/db/db_impl.h +++ b/src/leveldb/db/db_impl.h @@ -59,13 +59,19 @@ class DBImpl : public DB { // file at a level >= 1. int64_t TEST_MaxNextLevelOverlappingBytes(); + // Record a sample of bytes read at the specified internal key. + // Samples are taken approximately once every config::kReadBytesPeriod + // bytes. + void RecordReadSample(Slice key); + private: friend class DB; struct CompactionState; struct Writer; Iterator* NewInternalIterator(const ReadOptions&, - SequenceNumber* latest_snapshot); + SequenceNumber* latest_snapshot, + uint32_t* seed); Status NewDB(); @@ -81,8 +87,8 @@ class DBImpl : public DB { // Compact the in-memory write buffer to disk. Switches to a new // log-file/memtable and writes a new descriptor iff successful. - Status CompactMemTable() - EXCLUSIVE_LOCKS_REQUIRED(mutex_); + // Errors are recorded in bg_error_. + void CompactMemTable() EXCLUSIVE_LOCKS_REQUIRED(mutex_); Status RecoverLogFile(uint64_t log_number, VersionEdit* edit, @@ -96,10 +102,12 @@ class DBImpl : public DB { EXCLUSIVE_LOCKS_REQUIRED(mutex_); WriteBatch* BuildBatchGroup(Writer** last_writer); + void RecordBackgroundError(const Status& s); + void MaybeScheduleCompaction() EXCLUSIVE_LOCKS_REQUIRED(mutex_); static void BGWork(void* db); void BackgroundCall(); - Status BackgroundCompaction() EXCLUSIVE_LOCKS_REQUIRED(mutex_); + void BackgroundCompaction() EXCLUSIVE_LOCKS_REQUIRED(mutex_); void CleanupCompaction(CompactionState* compact) EXCLUSIVE_LOCKS_REQUIRED(mutex_); Status DoCompactionWork(CompactionState* compact) @@ -135,6 +143,7 @@ class DBImpl : public DB { WritableFile* logfile_; uint64_t logfile_number_; log::Writer* log_; + uint32_t seed_; // For sampling. // Queue of writers. std::deque writers_; @@ -163,7 +172,6 @@ class DBImpl : public DB { // Have we encountered a background error in paranoid mode? Status bg_error_; - int consecutive_compaction_errors_; // Per level compaction stats. stats_[level] stores the stats for // compactions that produced data for the specified "level". diff --git a/src/leveldb/db/db_iter.cc b/src/leveldb/db/db_iter.cc index 87dca2de..3b2035e9 100644 --- a/src/leveldb/db/db_iter.cc +++ b/src/leveldb/db/db_iter.cc @@ -5,12 +5,14 @@ #include "db/db_iter.h" #include "db/filename.h" +#include "db/db_impl.h" #include "db/dbformat.h" #include "leveldb/env.h" #include "leveldb/iterator.h" #include "port/port.h" #include "util/logging.h" #include "util/mutexlock.h" +#include "util/random.h" namespace leveldb { @@ -46,15 +48,16 @@ class DBIter: public Iterator { kReverse }; - DBIter(const std::string* dbname, Env* env, - const Comparator* cmp, Iterator* iter, SequenceNumber s) - : dbname_(dbname), - env_(env), + DBIter(DBImpl* db, const Comparator* cmp, Iterator* iter, SequenceNumber s, + uint32_t seed) + : db_(db), user_comparator_(cmp), iter_(iter), sequence_(s), direction_(kForward), - valid_(false) { + valid_(false), + rnd_(seed), + bytes_counter_(RandomPeriod()) { } virtual ~DBIter() { delete iter_; @@ -100,8 +103,12 @@ class DBIter: public Iterator { } } - const std::string* const dbname_; - Env* const env_; + // Pick next gap with average value of config::kReadBytesPeriod. + ssize_t RandomPeriod() { + return rnd_.Uniform(2*config::kReadBytesPeriod); + } + + DBImpl* db_; const Comparator* const user_comparator_; Iterator* const iter_; SequenceNumber const sequence_; @@ -112,13 +119,23 @@ class DBIter: public Iterator { Direction direction_; bool valid_; + Random rnd_; + ssize_t bytes_counter_; + // No copying allowed DBIter(const DBIter&); void operator=(const DBIter&); }; inline bool DBIter::ParseKey(ParsedInternalKey* ikey) { - if (!ParseInternalKey(iter_->key(), ikey)) { + Slice k = iter_->key(); + ssize_t n = k.size() + iter_->value().size(); + bytes_counter_ -= n; + while (bytes_counter_ < 0) { + bytes_counter_ += RandomPeriod(); + db_->RecordReadSample(k); + } + if (!ParseInternalKey(k, ikey)) { status_ = Status::Corruption("corrupted internal key in DBIter"); return false; } else { @@ -144,12 +161,13 @@ void DBIter::Next() { saved_key_.clear(); return; } + // saved_key_ already contains the key to skip past. + } else { + // Store in saved_key_ the current key so we skip it below. + SaveKey(ExtractUserKey(iter_->key()), &saved_key_); } - // Temporarily use saved_key_ as storage for key to skip. - std::string* skip = &saved_key_; - SaveKey(ExtractUserKey(iter_->key()), skip); - FindNextUserEntry(true, skip); + FindNextUserEntry(true, &saved_key_); } void DBIter::FindNextUserEntry(bool skipping, std::string* skip) { @@ -288,12 +306,12 @@ void DBIter::SeekToLast() { } // anonymous namespace Iterator* NewDBIterator( - const std::string* dbname, - Env* env, + DBImpl* db, const Comparator* user_key_comparator, Iterator* internal_iter, - const SequenceNumber& sequence) { - return new DBIter(dbname, env, user_key_comparator, internal_iter, sequence); + SequenceNumber sequence, + uint32_t seed) { + return new DBIter(db, user_key_comparator, internal_iter, sequence, seed); } } // namespace leveldb diff --git a/src/leveldb/db/db_iter.h b/src/leveldb/db/db_iter.h index d9e1b174..04927e93 100644 --- a/src/leveldb/db/db_iter.h +++ b/src/leveldb/db/db_iter.h @@ -11,15 +11,17 @@ namespace leveldb { +class DBImpl; + // Return a new iterator that converts internal keys (yielded by // "*internal_iter") that were live at the specified "sequence" number // into appropriate user keys. extern Iterator* NewDBIterator( - const std::string* dbname, - Env* env, + DBImpl* db, const Comparator* user_key_comparator, Iterator* internal_iter, - const SequenceNumber& sequence); + SequenceNumber sequence, + uint32_t seed); } // namespace leveldb diff --git a/src/leveldb/db/db_test.cc b/src/leveldb/db/db_test.cc index 49aae04d..280b01c1 100644 --- a/src/leveldb/db/db_test.cc +++ b/src/leveldb/db/db_test.cc @@ -57,8 +57,11 @@ void DelayMilliseconds(int millis) { // Special Env used to delay background operations class SpecialEnv : public EnvWrapper { public: - // sstable Sync() calls are blocked while this pointer is non-NULL. - port::AtomicPointer delay_sstable_sync_; + // sstable/log Sync() calls are blocked while this pointer is non-NULL. + port::AtomicPointer delay_data_sync_; + + // sstable/log Sync() calls return an error. + port::AtomicPointer data_sync_error_; // Simulate no-space errors while this pointer is non-NULL. port::AtomicPointer no_space_; @@ -75,11 +78,9 @@ class SpecialEnv : public EnvWrapper { bool count_random_reads_; AtomicCounter random_read_counter_; - AtomicCounter sleep_counter_; - AtomicCounter sleep_time_counter_; - explicit SpecialEnv(Env* base) : EnvWrapper(base) { - delay_sstable_sync_.Release_Store(NULL); + delay_data_sync_.Release_Store(NULL); + data_sync_error_.Release_Store(NULL); no_space_.Release_Store(NULL); non_writable_.Release_Store(NULL); count_random_reads_ = false; @@ -88,17 +89,17 @@ class SpecialEnv : public EnvWrapper { } Status NewWritableFile(const std::string& f, WritableFile** r) { - class SSTableFile : public WritableFile { + class DataFile : public WritableFile { private: SpecialEnv* env_; WritableFile* base_; public: - SSTableFile(SpecialEnv* env, WritableFile* base) + DataFile(SpecialEnv* env, WritableFile* base) : env_(env), base_(base) { } - ~SSTableFile() { delete base_; } + ~DataFile() { delete base_; } Status Append(const Slice& data) { if (env_->no_space_.Acquire_Load() != NULL) { // Drop writes on the floor @@ -110,7 +111,10 @@ class SpecialEnv : public EnvWrapper { Status Close() { return base_->Close(); } Status Flush() { return base_->Flush(); } Status Sync() { - while (env_->delay_sstable_sync_.Acquire_Load() != NULL) { + if (env_->data_sync_error_.Acquire_Load() != NULL) { + return Status::IOError("simulated data sync error"); + } + while (env_->delay_data_sync_.Acquire_Load() != NULL) { DelayMilliseconds(100); } return base_->Sync(); @@ -147,8 +151,9 @@ class SpecialEnv : public EnvWrapper { Status s = target()->NewWritableFile(f, r); if (s.ok()) { - if (strstr(f.c_str(), ".sst") != NULL) { - *r = new SSTableFile(this, *r); + if (strstr(f.c_str(), ".ldb") != NULL || + strstr(f.c_str(), ".log") != NULL) { + *r = new DataFile(this, *r); } else if (strstr(f.c_str(), "MANIFEST") != NULL) { *r = new ManifestFile(this, *r); } @@ -179,12 +184,6 @@ class SpecialEnv : public EnvWrapper { } return s; } - - virtual void SleepForMicroseconds(int micros) { - sleep_counter_.Increment(); - sleep_time_counter_.IncrementBy(micros); - } - }; class DBTest { @@ -322,7 +321,7 @@ class DBTest { } // Check reverse iteration results are the reverse of forward results - int matched = 0; + size_t matched = 0; for (iter->SeekToLast(); iter->Valid(); iter->Prev()) { ASSERT_LT(matched, forward.size()); ASSERT_EQ(IterStatus(iter), forward[forward.size() - matched - 1]); @@ -484,6 +483,24 @@ class DBTest { } return false; } + + // Returns number of files renamed. + int RenameLDBToSST() { + std::vector filenames; + ASSERT_OK(env_->GetChildren(dbname_, &filenames)); + uint64_t number; + FileType type; + int files_renamed = 0; + for (size_t i = 0; i < filenames.size(); i++) { + if (ParseFileName(filenames[i], &number, &type) && type == kTableFile) { + const std::string from = TableFileName(dbname_, number); + const std::string to = SSTTableFileName(dbname_, number); + ASSERT_OK(env_->RenameFile(from, to)); + files_renamed++; + } + } + return files_renamed; + } }; TEST(DBTest, Empty) { @@ -525,11 +542,11 @@ TEST(DBTest, GetFromImmutableLayer) { ASSERT_OK(Put("foo", "v1")); ASSERT_EQ("v1", Get("foo")); - env_->delay_sstable_sync_.Release_Store(env_); // Block sync calls + env_->delay_data_sync_.Release_Store(env_); // Block sync calls Put("k1", std::string(100000, 'x')); // Fill memtable Put("k2", std::string(100000, 'y')); // Trigger compaction ASSERT_EQ("v1", Get("foo")); - env_->delay_sstable_sync_.Release_Store(NULL); // Release sync calls + env_->delay_data_sync_.Release_Store(NULL); // Release sync calls } while (ChangeOptions()); } @@ -1516,41 +1533,13 @@ TEST(DBTest, NoSpace) { Compact("a", "z"); const int num_files = CountFiles(); env_->no_space_.Release_Store(env_); // Force out-of-space errors - env_->sleep_counter_.Reset(); - for (int i = 0; i < 5; i++) { + for (int i = 0; i < 10; i++) { for (int level = 0; level < config::kNumLevels-1; level++) { dbfull()->TEST_CompactRange(level, NULL, NULL); } } env_->no_space_.Release_Store(NULL); ASSERT_LT(CountFiles(), num_files + 3); - - // Check that compaction attempts slept after errors - ASSERT_GE(env_->sleep_counter_.Read(), 5); -} - -TEST(DBTest, ExponentialBackoff) { - Options options = CurrentOptions(); - options.env = env_; - Reopen(&options); - - ASSERT_OK(Put("foo", "v1")); - ASSERT_EQ("v1", Get("foo")); - Compact("a", "z"); - env_->non_writable_.Release_Store(env_); // Force errors for new files - env_->sleep_counter_.Reset(); - env_->sleep_time_counter_.Reset(); - for (int i = 0; i < 5; i++) { - dbfull()->TEST_CompactRange(2, NULL, NULL); - } - env_->non_writable_.Release_Store(NULL); - - // Wait for compaction to finish - DelayMilliseconds(1000); - - ASSERT_GE(env_->sleep_counter_.Read(), 5); - ASSERT_LT(env_->sleep_counter_.Read(), 10); - ASSERT_GE(env_->sleep_time_counter_.Read(), 10e6); } TEST(DBTest, NonWritableFileSystem) { @@ -1573,6 +1562,37 @@ TEST(DBTest, NonWritableFileSystem) { env_->non_writable_.Release_Store(NULL); } +TEST(DBTest, WriteSyncError) { + // Check that log sync errors cause the DB to disallow future writes. + + // (a) Cause log sync calls to fail + Options options = CurrentOptions(); + options.env = env_; + Reopen(&options); + env_->data_sync_error_.Release_Store(env_); + + // (b) Normal write should succeed + WriteOptions w; + ASSERT_OK(db_->Put(w, "k1", "v1")); + ASSERT_EQ("v1", Get("k1")); + + // (c) Do a sync write; should fail + w.sync = true; + ASSERT_TRUE(!db_->Put(w, "k2", "v2").ok()); + ASSERT_EQ("v1", Get("k1")); + ASSERT_EQ("NOT_FOUND", Get("k2")); + + // (d) make sync behave normally + env_->data_sync_error_.Release_Store(NULL); + + // (e) Do a non-sync write; should fail + w.sync = false; + ASSERT_TRUE(!db_->Put(w, "k3", "v3").ok()); + ASSERT_EQ("v1", Get("k1")); + ASSERT_EQ("NOT_FOUND", Get("k2")); + ASSERT_EQ("NOT_FOUND", Get("k3")); +} + TEST(DBTest, ManifestWriteError) { // Test for the following problem: // (a) Compaction produces file F @@ -1632,6 +1652,22 @@ TEST(DBTest, MissingSSTFile) { << s.ToString(); } +TEST(DBTest, StillReadSST) { + ASSERT_OK(Put("foo", "bar")); + ASSERT_EQ("bar", Get("foo")); + + // Dump the memtable to disk. + dbfull()->TEST_CompactMemTable(); + ASSERT_EQ("bar", Get("foo")); + Close(); + ASSERT_GT(RenameLDBToSST(), 0); + Options options = CurrentOptions(); + options.paranoid_checks = true; + Status s = TryReopen(&options); + ASSERT_TRUE(s.ok()); + ASSERT_EQ("bar", Get("foo")); +} + TEST(DBTest, FilesDeletedAfterCompaction) { ASSERT_OK(Put("foo", "v2")); Compact("a", "z"); @@ -1663,7 +1699,7 @@ TEST(DBTest, BloomFilter) { dbfull()->TEST_CompactMemTable(); // Prevent auto compactions triggered by seeks - env_->delay_sstable_sync_.Release_Store(env_); + env_->delay_data_sync_.Release_Store(env_); // Lookup present keys. Should rarely read from small sstable. env_->random_read_counter_.Reset(); @@ -1684,7 +1720,7 @@ TEST(DBTest, BloomFilter) { fprintf(stderr, "%d missing => %d reads\n", N, reads); ASSERT_LE(reads, 3*N/100); - env_->delay_sstable_sync_.Release_Store(NULL); + env_->delay_data_sync_.Release_Store(NULL); Close(); delete options.block_cache; delete options.filter_policy; @@ -1744,7 +1780,7 @@ static void MTThreadBody(void* arg) { ASSERT_EQ(k, key); ASSERT_GE(w, 0); ASSERT_LT(w, kNumThreads); - ASSERT_LE(c, reinterpret_cast( + ASSERT_LE(static_cast(c), reinterpret_cast( t->state->counter[w].Acquire_Load())); } } diff --git a/src/leveldb/db/dbformat.h b/src/leveldb/db/dbformat.h index f7f64daf..5d8a032b 100644 --- a/src/leveldb/db/dbformat.h +++ b/src/leveldb/db/dbformat.h @@ -38,6 +38,9 @@ static const int kL0_StopWritesTrigger = 12; // space if the same key space is being repeatedly overwritten. static const int kMaxMemCompactLevel = 2; +// Approximate gap in bytes between samples of data read during iteration. +static const int kReadBytesPeriod = 1048576; + } // namespace config class InternalKey; diff --git a/src/leveldb/db/filename.cc b/src/leveldb/db/filename.cc index 3c4d49f6..da32946d 100644 --- a/src/leveldb/db/filename.cc +++ b/src/leveldb/db/filename.cc @@ -30,6 +30,11 @@ std::string LogFileName(const std::string& name, uint64_t number) { } std::string TableFileName(const std::string& name, uint64_t number) { + assert(number > 0); + return MakeFileName(name, number, "ldb"); +} + +std::string SSTTableFileName(const std::string& name, uint64_t number) { assert(number > 0); return MakeFileName(name, number, "sst"); } @@ -71,7 +76,7 @@ std::string OldInfoLogFileName(const std::string& dbname) { // dbname/LOG // dbname/LOG.old // dbname/MANIFEST-[0-9]+ -// dbname/[0-9]+.(log|sst) +// dbname/[0-9]+.(log|sst|ldb) bool ParseFileName(const std::string& fname, uint64_t* number, FileType* type) { @@ -106,7 +111,7 @@ bool ParseFileName(const std::string& fname, Slice suffix = rest; if (suffix == Slice(".log")) { *type = kLogFile; - } else if (suffix == Slice(".sst")) { + } else if (suffix == Slice(".sst") || suffix == Slice(".ldb")) { *type = kTableFile; } else if (suffix == Slice(".dbtmp")) { *type = kTempFile; diff --git a/src/leveldb/db/filename.h b/src/leveldb/db/filename.h index d5d09b11..87a75260 100644 --- a/src/leveldb/db/filename.h +++ b/src/leveldb/db/filename.h @@ -37,6 +37,11 @@ extern std::string LogFileName(const std::string& dbname, uint64_t number); // "dbname". extern std::string TableFileName(const std::string& dbname, uint64_t number); +// Return the legacy file name for an sstable with the specified number +// in the db named by "dbname". The result will be prefixed with +// "dbname". +extern std::string SSTTableFileName(const std::string& dbname, uint64_t number); + // Return the name of the descriptor file for the db named by // "dbname" and the specified incarnation number. The result will be // prefixed with "dbname". diff --git a/src/leveldb/db/filename_test.cc b/src/leveldb/db/filename_test.cc index 5a26da47..a32556de 100644 --- a/src/leveldb/db/filename_test.cc +++ b/src/leveldb/db/filename_test.cc @@ -27,6 +27,7 @@ TEST(FileNameTest, Parse) { { "100.log", 100, kLogFile }, { "0.log", 0, kLogFile }, { "0.sst", 0, kTableFile }, + { "0.ldb", 0, kTableFile }, { "CURRENT", 0, kCurrentFile }, { "LOCK", 0, kDBLockFile }, { "MANIFEST-2", 2, kDescriptorFile }, diff --git a/src/leveldb/db/log_reader.cc b/src/leveldb/db/log_reader.cc index b35f115a..4919216d 100644 --- a/src/leveldb/db/log_reader.cc +++ b/src/leveldb/db/log_reader.cc @@ -133,7 +133,9 @@ bool Reader::ReadRecord(Slice* record, std::string* scratch) { case kEof: if (in_fragmented_record) { - ReportCorruption(scratch->size(), "partial record without end(3)"); + // This can be caused by the writer dying immediately after + // writing a physical record but before completing the next; don't + // treat it as a corruption, just ignore the entire logical record. scratch->clear(); } return false; @@ -193,13 +195,12 @@ unsigned int Reader::ReadPhysicalRecord(Slice* result) { eof_ = true; } continue; - } else if (buffer_.size() == 0) { - // End of file - return kEof; } else { - size_t drop_size = buffer_.size(); + // Note that if buffer_ is non-empty, we have a truncated header at the + // end of the file, which can be caused by the writer crashing in the + // middle of writing the header. Instead of considering this an error, + // just report EOF. buffer_.clear(); - ReportCorruption(drop_size, "truncated record at end of file"); return kEof; } } @@ -213,8 +214,14 @@ unsigned int Reader::ReadPhysicalRecord(Slice* result) { if (kHeaderSize + length > buffer_.size()) { size_t drop_size = buffer_.size(); buffer_.clear(); - ReportCorruption(drop_size, "bad record length"); - return kBadRecord; + if (!eof_) { + ReportCorruption(drop_size, "bad record length"); + return kBadRecord; + } + // If the end of the file has been reached without reading |length| bytes + // of payload, assume the writer died in the middle of writing the record. + // Don't report a corruption. + return kEof; } if (type == kZeroType && length == 0) { diff --git a/src/leveldb/db/log_test.cc b/src/leveldb/db/log_test.cc index 4c5cf875..91d3caaf 100644 --- a/src/leveldb/db/log_test.cc +++ b/src/leveldb/db/log_test.cc @@ -351,20 +351,32 @@ TEST(LogTest, BadRecordType) { ASSERT_EQ("OK", MatchError("unknown record type")); } -TEST(LogTest, TruncatedTrailingRecord) { +TEST(LogTest, TruncatedTrailingRecordIsIgnored) { Write("foo"); ShrinkSize(4); // Drop all payload as well as a header byte ASSERT_EQ("EOF", Read()); - ASSERT_EQ(kHeaderSize - 1, DroppedBytes()); - ASSERT_EQ("OK", MatchError("truncated record at end of file")); + // Truncated last record is ignored, not treated as an error. + ASSERT_EQ(0, DroppedBytes()); + ASSERT_EQ("", ReportMessage()); } TEST(LogTest, BadLength) { + const int kPayloadSize = kBlockSize - kHeaderSize; + Write(BigString("bar", kPayloadSize)); + Write("foo"); + // Least significant size byte is stored in header[4]. + IncrementByte(4, 1); + ASSERT_EQ("foo", Read()); + ASSERT_EQ(kBlockSize, DroppedBytes()); + ASSERT_EQ("OK", MatchError("bad record length")); +} + +TEST(LogTest, BadLengthAtEndIsIgnored) { Write("foo"); ShrinkSize(1); ASSERT_EQ("EOF", Read()); - ASSERT_EQ(kHeaderSize + 2, DroppedBytes()); - ASSERT_EQ("OK", MatchError("bad record length")); + ASSERT_EQ(0, DroppedBytes()); + ASSERT_EQ("", ReportMessage()); } TEST(LogTest, ChecksumMismatch) { @@ -415,6 +427,24 @@ TEST(LogTest, UnexpectedFirstType) { ASSERT_EQ("OK", MatchError("partial record without end")); } +TEST(LogTest, MissingLastIsIgnored) { + Write(BigString("bar", kBlockSize)); + // Remove the LAST block, including header. + ShrinkSize(14); + ASSERT_EQ("EOF", Read()); + ASSERT_EQ("", ReportMessage()); + ASSERT_EQ(0, DroppedBytes()); +} + +TEST(LogTest, PartialLastIsIgnored) { + Write(BigString("bar", kBlockSize)); + // Cause a bad record length in the LAST block. + ShrinkSize(1); + ASSERT_EQ("EOF", Read()); + ASSERT_EQ("", ReportMessage()); + ASSERT_EQ(0, DroppedBytes()); +} + TEST(LogTest, ErrorJoinsRecords) { // Consider two fragmented records: // first(R1) last(R1) first(R2) last(R2) diff --git a/src/leveldb/db/repair.cc b/src/leveldb/db/repair.cc index 022d52f3..7727fafc 100644 --- a/src/leveldb/db/repair.cc +++ b/src/leveldb/db/repair.cc @@ -242,62 +242,134 @@ class Repairer { } void ExtractMetaData() { - std::vector kept; for (size_t i = 0; i < table_numbers_.size(); i++) { - TableInfo t; - t.meta.number = table_numbers_[i]; - Status status = ScanTable(&t); - if (!status.ok()) { - std::string fname = TableFileName(dbname_, table_numbers_[i]); - Log(options_.info_log, "Table #%llu: ignoring %s", - (unsigned long long) table_numbers_[i], - status.ToString().c_str()); - ArchiveFile(fname); - } else { - tables_.push_back(t); - } + ScanTable(table_numbers_[i]); } } - Status ScanTable(TableInfo* t) { - std::string fname = TableFileName(dbname_, t->meta.number); - int counter = 0; - Status status = env_->GetFileSize(fname, &t->meta.file_size); - if (status.ok()) { - Iterator* iter = table_cache_->NewIterator( - ReadOptions(), t->meta.number, t->meta.file_size); - bool empty = true; - ParsedInternalKey parsed; - t->max_sequence = 0; - for (iter->SeekToFirst(); iter->Valid(); iter->Next()) { - Slice key = iter->key(); - if (!ParseInternalKey(key, &parsed)) { - Log(options_.info_log, "Table #%llu: unparsable key %s", - (unsigned long long) t->meta.number, - EscapeString(key).c_str()); - continue; - } + Iterator* NewTableIterator(const FileMetaData& meta) { + // Same as compaction iterators: if paranoid_checks are on, turn + // on checksum verification. + ReadOptions r; + r.verify_checksums = options_.paranoid_checks; + return table_cache_->NewIterator(r, meta.number, meta.file_size); + } - counter++; - if (empty) { - empty = false; - t->meta.smallest.DecodeFrom(key); - } - t->meta.largest.DecodeFrom(key); - if (parsed.sequence > t->max_sequence) { - t->max_sequence = parsed.sequence; - } + void ScanTable(uint64_t number) { + TableInfo t; + t.meta.number = number; + std::string fname = TableFileName(dbname_, number); + Status status = env_->GetFileSize(fname, &t.meta.file_size); + if (!status.ok()) { + // Try alternate file name. + fname = SSTTableFileName(dbname_, number); + Status s2 = env_->GetFileSize(fname, &t.meta.file_size); + if (s2.ok()) { + status = Status::OK(); } - if (!iter->status().ok()) { - status = iter->status(); - } - delete iter; } + if (!status.ok()) { + ArchiveFile(TableFileName(dbname_, number)); + ArchiveFile(SSTTableFileName(dbname_, number)); + Log(options_.info_log, "Table #%llu: dropped: %s", + (unsigned long long) t.meta.number, + status.ToString().c_str()); + return; + } + + // Extract metadata by scanning through table. + int counter = 0; + Iterator* iter = NewTableIterator(t.meta); + bool empty = true; + ParsedInternalKey parsed; + t.max_sequence = 0; + for (iter->SeekToFirst(); iter->Valid(); iter->Next()) { + Slice key = iter->key(); + if (!ParseInternalKey(key, &parsed)) { + Log(options_.info_log, "Table #%llu: unparsable key %s", + (unsigned long long) t.meta.number, + EscapeString(key).c_str()); + continue; + } + + counter++; + if (empty) { + empty = false; + t.meta.smallest.DecodeFrom(key); + } + t.meta.largest.DecodeFrom(key); + if (parsed.sequence > t.max_sequence) { + t.max_sequence = parsed.sequence; + } + } + if (!iter->status().ok()) { + status = iter->status(); + } + delete iter; Log(options_.info_log, "Table #%llu: %d entries %s", - (unsigned long long) t->meta.number, + (unsigned long long) t.meta.number, counter, status.ToString().c_str()); - return status; + + if (status.ok()) { + tables_.push_back(t); + } else { + RepairTable(fname, t); // RepairTable archives input file. + } + } + + void RepairTable(const std::string& src, TableInfo t) { + // We will copy src contents to a new table and then rename the + // new table over the source. + + // Create builder. + std::string copy = TableFileName(dbname_, next_file_number_++); + WritableFile* file; + Status s = env_->NewWritableFile(copy, &file); + if (!s.ok()) { + return; + } + TableBuilder* builder = new TableBuilder(options_, file); + + // Copy data. + Iterator* iter = NewTableIterator(t.meta); + int counter = 0; + for (iter->SeekToFirst(); iter->Valid(); iter->Next()) { + builder->Add(iter->key(), iter->value()); + counter++; + } + delete iter; + + ArchiveFile(src); + if (counter == 0) { + builder->Abandon(); // Nothing to save + } else { + s = builder->Finish(); + if (s.ok()) { + t.meta.file_size = builder->FileSize(); + } + } + delete builder; + builder = NULL; + + if (s.ok()) { + s = file->Close(); + } + delete file; + file = NULL; + + if (counter > 0 && s.ok()) { + std::string orig = TableFileName(dbname_, t.meta.number); + s = env_->RenameFile(copy, orig); + if (s.ok()) { + Log(options_.info_log, "Table #%llu: %d entries repaired", + (unsigned long long) t.meta.number, counter); + tables_.push_back(t); + } + } + if (!s.ok()) { + env_->DeleteFile(copy); + } } Status WriteDescriptor() { diff --git a/src/leveldb/db/table_cache.cc b/src/leveldb/db/table_cache.cc index 497db270..e3d82cd3 100644 --- a/src/leveldb/db/table_cache.cc +++ b/src/leveldb/db/table_cache.cc @@ -54,6 +54,12 @@ Status TableCache::FindTable(uint64_t file_number, uint64_t file_size, RandomAccessFile* file = NULL; Table* table = NULL; s = env_->NewRandomAccessFile(fname, &file); + if (!s.ok()) { + std::string old_fname = SSTTableFileName(dbname_, file_number); + if (env_->NewRandomAccessFile(old_fname, &file).ok()) { + s = Status::OK(); + } + } if (s.ok()) { s = Table::Open(*options_, file, file_size, &table); } diff --git a/src/leveldb/db/version_set.cc b/src/leveldb/db/version_set.cc index 4fd1ddef..aa83df55 100644 --- a/src/leveldb/db/version_set.cc +++ b/src/leveldb/db/version_set.cc @@ -54,20 +54,6 @@ static int64_t TotalFileSize(const std::vector& files) { return sum; } -namespace { -std::string IntSetToString(const std::set& s) { - std::string result = "{"; - for (std::set::const_iterator it = s.begin(); - it != s.end(); - ++it) { - result += (result.size() > 1) ? "," : ""; - result += NumberToString(*it); - } - result += "}"; - return result; -} -} // namespace - Version::~Version() { assert(refs_ == 0); @@ -289,6 +275,51 @@ static bool NewestFirst(FileMetaData* a, FileMetaData* b) { return a->number > b->number; } +void Version::ForEachOverlapping(Slice user_key, Slice internal_key, + void* arg, + bool (*func)(void*, int, FileMetaData*)) { + // TODO(sanjay): Change Version::Get() to use this function. + const Comparator* ucmp = vset_->icmp_.user_comparator(); + + // Search level-0 in order from newest to oldest. + std::vector tmp; + tmp.reserve(files_[0].size()); + for (uint32_t i = 0; i < files_[0].size(); i++) { + FileMetaData* f = files_[0][i]; + if (ucmp->Compare(user_key, f->smallest.user_key()) >= 0 && + ucmp->Compare(user_key, f->largest.user_key()) <= 0) { + tmp.push_back(f); + } + } + if (!tmp.empty()) { + std::sort(tmp.begin(), tmp.end(), NewestFirst); + for (uint32_t i = 0; i < tmp.size(); i++) { + if (!(*func)(arg, 0, tmp[i])) { + return; + } + } + } + + // Search other levels. + for (int level = 1; level < config::kNumLevels; level++) { + size_t num_files = files_[level].size(); + if (num_files == 0) continue; + + // Binary search to find earliest index whose largest key >= internal_key. + uint32_t index = FindFile(vset_->icmp_, files_[level], internal_key); + if (index < num_files) { + FileMetaData* f = files_[level][index]; + if (ucmp->Compare(user_key, f->smallest.user_key()) < 0) { + // All of "f" is past any data for user_key + } else { + if (!(*func)(arg, level, f)) { + return; + } + } + } + } +} + Status Version::Get(const ReadOptions& options, const LookupKey& k, std::string* value, @@ -401,6 +432,44 @@ bool Version::UpdateStats(const GetStats& stats) { return false; } +bool Version::RecordReadSample(Slice internal_key) { + ParsedInternalKey ikey; + if (!ParseInternalKey(internal_key, &ikey)) { + return false; + } + + struct State { + GetStats stats; // Holds first matching file + int matches; + + static bool Match(void* arg, int level, FileMetaData* f) { + State* state = reinterpret_cast(arg); + state->matches++; + if (state->matches == 1) { + // Remember first match. + state->stats.seek_file = f; + state->stats.seek_file_level = level; + } + // We can stop iterating once we have a second match. + return state->matches < 2; + } + }; + + State state; + state.matches = 0; + ForEachOverlapping(ikey.user_key, internal_key, &state, &State::Match); + + // Must have at least two matches since we want to merge across + // files. But what if we have a single file that contains many + // overwrites and deletions? Should we have another mechanism for + // finding such files? + if (state.matches >= 2) { + // 1MB cost is about 1 seek (see comment in Builder::Apply). + return UpdateStats(state.stats); + } + return false; +} + void Version::Ref() { ++refs_; } @@ -435,10 +504,13 @@ int Version::PickLevelForMemTableOutput( if (OverlapInLevel(level + 1, &smallest_user_key, &largest_user_key)) { break; } - GetOverlappingInputs(level + 2, &start, &limit, &overlaps); - const int64_t sum = TotalFileSize(overlaps); - if (sum > kMaxGrandParentOverlapBytes) { - break; + if (level + 2 < config::kNumLevels) { + // Check that file does not overlap too many grandparent bytes. + GetOverlappingInputs(level + 2, &start, &limit, &overlaps); + const int64_t sum = TotalFileSize(overlaps); + if (sum > kMaxGrandParentOverlapBytes) { + break; + } } level++; } @@ -452,6 +524,8 @@ void Version::GetOverlappingInputs( const InternalKey* begin, const InternalKey* end, std::vector* inputs) { + assert(level >= 0); + assert(level < config::kNumLevels); inputs->clear(); Slice user_begin, user_end; if (begin != NULL) { @@ -788,12 +862,6 @@ Status VersionSet::LogAndApply(VersionEdit* edit, port::Mutex* mu) { } if (!s.ok()) { Log(options_->info_log, "MANIFEST write: %s\n", s.ToString().c_str()); - if (ManifestContains(record)) { - Log(options_->info_log, - "MANIFEST contains log record despite error; advancing to new " - "version to prevent mismatch between in-memory and logged state"); - s = Status::OK(); - } } } @@ -801,8 +869,6 @@ Status VersionSet::LogAndApply(VersionEdit* edit, port::Mutex* mu) { // new CURRENT file that points to it. if (s.ok() && !new_manifest_file.empty()) { s = SetCurrentFile(env_, dbname_, manifest_file_number_); - // No need to double-check MANIFEST in case of error since it - // will be discarded below. } mu->Lock(); @@ -1036,31 +1102,6 @@ const char* VersionSet::LevelSummary(LevelSummaryStorage* scratch) const { return scratch->buffer; } -// Return true iff the manifest contains the specified record. -bool VersionSet::ManifestContains(const std::string& record) const { - std::string fname = DescriptorFileName(dbname_, manifest_file_number_); - Log(options_->info_log, "ManifestContains: checking %s\n", fname.c_str()); - SequentialFile* file = NULL; - Status s = env_->NewSequentialFile(fname, &file); - if (!s.ok()) { - Log(options_->info_log, "ManifestContains: %s\n", s.ToString().c_str()); - return false; - } - log::Reader reader(file, NULL, true/*checksum*/, 0); - Slice r; - std::string scratch; - bool result = false; - while (reader.ReadRecord(&r, &scratch)) { - if (r == Slice(record)) { - result = true; - break; - } - } - delete file; - Log(options_->info_log, "ManifestContains: result = %d\n", result ? 1 : 0); - return result; -} - uint64_t VersionSet::ApproximateOffsetOf(Version* v, const InternalKey& ikey) { uint64_t result = 0; for (int level = 0; level < config::kNumLevels; level++) { diff --git a/src/leveldb/db/version_set.h b/src/leveldb/db/version_set.h index 9d084fdb..8dc14b8e 100644 --- a/src/leveldb/db/version_set.h +++ b/src/leveldb/db/version_set.h @@ -78,6 +78,12 @@ class Version { // REQUIRES: lock is held bool UpdateStats(const GetStats& stats); + // Record a sample of bytes read at the specified internal key. + // Samples are taken approximately once every config::kReadBytesPeriod + // bytes. Returns true if a new compaction may need to be triggered. + // REQUIRES: lock is held + bool RecordReadSample(Slice key); + // Reference count management (so Versions do not disappear out from // under live iterators) void Ref(); @@ -114,6 +120,15 @@ class Version { class LevelFileNumIterator; Iterator* NewConcatenatingIterator(const ReadOptions&, int level) const; + // Call func(arg, level, f) for every file that overlaps user_key in + // order from newest to oldest. If an invocation of func returns + // false, makes no more calls. + // + // REQUIRES: user portion of internal_key == user_key. + void ForEachOverlapping(Slice user_key, Slice internal_key, + void* arg, + bool (*func)(void*, int, FileMetaData*)); + VersionSet* vset_; // VersionSet to which this Version belongs Version* next_; // Next version in linked list Version* prev_; // Previous version in linked list @@ -277,8 +292,6 @@ class VersionSet { void AppendVersion(Version* v); - bool ManifestContains(const std::string& record) const; - Env* const env_; const std::string dbname_; const Options* const options_; diff --git a/src/leveldb/doc/impl.html b/src/leveldb/doc/impl.html index e870795d..28817fe0 100644 --- a/src/leveldb/doc/impl.html +++ b/src/leveldb/doc/impl.html @@ -11,7 +11,7 @@ The implementation of leveldb is similar in spirit to the representation of a single - + Bigtable tablet (section 5.3). However the organization of the files that make up the representation is somewhat different and is explained below. diff --git a/src/leveldb/include/leveldb/c.h b/src/leveldb/include/leveldb/c.h index 1fa58866..1048fe3b 100644 --- a/src/leveldb/include/leveldb/c.h +++ b/src/leveldb/include/leveldb/c.h @@ -9,7 +9,6 @@ Does not support: . getters for the option types . custom comparators that implement key shortening - . capturing post-write-snapshot . custom iter, db, env, cache implementations using just the C bindings Some conventions: diff --git a/src/leveldb/include/leveldb/db.h b/src/leveldb/include/leveldb/db.h index da8b11a8..40851b2a 100644 --- a/src/leveldb/include/leveldb/db.h +++ b/src/leveldb/include/leveldb/db.h @@ -14,7 +14,7 @@ namespace leveldb { // Update Makefile if you change these static const int kMajorVersion = 1; -static const int kMinorVersion = 12; +static const int kMinorVersion = 17; struct Options; struct ReadOptions; diff --git a/src/leveldb/include/leveldb/env.h b/src/leveldb/include/leveldb/env.h index fa32289f..b2072d02 100644 --- a/src/leveldb/include/leveldb/env.h +++ b/src/leveldb/include/leveldb/env.h @@ -13,9 +13,9 @@ #ifndef STORAGE_LEVELDB_INCLUDE_ENV_H_ #define STORAGE_LEVELDB_INCLUDE_ENV_H_ -#include #include #include +#include #include #include "leveldb/status.h" diff --git a/src/leveldb/include/leveldb/slice.h b/src/leveldb/include/leveldb/slice.h index 74ea8fa4..bc367986 100644 --- a/src/leveldb/include/leveldb/slice.h +++ b/src/leveldb/include/leveldb/slice.h @@ -94,7 +94,7 @@ inline bool operator!=(const Slice& x, const Slice& y) { } inline int Slice::compare(const Slice& b) const { - const int min_len = (size_ < b.size_) ? size_ : b.size_; + const size_t min_len = (size_ < b.size_) ? size_ : b.size_; int r = memcmp(data_, b.data_, min_len); if (r == 0) { if (size_ < b.size_) r = -1; diff --git a/src/leveldb/issues/issue178_test.cc b/src/leveldb/issues/issue178_test.cc new file mode 100644 index 00000000..1b1cf8bb --- /dev/null +++ b/src/leveldb/issues/issue178_test.cc @@ -0,0 +1,92 @@ +// Copyright (c) 2013 The LevelDB Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. See the AUTHORS file for names of contributors. + +// Test for issue 178: a manual compaction causes deleted data to reappear. +#include +#include +#include + +#include "leveldb/db.h" +#include "leveldb/write_batch.h" +#include "util/testharness.h" + +namespace { + +const int kNumKeys = 1100000; + +std::string Key1(int i) { + char buf[100]; + snprintf(buf, sizeof(buf), "my_key_%d", i); + return buf; +} + +std::string Key2(int i) { + return Key1(i) + "_xxx"; +} + +class Issue178 { }; + +TEST(Issue178, Test) { + // Get rid of any state from an old run. + std::string dbpath = leveldb::test::TmpDir() + "/leveldb_cbug_test"; + DestroyDB(dbpath, leveldb::Options()); + + // Open database. Disable compression since it affects the creation + // of layers and the code below is trying to test against a very + // specific scenario. + leveldb::DB* db; + leveldb::Options db_options; + db_options.create_if_missing = true; + db_options.compression = leveldb::kNoCompression; + ASSERT_OK(leveldb::DB::Open(db_options, dbpath, &db)); + + // create first key range + leveldb::WriteBatch batch; + for (size_t i = 0; i < kNumKeys; i++) { + batch.Put(Key1(i), "value for range 1 key"); + } + ASSERT_OK(db->Write(leveldb::WriteOptions(), &batch)); + + // create second key range + batch.Clear(); + for (size_t i = 0; i < kNumKeys; i++) { + batch.Put(Key2(i), "value for range 2 key"); + } + ASSERT_OK(db->Write(leveldb::WriteOptions(), &batch)); + + // delete second key range + batch.Clear(); + for (size_t i = 0; i < kNumKeys; i++) { + batch.Delete(Key2(i)); + } + ASSERT_OK(db->Write(leveldb::WriteOptions(), &batch)); + + // compact database + std::string start_key = Key1(0); + std::string end_key = Key1(kNumKeys - 1); + leveldb::Slice least(start_key.data(), start_key.size()); + leveldb::Slice greatest(end_key.data(), end_key.size()); + + // commenting out the line below causes the example to work correctly + db->CompactRange(&least, &greatest); + + // count the keys + leveldb::Iterator* iter = db->NewIterator(leveldb::ReadOptions()); + size_t num_keys = 0; + for (iter->SeekToFirst(); iter->Valid(); iter->Next()) { + num_keys++; + } + delete iter; + ASSERT_EQ(kNumKeys, num_keys) << "Bad number of keys"; + + // close database + delete db; + DestroyDB(dbpath, leveldb::Options()); +} + +} // anonymous namespace + +int main(int argc, char** argv) { + return leveldb::test::RunAllTests(); +} diff --git a/src/leveldb/issues/issue200_test.cc b/src/leveldb/issues/issue200_test.cc new file mode 100644 index 00000000..1cec79f4 --- /dev/null +++ b/src/leveldb/issues/issue200_test.cc @@ -0,0 +1,59 @@ +// Copyright (c) 2013 The LevelDB Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. See the AUTHORS file for names of contributors. + +// Test for issue 200: when iterator switches direction from backward +// to forward, the current key can be yielded unexpectedly if a new +// mutation has been added just before the current key. + +#include "leveldb/db.h" +#include "util/testharness.h" + +namespace leveldb { + +class Issue200 { }; + +TEST(Issue200, Test) { + // Get rid of any state from an old run. + std::string dbpath = test::TmpDir() + "/leveldb_issue200_test"; + DestroyDB(dbpath, Options()); + + DB *db; + Options options; + options.create_if_missing = true; + ASSERT_OK(DB::Open(options, dbpath, &db)); + + WriteOptions write_options; + ASSERT_OK(db->Put(write_options, "1", "b")); + ASSERT_OK(db->Put(write_options, "2", "c")); + ASSERT_OK(db->Put(write_options, "3", "d")); + ASSERT_OK(db->Put(write_options, "4", "e")); + ASSERT_OK(db->Put(write_options, "5", "f")); + + ReadOptions read_options; + Iterator *iter = db->NewIterator(read_options); + + // Add an element that should not be reflected in the iterator. + ASSERT_OK(db->Put(write_options, "25", "cd")); + + iter->Seek("5"); + ASSERT_EQ(iter->key().ToString(), "5"); + iter->Prev(); + ASSERT_EQ(iter->key().ToString(), "4"); + iter->Prev(); + ASSERT_EQ(iter->key().ToString(), "3"); + iter->Next(); + ASSERT_EQ(iter->key().ToString(), "4"); + iter->Next(); + ASSERT_EQ(iter->key().ToString(), "5"); + + delete iter; + delete db; + DestroyDB(dbpath, options); +} + +} // namespace leveldb + +int main(int argc, char** argv) { + return leveldb::test::RunAllTests(); +} diff --git a/src/leveldb/port/atomic_pointer.h b/src/leveldb/port/atomic_pointer.h index e17bf435..a9866b23 100644 --- a/src/leveldb/port/atomic_pointer.h +++ b/src/leveldb/port/atomic_pointer.h @@ -50,6 +50,13 @@ namespace port { // http://msdn.microsoft.com/en-us/library/ms684208(v=vs.85).aspx #define LEVELDB_HAVE_MEMORY_BARRIER +// Mac OS +#elif defined(OS_MACOSX) +inline void MemoryBarrier() { + OSMemoryBarrier(); +} +#define LEVELDB_HAVE_MEMORY_BARRIER + // Gcc on x86 #elif defined(ARCH_CPU_X86_FAMILY) && defined(__GNUC__) inline void MemoryBarrier() { @@ -68,13 +75,6 @@ inline void MemoryBarrier() { } #define LEVELDB_HAVE_MEMORY_BARRIER -// Mac OS -#elif defined(OS_MACOSX) -inline void MemoryBarrier() { - OSMemoryBarrier(); -} -#define LEVELDB_HAVE_MEMORY_BARRIER - // ARM Linux #elif defined(ARCH_CPU_ARM_FAMILY) && defined(__linux__) typedef void (*LinuxKernelMemoryBarrierFunc)(void); diff --git a/src/leveldb/port/port_posix.h b/src/leveldb/port/port_posix.h index f2b89bff..21c845e2 100644 --- a/src/leveldb/port/port_posix.h +++ b/src/leveldb/port/port_posix.h @@ -62,12 +62,16 @@ #define fflush_unlocked fflush #endif -#if defined(OS_MACOSX) || defined(OS_FREEBSD) ||\ +#if defined(OS_FREEBSD) ||\ defined(OS_OPENBSD) || defined(OS_DRAGONFLYBSD) // Use fsync() on platforms without fdatasync() #define fdatasync fsync #endif +#if defined(OS_MACOSX) +#define fdatasync(fd) fcntl(fd, F_FULLFSYNC, 0) +#endif + #if defined(OS_ANDROID) && __ANDROID_API__ < 9 // fdatasync() was only introduced in API level 9 on Android. Use fsync() // when targetting older platforms. diff --git a/src/leveldb/table/filter_block_test.cc b/src/leveldb/table/filter_block_test.cc index 3a2a07cf..8c4a4741 100644 --- a/src/leveldb/table/filter_block_test.cc +++ b/src/leveldb/table/filter_block_test.cc @@ -29,7 +29,7 @@ class TestHashFilter : public FilterPolicy { virtual bool KeyMayMatch(const Slice& key, const Slice& filter) const { uint32_t h = Hash(key.data(), key.size(), 1); - for (int i = 0; i + 4 <= filter.size(); i += 4) { + for (size_t i = 0; i + 4 <= filter.size(); i += 4) { if (h == DecodeFixed32(filter.data() + i)) { return true; } diff --git a/src/leveldb/util/arena.cc b/src/leveldb/util/arena.cc index 9551d6a3..9367f714 100644 --- a/src/leveldb/util/arena.cc +++ b/src/leveldb/util/arena.cc @@ -40,7 +40,7 @@ char* Arena::AllocateFallback(size_t bytes) { } char* Arena::AllocateAligned(size_t bytes) { - const int align = sizeof(void*); // We'll align to pointer size + const int align = (sizeof(void*) > 8) ? sizeof(void*) : 8; assert((align & (align-1)) == 0); // Pointer size should be a power of 2 size_t current_mod = reinterpret_cast(alloc_ptr_) & (align-1); size_t slop = (current_mod == 0 ? 0 : align - current_mod); diff --git a/src/leveldb/util/arena.h b/src/leveldb/util/arena.h index 8f7dde22..73bbf1cb 100644 --- a/src/leveldb/util/arena.h +++ b/src/leveldb/util/arena.h @@ -5,9 +5,9 @@ #ifndef STORAGE_LEVELDB_UTIL_ARENA_H_ #define STORAGE_LEVELDB_UTIL_ARENA_H_ -#include #include #include +#include #include namespace leveldb { diff --git a/src/leveldb/util/arena_test.cc b/src/leveldb/util/arena_test.cc index 63d17780..58e870ec 100644 --- a/src/leveldb/util/arena_test.cc +++ b/src/leveldb/util/arena_test.cc @@ -40,7 +40,7 @@ TEST(ArenaTest, Simple) { r = arena.Allocate(s); } - for (int b = 0; b < s; b++) { + for (size_t b = 0; b < s; b++) { // Fill the "i"th allocation with a known bit pattern r[b] = i % 256; } @@ -51,10 +51,10 @@ TEST(ArenaTest, Simple) { ASSERT_LE(arena.MemoryUsage(), bytes * 1.10); } } - for (int i = 0; i < allocated.size(); i++) { + for (size_t i = 0; i < allocated.size(); i++) { size_t num_bytes = allocated[i].first; const char* p = allocated[i].second; - for (int b = 0; b < num_bytes; b++) { + for (size_t b = 0; b < num_bytes; b++) { // Check the "i"th allocation for the known bit pattern ASSERT_EQ(int(p[b]) & 0xff, i % 256); } diff --git a/src/leveldb/util/bloom_test.cc b/src/leveldb/util/bloom_test.cc index 0bf8e8d6..77fb1b31 100644 --- a/src/leveldb/util/bloom_test.cc +++ b/src/leveldb/util/bloom_test.cc @@ -126,7 +126,8 @@ TEST(BloomTest, VaryingLengths) { } Build(); - ASSERT_LE(FilterSize(), (length * 10 / 8) + 40) << length; + ASSERT_LE(FilterSize(), static_cast((length * 10 / 8) + 40)) + << length; // All added keys must match for (int i = 0; i < length; i++) { diff --git a/src/leveldb/util/coding_test.cc b/src/leveldb/util/coding_test.cc index fb5726e3..521541ea 100644 --- a/src/leveldb/util/coding_test.cc +++ b/src/leveldb/util/coding_test.cc @@ -112,13 +112,13 @@ TEST(Coding, Varint64) { } std::string s; - for (int i = 0; i < values.size(); i++) { + for (size_t i = 0; i < values.size(); i++) { PutVarint64(&s, values[i]); } const char* p = s.data(); const char* limit = p + s.size(); - for (int i = 0; i < values.size(); i++) { + for (size_t i = 0; i < values.size(); i++) { ASSERT_TRUE(p < limit); uint64_t actual; const char* start = p; @@ -143,7 +143,7 @@ TEST(Coding, Varint32Truncation) { std::string s; PutVarint32(&s, large_value); uint32_t result; - for (int len = 0; len < s.size() - 1; len++) { + for (size_t len = 0; len < s.size() - 1; len++) { ASSERT_TRUE(GetVarint32Ptr(s.data(), s.data() + len, &result) == NULL); } ASSERT_TRUE(GetVarint32Ptr(s.data(), s.data() + s.size(), &result) != NULL); @@ -162,7 +162,7 @@ TEST(Coding, Varint64Truncation) { std::string s; PutVarint64(&s, large_value); uint64_t result; - for (int len = 0; len < s.size() - 1; len++) { + for (size_t len = 0; len < s.size() - 1; len++) { ASSERT_TRUE(GetVarint64Ptr(s.data(), s.data() + len, &result) == NULL); } ASSERT_TRUE(GetVarint64Ptr(s.data(), s.data() + s.size(), &result) != NULL); diff --git a/src/leveldb/util/comparator.cc b/src/leveldb/util/comparator.cc index 6cc31924..4b7b5724 100644 --- a/src/leveldb/util/comparator.cc +++ b/src/leveldb/util/comparator.cc @@ -66,7 +66,7 @@ class BytewiseComparatorImpl : public Comparator { }; } // namespace -static port::OnceType once_comparator = LEVELDB_ONCE_INIT; +static port::OnceType once = LEVELDB_ONCE_INIT; static const Comparator* bytewise; static void InitModule() { @@ -74,7 +74,7 @@ static void InitModule() { } const Comparator* BytewiseComparator() { - port::InitOnce(&once_comparator, InitModule); + port::InitOnce(&once, InitModule); return bytewise; } diff --git a/src/leveldb/util/env_posix.cc b/src/leveldb/util/env_posix.cc index 6badfdc2..93eadb1a 100644 --- a/src/leveldb/util/env_posix.cc +++ b/src/leveldb/util/env_posix.cc @@ -176,172 +176,83 @@ class PosixMmapReadableFile: public RandomAccessFile { } }; -// We preallocate up to an extra megabyte and use memcpy to append new -// data to the file. This is safe since we either properly close the -// file before reading from it, or for log files, the reading code -// knows enough to skip zero suffixes. -class PosixMmapFile : public WritableFile { +class PosixWritableFile : public WritableFile { private: std::string filename_; - int fd_; - size_t page_size_; - size_t map_size_; // How much extra memory to map at a time - char* base_; // The mapped region - char* limit_; // Limit of the mapped region - char* dst_; // Where to write next (in range [base_,limit_]) - char* last_sync_; // Where have we synced up to - uint64_t file_offset_; // Offset of base_ in file - - // Have we done an munmap of unsynced data? - bool pending_sync_; - - // Roundup x to a multiple of y - static size_t Roundup(size_t x, size_t y) { - return ((x + y - 1) / y) * y; - } - - size_t TruncateToPageBoundary(size_t s) { - s -= (s & (page_size_ - 1)); - assert((s % page_size_) == 0); - return s; - } - - bool UnmapCurrentRegion() { - bool result = true; - if (base_ != NULL) { - if (last_sync_ < limit_) { - // Defer syncing this data until next Sync() call, if any - pending_sync_ = true; - } - if (munmap(base_, limit_ - base_) != 0) { - result = false; - } - file_offset_ += limit_ - base_; - base_ = NULL; - limit_ = NULL; - last_sync_ = NULL; - dst_ = NULL; - - // Increase the amount we map the next time, but capped at 1MB - if (map_size_ < (1<<20)) { - map_size_ *= 2; - } - } - return result; - } - - bool MapNewRegion() { - assert(base_ == NULL); - if (ftruncate(fd_, file_offset_ + map_size_) < 0) { - return false; - } - void* ptr = mmap(NULL, map_size_, PROT_READ | PROT_WRITE, MAP_SHARED, - fd_, file_offset_); - if (ptr == MAP_FAILED) { - return false; - } - base_ = reinterpret_cast(ptr); - limit_ = base_ + map_size_; - dst_ = base_; - last_sync_ = base_; - return true; - } + FILE* file_; public: - PosixMmapFile(const std::string& fname, int fd, size_t page_size) - : filename_(fname), - fd_(fd), - page_size_(page_size), - map_size_(Roundup(65536, page_size)), - base_(NULL), - limit_(NULL), - dst_(NULL), - last_sync_(NULL), - file_offset_(0), - pending_sync_(false) { - assert((page_size & (page_size - 1)) == 0); - } + PosixWritableFile(const std::string& fname, FILE* f) + : filename_(fname), file_(f) { } - - ~PosixMmapFile() { - if (fd_ >= 0) { - PosixMmapFile::Close(); + ~PosixWritableFile() { + if (file_ != NULL) { + // Ignoring any potential errors + fclose(file_); } } virtual Status Append(const Slice& data) { - const char* src = data.data(); - size_t left = data.size(); - while (left > 0) { - assert(base_ <= dst_); - assert(dst_ <= limit_); - size_t avail = limit_ - dst_; - if (avail == 0) { - if (!UnmapCurrentRegion() || - !MapNewRegion()) { - return IOError(filename_, errno); - } - } - - size_t n = (left <= avail) ? left : avail; - memcpy(dst_, src, n); - dst_ += n; - src += n; - left -= n; + size_t r = fwrite_unlocked(data.data(), 1, data.size(), file_); + if (r != data.size()) { + return IOError(filename_, errno); } return Status::OK(); } virtual Status Close() { - Status s; - size_t unused = limit_ - dst_; - if (!UnmapCurrentRegion()) { - s = IOError(filename_, errno); - } else if (unused > 0) { - // Trim the extra space at the end of the file - if (ftruncate(fd_, file_offset_ - unused) < 0) { - s = IOError(filename_, errno); - } + Status result; + if (fclose(file_) != 0) { + result = IOError(filename_, errno); } - - if (close(fd_) < 0) { - if (s.ok()) { - s = IOError(filename_, errno); - } - } - - fd_ = -1; - base_ = NULL; - limit_ = NULL; - return s; + file_ = NULL; + return result; } virtual Status Flush() { + if (fflush_unlocked(file_) != 0) { + return IOError(filename_, errno); + } return Status::OK(); } - virtual Status Sync() { + Status SyncDirIfManifest() { + const char* f = filename_.c_str(); + const char* sep = strrchr(f, '/'); + Slice basename; + std::string dir; + if (sep == NULL) { + dir = "."; + basename = f; + } else { + dir = std::string(f, sep - f); + basename = sep + 1; + } Status s; - - if (pending_sync_) { - // Some unmapped data was not synced - pending_sync_ = false; - if (fdatasync(fd_) < 0) { - s = IOError(filename_, errno); + if (basename.starts_with("MANIFEST")) { + int fd = open(dir.c_str(), O_RDONLY); + if (fd < 0) { + s = IOError(dir, errno); + } else { + if (fsync(fd) < 0) { + s = IOError(dir, errno); + } + close(fd); } } + return s; + } - if (dst_ > last_sync_) { - // Find the beginnings of the pages that contain the first and last - // bytes to be synced. - size_t p1 = TruncateToPageBoundary(last_sync_ - base_); - size_t p2 = TruncateToPageBoundary(dst_ - base_ - 1); - last_sync_ = dst_; - if (msync(base_ + p1, p2 - p1 + page_size_, MS_SYNC) < 0) { - s = IOError(filename_, errno); - } + virtual Status Sync() { + // Ensure new files referred to by the manifest are in the filesystem. + Status s = SyncDirIfManifest(); + if (!s.ok()) { + return s; + } + if (fflush_unlocked(file_) != 0 || + fdatasync(fileno(file_)) != 0) { + s = Status::IOError(filename_, strerror(errno)); } - return s; } }; @@ -432,12 +343,12 @@ class PosixEnv : public Env { virtual Status NewWritableFile(const std::string& fname, WritableFile** result) { Status s; - const int fd = open(fname.c_str(), O_CREAT | O_RDWR | O_TRUNC, 0644); - if (fd < 0) { + FILE* f = fopen(fname.c_str(), "w"); + if (f == NULL) { *result = NULL; s = IOError(fname, errno); } else { - *result = new PosixMmapFile(fname, fd, page_size_); + *result = new PosixWritableFile(fname, f); } return s; } @@ -600,7 +511,6 @@ class PosixEnv : public Env { return NULL; } - size_t page_size_; pthread_mutex_t mu_; pthread_cond_t bgsignal_; pthread_t bgthread_; @@ -615,8 +525,7 @@ class PosixEnv : public Env { MmapLimiter mmap_limit_; }; -PosixEnv::PosixEnv() : page_size_(getpagesize()), - started_bgthread_(false) { +PosixEnv::PosixEnv() : started_bgthread_(false) { PthreadCall("mutex_init", pthread_mutex_init(&mu_, NULL)); PthreadCall("cvar_init", pthread_cond_init(&bgsignal_, NULL)); } diff --git a/src/leveldb/util/random.h b/src/leveldb/util/random.h index 07538242..ddd51b1c 100644 --- a/src/leveldb/util/random.h +++ b/src/leveldb/util/random.h @@ -16,7 +16,12 @@ class Random { private: uint32_t seed_; public: - explicit Random(uint32_t s) : seed_(s & 0x7fffffffu) { } + explicit Random(uint32_t s) : seed_(s & 0x7fffffffu) { + // Avoid bad seeds. + if (seed_ == 0 || seed_ == 2147483647L) { + seed_ = 1; + } + } uint32_t Next() { static const uint32_t M = 2147483647L; // 2^31-1 static const uint64_t A = 16807; // bits 14, 8, 7, 5, 2, 1, 0 diff --git a/src/leveldb/util/testharness.cc b/src/leveldb/util/testharness.cc index eb1bdd55..402fab34 100644 --- a/src/leveldb/util/testharness.cc +++ b/src/leveldb/util/testharness.cc @@ -38,7 +38,7 @@ int RunAllTests() { int num = 0; if (tests != NULL) { - for (int i = 0; i < tests->size(); i++) { + for (size_t i = 0; i < tests->size(); i++) { const Test& t = (*tests)[i]; if (matcher != NULL) { std::string name = t.base; diff --git a/src/leveldb/util/testutil.cc b/src/leveldb/util/testutil.cc index 538d0951..bee56bf7 100644 --- a/src/leveldb/util/testutil.cc +++ b/src/leveldb/util/testutil.cc @@ -32,7 +32,7 @@ std::string RandomKey(Random* rnd, int len) { extern Slice CompressibleString(Random* rnd, double compressed_fraction, - int len, std::string* dst) { + size_t len, std::string* dst) { int raw = static_cast(len * compressed_fraction); if (raw < 1) raw = 1; std::string raw_data; diff --git a/src/leveldb/util/testutil.h b/src/leveldb/util/testutil.h index 824e655b..adad3fc1 100644 --- a/src/leveldb/util/testutil.h +++ b/src/leveldb/util/testutil.h @@ -24,7 +24,7 @@ extern std::string RandomKey(Random* rnd, int len); // "N*compressed_fraction" bytes and return a Slice that references // the generated data. extern Slice CompressibleString(Random* rnd, double compressed_fraction, - int len, std::string* dst); + size_t len, std::string* dst); // A wrapper that allows injection of errors. class ErrorEnv : public EnvWrapper { diff --git a/src/leveldb.cpp b/src/leveldbwrapper.cpp similarity index 70% rename from src/leveldb.cpp rename to src/leveldbwrapper.cpp index e66f8514..5b4a9c14 100644 --- a/src/leveldb.cpp +++ b/src/leveldbwrapper.cpp @@ -1,20 +1,21 @@ -// Copyright (c) 2012 The Bitcoin developers +// Copyright (c) 2012-2014 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include "leveldb.h" +#include "leveldbwrapper.h" + #include "util.h" -#include -#include -#include -#include - #include +#include +#include +#include +#include void HandleError(const leveldb::Status &status) throw(leveldb_error) { if (status.ok()) return; + LogPrintf("%s\n", status.ToString()); if (status.IsCorruption()) throw leveldb_error("Database corrupted"); if (status.IsIOError()) @@ -34,7 +35,7 @@ static leveldb::Options GetOptions(size_t nCacheSize) { return options; } -CLevelDB::CLevelDB(const boost::filesystem::path &path, size_t nCacheSize, bool fMemory, bool fWipe) { +CLevelDBWrapper::CLevelDBWrapper(const boost::filesystem::path &path, size_t nCacheSize, bool fMemory, bool fWipe) { penv = NULL; readoptions.verify_checksums = true; iteroptions.verify_checksums = true; @@ -47,19 +48,18 @@ CLevelDB::CLevelDB(const boost::filesystem::path &path, size_t nCacheSize, bool options.env = penv; } else { if (fWipe) { - printf("Wiping LevelDB in %s\n", path.string().c_str()); + LogPrintf("Wiping LevelDB in %s\n", path.string()); leveldb::DestroyDB(path.string(), options); } - boost::filesystem::create_directory(path); - printf("Opening LevelDB in %s\n", path.string().c_str()); + TryCreateDirectory(path); + LogPrintf("Opening LevelDB in %s\n", path.string()); } leveldb::Status status = leveldb::DB::Open(options, path.string(), &pdb); - if (!status.ok()) - throw std::runtime_error(strprintf("CLevelDB(): error opening database environment %s", status.ToString().c_str())); - printf("Opened LevelDB successfully\n"); + HandleError(status); + LogPrintf("Opened LevelDB successfully\n"); } -CLevelDB::~CLevelDB() { +CLevelDBWrapper::~CLevelDBWrapper() { delete pdb; pdb = NULL; delete options.filter_policy; @@ -70,12 +70,8 @@ CLevelDB::~CLevelDB() { options.env = NULL; } -bool CLevelDB::WriteBatch(CLevelDBBatch &batch, bool fSync) throw(leveldb_error) { +bool CLevelDBWrapper::WriteBatch(CLevelDBBatch &batch, bool fSync) throw(leveldb_error) { leveldb::Status status = pdb->Write(fSync ? syncoptions : writeoptions, &batch.batch); - if (!status.ok()) { - printf("LevelDB write failure: %s\n", status.ToString().c_str()); - HandleError(status); - return false; - } + HandleError(status); return true; } diff --git a/src/leveldb.h b/src/leveldbwrapper.h similarity index 87% rename from src/leveldb.h rename to src/leveldbwrapper.h index 79262edb..53e9e439 100644 --- a/src/leveldb.h +++ b/src/leveldbwrapper.h @@ -1,15 +1,17 @@ -// Copyright (c) 2012 The Bitcoin developers +// Copyright (c) 2012-2013 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#ifndef BITCOIN_LEVELDB_H -#define BITCOIN_LEVELDB_H + +#ifndef BITCOIN_LEVELDBWRAPPER_H +#define BITCOIN_LEVELDBWRAPPER_H #include "serialize.h" - -#include -#include +#include "util.h" +#include "version.h" #include +#include +#include class leveldb_error : public std::runtime_error { @@ -19,10 +21,10 @@ public: void HandleError(const leveldb::Status &status) throw(leveldb_error); -// Batch of changes queued to be written to a CLevelDB +// Batch of changes queued to be written to a CLevelDBWrapper class CLevelDBBatch { - friend class CLevelDB; + friend class CLevelDBWrapper; private: leveldb::WriteBatch batch; @@ -52,7 +54,7 @@ public: } }; -class CLevelDB +class CLevelDBWrapper { private: // custom environment this database is using (may be NULL in case of default environment) @@ -77,8 +79,8 @@ private: leveldb::DB *pdb; public: - CLevelDB(const boost::filesystem::path &path, size_t nCacheSize, bool fMemory = false, bool fWipe = false); - ~CLevelDB(); + CLevelDBWrapper(const boost::filesystem::path &path, size_t nCacheSize, bool fMemory = false, bool fWipe = false); + ~CLevelDBWrapper(); template bool Read(const K& key, V& value) throw(leveldb_error) { CDataStream ssKey(SER_DISK, CLIENT_VERSION); @@ -91,7 +93,7 @@ public: if (!status.ok()) { if (status.IsNotFound()) return false; - printf("LevelDB read failure: %s\n", status.ToString().c_str()); + LogPrintf("LevelDB read failure: %s\n", status.ToString().c_str()); HandleError(status); } try { @@ -120,7 +122,7 @@ public: if (!status.ok()) { if (status.IsNotFound()) return false; - printf("LevelDB read failure: %s\n", status.ToString().c_str()); + LogPrintf("LevelDB read failure: %s\n", status.ToString().c_str()); HandleError(status); } return true; @@ -150,4 +152,4 @@ public: } }; -#endif // BITCOIN_LEVELDB_H +#endif // BITCOIN_LEVELDBWRAPPER_H diff --git a/src/limitedmap.h b/src/limitedmap.h index 7049d68e..1623a372 100644 --- a/src/limitedmap.h +++ b/src/limitedmap.h @@ -1,11 +1,12 @@ // Copyright (c) 2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef BITCOIN_LIMITEDMAP_H #define BITCOIN_LIMITEDMAP_H +#include // TODO: remove #include -#include /** STL-like map container that only keeps the N elements with the highest value. */ template class limitedmap diff --git a/src/m4/ax_boost_base.m4 b/src/m4/ax_boost_base.m4 new file mode 100644 index 00000000..e025a7e1 --- /dev/null +++ b/src/m4/ax_boost_base.m4 @@ -0,0 +1,275 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_boost_base.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_BOOST_BASE([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# +# DESCRIPTION +# +# Test for the Boost C++ libraries of a particular version (or newer) +# +# If no path to the installed boost library is given the macro searchs +# under /usr, /usr/local, /opt and /opt/local and evaluates the +# $BOOST_ROOT environment variable. Further documentation is available at +# . +# +# This macro calls: +# +# AC_SUBST(BOOST_CPPFLAGS) / AC_SUBST(BOOST_LDFLAGS) +# +# And sets: +# +# HAVE_BOOST +# +# LICENSE +# +# Copyright (c) 2008 Thomas Porschberg +# Copyright (c) 2009 Peter Adolphs +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 23 + +AC_DEFUN([AX_BOOST_BASE], +[ +AC_ARG_WITH([boost], + [AS_HELP_STRING([--with-boost@<:@=ARG@:>@], + [use Boost library from a standard location (ARG=yes), + from the specified location (ARG=), + or disable it (ARG=no) + @<:@ARG=yes@:>@ ])], + [ + if test "$withval" = "no"; then + want_boost="no" + elif test "$withval" = "yes"; then + want_boost="yes" + ac_boost_path="" + else + want_boost="yes" + ac_boost_path="$withval" + fi + ], + [want_boost="yes"]) + + +AC_ARG_WITH([boost-libdir], + AS_HELP_STRING([--with-boost-libdir=LIB_DIR], + [Force given directory for boost libraries. Note that this will override library path detection, so use this parameter only if default library detection fails and you know exactly where your boost libraries are located.]), + [ + if test -d "$withval" + then + ac_boost_lib_path="$withval" + else + AC_MSG_ERROR(--with-boost-libdir expected directory name) + fi + ], + [ac_boost_lib_path=""] +) + +if test "x$want_boost" = "xyes"; then + boost_lib_version_req=ifelse([$1], ,1.20.0,$1) + boost_lib_version_req_shorten=`expr $boost_lib_version_req : '\([[0-9]]*\.[[0-9]]*\)'` + boost_lib_version_req_major=`expr $boost_lib_version_req : '\([[0-9]]*\)'` + boost_lib_version_req_minor=`expr $boost_lib_version_req : '[[0-9]]*\.\([[0-9]]*\)'` + boost_lib_version_req_sub_minor=`expr $boost_lib_version_req : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'` + if test "x$boost_lib_version_req_sub_minor" = "x" ; then + boost_lib_version_req_sub_minor="0" + fi + WANT_BOOST_VERSION=`expr $boost_lib_version_req_major \* 100000 \+ $boost_lib_version_req_minor \* 100 \+ $boost_lib_version_req_sub_minor` + AC_MSG_CHECKING(for boostlib >= $boost_lib_version_req) + succeeded=no + + dnl On 64-bit systems check for system libraries in both lib64 and lib. + dnl The former is specified by FHS, but e.g. Debian does not adhere to + dnl this (as it rises problems for generic multi-arch support). + dnl The last entry in the list is chosen by default when no libraries + dnl are found, e.g. when only header-only libraries are installed! + libsubdirs="lib" + ax_arch=`uname -m` + case $ax_arch in + x86_64) + libsubdirs="lib64 libx32 lib lib64" + ;; + ppc64|s390x|sparc64|aarch64) + libsubdirs="lib64 lib lib64" + ;; + esac + + dnl allow for real multi-arch paths e.g. /usr/lib/x86_64-linux-gnu. Give + dnl them priority over the other paths since, if libs are found there, they + dnl are almost assuredly the ones desired. + AC_REQUIRE([AC_CANONICAL_HOST]) + libsubdirs="lib/${host_cpu}-${host_os} $libsubdirs" + + case ${host_cpu} in + i?86) + libsubdirs="lib/i386-${host_os} $libsubdirs" + ;; + esac + + dnl first we check the system location for boost libraries + dnl this location ist chosen if boost libraries are installed with the --layout=system option + dnl or if you install boost with RPM + if test "$ac_boost_path" != ""; then + BOOST_CPPFLAGS="-I$ac_boost_path/include" + for ac_boost_path_tmp in $libsubdirs; do + if test -d "$ac_boost_path"/"$ac_boost_path_tmp" ; then + BOOST_LDFLAGS="-L$ac_boost_path/$ac_boost_path_tmp" + break + fi + done + elif test "$cross_compiling" != yes; then + for ac_boost_path_tmp in /usr /usr/local /opt /opt/local ; do + if test -d "$ac_boost_path_tmp/include/boost" && test -r "$ac_boost_path_tmp/include/boost"; then + for libsubdir in $libsubdirs ; do + if ls "$ac_boost_path_tmp/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi + done + BOOST_LDFLAGS="-L$ac_boost_path_tmp/$libsubdir" + BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include" + break; + fi + done + fi + + dnl overwrite ld flags if we have required special directory with + dnl --with-boost-libdir parameter + if test "$ac_boost_lib_path" != ""; then + BOOST_LDFLAGS="-L$ac_boost_lib_path" + fi + + CPPFLAGS_SAVED="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + + LDFLAGS_SAVED="$LDFLAGS" + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + + AC_REQUIRE([AC_PROG_CXX]) + AC_LANG_PUSH(C++) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + @%:@include + ]], [[ + #if BOOST_VERSION >= $WANT_BOOST_VERSION + // Everything is okay + #else + # error Boost version is too old + #endif + ]])],[ + AC_MSG_RESULT(yes) + succeeded=yes + found_system=yes + ],[: + ]) + AC_LANG_POP([C++]) + + + + dnl if we found no boost with system layout we search for boost libraries + dnl built and installed without the --layout=system option or for a staged(not installed) version + if test "x$succeeded" != "xyes"; then + _version=0 + if test "$ac_boost_path" != ""; then + if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then + for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do + _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` + V_CHECK=`expr $_version_tmp \> $_version` + if test "$V_CHECK" = "1" ; then + _version=$_version_tmp + fi + VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` + BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE" + done + fi + else + if test "$cross_compiling" != yes; then + for ac_boost_path in /usr /usr/local /opt /opt/local ; do + if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then + for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do + _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` + V_CHECK=`expr $_version_tmp \> $_version` + if test "$V_CHECK" = "1" ; then + _version=$_version_tmp + best_path=$ac_boost_path + fi + done + fi + done + + VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` + BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE" + if test "$ac_boost_lib_path" = ""; then + for libsubdir in $libsubdirs ; do + if ls "$best_path/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi + done + BOOST_LDFLAGS="-L$best_path/$libsubdir" + fi + fi + + if test "x$BOOST_ROOT" != "x"; then + for libsubdir in $libsubdirs ; do + if ls "$BOOST_ROOT/stage/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi + done + if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT" && test -d "$BOOST_ROOT/stage/$libsubdir" && test -r "$BOOST_ROOT/stage/$libsubdir"; then + version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'` + stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'` + stage_version_shorten=`expr $stage_version : '\([[0-9]]*\.[[0-9]]*\)'` + V_CHECK=`expr $stage_version_shorten \>\= $_version` + if test "$V_CHECK" = "1" -a "$ac_boost_lib_path" = "" ; then + AC_MSG_NOTICE(We will use a staged boost library from $BOOST_ROOT) + BOOST_CPPFLAGS="-I$BOOST_ROOT" + BOOST_LDFLAGS="-L$BOOST_ROOT/stage/$libsubdir" + fi + fi + fi + fi + + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + + AC_LANG_PUSH(C++) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + @%:@include + ]], [[ + #if BOOST_VERSION >= $WANT_BOOST_VERSION + // Everything is okay + #else + # error Boost version is too old + #endif + ]])],[ + AC_MSG_RESULT(yes) + succeeded=yes + found_system=yes + ],[: + ]) + AC_LANG_POP([C++]) + fi + + if test "$succeeded" != "yes" ; then + if test "$_version" = "0" ; then + AC_MSG_NOTICE([[We could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in . See http://randspringer.de/boost for more documentation.]]) + else + AC_MSG_NOTICE([Your boost libraries seems to old (version $_version).]) + fi + # execute ACTION-IF-NOT-FOUND (if present): + ifelse([$3], , :, [$3]) + else + AC_SUBST(BOOST_CPPFLAGS) + AC_SUBST(BOOST_LDFLAGS) + AC_DEFINE(HAVE_BOOST,,[define if the Boost library is available]) + # execute ACTION-IF-FOUND (if present): + ifelse([$2], , :, [$2]) + fi + + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" +fi + +]) diff --git a/src/m4/ax_boost_chrono.m4 b/src/m4/ax_boost_chrono.m4 new file mode 100644 index 00000000..318ecea1 --- /dev/null +++ b/src/m4/ax_boost_chrono.m4 @@ -0,0 +1,119 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_boost_chrono.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_BOOST_CHRONO +# +# DESCRIPTION +# +# Test for System library from the Boost C++ libraries. The macro requires +# a preceding call to AX_BOOST_BASE. Further documentation is available at +# . +# +# This macro calls: +# +# AC_SUBST(BOOST_CHRONO_LIB) +# +# And sets: +# +# HAVE_BOOST_CHRONO +# +# LICENSE +# +# Copyright (c) 2012 Xiyue Deng +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 1 + +AC_DEFUN([AX_BOOST_CHRONO], +[ + AC_ARG_WITH([boost-chrono], + AS_HELP_STRING([--with-boost-chrono@<:@=special-lib@:>@], + [use the Chrono library from boost - it is possible to specify a certain library for the linker + e.g. --with-boost-chrono=boost_chrono-gcc-mt ]), + [ + if test "$withval" = "no"; then + want_boost="no" + elif test "$withval" = "yes"; then + want_boost="yes" + ax_boost_user_chrono_lib="" + else + want_boost="yes" + ax_boost_user_chrono_lib="$withval" + fi + ], + [want_boost="yes"] + ) + + if test "x$want_boost" = "xyes"; then + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_BUILD]) + CPPFLAGS_SAVED="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + + LDFLAGS_SAVED="$LDFLAGS" + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + + AC_CACHE_CHECK(whether the Boost::Chrono library is available, + ax_cv_boost_chrono, + [AC_LANG_PUSH([C++]) + CXXFLAGS_SAVE=$CXXFLAGS + + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include ]], + [[boost::chrono::system_clock::time_point time;]])], + ax_cv_boost_chrono=yes, ax_cv_boost_chrono=no) + CXXFLAGS=$CXXFLAGS_SAVE + AC_LANG_POP([C++]) + ]) + if test "x$ax_cv_boost_chrono" = "xyes"; then + AC_SUBST(BOOST_CPPFLAGS) + + AC_DEFINE(HAVE_BOOST_CHRONO,,[define if the Boost::Chrono library is available]) + BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/@<:@^\/@:>@*//'` + + LDFLAGS_SAVE=$LDFLAGS + if test "x$ax_boost_user_chrono_lib" = "x"; then + ax_lib= + for libextension in `ls $BOOSTLIBDIR/libboost_chrono*.so* $BOOSTLIBDIR/libboost_chrono*.dylib* $BOOSTLIBDIR/libboost_chrono*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^lib\(boost_chrono.*\)\.so.*$;\1;' -e 's;^lib\(boost_chrono.*\)\.dylib.*$;\1;' -e 's;^lib\(boost_chrono.*\)\.a.*$;\1;'` ; do + ax_lib=${libextension} + AC_CHECK_LIB($ax_lib, exit, + [BOOST_CHRONO_LIB="-l$ax_lib"; AC_SUBST(BOOST_CHRONO_LIB) link_chrono="yes"; break], + [link_chrono="no"]) + done + if test "x$link_chrono" != "xyes"; then + for libextension in `ls $BOOSTLIBDIR/boost_chrono*.dll* $BOOSTLIBDIR/boost_chrono*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^\(boost_chrono.*\)\.dll.*$;\1;' -e 's;^\(boost_chrono.*\)\.a.*$;\1;'` ; do + ax_lib=${libextension} + AC_CHECK_LIB($ax_lib, exit, + [BOOST_CHRONO_LIB="-l$ax_lib"; AC_SUBST(BOOST_CHRONO_LIB) link_chrono="yes"; break], + [link_chrono="no"]) + done + fi + + else + for ax_lib in $ax_boost_user_chrono_lib boost_chrono-$ax_boost_user_chrono_lib; do + AC_CHECK_LIB($ax_lib, exit, + [BOOST_CHRONO_LIB="-l$ax_lib"; AC_SUBST(BOOST_CHRONO_LIB) link_chrono="yes"; break], + [link_chrono="no"]) + done + + fi + if test "x$ax_lib" = "x"; then + AC_MSG_ERROR(Could not find a version of the boost_chrono library!) + fi + if test "x$link_chrono" = "xno"; then + AC_MSG_ERROR(Could not link against $ax_lib !) + fi + fi + + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" + fi +]) diff --git a/src/m4/ax_boost_filesystem.m4 b/src/m4/ax_boost_filesystem.m4 new file mode 100644 index 00000000..f5c9d564 --- /dev/null +++ b/src/m4/ax_boost_filesystem.m4 @@ -0,0 +1,119 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_boost_filesystem.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_BOOST_FILESYSTEM +# +# DESCRIPTION +# +# Test for Filesystem library from the Boost C++ libraries. The macro +# requires a preceding call to AX_BOOST_BASE. Further documentation is +# available at . +# +# This macro calls: +# +# AC_SUBST(BOOST_FILESYSTEM_LIB) +# +# And sets: +# +# HAVE_BOOST_FILESYSTEM +# +# LICENSE +# +# Copyright (c) 2009 Thomas Porschberg +# Copyright (c) 2009 Michael Tindal +# Copyright (c) 2009 Roman Rybalko +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 26 + +AC_DEFUN([AX_BOOST_FILESYSTEM], +[ + AC_ARG_WITH([boost-filesystem], + AS_HELP_STRING([--with-boost-filesystem@<:@=special-lib@:>@], + [use the Filesystem library from boost - it is possible to specify a certain library for the linker + e.g. --with-boost-filesystem=boost_filesystem-gcc-mt ]), + [ + if test "$withval" = "no"; then + want_boost="no" + elif test "$withval" = "yes"; then + want_boost="yes" + ax_boost_user_filesystem_lib="" + else + want_boost="yes" + ax_boost_user_filesystem_lib="$withval" + fi + ], + [want_boost="yes"] + ) + + if test "x$want_boost" = "xyes"; then + AC_REQUIRE([AC_PROG_CC]) + CPPFLAGS_SAVED="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + + LDFLAGS_SAVED="$LDFLAGS" + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + + LIBS_SAVED=$LIBS + LIBS="$LIBS $BOOST_SYSTEM_LIB" + export LIBS + + AC_CACHE_CHECK(whether the Boost::Filesystem library is available, + ax_cv_boost_filesystem, + [AC_LANG_PUSH([C++]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include ]], + [[using namespace boost::filesystem; + path my_path( "foo/bar/data.txt" ); + return 0;]])], + ax_cv_boost_filesystem=yes, ax_cv_boost_filesystem=no) + AC_LANG_POP([C++]) + ]) + if test "x$ax_cv_boost_filesystem" = "xyes"; then + AC_DEFINE(HAVE_BOOST_FILESYSTEM,,[define if the Boost::Filesystem library is available]) + BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/@<:@^\/@:>@*//'` + ax_lib= + if test "x$ax_boost_user_filesystem_lib" = "x"; then + for libextension in `ls -r $BOOSTLIBDIR/libboost_filesystem* 2>/dev/null | sed 's,.*/lib,,' | sed 's,\..*,,'` ; do + ax_lib=${libextension} + AC_CHECK_LIB($ax_lib, exit, + [BOOST_FILESYSTEM_LIB="-l$ax_lib"; AC_SUBST(BOOST_FILESYSTEM_LIB) link_filesystem="yes"; break], + [link_filesystem="no"]) + done + if test "x$link_filesystem" != "xyes"; then + for libextension in `ls -r $BOOSTLIBDIR/boost_filesystem* 2>/dev/null | sed 's,.*/,,' | sed -e 's,\..*,,'` ; do + ax_lib=${libextension} + AC_CHECK_LIB($ax_lib, exit, + [BOOST_FILESYSTEM_LIB="-l$ax_lib"; AC_SUBST(BOOST_FILESYSTEM_LIB) link_filesystem="yes"; break], + [link_filesystem="no"]) + done + fi + else + for ax_lib in $ax_boost_user_filesystem_lib boost_filesystem-$ax_boost_user_filesystem_lib; do + AC_CHECK_LIB($ax_lib, exit, + [BOOST_FILESYSTEM_LIB="-l$ax_lib"; AC_SUBST(BOOST_FILESYSTEM_LIB) link_filesystem="yes"; break], + [link_filesystem="no"]) + done + + fi + if test "x$ax_lib" = "x"; then + AC_MSG_ERROR(Could not find a version of the boost_filesystem library!) + fi + if test "x$link_filesystem" != "xyes"; then + AC_MSG_ERROR(Could not link against $ax_lib !) + fi + fi + + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" + LIBS="$LIBS_SAVED" + fi +]) diff --git a/src/m4/ax_boost_program_options.m4 b/src/m4/ax_boost_program_options.m4 new file mode 100644 index 00000000..f5914418 --- /dev/null +++ b/src/m4/ax_boost_program_options.m4 @@ -0,0 +1,109 @@ +# ============================================================================ +# http://www.gnu.org/software/autoconf-archive/ax_boost_program_options.html +# ============================================================================ +# +# SYNOPSIS +# +# AX_BOOST_PROGRAM_OPTIONS +# +# DESCRIPTION +# +# Test for program options library from the Boost C++ libraries. The macro +# requires a preceding call to AX_BOOST_BASE. Further documentation is +# available at . +# +# This macro calls: +# +# AC_SUBST(BOOST_PROGRAM_OPTIONS_LIB) +# +# And sets: +# +# HAVE_BOOST_PROGRAM_OPTIONS +# +# LICENSE +# +# Copyright (c) 2009 Thomas Porschberg +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 22 + +AC_DEFUN([AX_BOOST_PROGRAM_OPTIONS], +[ + AC_ARG_WITH([boost-program-options], + AS_HELP_STRING([--with-boost-program-options@<:@=special-lib@:>@], + [use the program options library from boost - it is possible to specify a certain library for the linker + e.g. --with-boost-program-options=boost_program_options-gcc-mt-1_33_1 ]), + [ + if test "$withval" = "no"; then + want_boost="no" + elif test "$withval" = "yes"; then + want_boost="yes" + ax_boost_user_program_options_lib="" + else + want_boost="yes" + ax_boost_user_program_options_lib="$withval" + fi + ], + [want_boost="yes"] + ) + + if test "x$want_boost" = "xyes"; then + AC_REQUIRE([AC_PROG_CC]) + export want_boost + CPPFLAGS_SAVED="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + LDFLAGS_SAVED="$LDFLAGS" + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + AC_CACHE_CHECK([whether the Boost::Program_Options library is available], + ax_cv_boost_program_options, + [AC_LANG_PUSH(C++) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include + ]], + [[boost::program_options::options_description generic("Generic options"); + return 0;]])], + ax_cv_boost_program_options=yes, ax_cv_boost_program_options=no) + AC_LANG_POP([C++]) + ]) + if test "$ax_cv_boost_program_options" = yes; then + AC_DEFINE(HAVE_BOOST_PROGRAM_OPTIONS,,[define if the Boost::PROGRAM_OPTIONS library is available]) + BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/@<:@^\/@:>@*//'` + if test "x$ax_boost_user_program_options_lib" = "x"; then + ax_lib= + for libextension in `ls $BOOSTLIBDIR/libboost_program_options*.so* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^lib\(boost_program_options.*\)\.so.*$;\1;'` `ls $BOOSTLIBDIR/libboost_program_options*.dylib* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^lib\(boost_program_options.*\)\.dylib.*$;\1;'` `ls $BOOSTLIBDIR/libboost_program_options*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^lib\(boost_program_options.*\)\.a.*$;\1;'` ; do + ax_lib=${libextension} + AC_CHECK_LIB($ax_lib, exit, + [BOOST_PROGRAM_OPTIONS_LIB="-l$ax_lib"; AC_SUBST(BOOST_PROGRAM_OPTIONS_LIB) link_program_options="yes"; break], + [link_program_options="no"]) + done + if test "x$link_program_options" != "xyes"; then + for libextension in `ls $BOOSTLIBDIR/boost_program_options*.dll* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^\(boost_program_options.*\)\.dll.*$;\1;'` `ls $BOOSTLIBDIR/boost_program_options*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^\(boost_program_options.*\)\.a.*$;\1;'` ; do + ax_lib=${libextension} + AC_CHECK_LIB($ax_lib, exit, + [BOOST_PROGRAM_OPTIONS_LIB="-l$ax_lib"; AC_SUBST(BOOST_PROGRAM_OPTIONS_LIB) link_program_options="yes"; break], + [link_program_options="no"]) + done + fi + else + for ax_lib in $ax_boost_user_program_options_lib boost_program_options-$ax_boost_user_program_options_lib; do + AC_CHECK_LIB($ax_lib, main, + [BOOST_PROGRAM_OPTIONS_LIB="-l$ax_lib"; AC_SUBST(BOOST_PROGRAM_OPTIONS_LIB) link_program_options="yes"; break], + [link_program_options="no"]) + done + fi + if test "x$ax_lib" = "x"; then + AC_MSG_ERROR(Could not find a version of the boost_program_options library!) + fi + if test "x$link_program_options" != "xyes"; then + AC_MSG_ERROR([Could not link against [$ax_lib] !]) + fi + fi + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" + fi +]) diff --git a/src/m4/ax_boost_system.m4 b/src/m4/ax_boost_system.m4 new file mode 100644 index 00000000..9c78280f --- /dev/null +++ b/src/m4/ax_boost_system.m4 @@ -0,0 +1,121 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_boost_system.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_BOOST_SYSTEM +# +# DESCRIPTION +# +# Test for System library from the Boost C++ libraries. The macro requires +# a preceding call to AX_BOOST_BASE. Further documentation is available at +# . +# +# This macro calls: +# +# AC_SUBST(BOOST_SYSTEM_LIB) +# +# And sets: +# +# HAVE_BOOST_SYSTEM +# +# LICENSE +# +# Copyright (c) 2008 Thomas Porschberg +# Copyright (c) 2008 Michael Tindal +# Copyright (c) 2008 Daniel Casimiro +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 17 + +AC_DEFUN([AX_BOOST_SYSTEM], +[ + AC_ARG_WITH([boost-system], + AS_HELP_STRING([--with-boost-system@<:@=special-lib@:>@], + [use the System library from boost - it is possible to specify a certain library for the linker + e.g. --with-boost-system=boost_system-gcc-mt ]), + [ + if test "$withval" = "no"; then + want_boost="no" + elif test "$withval" = "yes"; then + want_boost="yes" + ax_boost_user_system_lib="" + else + want_boost="yes" + ax_boost_user_system_lib="$withval" + fi + ], + [want_boost="yes"] + ) + + if test "x$want_boost" = "xyes"; then + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_BUILD]) + CPPFLAGS_SAVED="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + + LDFLAGS_SAVED="$LDFLAGS" + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + + AC_CACHE_CHECK(whether the Boost::System library is available, + ax_cv_boost_system, + [AC_LANG_PUSH([C++]) + CXXFLAGS_SAVE=$CXXFLAGS + + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include ]], + [[boost::system::system_category]])], + ax_cv_boost_system=yes, ax_cv_boost_system=no) + CXXFLAGS=$CXXFLAGS_SAVE + AC_LANG_POP([C++]) + ]) + if test "x$ax_cv_boost_system" = "xyes"; then + AC_SUBST(BOOST_CPPFLAGS) + + AC_DEFINE(HAVE_BOOST_SYSTEM,,[define if the Boost::System library is available]) + BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/@<:@^\/@:>@*//'` + + LDFLAGS_SAVE=$LDFLAGS + if test "x$ax_boost_user_system_lib" = "x"; then + ax_lib= + for libextension in `ls -r $BOOSTLIBDIR/libboost_system* 2>/dev/null | sed 's,.*/lib,,' | sed 's,\..*,,'` ; do + ax_lib=${libextension} + AC_CHECK_LIB($ax_lib, exit, + [BOOST_SYSTEM_LIB="-l$ax_lib"; AC_SUBST(BOOST_SYSTEM_LIB) link_system="yes"; break], + [link_system="no"]) + done + if test "x$link_system" != "xyes"; then + for libextension in `ls -r $BOOSTLIBDIR/boost_system* 2>/dev/null | sed 's,.*/,,' | sed -e 's,\..*,,'` ; do + ax_lib=${libextension} + AC_CHECK_LIB($ax_lib, exit, + [BOOST_SYSTEM_LIB="-l$ax_lib"; AC_SUBST(BOOST_SYSTEM_LIB) link_system="yes"; break], + [link_system="no"]) + done + fi + + else + for ax_lib in $ax_boost_user_system_lib boost_system-$ax_boost_user_system_lib; do + AC_CHECK_LIB($ax_lib, exit, + [BOOST_SYSTEM_LIB="-l$ax_lib"; AC_SUBST(BOOST_SYSTEM_LIB) link_system="yes"; break], + [link_system="no"]) + done + + fi + if test "x$ax_lib" = "x"; then + AC_MSG_ERROR(Could not find a version of the boost_system library!) + fi + if test "x$link_system" = "xno"; then + AC_MSG_ERROR(Could not link against $ax_lib !) + fi + fi + + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" + fi +]) diff --git a/src/m4/ax_boost_thread.m4 b/src/m4/ax_boost_thread.m4 new file mode 100644 index 00000000..9f0bd0b2 --- /dev/null +++ b/src/m4/ax_boost_thread.m4 @@ -0,0 +1,150 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_boost_thread.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_BOOST_THREAD +# +# DESCRIPTION +# +# Test for Thread library from the Boost C++ libraries. The macro requires +# a preceding call to AX_BOOST_BASE. Further documentation is available at +# . +# +# This macro calls: +# +# AC_SUBST(BOOST_THREAD_LIB) +# +# And sets: +# +# HAVE_BOOST_THREAD +# +# LICENSE +# +# Copyright (c) 2009 Thomas Porschberg +# Copyright (c) 2009 Michael Tindal +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 27 + +AC_DEFUN([AX_BOOST_THREAD], +[ + AC_ARG_WITH([boost-thread], + AS_HELP_STRING([--with-boost-thread@<:@=special-lib@:>@], + [use the Thread library from boost - it is possible to specify a certain library for the linker + e.g. --with-boost-thread=boost_thread-gcc-mt ]), + [ + if test "$withval" = "no"; then + want_boost="no" + elif test "$withval" = "yes"; then + want_boost="yes" + ax_boost_user_thread_lib="" + else + want_boost="yes" + ax_boost_user_thread_lib="$withval" + fi + ], + [want_boost="yes"] + ) + + if test "x$want_boost" = "xyes"; then + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_BUILD]) + CPPFLAGS_SAVED="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + + LDFLAGS_SAVED="$LDFLAGS" + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + + AC_CACHE_CHECK(whether the Boost::Thread library is available, + ax_cv_boost_thread, + [AC_LANG_PUSH([C++]) + CXXFLAGS_SAVE=$CXXFLAGS + + if test "x$host_os" = "xsolaris" ; then + CXXFLAGS="-pthreads $CXXFLAGS" + elif test "x$host_os" = "xmingw32" ; then + CXXFLAGS="-mthreads $CXXFLAGS" + else + CXXFLAGS="-pthread $CXXFLAGS" + fi + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include ]], + [[boost::thread_group thrds; + return 0;]])], + ax_cv_boost_thread=yes, ax_cv_boost_thread=no) + CXXFLAGS=$CXXFLAGS_SAVE + AC_LANG_POP([C++]) + ]) + if test "x$ax_cv_boost_thread" = "xyes"; then + if test "x$host_os" = "xsolaris" ; then + BOOST_CPPFLAGS="-pthreads $BOOST_CPPFLAGS" + elif test "x$host_os" = "xmingw32" ; then + BOOST_CPPFLAGS="-mthreads $BOOST_CPPFLAGS" + else + BOOST_CPPFLAGS="-pthread $BOOST_CPPFLAGS" + fi + + AC_SUBST(BOOST_CPPFLAGS) + + AC_DEFINE(HAVE_BOOST_THREAD,,[define if the Boost::Thread library is available]) + BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/@<:@^\/@:>@*//'` + + LDFLAGS_SAVE=$LDFLAGS + case "x$host_os" in + *bsd* ) + LDFLAGS="-pthread $LDFLAGS" + break; + ;; + esac + if test "x$ax_boost_user_thread_lib" = "x"; then + ax_lib= + for libextension in `ls -r $BOOSTLIBDIR/libboost_thread* 2>/dev/null | sed 's,.*/lib,,' | sed 's,\..*,,'`; do + ax_lib=${libextension} + AC_CHECK_LIB($ax_lib, exit, + [BOOST_THREAD_LIB="-l$ax_lib"; AC_SUBST(BOOST_THREAD_LIB) link_thread="yes"; break], + [link_thread="no"]) + done + if test "x$link_thread" != "xyes"; then + for libextension in `ls -r $BOOSTLIBDIR/boost_thread* 2>/dev/null | sed 's,.*/,,' | sed 's,\..*,,'`; do + ax_lib=${libextension} + AC_CHECK_LIB($ax_lib, exit, + [BOOST_THREAD_LIB="-l$ax_lib"; AC_SUBST(BOOST_THREAD_LIB) link_thread="yes"; break], + [link_thread="no"]) + done + fi + + else + for ax_lib in $ax_boost_user_thread_lib boost_thread-$ax_boost_user_thread_lib; do + AC_CHECK_LIB($ax_lib, exit, + [BOOST_THREAD_LIB="-l$ax_lib"; AC_SUBST(BOOST_THREAD_LIB) link_thread="yes"; break], + [link_thread="no"]) + done + + fi + if test "x$ax_lib" = "x"; then + AC_MSG_ERROR(Could not find a version of the boost_thread library!) + fi + if test "x$link_thread" = "xno"; then + AC_MSG_ERROR(Could not link against $ax_lib !) + else + case "x$host_os" in + *bsd* ) + BOOST_LDFLAGS="-pthread $BOOST_LDFLAGS" + break; + ;; + esac + + fi + fi + + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" + fi +]) diff --git a/src/m4/ax_boost_unit_test_framework.m4 b/src/m4/ax_boost_unit_test_framework.m4 new file mode 100644 index 00000000..4efd1e2f --- /dev/null +++ b/src/m4/ax_boost_unit_test_framework.m4 @@ -0,0 +1,138 @@ +# ================================================================================ +# http://www.gnu.org/software/autoconf-archive/ax_boost_unit_test_framework.html +# ================================================================================ +# +# SYNOPSIS +# +# AX_BOOST_UNIT_TEST_FRAMEWORK +# +# DESCRIPTION +# +# Test for Unit_Test_Framework library from the Boost C++ libraries. The +# macro requires a preceding call to AX_BOOST_BASE. Further documentation +# is available at . +# +# This macro calls: +# +# AC_SUBST(BOOST_UNIT_TEST_FRAMEWORK_LIB) +# +# And sets: +# +# HAVE_BOOST_UNIT_TEST_FRAMEWORK +# +# LICENSE +# +# Copyright (c) 2008 Thomas Porschberg +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 19 + +AC_DEFUN([AX_BOOST_UNIT_TEST_FRAMEWORK], +[ + AC_ARG_WITH([boost-unit-test-framework], + AS_HELP_STRING([--with-boost-unit-test-framework@<:@=special-lib@:>@], + [use the Unit_Test_Framework library from boost - it is possible to specify a certain library for the linker + e.g. --with-boost-unit-test-framework=boost_unit_test_framework-gcc ]), + [ + if test "$withval" = "no"; then + want_boost="no" + elif test "$withval" = "yes"; then + want_boost="yes" + ax_boost_user_unit_test_framework_lib="" + else + want_boost="yes" + ax_boost_user_unit_test_framework_lib="$withval" + fi + ], + [want_boost="yes"] + ) + + if test "x$want_boost" = "xyes"; then + AC_REQUIRE([AC_PROG_CC]) + CPPFLAGS_SAVED="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + + LDFLAGS_SAVED="$LDFLAGS" + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + + AC_CACHE_CHECK(whether the Boost::Unit_Test_Framework library is available, + ax_cv_boost_unit_test_framework, + [AC_LANG_PUSH([C++]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include ]], + [[using boost::unit_test::test_suite; + test_suite* test= BOOST_TEST_SUITE( "Unit test example 1" ); return 0;]])], + ax_cv_boost_unit_test_framework=yes, ax_cv_boost_unit_test_framework=no) + AC_LANG_POP([C++]) + ]) + if test "x$ax_cv_boost_unit_test_framework" = "xyes"; then + AC_DEFINE(HAVE_BOOST_UNIT_TEST_FRAMEWORK,,[define if the Boost::Unit_Test_Framework library is available]) + BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/@<:@^\/@:>@*//'` + + if test "x$ax_boost_user_unit_test_framework_lib" = "x"; then + saved_ldflags="${LDFLAGS}" + ax_lib= + for monitor_library in `ls $BOOSTLIBDIR/libboost_unit_test_framework*.so* $BOOSTLIBDIR/libboost_unit_test_framework*.dylib* $BOOSTLIBDIR/libboost_unit_test_framework*.a* 2>/dev/null` ; do + if test -r $monitor_library ; then + libextension=`echo $monitor_library | sed 's,.*/,,' | sed -e 's;^lib\(boost_unit_test_framework.*\)\.so.*$;\1;' -e 's;^lib\(boost_unit_test_framework.*\)\.dylib.*$;\1;' -e 's;^lib\(boost_unit_test_framework.*\)\.a.*$;\1;'` + ax_lib=${libextension} + link_unit_test_framework="yes" + else + link_unit_test_framework="no" + fi + + if test "x$link_unit_test_framework" = "xyes"; then + BOOST_UNIT_TEST_FRAMEWORK_LIB="-l$ax_lib" + AC_SUBST(BOOST_UNIT_TEST_FRAMEWORK_LIB) + break + fi + done + if test "x$link_unit_test_framework" != "xyes"; then + for libextension in `ls $BOOSTLIBDIR/boost_unit_test_framework*.dll* $BOOSTLIBDIR/boost_unit_test_framework*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^\(boost_unit_test_framework.*\)\.dll.*$;\1;' -e 's;^\(boost_unit_test_framework.*\)\.a.*$;\1;'` ; do + ax_lib=${libextension} + AC_CHECK_LIB($ax_lib, exit, + [BOOST_UNIT_TEST_FRAMEWORK_LIB="-l$ax_lib"; AC_SUBST(BOOST_UNIT_TEST_FRAMEWORK_LIB) link_unit_test_framework="yes"; break], + [link_unit_test_framework="no"]) + done + fi + else + link_unit_test_framework="no" + saved_ldflags="${LDFLAGS}" + for ax_lib in boost_unit_test_framework-$ax_boost_user_unit_test_framework_lib $ax_boost_user_unit_test_framework_lib ; do + if test "x$link_unit_test_framework" = "xyes"; then + break; + fi + for unittest_library in `ls $BOOSTLIBDIR/lib${ax_lib}.so* $BOOSTLIBDIR/lib${ax_lib}.a* 2>/dev/null` ; do + if test -r $unittest_library ; then + libextension=`echo $unittest_library | sed 's,.*/,,' | sed -e 's;^lib\(boost_unit_test_framework.*\)\.so.*$;\1;' -e 's;^lib\(boost_unit_test_framework.*\)\.a*$;\1;'` + ax_lib=${libextension} + link_unit_test_framework="yes" + else + link_unit_test_framework="no" + fi + + if test "x$link_unit_test_framework" = "xyes"; then + BOOST_UNIT_TEST_FRAMEWORK_LIB="-l$ax_lib" + AC_SUBST(BOOST_UNIT_TEST_FRAMEWORK_LIB) + break + fi + done + done + fi + if test "x$ax_lib" = "x"; then + AC_MSG_ERROR(Could not find a version of the boost_unit_test_framework library!) + fi + if test "x$link_unit_test_framework" != "xyes"; then + AC_MSG_ERROR(Could not link against $ax_lib !) + fi + fi + + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" + fi +]) diff --git a/src/m4/ax_check_compile_flag.m4 b/src/m4/ax_check_compile_flag.m4 new file mode 100644 index 00000000..c3a8d695 --- /dev/null +++ b/src/m4/ax_check_compile_flag.m4 @@ -0,0 +1,72 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS]) +# +# DESCRIPTION +# +# Check whether the given FLAG works with the current language's compiler +# or gives an error. (Warnings, however, are ignored) +# +# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on +# success/failure. +# +# If EXTRA-FLAGS is defined, it is added to the current language's default +# flags (e.g. CFLAGS) when the check is done. The check is thus made with +# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to +# force the compiler to issue an error when a bad flag is given. +# +# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this +# macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG. +# +# LICENSE +# +# Copyright (c) 2008 Guido U. Draheim +# Copyright (c) 2011 Maarten Bosmans +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 2 + +AC_DEFUN([AX_CHECK_COMPILE_FLAG], +[AC_PREREQ(2.59)dnl for _AC_LANG_PREFIX +AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl +AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [ + ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS + _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], + [AS_VAR_SET(CACHEVAR,[yes])], + [AS_VAR_SET(CACHEVAR,[no])]) + _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags]) +AS_IF([test x"AS_VAR_GET(CACHEVAR)" = xyes], + [m4_default([$2], :)], + [m4_default([$3], :)]) +AS_VAR_POPDEF([CACHEVAR])dnl +])dnl AX_CHECK_COMPILE_FLAGS diff --git a/src/m4/ax_check_link_flag.m4 b/src/m4/ax_check_link_flag.m4 new file mode 100644 index 00000000..e2d0d363 --- /dev/null +++ b/src/m4/ax_check_link_flag.m4 @@ -0,0 +1,71 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_check_link_flag.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_CHECK_LINK_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS]) +# +# DESCRIPTION +# +# Check whether the given FLAG works with the linker or gives an error. +# (Warnings, however, are ignored) +# +# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on +# success/failure. +# +# If EXTRA-FLAGS is defined, it is added to the linker's default flags +# when the check is done. The check is thus made with the flags: "LDFLAGS +# EXTRA-FLAGS FLAG". This can for example be used to force the linker to +# issue an error when a bad flag is given. +# +# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this +# macro in sync with AX_CHECK_{PREPROC,COMPILE}_FLAG. +# +# LICENSE +# +# Copyright (c) 2008 Guido U. Draheim +# Copyright (c) 2011 Maarten Bosmans +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 2 + +AC_DEFUN([AX_CHECK_LINK_FLAG], +[AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_ldflags_$4_$1])dnl +AC_CACHE_CHECK([whether the linker accepts $1], CACHEVAR, [ + ax_check_save_flags=$LDFLAGS + LDFLAGS="$LDFLAGS $4 $1" + AC_LINK_IFELSE([AC_LANG_PROGRAM()], + [AS_VAR_SET(CACHEVAR,[yes])], + [AS_VAR_SET(CACHEVAR,[no])]) + LDFLAGS=$ax_check_save_flags]) +AS_IF([test x"AS_VAR_GET(CACHEVAR)" = xyes], + [m4_default([$2], :)], + [m4_default([$3], :)]) +AS_VAR_POPDEF([CACHEVAR])dnl +])dnl AX_CHECK_LINK_FLAGS diff --git a/src/m4/ax_check_preproc_flag.m4 b/src/m4/ax_check_preproc_flag.m4 new file mode 100644 index 00000000..b1cfef6b --- /dev/null +++ b/src/m4/ax_check_preproc_flag.m4 @@ -0,0 +1,72 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_check_preproc_flag.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_CHECK_PREPROC_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS]) +# +# DESCRIPTION +# +# Check whether the given FLAG works with the current language's +# preprocessor or gives an error. (Warnings, however, are ignored) +# +# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on +# success/failure. +# +# If EXTRA-FLAGS is defined, it is added to the preprocessor's default +# flags when the check is done. The check is thus made with the flags: +# "CPPFLAGS EXTRA-FLAGS FLAG". This can for example be used to force the +# preprocessor to issue an error when a bad flag is given. +# +# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this +# macro in sync with AX_CHECK_{COMPILE,LINK}_FLAG. +# +# LICENSE +# +# Copyright (c) 2008 Guido U. Draheim +# Copyright (c) 2011 Maarten Bosmans +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 2 + +AC_DEFUN([AX_CHECK_PREPROC_FLAG], +[AC_PREREQ(2.59)dnl for _AC_LANG_PREFIX +AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]cppflags_$4_$1])dnl +AC_CACHE_CHECK([whether _AC_LANG preprocessor accepts $1], CACHEVAR, [ + ax_check_save_flags=$CPPFLAGS + CPPFLAGS="$CPPFLAGS $4 $1" + AC_PREPROC_IFELSE([AC_LANG_PROGRAM()], + [AS_VAR_SET(CACHEVAR,[yes])], + [AS_VAR_SET(CACHEVAR,[no])]) + CPPFLAGS=$ax_check_save_flags]) +AS_IF([test x"AS_VAR_GET(CACHEVAR)" = xyes], + [m4_default([$2], :)], + [m4_default([$3], :)]) +AS_VAR_POPDEF([CACHEVAR])dnl +])dnl AX_CHECK_PREPROC_FLAGS diff --git a/src/m4/ax_pthread.m4 b/src/m4/ax_pthread.m4 new file mode 100644 index 00000000..d383ad5c --- /dev/null +++ b/src/m4/ax_pthread.m4 @@ -0,0 +1,332 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_pthread.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) +# +# DESCRIPTION +# +# This macro figures out how to build C programs using POSIX threads. It +# sets the PTHREAD_LIBS output variable to the threads library and linker +# flags, and the PTHREAD_CFLAGS output variable to any special C compiler +# flags that are needed. (The user can also force certain compiler +# flags/libs to be tested by setting these environment variables.) +# +# Also sets PTHREAD_CC to any special C compiler that is needed for +# multi-threaded programs (defaults to the value of CC otherwise). (This +# is necessary on AIX to use the special cc_r compiler alias.) +# +# NOTE: You are assumed to not only compile your program with these flags, +# but also link it with them as well. e.g. you should link with +# $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS +# +# If you are only building threads programs, you may wish to use these +# variables in your default LIBS, CFLAGS, and CC: +# +# LIBS="$PTHREAD_LIBS $LIBS" +# CFLAGS="$CFLAGS $PTHREAD_CFLAGS" +# CC="$PTHREAD_CC" +# +# In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant +# has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name +# (e.g. PTHREAD_CREATE_UNDETACHED on AIX). +# +# Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the +# PTHREAD_PRIO_INHERIT symbol is defined when compiling with +# PTHREAD_CFLAGS. +# +# ACTION-IF-FOUND is a list of shell commands to run if a threads library +# is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it +# is not found. If ACTION-IF-FOUND is not specified, the default action +# will define HAVE_PTHREAD. +# +# Please let the authors know if this macro fails on any platform, or if +# you have any other suggestions or comments. This macro was based on work +# by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help +# from M. Frigo), as well as ac_pthread and hb_pthread macros posted by +# Alejandro Forero Cuervo to the autoconf macro repository. We are also +# grateful for the helpful feedback of numerous users. +# +# Updated for Autoconf 2.68 by Daniel Richard G. +# +# LICENSE +# +# Copyright (c) 2008 Steven G. Johnson +# Copyright (c) 2011 Daniel Richard G. +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 21 + +AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD]) +AC_DEFUN([AX_PTHREAD], [ +AC_REQUIRE([AC_CANONICAL_HOST]) +AC_LANG_PUSH([C]) +ax_pthread_ok=no + +# We used to check for pthread.h first, but this fails if pthread.h +# requires special compiler flags (e.g. on True64 or Sequent). +# It gets checked for in the link test anyway. + +# First of all, check if the user has set any of the PTHREAD_LIBS, +# etcetera environment variables, and if threads linking works using +# them: +if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + save_LIBS="$LIBS" + LIBS="$PTHREAD_LIBS $LIBS" + AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS]) + AC_TRY_LINK_FUNC([pthread_join], [ax_pthread_ok=yes]) + AC_MSG_RESULT([$ax_pthread_ok]) + if test x"$ax_pthread_ok" = xno; then + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" + fi + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" +fi + +# We must check for the threads library under a number of different +# names; the ordering is very important because some systems +# (e.g. DEC) have both -lpthread and -lpthreads, where one of the +# libraries is broken (non-POSIX). + +# Create a list of thread flags to try. Items starting with a "-" are +# C compiler flags, and other items are library names, except for "none" +# which indicates that we try without any flags at all, and "pthread-config" +# which is a program returning the flags for the Pth emulation library. + +ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" + +# The ordering *is* (sometimes) important. Some notes on the +# individual items follow: + +# pthreads: AIX (must check this before -lpthread) +# none: in case threads are in libc; should be tried before -Kthread and +# other compiler flags to prevent continual compiler warnings +# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) +# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) +# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) +# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) +# -pthreads: Solaris/gcc +# -mthreads: Mingw32/gcc, Lynx/gcc +# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it +# doesn't hurt to check since this sometimes defines pthreads too; +# also defines -D_REENTRANT) +# ... -mt is also the pthreads flag for HP/aCC +# pthread: Linux, etcetera +# --thread-safe: KAI C++ +# pthread-config: use pthread-config program (for GNU Pth library) + +case ${host_os} in + solaris*) + + # On Solaris (at least, for some versions), libc contains stubbed + # (non-functional) versions of the pthreads routines, so link-based + # tests will erroneously succeed. (We need to link with -pthreads/-mt/ + # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather + # a function called by this macro, so we could check for that, but + # who knows whether they'll stub that too in a future libc.) So, + # we'll just look for -pthreads and -lpthread first: + + ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags" + ;; + + darwin*) + ax_pthread_flags="-pthread $ax_pthread_flags" + ;; +esac + +# Clang doesn't consider unrecognized options an error unless we specify +# -Werror. We throw in some extra Clang-specific options to ensure that +# this doesn't happen for GCC, which also accepts -Werror. + +AC_MSG_CHECKING([if compiler needs -Werror to reject unknown flags]) +save_CFLAGS="$CFLAGS" +ax_pthread_extra_flags="-Werror" +CFLAGS="$CFLAGS $ax_pthread_extra_flags -Wunknown-warning-option -Wsizeof-array-argument" +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([int foo(void);],[foo()])], + [AC_MSG_RESULT([yes])], + [ax_pthread_extra_flags= + AC_MSG_RESULT([no])]) +CFLAGS="$save_CFLAGS" + +if test x"$ax_pthread_ok" = xno; then +for flag in $ax_pthread_flags; do + + case $flag in + none) + AC_MSG_CHECKING([whether pthreads work without any flags]) + ;; + + -*) + AC_MSG_CHECKING([whether pthreads work with $flag]) + PTHREAD_CFLAGS="$flag" + ;; + + pthread-config) + AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no]) + if test x"$ax_pthread_config" = xno; then continue; fi + PTHREAD_CFLAGS="`pthread-config --cflags`" + PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" + ;; + + *) + AC_MSG_CHECKING([for the pthreads library -l$flag]) + PTHREAD_LIBS="-l$flag" + ;; + esac + + save_LIBS="$LIBS" + save_CFLAGS="$CFLAGS" + LIBS="$PTHREAD_LIBS $LIBS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS $ax_pthread_extra_flags" + + # Check for various functions. We must include pthread.h, + # since some functions may be macros. (On the Sequent, we + # need a special flag -Kthread to make this header compile.) + # We check for pthread_join because it is in -lpthread on IRIX + # while pthread_create is in libc. We check for pthread_attr_init + # due to DEC craziness with -lpthreads. We check for + # pthread_cleanup_push because it is one of the few pthread + # functions on Solaris that doesn't have a non-functional libc stub. + # We try pthread_create on general principles. + AC_LINK_IFELSE([AC_LANG_PROGRAM([#include + static void routine(void *a) { a = 0; } + static void *start_routine(void *a) { return a; }], + [pthread_t th; pthread_attr_t attr; + pthread_create(&th, 0, start_routine, 0); + pthread_join(th, 0); + pthread_attr_init(&attr); + pthread_cleanup_push(routine, 0); + pthread_cleanup_pop(0) /* ; */])], + [ax_pthread_ok=yes], + []) + + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" + + AC_MSG_RESULT([$ax_pthread_ok]) + if test "x$ax_pthread_ok" = xyes; then + break; + fi + + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" +done +fi + +# Various other checks: +if test "x$ax_pthread_ok" = xyes; then + save_LIBS="$LIBS" + LIBS="$PTHREAD_LIBS $LIBS" + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + + # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. + AC_MSG_CHECKING([for joinable pthread attribute]) + attr_name=unknown + for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do + AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], + [int attr = $attr; return attr /* ; */])], + [attr_name=$attr; break], + []) + done + AC_MSG_RESULT([$attr_name]) + if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then + AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE], [$attr_name], + [Define to necessary symbol if this constant + uses a non-standard name on your system.]) + fi + + AC_MSG_CHECKING([if more special flags are required for pthreads]) + flag=no + case ${host_os} in + aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";; + osf* | hpux*) flag="-D_REENTRANT";; + solaris*) + if test "$GCC" = "yes"; then + flag="-D_REENTRANT" + else + # TODO: What about Clang on Solaris? + flag="-mt -D_REENTRANT" + fi + ;; + esac + AC_MSG_RESULT([$flag]) + if test "x$flag" != xno; then + PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" + fi + + AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT], + [ax_cv_PTHREAD_PRIO_INHERIT], [ + AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], + [[int i = PTHREAD_PRIO_INHERIT;]])], + [ax_cv_PTHREAD_PRIO_INHERIT=yes], + [ax_cv_PTHREAD_PRIO_INHERIT=no]) + ]) + AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"], + [AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.])]) + + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" + + # More AIX lossage: compile with *_r variant + if test "x$GCC" != xyes; then + case $host_os in + aix*) + AS_CASE(["x/$CC"], + [x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6], + [#handle absolute path differently from PATH based program lookup + AS_CASE(["x$CC"], + [x/*], + [AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])], + [AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])])]) + ;; + esac + fi +fi + +test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" + +AC_SUBST([PTHREAD_LIBS]) +AC_SUBST([PTHREAD_CFLAGS]) +AC_SUBST([PTHREAD_CC]) + +# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: +if test x"$ax_pthread_ok" = xyes; then + ifelse([$1],,[AC_DEFINE([HAVE_PTHREAD],[1],[Define if you have POSIX threads libraries and header files.])],[$1]) + : +else + ax_pthread_ok=no + $2 +fi +AC_LANG_POP +])dnl AX_PTHREAD diff --git a/src/m4/bitcoin_find_bdb48.m4 b/src/m4/bitcoin_find_bdb48.m4 new file mode 100644 index 00000000..72ec49b6 --- /dev/null +++ b/src/m4/bitcoin_find_bdb48.m4 @@ -0,0 +1,66 @@ +AC_DEFUN([BITCOIN_FIND_BDB48],[ + AC_MSG_CHECKING([for Berkeley DB C++ headers]) + BDB_CPPFLAGS= + BDB_LIBS= + bdbpath=X + bdb48path=X + bdbdirlist= + for _vn in 4.8 48 4 5 ''; do + for _pfx in b lib ''; do + bdbdirlist="$bdbdirlist ${_pfx}db${_vn}" + done + done + for searchpath in $bdbdirlist ''; do + test -n "${searchpath}" && searchpath="${searchpath}/" + AC_TRY_COMPILE([ + #include <${searchpath}db_cxx.h> + ],[ + #if !((DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 8) || DB_VERSION_MAJOR > 4) + #error "failed to find bdb 4.8+" + #endif + ],[ + if test "x$bdbpath" = "xX"; then + bdbpath="${searchpath}" + fi + ],[ + continue + ]) + AC_TRY_COMPILE([ + #include <${searchpath}db_cxx.h> + ],[ + #if !(DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR == 8) + #error "failed to find bdb 4.8" + #endif + ],[ + bdb48path="${searchpath}" + break + ]) + done + if test "x$bdbpath" = "xX"; then + AC_MSG_RESULT([no]) + AC_MSG_ERROR(libdb_cxx headers missing) + elif test "x$bdb48path" = "xX"; then + BITCOIN_SUBDIR_TO_INCLUDE(BDB_CPPFLAGS,[${bdbpath}],db_cxx) + AC_ARG_WITH([incompatible-bdb],[AS_HELP_STRING([--with-incompatible-bdb], [allow using a bdb version other than 4.8])],[ + AC_MSG_WARN([Found Berkeley DB other than 4.8; wallets opened by this build will not be portable!]) + ],[ + AC_MSG_ERROR([Found Berkeley DB other than 4.8, required for portable wallets (--with-incompatible-bdb to ignore)]) + ]) + else + BITCOIN_SUBDIR_TO_INCLUDE(BDB_CPPFLAGS,[${bdb48path}],db_cxx) + bdbpath="${bdb48path}" + fi + AC_SUBST(BDB_CPPFLAGS) + + # TODO: Ideally this could find the library version and make sure it matches the headers being used + for searchlib in db_cxx-4.8 db_cxx; do + AC_CHECK_LIB([$searchlib],[main],[ + BDB_LIBS="-l${searchlib}" + break + ]) + done + if test "x$BDB_LIBS" = "x"; then + AC_MSG_ERROR(libdb_cxx missing) + fi + AC_SUBST(BDB_LIBS) +]) diff --git a/src/m4/bitcoin_qt.m4 b/src/m4/bitcoin_qt.m4 new file mode 100644 index 00000000..e71ecd71 --- /dev/null +++ b/src/m4/bitcoin_qt.m4 @@ -0,0 +1,387 @@ +dnl Helper for cases where a qt dependency is not met. +dnl Output: If qt version is auto, set bitcoin_enable_qt to false. Else, exit. +AC_DEFUN([BITCOIN_QT_FAIL],[ + if test "x$bitcoin_qt_want_version" = "xauto" && test x$bitcoin_qt_force != xyes; then + if test x$bitcoin_enable_qt != xno; then + AC_MSG_WARN([$1; bitcoin-qt frontend will not be built]) + fi + bitcoin_enable_qt=no + else + AC_MSG_ERROR([$1]) + fi +]) + +AC_DEFUN([BITCOIN_QT_CHECK],[ + if test "x$bitcoin_enable_qt" != "xno" && test x$bitcoin_qt_want_version != xno; then + true + $1 + else + true + $2 + fi +]) + +dnl BITCOIN_QT_PATH_PROGS([FOO], [foo foo2], [/path/to/search/first], [continue if missing]) +dnl Helper for finding the path of programs needed for Qt. +dnl Inputs: $1: Variable to be set +dnl Inputs: $2: List of programs to search for +dnl Inputs: $3: Look for $2 here before $PATH +dnl Inputs: $4: If "yes", don't fail if $2 is not found. +dnl Output: $1 is set to the path of $2 if found. $2 are searched in order. +AC_DEFUN([BITCOIN_QT_PATH_PROGS],[ + BITCOIN_QT_CHECK([ + if test "x$3" != "x"; then + AC_PATH_PROGS($1,$2,,$3) + else + AC_PATH_PROGS($1,$2) + fi + if test "x$$1" = "x" && test "x$4" != "xyes"; then + BITCOIN_QT_FAIL([$1 not found]) + fi + ]) +]) + +dnl Initialize qt input. +dnl This must be called before any other BITCOIN_QT* macros to ensure that +dnl input variables are set correctly. +dnl CAUTION: Do not use this inside of a conditional. +AC_DEFUN([BITCOIN_QT_INIT],[ + dnl enable qt support + AC_ARG_WITH([gui], + [AS_HELP_STRING([--with-gui], + [with GUI (no|qt4|qt5|auto. default is auto, qt4 tried first.)])], + [ + bitcoin_qt_want_version=$withval + if test x$bitcoin_qt_want_version = xyes; then + bitcoin_qt_force=yes + bitcoin_qt_want_version=auto + fi + ], + [bitcoin_qt_want_version=auto]) + + AC_ARG_WITH([qt-incdir],[AS_HELP_STRING([--with-qt-incdir=INC_DIR],[specify qt include path (overridden by pkgconfig)])], [qt_include_path=$withval], []) + AC_ARG_WITH([qt-libdir],[AS_HELP_STRING([--with-qt-libdir=LIB_DIR],[specify qt lib path (overridden by pkgconfig)])], [qt_lib_path=$withval], []) + AC_ARG_WITH([qt-plugindir],[AS_HELP_STRING([--with-qt-plugindir=PLUGIN_DIR],[specify qt plugin path (overridden by pkgconfig)])], [qt_plugin_path=$withval], []) + AC_ARG_WITH([qt-bindir],[AS_HELP_STRING([--with-qt-bindir=BIN_DIR],[specify qt bin path])], [qt_bin_path=$withval], []) + + AC_ARG_WITH([qtdbus], + [AS_HELP_STRING([--with-qtdbus], + [enable DBus support (default is yes if qt is enabled and QtDBus is found)])], + [use_dbus=$withval], + [use_dbus=auto]) +]) + +dnl Find the appropriate version of Qt libraries and includes. +dnl Inputs: $1: Whether or not pkg-config should be used. yes|no. Default: yes. +dnl Inputs: $2: If $1 is "yes" and --with-gui=auto, which qt version should be +dnl tried first. +dnl Outputs: See _BITCOIN_QT_FIND_LIBS_* +dnl Outputs: Sets variables for all qt-related tools. +dnl Outputs: bitcoin_enable_qt, bitcoin_enable_qt_dbus, bitcoin_enable_qt_test +AC_DEFUN([BITCOIN_QT_CONFIGURE],[ + use_pkgconfig=$1 + + if test x$use_pkgconfig == x; then + use_pkgconfig=yes + fi + + if test x$use_pkgconfig = xyes; then + if test x$PKG_CONFIG == x; then + AC_MSG_ERROR(pkg-config not found.) + fi + BITCOIN_QT_CHECK([_BITCOIN_QT_FIND_LIBS_WITH_PKGCONFIG([$2])]) + else + BITCOIN_QT_CHECK([_BITCOIN_QT_FIND_LIBS_WITHOUT_PKGCONFIG]) + fi + + BITCOIN_QT_PATH_PROGS([MOC], [moc-qt${bitcoin_qt_got_major_vers} moc${bitcoin_qt_got_major_vers} moc], $qt_bin_path) + BITCOIN_QT_PATH_PROGS([UIC], [uic-qt${bitcoin_qt_got_major_vers} uic${bitcoin_qt_got_major_vers} uic], $qt_bin_path) + BITCOIN_QT_PATH_PROGS([RCC], [rcc-qt${bitcoin_qt_got_major_vers} rcc${bitcoin_qt_got_major_vers} rcc], $qt_bin_path) + BITCOIN_QT_PATH_PROGS([LRELEASE], [lrelease-qt${bitcoin_qt_got_major_vers} lrelease${bitcoin_qt_got_major_vers} lrelease], $qt_bin_path) + BITCOIN_QT_PATH_PROGS([LUPDATE], [lupdate-qt${bitcoin_qt_got_major_vers} lupdate${bitcoin_qt_got_major_vers} lupdate],$qt_bin_path, yes) + + MOC_DEFS='-DHAVE_CONFIG_H -I$(top_srcdir)/src' + case $host in + *darwin*) + BITCOIN_QT_CHECK([ + MOC_DEFS="${MOC_DEFS} -DQ_OS_MAC" + base_frameworks="-framework Foundation -framework ApplicationServices -framework AppKit" + AX_CHECK_LINK_FLAG([[$base_frameworks]],[QT_LIBS="$QT_LIBS $base_frameworks"],[AC_MSG_ERROR(could not find base frameworks)]) + ]) + ;; + *mingw*) + BITCOIN_QT_CHECK([ + AX_CHECK_LINK_FLAG([[-mwindows]],[QT_LDFLAGS="$QT_LDFLAGS -mwindows"],[AC_MSG_WARN(-mwindows linker support not detected)]) + ]) + esac + + + dnl enable qt support + AC_MSG_CHECKING(whether to build Bitcoin Core GUI) + BITCOIN_QT_CHECK([ + bitcoin_enable_qt=yes + bitcoin_enable_qt_test=yes + if test x$have_qt_test = xno; then + bitcoin_enable_qt_test=no + fi + bitcoin_enable_qt_dbus=no + if test x$use_dbus != xno && test x$have_qt_dbus = xyes; then + bitcoin_enable_qt_dbus=yes + fi + if test x$use_dbus = xyes && test x$have_qt_dbus = xno; then + AC_MSG_ERROR("libQtDBus not found. Install libQtDBus or remove --with-qtdbus.") + fi + if test x$LUPDATE == x; then + AC_MSG_WARN("lupdate is required to update qt translations") + fi + ],[ + bitcoin_enable_qt=no + ]) + AC_MSG_RESULT([$bitcoin_enable_qt (Qt${bitcoin_qt_got_major_vers})]) + + AC_SUBST(QT_INCLUDES) + AC_SUBST(QT_LIBS) + AC_SUBST(QT_LDFLAGS) + AC_SUBST(QT_DBUS_INCLUDES) + AC_SUBST(QT_DBUS_LIBS) + AC_SUBST(QT_TEST_INCLUDES) + AC_SUBST(QT_TEST_LIBS) + AC_SUBST(QT_SELECT, qt${bitcoin_qt_got_major_vers}) + AC_SUBST(MOC_DEFS) +]) + +dnl All macros below are internal and should _not_ be used from the main +dnl configure.ac. +dnl ---- + +dnl Internal. Check if the included version of Qt is Qt5. +dnl Requires: INCLUDES must be populated as necessary. +dnl Output: bitcoin_cv_qt5=yes|no +AC_DEFUN([_BITCOIN_QT_CHECK_QT5],[ + AC_CACHE_CHECK(for Qt 5, bitcoin_cv_qt5,[ + AC_TRY_COMPILE( + [#include ], + [ + #if QT_VERSION < 0x050000 + choke me + #else + return 0; + #endif + ], + bitcoin_cv_qt5=yes, + bitcoin_cv_qt5=no) +])]) + +dnl Internal. Check if the linked version of Qt was built as static libs. +dnl Requires: Qt5. This check cannot determine if Qt4 is static. +dnl Requires: INCLUDES and LIBS must be populated as necessary. +dnl Output: bitcoin_cv_static_qt=yes|no +dnl Output: Defines QT_STATICPLUGIN if plugins are static. +AC_DEFUN([_BITCOIN_QT_IS_STATIC],[ + AC_CACHE_CHECK(for static Qt, bitcoin_cv_static_qt,[ + AC_TRY_COMPILE( + [#include ], + [ + #if defined(QT_STATIC) + return 0; + #else + choke me + #endif + ], + [bitcoin_cv_static_qt=yes], + [bitcoin_cv_static_qt=no]) + ]) + if test xbitcoin_cv_static_qt = xyes; then + AC_DEFINE(QT_STATICPLUGIN, 1, [Define this symbol for static Qt plugins]) + fi +]) + +dnl Internal. Check if the link-requirements for static plugins are met. +dnl Requires: INCLUDES and LIBS must be populated as necessary. +dnl Inputs: $1: A series of Q_IMPORT_PLUGIN(). +dnl Inputs: $2: The libraries that resolve $1. +dnl Output: QT_LIBS is prepended or configure exits. +AC_DEFUN([_BITCOIN_QT_CHECK_STATIC_PLUGINS],[ + AC_MSG_CHECKING(for static Qt plugins: $2) + CHECK_STATIC_PLUGINS_TEMP_LIBS="$LIBS" + LIBS="$2 $QT_LIBS $LIBS" + AC_TRY_LINK([ + #define QT_STATICPLUGIN + #include + $1], + [return 0;], + [AC_MSG_RESULT(yes); QT_LIBS="$2 $QT_LIBS"], + [AC_MSG_RESULT(no)]; BITCOIN_QT_FAIL(Could not resolve: $2)) + LIBS="$CHECK_STATIC_PLUGINS_TEMP_LIBS" +]) + +dnl Internal. Find Qt libraries using pkg-config. +dnl Inputs: bitcoin_qt_want_version (from --with-gui=). The version to check +dnl first. +dnl Inputs: $1: If bitcoin_qt_want_version is "auto", check for this version +dnl first. +dnl Outputs: All necessary QT_* variables are set. +dnl Outputs: bitcoin_qt_got_major_vers is set to "4" or "5". +dnl Outputs: have_qt_test and have_qt_dbus are set (if applicable) to yes|no. +AC_DEFUN([_BITCOIN_QT_FIND_LIBS_WITH_PKGCONFIG],[ + m4_ifdef([PKG_CHECK_MODULES],[ + auto_priority_version=$1 + if test x$auto_priority_version == x; then + auto_priority_version=qt5 + fi + if test x$bitcoin_qt_want_version == xqt5 || ( test x$bitcoin_qt_want_version == xauto && test x$auto_priority_version == xqt5 ); then + QT_LIB_PREFIX=Qt5 + bitcoin_qt_got_major_vers=5 + else + QT_LIB_PREFIX=Qt + bitcoin_qt_got_major_vers=4 + fi + qt5_modules="Qt5Core Qt5Gui Qt5Network Qt5Widgets" + qt4_modules="QtCore QtGui QtNetwork" + BITCOIN_QT_CHECK([ + if test x$bitcoin_qt_want_version == xqt5 || ( test x$bitcoin_qt_want_version == xauto && test x$auto_priority_version == xqt5 ); then + PKG_CHECK_MODULES([QT], [$qt5_modules], [QT_INCLUDES="$QT_CFLAGS"; have_qt=yes],[have_qt=no]) + elif test x$bitcoin_qt_want_version == xqt4 || ( test x$bitcoin_qt_want_version == xauto && test x$auto_priority_version == xqt4 ); then + PKG_CHECK_MODULES([QT], [$qt4_modules], [QT_INCLUDES="$QT_CFLAGS"; have_qt=yes], [have_qt=no]) + fi + + dnl qt version is set to 'auto' and the preferred version wasn't found. Now try the other. + if test x$have_qt == xno && test x$bitcoin_qt_want_version == xauto; then + if test x$auto_priority_version = x$qt5; then + PKG_CHECK_MODULES([QT], [$qt4_modules], [QT_INCLUDES="$QT_CFLAGS"; have_qt=yes; QT_LIB_PREFIX=Qt; bitcoin_qt_got_major_vers=4], [have_qt=no]) + else + PKG_CHECK_MODULES([QT], [$qt5_modules], [QT_INCLUDES="$QT_CFLAGS"; have_qt=yes; QT_LIB_PREFIX=Qt5; bitcoin_qt_got_major_vers=5], [have_qt=no]) + fi + fi + if test x$have_qt != xyes; then + have_qt=no + BITCOIN_QT_FAIL([Qt dependencies not found]) + fi + ]) + BITCOIN_QT_CHECK([ + PKG_CHECK_MODULES([QT_TEST], [${QT_LIB_PREFIX}Test], [QT_TEST_INCLUDES="$QT_TEST_CFLAGS"; have_qt_test=yes], [have_qt_test=no]) + if test x$use_dbus != xno; then + PKG_CHECK_MODULES([QT_DBUS], [${QT_LIB_PREFIX}DBus], [QT_DBUS_INCLUDES="$QT_DBUS_CFLAGS"; have_qt_dbus=yes], [have_qt_dbus=no]) + fi + ]) + ]) + true; dnl +]) + +dnl Internal. Find Qt libraries without using pkg-config. Version is deduced +dnl from the discovered headers. +dnl Inputs: bitcoin_qt_want_version (from --with-gui=). The version to use. +dnl If "auto", the version will be discovered by _BITCOIN_QT_CHECK_QT5. +dnl Outputs: All necessary QT_* variables are set. +dnl Outputs: bitcoin_qt_got_major_vers is set to "4" or "5". +dnl Outputs: have_qt_test and have_qt_dbus are set (if applicable) to yes|no. +AC_DEFUN([_BITCOIN_QT_FIND_LIBS_WITHOUT_PKGCONFIG],[ + TEMP_CPPFLAGS="$CPPFLAGS" + TEMP_LIBS="$LIBS" + BITCOIN_QT_CHECK([ + if test x$qt_include_path != x; then + QT_INCLUDES="-I$qt_include_path -I$qt_include_path/QtCore -I$qt_include_path/QtGui -I$qt_include_path/QtWidgets -I$qt_include_path/QtNetwork -I$qt_include_path/QtTest -I$qt_include_path/QtDBus" + CPPFLAGS="$QT_INCLUDES $CPPFLAGS" + fi + ]) + + BITCOIN_QT_CHECK([AC_CHECK_HEADER([QtPlugin],,BITCOIN_QT_FAIL(QtCore headers missing))]) + BITCOIN_QT_CHECK([AC_CHECK_HEADER([QApplication],, BITCOIN_QT_FAIL(QtGui headers missing))]) + BITCOIN_QT_CHECK([AC_CHECK_HEADER([QLocalSocket],, BITCOIN_QT_FAIL(QtNetwork headers missing))]) + + BITCOIN_QT_CHECK([ + if test x$bitcoin_qt_want_version = xauto; then + _BITCOIN_QT_CHECK_QT5 + fi + if test x$bitcoin_cv_qt5 == xyes || test x$bitcoin_qt_want_version = xqt5; then + QT_LIB_PREFIX=Qt5 + bitcoin_qt_got_major_vers=5 + else + QT_LIB_PREFIX=Qt + bitcoin_qt_got_major_vers=4 + fi + ]) + + BITCOIN_QT_CHECK([ + LIBS= + if test x$qt_lib_path != x; then + LIBS="$LIBS -L$qt_lib_path" + fi + if test x$qt_plugin_path != x; then + LIBS="$LIBS -L$qt_plugin_path/accessible" + if test x$bitcoin_qt_got_major_vers == x5; then + LIBS="$LIBS -L$qt_plugin_path/platforms" + else + LIBS="$LIBS -L$qt_plugin_path/codecs" + fi + fi + + if test x$TARGET_OS == xwindows; then + AC_CHECK_LIB([imm32], [main],, BITCOIN_QT_FAIL(libimm32 not found)) + fi + ]) + + BITCOIN_QT_CHECK(AC_CHECK_LIB([z] ,[main],,BITCOIN_QT_FAIL(zlib not found))) + BITCOIN_QT_CHECK(AC_CHECK_LIB([png] ,[main],,BITCOIN_QT_FAIL(png not found))) + BITCOIN_QT_CHECK(AC_CHECK_LIB([${QT_LIB_PREFIX}Core] ,[main],,BITCOIN_QT_FAIL(lib$QT_LIB_PREFIXCore not found))) + BITCOIN_QT_CHECK(AC_CHECK_LIB([${QT_LIB_PREFIX}Gui] ,[main],,BITCOIN_QT_FAIL(lib$QT_LIB_PREFIXGui not found))) + BITCOIN_QT_CHECK(AC_CHECK_LIB([${QT_LIB_PREFIX}Network],[main],,BITCOIN_QT_FAIL(lib$QT_LIB_PREFIXNetwork not found))) + if test x$bitcoin_qt_got_major_vers == x5; then + BITCOIN_QT_CHECK(AC_CHECK_LIB([${QT_LIB_PREFIX}Widgets],[main],,BITCOIN_QT_FAIL(lib$QT_LIB_PREFIXWidgets not found))) + fi + QT_LIBS="$LIBS" + LIBS="$TEMP_LIBS" + + dnl This is ugly and complicated. Yuck. Works as follows: + dnl We can't discern whether Qt4 builds are static or not. For Qt5, we can + dnl check a header to find out. When Qt is built statically, some plugins must + dnl be linked into the final binary as well. These plugins have changed between + dnl Qt4 and Qt5. With Qt5, languages moved into core and the WindowsIntegration + dnl plugin was added. Since we can't tell if Qt4 is static or not, it is + dnl assumed for all non-pkg-config builds. + dnl _BITCOIN_QT_CHECK_STATIC_PLUGINS does a quick link-check and appends the + dnl results to QT_LIBS. + BITCOIN_QT_CHECK([ + if test x$bitcoin_qt_got_major_vers == x5; then + _BITCOIN_QT_IS_STATIC + if test x$bitcoin_cv_static_qt == xyes; then + AC_DEFINE(QT_STATICPLUGIN, 1, [Define this symbol if qt plugins are static]) + _BITCOIN_QT_CHECK_STATIC_PLUGINS([Q_IMPORT_PLUGIN(AccessibleFactory)], [-lqtaccessiblewidgets]) + if test x$TARGET_OS == xwindows; then + _BITCOIN_QT_CHECK_STATIC_PLUGINS([Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin)],[-lqwindows]) + fi + fi + else + AC_DEFINE(QT_STATICPLUGIN, 1, [Define this symbol if qt plugins are static]) + _BITCOIN_QT_CHECK_STATIC_PLUGINS([ + Q_IMPORT_PLUGIN(qcncodecs) + Q_IMPORT_PLUGIN(qjpcodecs) + Q_IMPORT_PLUGIN(qtwcodecs) + Q_IMPORT_PLUGIN(qkrcodecs) + Q_IMPORT_PLUGIN(AccessibleFactory)], + [-lqcncodecs -lqjpcodecs -lqtwcodecs -lqkrcodecs -lqtaccessiblewidgets]) + fi + ]) + + BITCOIN_QT_CHECK([ + LIBS= + if test x$qt_lib_path != x; then + LIBS="-L$qt_lib_path" + fi + AC_CHECK_LIB([${QT_LIB_PREFIX}Test], [main],, have_qt_test=no) + AC_CHECK_HEADER([QTest],, have_qt_test=no) + QT_TEST_LIBS="$LIBS" + if test x$use_dbus != xno; then + LIBS= + if test x$qt_lib_path != x; then + LIBS="-L$qt_lib_path" + fi + AC_CHECK_LIB([${QT_LIB_PREFIX}DBus], [main],, have_qt_dbus=no) + AC_CHECK_HEADER([QtDBus],, have_qt_dbus=no) + QT_DBUS_LIBS="$LIBS" + fi + ]) + CPPFLAGS="$TEMP_CPPFLAGS" + LIBS="$TEMP_LIBS" +]) + diff --git a/src/m4/bitcoin_subdir_to_include.m4 b/src/m4/bitcoin_subdir_to_include.m4 new file mode 100644 index 00000000..66f106c7 --- /dev/null +++ b/src/m4/bitcoin_subdir_to_include.m4 @@ -0,0 +1,14 @@ +dnl BITCOIN_SUBDIR_TO_INCLUDE([CPPFLAGS-VARIABLE-NAME],[SUBDIRECTORY-NAME],[HEADER-FILE]) +dnl SUBDIRECTORY-NAME must end with a path separator +AC_DEFUN([BITCOIN_SUBDIR_TO_INCLUDE],[ + if test "x$2" = "x"; then + AC_MSG_RESULT([default]) + else + echo "#include <$2$3.h>" >conftest.cpp + newinclpath=`${CXXCPP} ${CPPFLAGS} -M conftest.cpp 2>/dev/null | [ tr -d '\\n\\r\\\\' | sed -e 's/^.*[[:space:]:]\(\/[^[:space:]]*\)]$3[\.h[[:space:]].*$/\1/' -e t -e d`] + AC_MSG_RESULT([${newinclpath}]) + if test "x${newinclpath}" != "x"; then + eval "$1=\"\$$1\"' -I${newinclpath}'" + fi + fi +]) diff --git a/src/main.cpp b/src/main.cpp index 45658708..3115d73c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,85 +1,131 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2013 The Bitcoin developers -// Copyright (c) 2013-2014 The Zetacoin developers -// Copyright (c) 2014 The Huntercoin developers -// Copyright (c) 2014 The Myriadcoin developers +// Copyright (c) 2009-2014 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. +#include "main.h" + +#include "addrman.h" #include "alert.h" -#include "checkpoints.h" -#include "db.h" -#include "txdb.h" -#include "net.h" -#include "init.h" -#include "ui_interface.h" -#include "checkqueue.h" #include "chainparams.h" +#include "checkpoints.h" +#include "checkqueue.h" +#include "init.h" +#include "net.h" +#include "txdb.h" +#include "txmempool.h" +#include "ui_interface.h" +#include "util.h" + +#include + #include #include #include -#include "scrypt.h" using namespace std; using namespace boost; +#if defined(NDEBUG) +# error "Myriadcoin cannot be compiled without assertions." +#endif + // // Global state // -CCriticalSection cs_setpwalletRegistered; -set setpwalletRegistered; - CCriticalSection cs_main; CTxMemPool mempool; -unsigned int nTransactionsUpdated = 0; map mapBlockIndex; -std::vector vBlockIndexByHeight; -CBlockIndex* pindexGenesisBlock = NULL; -int nBestHeight = -1; -uint256 nBestChainWork = 0; -uint256 nBestInvalidWork = 0; -uint256 hashBestChain = 0; -CBlockIndex* pindexBest = NULL; -set setBlockIndexValid; // may contain all CBlockIndex*'s that have validness >=BLOCK_VALID_TRANSACTIONS, and must contain those who aren't failed -int64 nTimeBestReceived = 0; +CChain chainActive; +CChain chainMostWork; +int64_t nTimeBestReceived = 0; int nScriptCheckThreads = 0; bool fImporting = false; bool fReindex = false; bool fBenchmark = false; bool fTxIndex = false; unsigned int nCoinCacheSize = 5000; -bool fHaveGUI = false; /** Fees smaller than this (in satoshi) are considered zero fee (for transaction creation) */ -int64 CTransaction::nMinTxFee = 10000; // Override with -mintxfee -/** Fees smaller than this (in satoshi) are considered zero fee (for relaying) */ -int64 CTransaction::nMinRelayTxFee = 10000; +int64_t CTransaction::nMinTxFee = 10000; // Override with -mintxfee +/** Fees smaller than this (in satoshi) are considered zero fee (for relaying and mining) */ +int64_t CTransaction::nMinRelayTxFee = 1000; -CMedianFilter cPeerBlockCounts(8, 0); // Amount of blocks that other nodes claim to have +static CMedianFilter cPeerBlockCounts(8, 0); // Amount of blocks that other nodes claim to have -map mapOrphanBlocks; -multimap mapOrphanBlocksByPrev; +struct COrphanBlock { + uint256 hashBlock; + uint256 hashPrev; + vector vchBlock; +}; +map mapOrphanBlocks; +multimap mapOrphanBlocksByPrev; -map mapOrphanTransactions; -map > mapOrphanTransactionsByPrev; +map mapOrphanTransactions; +map > mapOrphanTransactionsByPrev; // Constant stuff for coinbase transactions we create: CScript COINBASE_FLAGS; const string strMessageMagic = "Myriadcoin Signed Message:\n"; -double dHashesPerSec = 0.0; -int64 nHPSTimerStart = 0; - // Settings -int64 nTransactionFee = 0; - int miningAlgo = ALGO_SHA256D; +// Internal stuff +namespace { + struct CBlockIndexWorkComparator + { + bool operator()(CBlockIndex *pa, CBlockIndex *pb) { + // First sort by most total work, ... + if (pa->nChainWork > pb->nChainWork) return false; + if (pa->nChainWork < pb->nChainWork) return true; + // ... then by earliest time received, ... + if (pa->nSequenceId < pb->nSequenceId) return false; + if (pa->nSequenceId > pb->nSequenceId) return true; + + // Use pointer address as tie breaker (should only happen with blocks + // loaded from disk, as those all have id 0). + if (pa < pb) return false; + if (pa > pb) return true; + + // Identical blocks. + return false; + } + }; + + CBlockIndex *pindexBestInvalid; + // may contain all CBlockIndex*'s that have validness >=BLOCK_VALID_TRANSACTIONS, and must contain those who aren't failed + set setBlockIndexValid; + + CCriticalSection cs_LastBlockFile; + CBlockFileInfo infoLastBlockFile; + int nLastBlockFile = 0; + + // Every received block is assigned a unique and increasing identifier, so we + // know which one to give priority in case of a fork. + CCriticalSection cs_nBlockSequenceId; + // Blocks loaded from disk are assigned id 0, so start the counter at 1. + uint32_t nBlockSequenceId = 1; + + // Sources of received blocks, to be able to send them reject messages or ban + // them, if processing happens afterwards. Protected by cs_main. + map mapBlockSource; + + // Blocks that are in flight, and that are in the queue to be downloaded. + // Protected by cs_main. + struct QueuedBlock { + uint256 hash; + int64_t nTime; // Time of "getdata" request in microseconds. + int nQueuedBefore; // Number of blocks in flight at the time of request. + }; + map::iterator> > mapBlocksInFlight; + map::iterator> > mapBlocksToDownload; +} ////////////////////////////////////////////////////////////////////////////// // @@ -88,93 +134,52 @@ int miningAlgo = ALGO_SHA256D; // These functions dispatch to one or all registered wallets - -void RegisterWallet(CWallet* pwalletIn) -{ - { - LOCK(cs_setpwalletRegistered); - setpwalletRegistered.insert(pwalletIn); - } +namespace { +struct CMainSignals { + // Notifies listeners of updated transaction data (passing hash, transaction, and optionally the block it is found in. + boost::signals2::signal SyncTransaction; + // Notifies listeners of an erased transaction (currently disabled, requires transaction replacement). + boost::signals2::signal EraseTransaction; + // Notifies listeners of an updated transaction without new data (for now: a coinbase potentially becoming visible). + boost::signals2::signal UpdatedTransaction; + // Notifies listeners of a new active block chain. + boost::signals2::signal SetBestChain; + // Notifies listeners about an inventory item being seen on the network. + boost::signals2::signal Inventory; + // Tells listeners to broadcast their data. + boost::signals2::signal Broadcast; +} g_signals; } -void UnregisterWallet(CWallet* pwalletIn) -{ - { - LOCK(cs_setpwalletRegistered); - setpwalletRegistered.erase(pwalletIn); - } +void RegisterWallet(CWalletInterface* pwalletIn) { + g_signals.SyncTransaction.connect(boost::bind(&CWalletInterface::SyncTransaction, pwalletIn, _1, _2, _3)); + g_signals.EraseTransaction.connect(boost::bind(&CWalletInterface::EraseFromWallet, pwalletIn, _1)); + g_signals.UpdatedTransaction.connect(boost::bind(&CWalletInterface::UpdatedTransaction, pwalletIn, _1)); + g_signals.SetBestChain.connect(boost::bind(&CWalletInterface::SetBestChain, pwalletIn, _1)); + g_signals.Inventory.connect(boost::bind(&CWalletInterface::Inventory, pwalletIn, _1)); + g_signals.Broadcast.connect(boost::bind(&CWalletInterface::ResendWalletTransactions, pwalletIn)); } -void UnregisterAllWallets() -{ - LOCK(cs_setpwalletRegistered); - setpwalletRegistered.clear(); +void UnregisterWallet(CWalletInterface* pwalletIn) { + g_signals.Broadcast.disconnect(boost::bind(&CWalletInterface::ResendWalletTransactions, pwalletIn)); + g_signals.Inventory.disconnect(boost::bind(&CWalletInterface::Inventory, pwalletIn, _1)); + g_signals.SetBestChain.disconnect(boost::bind(&CWalletInterface::SetBestChain, pwalletIn, _1)); + g_signals.UpdatedTransaction.disconnect(boost::bind(&CWalletInterface::UpdatedTransaction, pwalletIn, _1)); + g_signals.EraseTransaction.disconnect(boost::bind(&CWalletInterface::EraseFromWallet, pwalletIn, _1)); + g_signals.SyncTransaction.disconnect(boost::bind(&CWalletInterface::SyncTransaction, pwalletIn, _1, _2, _3)); } -// get the wallet transaction with the given hash (if it exists) -bool static GetTransaction(const uint256& hashTx, CWalletTx& wtx) -{ - LOCK(cs_setpwalletRegistered); - BOOST_FOREACH(CWallet* pwallet, setpwalletRegistered) - if (pwallet->GetTransaction(hashTx,wtx)) - return true; - return false; +void UnregisterAllWallets() { + g_signals.Broadcast.disconnect_all_slots(); + g_signals.Inventory.disconnect_all_slots(); + g_signals.SetBestChain.disconnect_all_slots(); + g_signals.UpdatedTransaction.disconnect_all_slots(); + g_signals.EraseTransaction.disconnect_all_slots(); + g_signals.SyncTransaction.disconnect_all_slots(); } -// erases transaction with the given hash from all wallets -void static EraseFromWallets(uint256 hash) -{ - LOCK(cs_setpwalletRegistered); - BOOST_FOREACH(CWallet* pwallet, setpwalletRegistered) - pwallet->EraseFromWallet(hash); -} - -// make sure all wallets know about the given transaction, in the given block -void SyncWithWallets(const uint256 &hash, const CTransaction& tx, const CBlock* pblock, bool fUpdate) -{ - LOCK(cs_setpwalletRegistered); - BOOST_FOREACH(CWallet* pwallet, setpwalletRegistered) - pwallet->AddToWalletIfInvolvingMe(hash, tx, pblock, fUpdate); -} - -// notify wallets about a new best chain -void static SetBestChain(const CBlockLocator& loc) -{ - LOCK(cs_setpwalletRegistered); - BOOST_FOREACH(CWallet* pwallet, setpwalletRegistered) - pwallet->SetBestChain(loc); -} - -// notify wallets about an updated transaction -void static UpdatedTransaction(const uint256& hashTx) -{ - LOCK(cs_setpwalletRegistered); - BOOST_FOREACH(CWallet* pwallet, setpwalletRegistered) - pwallet->UpdatedTransaction(hashTx); -} - -// dump all wallets -void static PrintWallets(const CBlock& block) -{ - LOCK(cs_setpwalletRegistered); - BOOST_FOREACH(CWallet* pwallet, setpwalletRegistered) - pwallet->PrintWallet(block); -} - -// notify wallets about an incoming inventory (for request counts) -void static Inventory(const uint256& hash) -{ - LOCK(cs_setpwalletRegistered); - BOOST_FOREACH(CWallet* pwallet, setpwalletRegistered) - pwallet->Inventory(hash); -} - -// ask wallets to resend their transactions -void static ResendWalletTransactions() -{ - LOCK(cs_setpwalletRegistered); - BOOST_FOREACH(CWallet* pwallet, setpwalletRegistered) - pwallet->ResendWalletTransactions(); +void SyncWithWallets(const uint256 &hash, const CTransaction &tx, const CBlock *pblock) { + g_signals.SyncTransaction(hash, tx, pblock); } ////////////////////////////////////////////////////////////////////////////// @@ -182,219 +187,220 @@ void static ResendWalletTransactions() // Registration of network node signals. // +namespace { + +struct CBlockReject { + unsigned char chRejectCode; + string strRejectReason; + uint256 hashBlock; +}; + +// Maintain validation-specific state about nodes, protected by cs_main, instead +// by CNode's own locks. This simplifies asynchronous operation, where +// processing of incoming data is done after the ProcessMessage call returns, +// and we're no longer holding the node's locks. +struct CNodeState { + // Accumulated misbehaviour score for this peer. + int nMisbehavior; + // Whether this peer should be disconnected and banned. + bool fShouldBan; + // String name of this peer (debugging/logging purposes). + std::string name; + // List of asynchronously-determined block rejections to notify this peer about. + std::vector rejects; + list vBlocksInFlight; + int nBlocksInFlight; + list vBlocksToDownload; + int nBlocksToDownload; + int64_t nLastBlockReceive; + int64_t nLastBlockProcess; + + CNodeState() { + nMisbehavior = 0; + fShouldBan = false; + nBlocksToDownload = 0; + nBlocksInFlight = 0; + nLastBlockReceive = 0; + nLastBlockProcess = 0; + } +}; + +// Map maintaining per-node state. Requires cs_main. +map mapNodeState; + +// Requires cs_main. +CNodeState *State(NodeId pnode) { + map::iterator it = mapNodeState.find(pnode); + if (it == mapNodeState.end()) + return NULL; + return &it->second; +} + +int GetHeight() +{ + LOCK(cs_main); + return chainActive.Height(); +} + +void InitializeNode(NodeId nodeid, const CNode *pnode) { + LOCK(cs_main); + CNodeState &state = mapNodeState.insert(std::make_pair(nodeid, CNodeState())).first->second; + state.name = pnode->addrName; +} + +void FinalizeNode(NodeId nodeid) { + LOCK(cs_main); + CNodeState *state = State(nodeid); + + BOOST_FOREACH(const QueuedBlock& entry, state->vBlocksInFlight) + mapBlocksInFlight.erase(entry.hash); + BOOST_FOREACH(const uint256& hash, state->vBlocksToDownload) + mapBlocksToDownload.erase(hash); + + mapNodeState.erase(nodeid); +} + +// Requires cs_main. +void MarkBlockAsReceived(const uint256 &hash, NodeId nodeFrom = -1) { + map::iterator> >::iterator itToDownload = mapBlocksToDownload.find(hash); + if (itToDownload != mapBlocksToDownload.end()) { + CNodeState *state = State(itToDownload->second.first); + state->vBlocksToDownload.erase(itToDownload->second.second); + state->nBlocksToDownload--; + mapBlocksToDownload.erase(itToDownload); + } + + map::iterator> >::iterator itInFlight = mapBlocksInFlight.find(hash); + if (itInFlight != mapBlocksInFlight.end()) { + CNodeState *state = State(itInFlight->second.first); + state->vBlocksInFlight.erase(itInFlight->second.second); + state->nBlocksInFlight--; + if (itInFlight->second.first == nodeFrom) + state->nLastBlockReceive = GetTimeMicros(); + mapBlocksInFlight.erase(itInFlight); + } + +} + +// Requires cs_main. +bool AddBlockToQueue(NodeId nodeid, const uint256 &hash) { + if (mapBlocksToDownload.count(hash) || mapBlocksInFlight.count(hash)) + return false; + + CNodeState *state = State(nodeid); + if (state == NULL) + return false; + + list::iterator it = state->vBlocksToDownload.insert(state->vBlocksToDownload.end(), hash); + state->nBlocksToDownload++; + if (state->nBlocksToDownload > 5000) + Misbehaving(nodeid, 10); + mapBlocksToDownload[hash] = std::make_pair(nodeid, it); + return true; +} + +// Requires cs_main. +void MarkBlockAsInFlight(NodeId nodeid, const uint256 &hash) { + CNodeState *state = State(nodeid); + assert(state != NULL); + + // Make sure it's not listed somewhere already. + MarkBlockAsReceived(hash); + + QueuedBlock newentry = {hash, GetTimeMicros(), state->nBlocksInFlight}; + if (state->nBlocksInFlight == 0) + state->nLastBlockReceive = newentry.nTime; // Reset when a first request is sent. + list::iterator it = state->vBlocksInFlight.insert(state->vBlocksInFlight.end(), newentry); + state->nBlocksInFlight++; + mapBlocksInFlight[hash] = std::make_pair(nodeid, it); +} + +} + +bool GetNodeStateStats(NodeId nodeid, CNodeStateStats &stats) { + LOCK(cs_main); + CNodeState *state = State(nodeid); + if (state == NULL) + return false; + stats.nMisbehavior = state->nMisbehavior; + return true; +} + void RegisterNodeSignals(CNodeSignals& nodeSignals) { + nodeSignals.GetHeight.connect(&GetHeight); nodeSignals.ProcessMessages.connect(&ProcessMessages); nodeSignals.SendMessages.connect(&SendMessages); + nodeSignals.InitializeNode.connect(&InitializeNode); + nodeSignals.FinalizeNode.connect(&FinalizeNode); } void UnregisterNodeSignals(CNodeSignals& nodeSignals) { + nodeSignals.GetHeight.disconnect(&GetHeight); nodeSignals.ProcessMessages.disconnect(&ProcessMessages); nodeSignals.SendMessages.disconnect(&SendMessages); + nodeSignals.InitializeNode.disconnect(&InitializeNode); + nodeSignals.FinalizeNode.disconnect(&FinalizeNode); } ////////////////////////////////////////////////////////////////////////////// // -// CBlockLocator implementation +// CChain implementation // -CBlockLocator::CBlockLocator(uint256 hashBlock) -{ - std::map::iterator mi = mapBlockIndex.find(hashBlock); - if (mi != mapBlockIndex.end()) - Set((*mi).second); +CBlockIndex *CChain::SetTip(CBlockIndex *pindex) { + if (pindex == NULL) { + vChain.clear(); + return NULL; + } + vChain.resize(pindex->nHeight + 1); + while (pindex && vChain[pindex->nHeight] != pindex) { + vChain[pindex->nHeight] = pindex; + pindex = pindex->pprev; + } + return pindex; } -void CBlockLocator::Set(const CBlockIndex* pindex) -{ - vHave.clear(); +CBlockLocator CChain::GetLocator(const CBlockIndex *pindex) const { int nStep = 1; - while (pindex) - { - vHave.push_back(pindex->GetBlockHash()); + std::vector vHave; + vHave.reserve(32); - // Exponentially larger steps back - for (int i = 0; pindex && i < nStep; i++) + if (!pindex) + pindex = Tip(); + while (pindex) { + vHave.push_back(pindex->GetBlockHash()); + // Stop when we have added the genesis block. + if (pindex->nHeight == 0) + break; + // Exponentially larger steps back, plus the genesis block. + int nHeight = std::max(pindex->nHeight - nStep, 0); + // In case pindex is not in this chain, iterate pindex->pprev to find blocks. + while (pindex->nHeight > nHeight && !Contains(pindex)) pindex = pindex->pprev; + // If pindex is in this chain, use direct height-based access. + if (pindex->nHeight > nHeight) + pindex = (*this)[nHeight]; if (vHave.size() > 10) nStep *= 2; } - vHave.push_back(Params().HashGenesisBlock()); + + return CBlockLocator(vHave); } -int CBlockLocator::GetDistanceBack() -{ - // Retrace how far back it was in the sender's branch - int nDistance = 0; - int nStep = 1; - BOOST_FOREACH(const uint256& hash, vHave) - { - std::map::iterator mi = mapBlockIndex.find(hash); - if (mi != mapBlockIndex.end()) - { - CBlockIndex* pindex = (*mi).second; - if (pindex->IsInMainChain()) - return nDistance; - } - nDistance += nStep; - if (nDistance > 10) - nStep *= 2; - } - return nDistance; -} - -CBlockIndex *CBlockLocator::GetBlockIndex() -{ +CBlockIndex *CChain::FindFork(const CBlockLocator &locator) const { // Find the first block the caller has in the main chain - BOOST_FOREACH(const uint256& hash, vHave) - { + BOOST_FOREACH(const uint256& hash, locator.vHave) { std::map::iterator mi = mapBlockIndex.find(hash); if (mi != mapBlockIndex.end()) { CBlockIndex* pindex = (*mi).second; - if (pindex->IsInMainChain()) + if (Contains(pindex)) return pindex; } } - return pindexGenesisBlock; -} - -uint256 CBlockLocator::GetBlockHash() -{ - // Find the first block the caller has in the main chain - BOOST_FOREACH(const uint256& hash, vHave) - { - std::map::iterator mi = mapBlockIndex.find(hash); - if (mi != mapBlockIndex.end()) - { - CBlockIndex* pindex = (*mi).second; - if (pindex->IsInMainChain()) - return hash; - } - } - return Params().HashGenesisBlock(); -} - -int CBlockLocator::GetHeight() -{ - CBlockIndex* pindex = GetBlockIndex(); - if (!pindex) - return 0; - return pindex->nHeight; -} - -////////////////////////////////////////////////////////////////////////////// -// -// CCoinsView implementations -// - -bool CCoinsView::GetCoins(const uint256 &txid, CCoins &coins) { return false; } -bool CCoinsView::SetCoins(const uint256 &txid, const CCoins &coins) { return false; } -bool CCoinsView::HaveCoins(const uint256 &txid) { return false; } -CBlockIndex *CCoinsView::GetBestBlock() { return NULL; } -bool CCoinsView::SetBestBlock(CBlockIndex *pindex) { return false; } -bool CCoinsView::BatchWrite(const std::map &mapCoins, CBlockIndex *pindex) { return false; } -bool CCoinsView::GetStats(CCoinsStats &stats) { return false; } - - -CCoinsViewBacked::CCoinsViewBacked(CCoinsView &viewIn) : base(&viewIn) { } -bool CCoinsViewBacked::GetCoins(const uint256 &txid, CCoins &coins) { return base->GetCoins(txid, coins); } -bool CCoinsViewBacked::SetCoins(const uint256 &txid, const CCoins &coins) { return base->SetCoins(txid, coins); } -bool CCoinsViewBacked::HaveCoins(const uint256 &txid) { return base->HaveCoins(txid); } -CBlockIndex *CCoinsViewBacked::GetBestBlock() { return base->GetBestBlock(); } -bool CCoinsViewBacked::SetBestBlock(CBlockIndex *pindex) { return base->SetBestBlock(pindex); } -void CCoinsViewBacked::SetBackend(CCoinsView &viewIn) { base = &viewIn; } -bool CCoinsViewBacked::BatchWrite(const std::map &mapCoins, CBlockIndex *pindex) { return base->BatchWrite(mapCoins, pindex); } -bool CCoinsViewBacked::GetStats(CCoinsStats &stats) { return base->GetStats(stats); } - -CCoinsViewCache::CCoinsViewCache(CCoinsView &baseIn, bool fDummy) : CCoinsViewBacked(baseIn), pindexTip(NULL) { } - -bool CCoinsViewCache::GetCoins(const uint256 &txid, CCoins &coins) { - if (cacheCoins.count(txid)) { - coins = cacheCoins[txid]; - return true; - } - if (base->GetCoins(txid, coins)) { - cacheCoins[txid] = coins; - return true; - } - return false; -} - -std::map::iterator CCoinsViewCache::FetchCoins(const uint256 &txid) { - std::map::iterator it = cacheCoins.lower_bound(txid); - if (it != cacheCoins.end() && it->first == txid) - return it; - CCoins tmp; - if (!base->GetCoins(txid,tmp)) - return cacheCoins.end(); - std::map::iterator ret = cacheCoins.insert(it, std::make_pair(txid, CCoins())); - tmp.swap(ret->second); - return ret; -} - -CCoins &CCoinsViewCache::GetCoins(const uint256 &txid) { - std::map::iterator it = FetchCoins(txid); - assert(it != cacheCoins.end()); - return it->second; -} - -bool CCoinsViewCache::SetCoins(const uint256 &txid, const CCoins &coins) { - cacheCoins[txid] = coins; - return true; -} - -bool CCoinsViewCache::HaveCoins(const uint256 &txid) { - return FetchCoins(txid) != cacheCoins.end(); -} - -CBlockIndex *CCoinsViewCache::GetBestBlock() { - if (pindexTip == NULL) - pindexTip = base->GetBestBlock(); - return pindexTip; -} - -bool CCoinsViewCache::SetBestBlock(CBlockIndex *pindex) { - pindexTip = pindex; - return true; -} - -bool CCoinsViewCache::BatchWrite(const std::map &mapCoins, CBlockIndex *pindex) { - for (std::map::const_iterator it = mapCoins.begin(); it != mapCoins.end(); it++) - cacheCoins[it->first] = it->second; - pindexTip = pindex; - return true; -} - -bool CCoinsViewCache::Flush() { - bool fOk = base->BatchWrite(cacheCoins, pindexTip); - if (fOk) - cacheCoins.clear(); - return fOk; -} - -unsigned int CCoinsViewCache::GetCacheSize() { - return cacheCoins.size(); -} - -/** CCoinsView that brings transactions from a memorypool into view. - It does not check for spendings by memory pool transactions. */ -CCoinsViewMemPool::CCoinsViewMemPool(CCoinsView &baseIn, CTxMemPool &mempoolIn) : CCoinsViewBacked(baseIn), mempool(mempoolIn) { } - -bool CCoinsViewMemPool::GetCoins(const uint256 &txid, CCoins &coins) { - if (base->GetCoins(txid, coins)) - return true; - if (mempool.exists(txid)) { - const CTransaction &tx = mempool.lookup(txid); - coins = CCoins(tx, MEMPOOL_HEIGHT); - return true; - } - return false; -} - -bool CCoinsViewMemPool::HaveCoins(const uint256 &txid) { - return mempool.exists(txid) || base->HaveCoins(txid); + return Genesis(); } CCoinsViewCache *pcoinsTip = NULL; @@ -405,16 +411,12 @@ CBlockTreeDB *pblocktree = NULL; // mapOrphanTransactions // -bool AddOrphanTx(const CDataStream& vMsg) +bool AddOrphanTx(const CTransaction& tx) { - CTransaction tx; - CDataStream(vMsg) >> tx; uint256 hash = tx.GetHash(); if (mapOrphanTransactions.count(hash)) return false; - CDataStream* pvMsg = new CDataStream(vMsg); - // Ignore big transactions, to avoid a // send-big-orphans memory exhaustion attack. If a peer has a legitimate // large transaction with a missing parent then we assume @@ -422,18 +424,18 @@ bool AddOrphanTx(const CDataStream& vMsg) // have been mined or received. // 10,000 orphans, each of which is at most 5,000 bytes big is // at most 500 megabytes of orphans: - if (pvMsg->size() > 5000) + unsigned int sz = tx.GetSerializeSize(SER_NETWORK, CTransaction::CURRENT_VERSION); + if (sz > 5000) { - printf("ignoring large orphan tx (size: %"PRIszu", hash: %s)\n", pvMsg->size(), hash.ToString().c_str()); - delete pvMsg; + LogPrint("mempool", "ignoring large orphan tx (size: %u, hash: %s)\n", sz, hash.ToString()); return false; } - mapOrphanTransactions[hash] = pvMsg; + mapOrphanTransactions[hash] = tx; BOOST_FOREACH(const CTxIn& txin, tx.vin) - mapOrphanTransactionsByPrev[txin.prevout.hash].insert(make_pair(hash, pvMsg)); + mapOrphanTransactionsByPrev[txin.prevout.hash].insert(hash); - printf("stored orphan tx %s (mapsz %"PRIszu")\n", hash.ToString().c_str(), + LogPrint("mempool", "stored orphan tx %s (mapsz %u)\n", hash.ToString(), mapOrphanTransactions.size()); return true; } @@ -442,16 +444,13 @@ void static EraseOrphanTx(uint256 hash) { if (!mapOrphanTransactions.count(hash)) return; - const CDataStream* pvMsg = mapOrphanTransactions[hash]; - CTransaction tx; - CDataStream(*pvMsg) >> tx; + const CTransaction& tx = mapOrphanTransactions[hash]; BOOST_FOREACH(const CTxIn& txin, tx.vin) { mapOrphanTransactionsByPrev[txin.prevout.hash].erase(hash); if (mapOrphanTransactionsByPrev[txin.prevout.hash].empty()) mapOrphanTransactionsByPrev.erase(txin.prevout.hash); } - delete pvMsg; mapOrphanTransactions.erase(hash); } @@ -462,7 +461,7 @@ unsigned int LimitOrphanTxSize(unsigned int nMaxOrphans) { // Evict a random orphan: uint256 randomhash = GetRandHash(); - map::iterator it = mapOrphanTransactions.lower_bound(randomhash); + map::iterator it = mapOrphanTransactions.lower_bound(randomhash); if (it == mapOrphanTransactions.end()) it = mapOrphanTransactions.begin(); EraseOrphanTx(it->first); @@ -479,12 +478,30 @@ unsigned int LimitOrphanTxSize(unsigned int nMaxOrphans) bool IsStandardTx(const CTransaction& tx, string& reason) { - if (tx.nVersion > CTransaction::CURRENT_VERSION) { + AssertLockHeld(cs_main); + if (tx.nVersion > CTransaction::CURRENT_VERSION || tx.nVersion < 1) { reason = "version"; return false; } - if (!IsFinalTx(tx)) { + // Treat non-final transactions as non-standard to prevent a specific type + // of double-spend attack, as well as DoS attacks. (if the transaction + // can't be mined, the attacker isn't expending resources broadcasting it) + // Basically we don't want to propagate transactions that can't included in + // the next block. + // + // However, IsFinalTx() is confusing... Without arguments, it uses + // chainActive.Height() to evaluate nLockTime; when a block is accepted, chainActive.Height() + // is set to the value of nHeight in the block. However, when IsFinalTx() + // is called within CBlock::AcceptBlock(), the height of the block *being* + // evaluated is what is used. Thus if we want to know if a transaction can + // be part of the *next* block, we need to call IsFinalTx() with one more + // than chainActive.Height(). + // + // Timestamps on the other hand don't get any special treatment, because we + // can't know what timestamp the next block will have, and there aren't + // timestamp applications where it matters. + if (!IsFinalTx(tx, chainActive.Height() + 1)) { reason = "non-final"; return false; } @@ -512,31 +529,47 @@ bool IsStandardTx(const CTransaction& tx, string& reason) reason = "scriptsig-not-pushonly"; return false; } + if (!txin.scriptSig.HasCanonicalPushes()) { + reason = "scriptsig-non-canonical-push"; + return false; + } } + + unsigned int nDataOut = 0; + txnouttype whichType; BOOST_FOREACH(const CTxOut& txout, tx.vout) { - if (!::IsStandard(txout.scriptPubKey)) { + if (!::IsStandard(txout.scriptPubKey, whichType)) { reason = "scriptpubkey"; return false; } - if (txout.IsDust(CTransaction::nMinRelayTxFee)) { + if (whichType == TX_NULL_DATA) + nDataOut++; + else if (txout.IsDust(CTransaction::nMinRelayTxFee)) { reason = "dust"; return false; } } + // only one OP_RETURN txout is permitted + if (nDataOut > 1) { + reason = "multi-op-return"; + return false; + } + return true; } -bool IsFinalTx(const CTransaction &tx, int nBlockHeight, int64 nBlockTime) +bool IsFinalTx(const CTransaction &tx, int nBlockHeight, int64_t nBlockTime) { + AssertLockHeld(cs_main); // Time based nLockTime implemented in 0.1.6 if (tx.nLockTime == 0) return true; if (nBlockHeight == 0) - nBlockHeight = nBestHeight; + nBlockHeight = chainActive.Height(); if (nBlockTime == 0) nBlockTime = GetAdjustedTime(); - if ((int64)tx.nLockTime < ((int64)tx.nLockTime < LOCKTIME_THRESHOLD ? (int64)nBlockHeight : nBlockTime)) + if ((int64_t)tx.nLockTime < ((int64_t)tx.nLockTime < LOCKTIME_THRESHOLD ? (int64_t)nBlockHeight : nBlockTime)) return true; BOOST_FOREACH(const CTxIn& txin, tx.vin) if (!txin.IsFinal()) @@ -544,21 +577,6 @@ bool IsFinalTx(const CTransaction &tx, int nBlockHeight, int64 nBlockTime) return true; } -/** Amount of bitcoins spent by the transaction. - @return sum of all outputs (note: does not include fees) - */ -int64 GetValueOut(const CTransaction& tx) -{ - int64 nValueOut = 0; - BOOST_FOREACH(const CTxOut& txout, tx.vout) - { - nValueOut += txout.nValue; - if (!MoneyRange(txout.nValue) || !MoneyRange(nValueOut)) - throw std::runtime_error("GetValueOut() : value out of range"); - } - return nValueOut; -} - // // Check transaction inputs, and make sure any // pay-to-script-hash transactions are evaluating IsStandard scripts @@ -655,12 +673,13 @@ unsigned int GetP2SHSigOpCount(const CTransaction& tx, CCoinsViewCache& inputs) int CMerkleTx::SetMerkleBranch(const CBlock* pblock) { + AssertLockHeld(cs_main); CBlock blockTmp; if (pblock == NULL) { CCoins coins; if (pcoinsTip->GetCoins(GetHash(), coins)) { - CBlockIndex *pindex = FindBlockByHeight(coins.nHeight); + CBlockIndex *pindex = chainActive[coins.nHeight]; if (pindex) { if (!ReadBlockFromDisk(blockTmp, pindex)) return 0; @@ -681,7 +700,7 @@ int CMerkleTx::SetMerkleBranch(const CBlock* pblock) { vMerkleBranch.clear(); nIndex = -1; - printf("ERROR: SetMerkleBranch() : couldn't find tx in block\n"); + LogPrintf("ERROR: SetMerkleBranch() : couldn't find tx in block\n"); return 0; } @@ -694,10 +713,10 @@ int CMerkleTx::SetMerkleBranch(const CBlock* pblock) if (mi == mapBlockIndex.end()) return 0; CBlockIndex* pindex = (*mi).second; - if (!pindex || !pindex->IsInMainChain()) + if (!pindex || !chainActive.Contains(pindex)) return 0; - return pindexBest->nHeight - pindex->nHeight + 1; + return chainActive.Height() - pindex->nHeight + 1; } @@ -710,24 +729,30 @@ bool CheckTransaction(const CTransaction& tx, CValidationState &state) { // Basic checks that don't depend on any context if (tx.vin.empty()) - return state.DoS(10, error("CheckTransaction() : vin empty")); + return state.DoS(10, error("CheckTransaction() : vin empty"), + REJECT_INVALID, "bad-txns-vin-empty"); if (tx.vout.empty()) - return state.DoS(10, error("CheckTransaction() : vout empty")); + return state.DoS(10, error("CheckTransaction() : vout empty"), + REJECT_INVALID, "bad-txns-vout-empty"); // Size limits if (::GetSerializeSize(tx, SER_NETWORK, PROTOCOL_VERSION) > MAX_BLOCK_SIZE) - return state.DoS(100, error("CTransaction::CheckTransaction() : size limits failed")); + return state.DoS(100, error("CheckTransaction() : size limits failed"), + REJECT_INVALID, "bad-txns-oversize"); // Check for negative or overflow output values - int64 nValueOut = 0; + int64_t nValueOut = 0; BOOST_FOREACH(const CTxOut& txout, tx.vout) { if (txout.nValue < 0) - return state.DoS(100, error("CheckTransaction() : txout.nValue negative")); + return state.DoS(100, error("CheckTransaction() : txout.nValue negative"), + REJECT_INVALID, "bad-txns-vout-negative"); if (txout.nValue > MAX_MONEY) - return state.DoS(100, error("CheckTransaction() : txout.nValue too high")); + return state.DoS(100, error("CheckTransaction() : txout.nValue too high"), + REJECT_INVALID, "bad-txns-vout-toolarge"); nValueOut += txout.nValue; if (!MoneyRange(nValueOut)) - return state.DoS(100, error("CTransaction::CheckTransaction() : txout total out of range")); + return state.DoS(100, error("CheckTransaction() : txout total out of range"), + REJECT_INVALID, "bad-txns-txouttotal-toolarge"); } // Check for duplicate inputs @@ -735,46 +760,51 @@ bool CheckTransaction(const CTransaction& tx, CValidationState &state) BOOST_FOREACH(const CTxIn& txin, tx.vin) { if (vInOutPoints.count(txin.prevout)) - return state.DoS(100, error("CTransaction::CheckTransaction() : duplicate inputs")); + return state.DoS(100, error("CheckTransaction() : duplicate inputs"), + REJECT_INVALID, "bad-txns-inputs-duplicate"); vInOutPoints.insert(txin.prevout); } if (tx.IsCoinBase()) { if (tx.vin[0].scriptSig.size() < 2 || tx.vin[0].scriptSig.size() > 100) - return state.DoS(100, error("CheckTransaction() : coinbase script size")); + return state.DoS(100, error("CheckTransaction() : coinbase script size"), + REJECT_INVALID, "bad-cb-length"); } else { BOOST_FOREACH(const CTxIn& txin, tx.vin) if (txin.prevout.IsNull()) - return state.DoS(10, error("CheckTransaction() : prevout is null")); + return state.DoS(10, error("CheckTransaction() : prevout is null"), + REJECT_INVALID, "bad-txns-prevout-null"); } return true; } -int64 GetMinFee(const CTransaction& tx, bool fAllowFree, enum GetMinFee_mode mode) +int64_t GetMinFee(const CTransaction& tx, unsigned int nBytes, bool fAllowFree, enum GetMinFee_mode mode) { // Base fee is either nMinTxFee or nMinRelayTxFee - int64 nBaseFee = (mode == GMF_RELAY) ? tx.nMinRelayTxFee : tx.nMinTxFee; + int64_t nBaseFee = (mode == GMF_RELAY) ? tx.nMinRelayTxFee : tx.nMinTxFee; - unsigned int nBytes = ::GetSerializeSize(tx, SER_NETWORK, PROTOCOL_VERSION); - int64 nMinFee = (1 + (int64)nBytes / 1000) * nBaseFee; + int64_t nMinFee = (1 + (int64_t)nBytes / 1000) * nBaseFee; if (fAllowFree) { // There is a free transaction area in blocks created by most miners, // * If we are relaying we allow transactions up to DEFAULT_BLOCK_PRIORITY_SIZE - 1000 - // to be considered to fall into this category - // * If we are creating a transaction we allow transactions up to DEFAULT_BLOCK_PRIORITY_SIZE - 17000 - // (= 10000) to be considered safe and assume they can likely make it into this section - if (nBytes < (mode == GMF_SEND ? (DEFAULT_BLOCK_PRIORITY_SIZE - 17000) : (DEFAULT_BLOCK_PRIORITY_SIZE - 1000))) + // to be considered to fall into this category. We don't want to encourage sending + // multiple transactions instead of one big transaction to avoid fees. + // * If we are creating a transaction we allow transactions up to 1,000 bytes + // to be considered safe and assume they can likely make it into this section. + if (nBytes < (mode == GMF_SEND ? 1000 : (DEFAULT_BLOCK_PRIORITY_SIZE - 1000))) nMinFee = 0; } - // To limit dust spam, require base fee if any output is less than 0.01 - if (nMinFee < nBaseFee) + // This code can be removed after enough miners have upgraded to version 0.9. + // Until then, be safe when sending and require a fee if any output + // is less than CENT: + if (nMinFee < nBaseFee && mode == GMF_SEND) { BOOST_FOREACH(const CTxOut& txout, tx.vout) if (txout.nValue < CENT) @@ -786,85 +816,55 @@ int64 GetMinFee(const CTransaction& tx, bool fAllowFree, enum GetMinFee_mode mod return nMinFee; } -void CTxMemPool::pruneSpent(const uint256 &hashTx, CCoins &coins) -{ - LOCK(cs); - - std::map::iterator it = mapNextTx.lower_bound(COutPoint(hashTx, 0)); - - // iterate over all COutPoints in mapNextTx whose hash equals the provided hashTx - while (it != mapNextTx.end() && it->first.hash == hashTx) { - coins.Spend(it->first.n); // and remove those outputs from coins - it++; - } -} - -bool CTxMemPool::accept(CValidationState &state, CTransaction &tx, bool fLimitFree, - bool* pfMissingInputs) + +bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransaction &tx, bool fLimitFree, + bool* pfMissingInputs, bool fRejectInsaneFee) { + AssertLockHeld(cs_main); if (pfMissingInputs) *pfMissingInputs = false; if (!CheckTransaction(tx, state)) - return error("CTxMemPool::accept() : CheckTransaction failed"); + return error("AcceptToMemoryPool: : CheckTransaction failed"); // Coinbase is only valid in a block, not as a loose transaction if (tx.IsCoinBase()) - return state.DoS(100, error("CTxMemPool::accept() : coinbase as individual tx")); + return state.DoS(100, error("AcceptToMemoryPool: : coinbase as individual tx"), + REJECT_INVALID, "coinbase"); - // To help v0.1.5 clients who would see it as a negative number - if ((int64)tx.nLockTime > std::numeric_limits::max()) - return error("CTxMemPool::accept() : not accepting nLockTime beyond 2038 yet"); - - // Rather not work on nonstandard transactions (unless -testnet) + // Rather not work on nonstandard transactions (unless -testnet/-regtest) string reason; - if (!TestNet() && !IsStandardTx(tx, reason)) - return error("CTxMemPool::accept() : nonstandard transaction: %s", - reason.c_str()); + if (Params().NetworkID() == CChainParams::MAIN && !IsStandardTx(tx, reason)) + return state.DoS(0, + error("AcceptToMemoryPool : nonstandard transaction: %s", reason), + REJECT_NONSTANDARD, reason); // is it already in the memory pool? uint256 hash = tx.GetHash(); - { - LOCK(cs); - if (mapTx.count(hash)) - return false; - } + if (pool.exists(hash)) + return false; // Check for conflicts with in-memory transactions - CTransaction* ptxOld = NULL; + { + LOCK(pool.cs); // protect pool.mapNextTx for (unsigned int i = 0; i < tx.vin.size(); i++) { COutPoint outpoint = tx.vin[i].prevout; - if (mapNextTx.count(outpoint)) + if (pool.mapNextTx.count(outpoint)) { // Disable replacement feature for now return false; - - // Allow replacing with a newer version of the same transaction - if (i != 0) - return false; - ptxOld = mapNextTx[outpoint].ptx; - if (IsFinalTx(*ptxOld)) - return false; - if (!tx.IsNewerThan(*ptxOld)) - return false; - for (unsigned int i = 0; i < tx.vin.size(); i++) - { - COutPoint outpoint = tx.vin[i].prevout; - if (!mapNextTx.count(outpoint) || mapNextTx[outpoint].ptx != ptxOld) - return false; - } - break; } } + } { CCoinsView dummy; CCoinsViewCache view(dummy); { - LOCK(cs); - CCoinsViewMemPool viewMemPool(*pcoinsTip, *this); + LOCK(pool.cs); + CCoinsViewMemPool viewMemPool(*pcoinsTip, pool); view.SetBackend(viewMemPool); // do we already have it? @@ -884,7 +884,8 @@ bool CTxMemPool::accept(CValidationState &state, CTransaction &tx, bool fLimitFr // are the actual inputs available? if (!view.HaveInputs(tx)) - return state.Invalid(error("CTxMemPool::accept() : inputs already spent")); + return state.Invalid(error("AcceptToMemoryPool : inputs already spent"), + REJECT_DUPLICATE, "bad-txns-inputs-spent"); // Bring the best block into scope view.GetBestBlock(); @@ -894,33 +895,39 @@ bool CTxMemPool::accept(CValidationState &state, CTransaction &tx, bool fLimitFr } // Check for non-standard pay-to-script-hash in inputs - if (!TestNet() && !AreInputsStandard(tx, view)) - return error("CTxMemPool::accept() : nonstandard transaction input"); + if (Params().NetworkID() == CChainParams::MAIN && !AreInputsStandard(tx, view)) + return error("AcceptToMemoryPool: : nonstandard transaction input"); // Note: if you modify this code to accept non-standard transactions, then // you should add code here to check that the transaction does a // reasonable number of ECDSA signature verifications. - int64 nFees = view.GetValueIn(tx)-GetValueOut(tx); - unsigned int nSize = ::GetSerializeSize(tx, SER_NETWORK, PROTOCOL_VERSION); + int64_t nValueIn = view.GetValueIn(tx); + int64_t nValueOut = tx.GetValueOut(); + int64_t nFees = nValueIn-nValueOut; + double dPriority = view.GetPriority(tx, chainActive.Height()); + + CTxMemPoolEntry entry(tx, nFees, GetTime(), dPriority, chainActive.Height()); + unsigned int nSize = entry.GetTxSize(); // Don't accept it if it can't get into a block - int64 txMinFee = GetMinFee(tx, true, GMF_RELAY); + int64_t txMinFee = GetMinFee(tx, nSize, true, GMF_RELAY); if (fLimitFree && nFees < txMinFee) - return error("CTxMemPool::accept() : not enough fees %s, %"PRI64d" < %"PRI64d, - hash.ToString().c_str(), - nFees, txMinFee); + return state.DoS(0, error("AcceptToMemoryPool : not enough fees %s, %d < %d", + hash.ToString(), nFees, txMinFee), + REJECT_INSUFFICIENTFEE, "insufficient fee"); // Continuously rate-limit free transactions // This mitigates 'penny-flooding' -- sending thousands of free transactions just to // be annoying or make others' transactions take longer to confirm. if (fLimitFree && nFees < CTransaction::nMinRelayTxFee) { + static CCriticalSection csFreeLimiter; static double dFreeCount; - static int64 nLastTime; - int64 nNow = GetTime(); + static int64_t nLastTime; + int64_t nNow = GetTime(); - LOCK(cs); + LOCK(csFreeLimiter); // Use an exponentially decaying ~10-minute window: dFreeCount *= pow(1.0 - 1.0/600.0, (double)(nNow - nLastTime)); @@ -928,129 +935,45 @@ bool CTxMemPool::accept(CValidationState &state, CTransaction &tx, bool fLimitFr // -limitfreerelay unit is thousand-bytes-per-minute // At default rate it would take over a month to fill 1GB if (dFreeCount >= GetArg("-limitfreerelay", 15)*10*1000) - return error("CTxMemPool::accept() : free transaction rejected by rate limiter"); - if (fDebug) - printf("Rate limit dFreeCount: %g => %g\n", dFreeCount, dFreeCount+nSize); + return state.DoS(0, error("AcceptToMemoryPool : free transaction rejected by rate limiter"), + REJECT_INSUFFICIENTFEE, "insufficient priority"); + LogPrint("mempool", "Rate limit dFreeCount: %g => %g\n", dFreeCount, dFreeCount+nSize); dFreeCount += nSize; } + if (fRejectInsaneFee && nFees > CTransaction::nMinRelayTxFee * 10000) + return error("AcceptToMemoryPool: : insane fees %s, %d > %d", + hash.ToString(), + nFees, CTransaction::nMinRelayTxFee * 10000); + // Check against previous transactions // This is done last to help prevent CPU exhaustion denial-of-service attacks. if (!CheckInputs(tx, state, view, true, SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_STRICTENC)) { - return error("CTxMemPool::accept() : ConnectInputs failed %s", hash.ToString().c_str()); + return error("AcceptToMemoryPool: : ConnectInputs failed %s", hash.ToString()); } + // Store transaction in memory + pool.addUnchecked(hash, entry); } - // Store transaction in memory - { - LOCK(cs); - if (ptxOld) - { - printf("CTxMemPool::accept() : replacing tx %s with new version\n", ptxOld->GetHash().ToString().c_str()); - remove(*ptxOld); - } - addUnchecked(hash, tx); - } + g_signals.SyncTransaction(hash, tx, NULL); - ///// are we sure this is ok when loading transactions or restoring block txes - // If updated, erase old tx from wallet - if (ptxOld) - EraseFromWallets(ptxOld->GetHash()); - SyncWithWallets(hash, tx, NULL, true); - - printf("CTxMemPool::accept() : accepted %s (poolsz %"PRIszu")\n", - hash.ToString().c_str(), - mapTx.size()); return true; } -bool CTxMemPool::addUnchecked(const uint256& hash, CTransaction &tx) -{ - // Add to memory pool without checking anything. Don't call this directly, - // call CTxMemPool::accept to properly check the transaction first. - { - mapTx[hash] = tx; - for (unsigned int i = 0; i < tx.vin.size(); i++) - mapNextTx[tx.vin[i].prevout] = CInPoint(&mapTx[hash], i); - nTransactionsUpdated++; - } - return true; -} - - -bool CTxMemPool::remove(const CTransaction &tx, bool fRecursive) -{ - // Remove transaction from memory pool - { - LOCK(cs); - uint256 hash = tx.GetHash(); - if (mapTx.count(hash)) - { - if (fRecursive) { - for (unsigned int i = 0; i < tx.vout.size(); i++) { - std::map::iterator it = mapNextTx.find(COutPoint(hash, i)); - if (it != mapNextTx.end()) - remove(*it->second.ptx, true); - } - } - BOOST_FOREACH(const CTxIn& txin, tx.vin) - mapNextTx.erase(txin.prevout); - mapTx.erase(hash); - nTransactionsUpdated++; - } - } - return true; -} - -bool CTxMemPool::removeConflicts(const CTransaction &tx) -{ - // Remove transactions which depend on inputs of tx, recursively - LOCK(cs); - BOOST_FOREACH(const CTxIn &txin, tx.vin) { - std::map::iterator it = mapNextTx.find(txin.prevout); - if (it != mapNextTx.end()) { - const CTransaction &txConflict = *it->second.ptx; - if (txConflict != tx) - remove(txConflict, true); - } - } - return true; -} - -void CTxMemPool::clear() -{ - LOCK(cs); - mapTx.clear(); - mapNextTx.clear(); - ++nTransactionsUpdated; -} - -void CTxMemPool::queryHashes(std::vector& vtxid) -{ - vtxid.clear(); - - LOCK(cs); - vtxid.reserve(mapTx.size()); - for (map::iterator mi = mapTx.begin(); mi != mapTx.end(); ++mi) - vtxid.push_back((*mi).first); -} - - - - -int CMerkleTx::GetDepthInMainChain(CBlockIndex* &pindexRet) const +int CMerkleTx::GetDepthInMainChainINTERNAL(CBlockIndex* &pindexRet) const { if (hashBlock == 0 || nIndex == -1) return 0; + AssertLockHeld(cs_main); // Find the block it claims to be in map::iterator mi = mapBlockIndex.find(hashBlock); if (mi == mapBlockIndex.end()) return 0; CBlockIndex* pindex = (*mi).second; - if (!pindex || !pindex->IsInMainChain()) + if (!pindex || !chainActive.Contains(pindex)) return 0; // Make sure the merkle branch connects to this block @@ -1062,43 +985,31 @@ int CMerkleTx::GetDepthInMainChain(CBlockIndex* &pindexRet) const } pindexRet = pindex; - return pindexBest->nHeight - pindex->nHeight + 1; + return chainActive.Height() - pindex->nHeight + 1; } +int CMerkleTx::GetDepthInMainChain(CBlockIndex* &pindexRet) const +{ + AssertLockHeld(cs_main); + int nResult = GetDepthInMainChainINTERNAL(pindexRet); + if (nResult == 0 && !mempool.exists(GetHash())) + return -1; // Not in chain, not in mempool + + return nResult; +} int CMerkleTx::GetBlocksToMaturity() const { if (!IsCoinBase()) return 0; - return max(0, (COINBASE_MATURITY+20) - GetDepthInMainChain()); + return max(0, (COINBASE_MATURITY+1) - GetDepthInMainChain()); } bool CMerkleTx::AcceptToMemoryPool(bool fLimitFree) { CValidationState state; - return mempool.accept(state, *this, fLimitFree, NULL); -} - - - -bool CWalletTx::AcceptWalletTransaction() -{ - { - LOCK(mempool.cs); - // Add previous supporting transactions first - BOOST_FOREACH(CMerkleTx& tx, vtxPrev) - { - if (!tx.IsCoinBase()) - { - uint256 hash = tx.GetHash(); - if (!mempool.exists(hash) && pcoinsTip->HaveCoins(hash)) - tx.AcceptToMemoryPool(false); - } - } - return AcceptToMemoryPool(false); - } - return false; + return ::AcceptToMemoryPool(mempool, state, *this, fLimitFree, NULL); } @@ -1109,10 +1020,8 @@ bool GetTransaction(const uint256 &hash, CTransaction &txOut, uint256 &hashBlock { LOCK(cs_main); { - LOCK(mempool.cs); - if (mempool.exists(hash)) + if (mempool.lookup(hash, txOut)) { - txOut = mempool.lookup(hash); return true; } } @@ -1127,11 +1036,11 @@ bool GetTransaction(const uint256 &hash, CTransaction &txOut, uint256 &hashBlock fseek(file, postx.nTxOffset, SEEK_CUR); file >> txOut; } catch (std::exception &e) { - return error("%s() : deserialize or I/O error", __PRETTY_FUNCTION__); + return error("%s : Deserialize or I/O error - %s", __func__, e.what()); } hashBlock = header.GetHash(); if (txOut.GetHash() != hash) - return error("%s() : txid mismatch", __PRETTY_FUNCTION__); + return error("%s : txid mismatch", __func__); return true; } } @@ -1145,7 +1054,7 @@ bool GetTransaction(const uint256 &hash, CTransaction &txOut, uint256 &hashBlock nHeight = coins.nHeight; } if (nHeight > 0) - pindexSlow = FindBlockByHeight(nHeight); + pindexSlow = chainActive[nHeight]; } } @@ -1175,20 +1084,12 @@ bool GetTransaction(const uint256 &hash, CTransaction &txOut, uint256 &hashBlock // CBlock and CBlockIndex // -static CBlockIndex* pblockindexFBBHLast; -CBlockIndex* FindBlockByHeight(int nHeight) -{ - if (nHeight >= (int)vBlockIndexByHeight.size()) - return NULL; - return vBlockIndexByHeight[nHeight]; -} - bool WriteBlockToDisk(CBlock& block, CDiskBlockPos& pos) { // Open history file to append CAutoFile fileout = CAutoFile(OpenBlockFile(pos), SER_DISK, CLIENT_VERSION); if (!fileout) - return error("WriteBlockToDisk() : OpenBlockFile failed"); + return error("WriteBlockToDisk : OpenBlockFile failed"); // Write index header unsigned int nSize = fileout.GetSerializeSize(block); @@ -1197,7 +1098,7 @@ bool WriteBlockToDisk(CBlock& block, CDiskBlockPos& pos) // Write block long fileOutPos = ftell(fileout); if (fileOutPos < 0) - return error("WriteBlockToDisk() : ftell failed"); + return error("WriteBlockToDisk : ftell failed"); pos.nPos = (unsigned int)fileOutPos; fileout << block; @@ -1216,19 +1117,19 @@ bool ReadBlockFromDisk(CBlock& block, const CDiskBlockPos& pos) // Open history file to read CAutoFile filein = CAutoFile(OpenBlockFile(pos, true), SER_DISK, CLIENT_VERSION); if (!filein) - return error("ReadBlockFromDisk(CBlock&, CDiskBlockPos&) : OpenBlockFile failed"); + return error("ReadBlockFromDisk : OpenBlockFile failed"); // Read block try { filein >> block; } catch (std::exception &e) { - return error("%s() : deserialize or I/O error", __PRETTY_FUNCTION__); + return error("%s : Deserialize or I/O error - %s", __func__, e.what()); } // Check the header if (!CheckProofOfWork(block.GetPoWHash(block.GetAlgo()), block.nBits, block.GetAlgo())) - return error("ReadBlockFromDisk(CBlock&, CDiskBlockPos&) : errors in block header"); + return error("ReadBlockFromDisk : Errors in block header"); return true; } @@ -1242,12 +1143,44 @@ bool ReadBlockFromDisk(CBlock& block, const CBlockIndex* pindex) return true; } -uint256 static GetOrphanRoot(const CBlockHeader* pblock) +uint256 static GetOrphanRoot(const uint256& hash) { + map::iterator it = mapOrphanBlocks.find(hash); + if (it == mapOrphanBlocks.end()) + return hash; + // Work back to the first block in the orphan chain - while (mapOrphanBlocks.count(pblock->hashPrevBlock)) - pblock = mapOrphanBlocks[pblock->hashPrevBlock]; - return pblock->GetHash(); + do { + map::iterator it2 = mapOrphanBlocks.find(it->second->hashPrev); + if (it2 == mapOrphanBlocks.end()) + return it->first; + it = it2; + } while(true); +} + +// Remove a random orphan block (which does not have any dependent orphans). +void static PruneOrphanBlocks() +{ + if (mapOrphanBlocksByPrev.size() <= MAX_ORPHAN_BLOCKS) + return; + + // Pick a random orphan block. + int pos = insecure_rand() % mapOrphanBlocksByPrev.size(); + std::multimap::iterator it = mapOrphanBlocksByPrev.begin(); + while (pos--) it++; + + // As long as this block has other orphans depending on it, move to one of those successors. + do { + std::multimap::iterator it2 = mapOrphanBlocksByPrev.find(it->second->hashBlock); + if (it2 == mapOrphanBlocksByPrev.end()) + break; + it = it2; + } while(1); + + uint256 hash = it->second->hashBlock; + delete it->second; + mapOrphanBlocksByPrev.erase(it); + mapOrphanBlocks.erase(hash); } const CBlockIndex* GetLastBlockIndex(const CBlockIndex* pindex, int algo) @@ -1269,12 +1202,12 @@ const CBlockIndex* GetLastBlockIndexForAlgo(const CBlockIndex* pindex, int algo) } } -static const int64 nStartSubsidy = 1000 * COIN; -static const int64 nMinSubsidy = 1 * COIN; +static const int64_t nStartSubsidy = 1000 * COIN; +static const int64_t nMinSubsidy = 1 * COIN; -int64 static GetBlockValue(int nHeight, int64 nFees) +int64_t GetBlockValue(int nHeight, int64_t nFees) { - int64 nSubsidy = nStartSubsidy; + int64_t nSubsidy = nStartSubsidy; // Mining phase: Subsidy is cut in half every SubsidyHalvingInterval nSubsidy >>= (nHeight / Params().SubsidyHalvingInterval()); @@ -1290,25 +1223,26 @@ int64 static GetBlockValue(int nHeight, int64 nFees) return nSubsidy + nFees; } -static const int64 nTargetTimespan = 150; // 2.5 minutes (NUM_ALGOS * 30 seconds) -static const int64 nTargetSpacing = 150; // 2.5 minutes (NUM_ALGOS * 30 seconds) -static const int64 nInterval = 1; // retargets every blocks +static const int64_t nTargetTimespan = 150; // 2.5 minutes (NUM_ALGOS * 30 seconds) +static const int64_t nTargetSpacing = 150; // 2.5 minutes (NUM_ALGOS * 30 seconds) +static const int64_t nInterval = 1; // retargets every blocks -static const int64 nAveragingInterval = 10; // 10 blocks -static const int64 nAveragingTargetTimespan = nAveragingInterval * nTargetSpacing; // 25 minutes +static const int64_t nAveragingInterval = 10; // 10 blocks +static const int64_t nAveragingTargetTimespan = nAveragingInterval * nTargetSpacing; // 25 minutes -static const int64 nMaxAdjustDown = 4; // 4% adjustment down -static const int64 nMaxAdjustUp = 2; // 2% adjustment up +static const int64_t nMaxAdjustDown = 4; // 4% adjustment down +static const int64_t nMaxAdjustUp = 2; // 2% adjustment up + +static const int64_t nTargetTimespanAdjDown = nTargetTimespan * (100 + nMaxAdjustDown) / 100; -static const int64 nTargetTimespanAdjDown = nTargetTimespan * (100 + nMaxAdjustDown) / 100; // // minimum amount of work that could possibly be required nTime after // minimum work required was nBase // -unsigned int ComputeMinWork(unsigned int nBase, int64 nTime) +unsigned int ComputeMinWork(unsigned int nBase, int64_t nTime) { - /* +/* const CBigNum &bnLimit = Params().ProofOfWorkLimit(); // Testnet has min-difficulty blocks // after nTargetSpacing*2 time between blocks: @@ -1319,31 +1253,29 @@ unsigned int ComputeMinWork(unsigned int nBase, int64 nTime) bnResult.SetCompact(nBase); while (nTime > 0 && bnResult < bnLimit) { - // Maximum adjustment... - bnResult *= (100 + nMaxAdjustDown); - bnResult /= 100; - // ... in best-case exactly adjustment times-normal target time - nTime -= nTargetTimespanAdjDown; + // Maximum 400% adjustment... + bnResult *= 4; + // ... in best-case exactly 4-times-normal target time + nTime -= nTargetTimespan*4; } if (bnResult > bnLimit) bnResult = bnLimit; return bnResult.GetCompact(); - */ +*/ return Params().ProofOfWorkLimit(ALGO_SHA256D).GetCompact(); } -static const int64 nMinActualTimespan = nAveragingTargetTimespan * (100 - nMaxAdjustUp) / 100; -static const int64 nMaxActualTimespan = nAveragingTargetTimespan * (100 + nMaxAdjustDown) / 100; +static const int64_t nMinActualTimespan = nAveragingTargetTimespan * (100 - nMaxAdjustUp) / 100; +static const int64_t nMaxActualTimespan = nAveragingTargetTimespan * (100 + nMaxAdjustDown) / 100; -unsigned int static GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHeader *pblock, int algo) +unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHeader *pblock, int algo) { unsigned int nProofOfWorkLimit = Params().ProofOfWorkLimit(algo).GetCompact(); - + // Genesis block if (pindexLast == NULL) return nProofOfWorkLimit; - - // Testnet + if (TestNet()) { // Special difficulty rule for testnet: @@ -1376,8 +1308,8 @@ unsigned int static GetNextWorkRequired(const CBlockIndex* pindexLast, const CBl return nProofOfWorkLimit; // not nAveragingInterval blocks of this algo available // Limit adjustment step - int64 nActualTimespan = pindexPrev->GetBlockTime() - pindexFirst->GetBlockTime(); - printf(" nActualTimespan = %"PRI64d" before bounds\n", nActualTimespan); + int64_t nActualTimespan = pindexPrev->GetBlockTime() - pindexFirst->GetBlockTime(); + LogPrintf(" nActualTimespan = %d before bounds\n", nActualTimespan); if (nActualTimespan < nMinActualTimespan) nActualTimespan = nMinActualTimespan; if (nActualTimespan > nMaxActualTimespan) @@ -1393,10 +1325,10 @@ unsigned int static GetNextWorkRequired(const CBlockIndex* pindexLast, const CBl bnNew = Params().ProofOfWorkLimit(algo); /// debug print - printf("GetNextWorkRequired RETARGET\n"); - printf("nTargetTimespan = %"PRI64d" nActualTimespan = %"PRI64d"\n", nAveragingTargetTimespan, nActualTimespan); - printf("Before: %08x %s\n", pindexPrev->nBits, CBigNum().SetCompact(pindexPrev->nBits).getuint256().ToString().c_str()); - printf("After: %08x %s\n", bnNew.GetCompact(), bnNew.getuint256().ToString().c_str()); + LogPrintf("GetNextWorkRequired RETARGET\n"); + LogPrintf("nTargetTimespan = %d nActualTimespan = %d\n", nTargetTimespan, nActualTimespan); + LogPrintf("Before: %08x %s\n", pindexLast->nBits, CBigNum().SetCompact(pindexLast->nBits).getuint256().ToString()); + LogPrintf("After: %08x %s\n", bnNew.GetCompact(), bnNew.getuint256().ToString()); return bnNew.GetCompact(); } @@ -1425,99 +1357,160 @@ int GetNumBlocksOfPeers() bool IsInitialBlockDownload() { - if (pindexBest == NULL || fImporting || fReindex || nBestHeight < Checkpoints::GetTotalBlocksEstimate()) + LOCK(cs_main); + if (fImporting || fReindex || chainActive.Height() < Checkpoints::GetTotalBlocksEstimate()) return true; - static int64 nLastUpdate; + static int64_t nLastUpdate; static CBlockIndex* pindexLastBest; - if (pindexBest != pindexLastBest) + if (chainActive.Tip() != pindexLastBest) { - pindexLastBest = pindexBest; + pindexLastBest = chainActive.Tip(); nLastUpdate = GetTime(); } return (GetTime() - nLastUpdate < 10 && - pindexBest->GetBlockTime() < GetTime() - 24 * 60 * 60); + chainActive.Tip()->GetBlockTime() < GetTime() - 24 * 60 * 60); +} + +bool fLargeWorkForkFound = false; +bool fLargeWorkInvalidChainFound = false; +CBlockIndex *pindexBestForkTip = NULL, *pindexBestForkBase = NULL; + +void CheckForkWarningConditions() +{ + AssertLockHeld(cs_main); + // Before we get past initial download, we cannot reliably alert about forks + // (we assume we don't get stuck on a fork before the last checkpoint) + if (IsInitialBlockDownload()) + return; + + // If our best fork is no longer within 72 blocks (+/- 12 hours if no one mines it) + // of our head, drop it + if (pindexBestForkTip && chainActive.Height() - pindexBestForkTip->nHeight >= 72) + pindexBestForkTip = NULL; + + if (pindexBestForkTip || (pindexBestInvalid && pindexBestInvalid->nChainWork > chainActive.Tip()->nChainWork + (chainActive.Tip()->GetBlockWorkAdjusted() * 6).getuint256())) + { + if (!fLargeWorkForkFound) + { + std::string strCmd = GetArg("-alertnotify", ""); + if (!strCmd.empty()) + { + std::string warning = std::string("'Warning: Large-work fork detected, forking after block ") + + pindexBestForkBase->phashBlock->ToString() + std::string("'"); + boost::replace_all(strCmd, "%s", warning); + boost::thread t(runCommand, strCmd); // thread runs free + } + } + if (pindexBestForkTip) + { + LogPrintf("CheckForkWarningConditions: Warning: Large valid fork found\n forking the chain at height %d (%s)\n lasting to height %d (%s).\nChain state database corruption likely.\n", + pindexBestForkBase->nHeight, pindexBestForkBase->phashBlock->ToString(), + pindexBestForkTip->nHeight, pindexBestForkTip->phashBlock->ToString()); + fLargeWorkForkFound = true; + } + else + { + LogPrintf("CheckForkWarningConditions: Warning: Found invalid chain at least ~6 blocks longer than our best chain.\nChain state database corruption likely.\n"); + fLargeWorkInvalidChainFound = true; + } + } + else + { + fLargeWorkForkFound = false; + fLargeWorkInvalidChainFound = false; + } +} + +void CheckForkWarningConditionsOnNewFork(CBlockIndex* pindexNewForkTip) +{ + AssertLockHeld(cs_main); + // If we are on a fork that is sufficiently large, set a warning flag + CBlockIndex* pfork = pindexNewForkTip; + CBlockIndex* plonger = chainActive.Tip(); + while (pfork && pfork != plonger) + { + while (plonger && plonger->nHeight > pfork->nHeight) + plonger = plonger->pprev; + if (pfork == plonger) + break; + pfork = pfork->pprev; + } + + // We define a condition which we should warn the user about as a fork of at least 7 blocks + // who's tip is within 72 blocks (+/- 12 hours if no one mines it) of ours + // We use 7 blocks rather arbitrarily as it represents just under 10% of sustained network + // hash rate operating on the fork. + // or a chain that is entirely longer than ours and invalid (note that this should be detected by both) + // We define it this way because it allows us to only store the highest fork tip (+ base) which meets + // the 7-block condition and from this always have the most-likely-to-cause-warning fork + if (pfork && (!pindexBestForkTip || (pindexBestForkTip && pindexNewForkTip->nHeight > pindexBestForkTip->nHeight)) && + pindexNewForkTip->nChainWork - pfork->nChainWork > (pfork->GetBlockWorkAdjusted() * 7).getuint256() && + chainActive.Height() - pindexNewForkTip->nHeight < 72) + { + pindexBestForkTip = pindexNewForkTip; + pindexBestForkBase = pfork; + } + + CheckForkWarningConditions(); +} + +// Requires cs_main. +void Misbehaving(NodeId pnode, int howmuch) +{ + if (howmuch == 0) + return; + + CNodeState *state = State(pnode); + if (state == NULL) + return; + + state->nMisbehavior += howmuch; + if (state->nMisbehavior >= GetArg("-banscore", 100)) + { + LogPrintf("Misbehaving: %s (%d -> %d) BAN THRESHOLD EXCEEDED\n", state->name, state->nMisbehavior-howmuch, state->nMisbehavior); + state->fShouldBan = true; + } else + LogPrintf("Misbehaving: %s (%d -> %d)\n", state->name, state->nMisbehavior-howmuch, state->nMisbehavior); } void static InvalidChainFound(CBlockIndex* pindexNew) { - if (pindexNew->nChainWork > nBestInvalidWork) + if (!pindexBestInvalid || pindexNew->nChainWork > pindexBestInvalid->nChainWork) { - nBestInvalidWork = pindexNew->nChainWork; - pblocktree->WriteBestInvalidWork(CBigNum(nBestInvalidWork)); + pindexBestInvalid = pindexNew; + // The current code doesn't actually read the BestInvalidWork entry in + // the block database anymore, as it is derived from the flags in block + // index entry. We only write it for backward compatibility. + pblocktree->WriteBestInvalidWork(CBigNum(pindexBestInvalid->nChainWork)); uiInterface.NotifyBlocksChanged(); } - printf("InvalidChainFound: invalid block=%s height=%d log2_work=%.8g date=%s\n", - pindexNew->GetBlockHash().ToString().c_str(), pindexNew->nHeight, + LogPrintf("InvalidChainFound: invalid block=%s height=%d log2_work=%.8g date=%s\n", + pindexNew->GetBlockHash().ToString(), pindexNew->nHeight, log(pindexNew->nChainWork.getdouble())/log(2.0), DateTimeStrFormat("%Y-%m-%d %H:%M:%S", - pindexNew->GetBlockTime()).c_str()); - printf("InvalidChainFound: current best=%s height=%d log2_work=%.8g date=%s\n", - hashBestChain.ToString().c_str(), nBestHeight, log(nBestChainWork.getdouble())/log(2.0), - DateTimeStrFormat("%Y-%m-%d %H:%M:%S", pindexBest->GetBlockTime()).c_str()); - if (pindexBest && nBestInvalidWork > nBestChainWork + (pindexBest->GetBlockWorkAdjusted() * 6).getuint256()) - printf("InvalidChainFound: Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade.\n"); + pindexNew->GetBlockTime())); + LogPrintf("InvalidChainFound: current best=%s height=%d log2_work=%.8g date=%s\n", + chainActive.Tip()->GetBlockHash().ToString(), chainActive.Height(), log(chainActive.Tip()->nChainWork.getdouble())/log(2.0), + DateTimeStrFormat("%Y-%m-%d %H:%M:%S", chainActive.Tip()->GetBlockTime())); + CheckForkWarningConditions(); } -void static InvalidBlockFound(CBlockIndex *pindex) { - pindex->nStatus |= BLOCK_FAILED_VALID; - pblocktree->WriteBlockIndex(CDiskBlockIndex(pindex)); - setBlockIndexValid.erase(pindex); - InvalidChainFound(pindex); - if (pindex->GetNextInMainChain()) { - CValidationState stateDummy; - ConnectBestBlock(stateDummy); // reorganise away from the failed block - } -} - -bool ConnectBestBlock(CValidationState &state) { - do { - CBlockIndex *pindexNewBest; - - { - std::set::reverse_iterator it = setBlockIndexValid.rbegin(); - if (it == setBlockIndexValid.rend()) - return true; - pindexNewBest = *it; +void static InvalidBlockFound(CBlockIndex *pindex, const CValidationState &state) { + int nDoS = 0; + if (state.IsInvalid(nDoS)) { + std::map::iterator it = mapBlockSource.find(pindex->GetBlockHash()); + if (it != mapBlockSource.end() && State(it->second)) { + CBlockReject reject = {state.GetRejectCode(), state.GetRejectReason(), pindex->GetBlockHash()}; + State(it->second)->rejects.push_back(reject); + if (nDoS > 0) + Misbehaving(it->second, nDoS); } - - if (pindexNewBest == pindexBest || (pindexBest && pindexNewBest->nChainWork == pindexBest->nChainWork)) - return true; // nothing to do - - // check ancestry - CBlockIndex *pindexTest = pindexNewBest; - std::vector vAttach; - do { - if (pindexTest->nStatus & BLOCK_FAILED_MASK) { - // mark descendants failed - CBlockIndex *pindexFailed = pindexNewBest; - while (pindexTest != pindexFailed) { - pindexFailed->nStatus |= BLOCK_FAILED_CHILD; - setBlockIndexValid.erase(pindexFailed); - pblocktree->WriteBlockIndex(CDiskBlockIndex(pindexFailed)); - pindexFailed = pindexFailed->pprev; - } - InvalidChainFound(pindexNewBest); - break; - } - - if (pindexBest == NULL || pindexTest->nChainWork > pindexBest->nChainWork) - vAttach.push_back(pindexTest); - - if (pindexTest->pprev == NULL || pindexTest->GetNextInMainChain()) { - reverse(vAttach.begin(), vAttach.end()); - BOOST_FOREACH(CBlockIndex *pindexSwitch, vAttach) { - boost::this_thread::interruption_point(); - try { - if (!SetBestChain(state, pindexSwitch)) - return false; - } catch(std::runtime_error &e) { - return state.Abort(_("System error: ") + e.what()); - } - } - return true; - } - pindexTest = pindexTest->pprev; - } while(true); - } while(true); + } + if (!state.CorruptionPossible()) { + pindex->nStatus |= BLOCK_FAILED_VALID; + pblocktree->WriteBlockIndex(CDiskBlockIndex(pindex)); + setBlockIndexValid.erase(pindex); + InvalidChainFound(pindex); + } } void UpdateTime(CBlockHeader& block, const CBlockIndex* pindexPrev) @@ -1539,66 +1532,29 @@ void UpdateTime(CBlockHeader& block, const CBlockIndex* pindexPrev) -const CTxOut &CCoinsViewCache::GetOutputFor(const CTxIn& input) -{ - const CCoins &coins = GetCoins(input.prevout.hash); - assert(coins.IsAvailable(input.prevout.n)); - return coins.vout[input.prevout.n]; -} - -int64 CCoinsViewCache::GetValueIn(const CTransaction& tx) -{ - if (tx.IsCoinBase()) - return 0; - - int64 nResult = 0; - for (unsigned int i = 0; i < tx.vin.size(); i++) - nResult += GetOutputFor(tx.vin[i]).nValue; - - return nResult; -} - void UpdateCoins(const CTransaction& tx, CValidationState &state, CCoinsViewCache &inputs, CTxUndo &txundo, int nHeight, const uint256 &txhash) { + bool ret; // mark inputs spent if (!tx.IsCoinBase()) { BOOST_FOREACH(const CTxIn &txin, tx.vin) { CCoins &coins = inputs.GetCoins(txin.prevout.hash); CTxInUndo undo; - assert(coins.Spend(txin.prevout, undo)); + ret = coins.Spend(txin.prevout, undo); + assert(ret); txundo.vprevout.push_back(undo); } } // add outputs - assert(inputs.SetCoins(txhash, CCoins(tx, nHeight))); -} - -bool CCoinsViewCache::HaveInputs(const CTransaction& tx) -{ - if (!tx.IsCoinBase()) { - // first check whether information about the prevout hash is available - for (unsigned int i = 0; i < tx.vin.size(); i++) { - const COutPoint &prevout = tx.vin[i].prevout; - if (!HaveCoins(prevout.hash)) - return false; - } - - // then check whether the actual outputs are available - for (unsigned int i = 0; i < tx.vin.size(); i++) { - const COutPoint &prevout = tx.vin[i].prevout; - const CCoins &coins = GetCoins(prevout.hash); - if (!coins.IsAvailable(prevout.n)) - return false; - } - } - return true; + ret = inputs.SetCoins(txhash, CCoins(tx, nHeight)); + assert(ret); } bool CScriptCheck::operator()() const { const CScript &scriptSig = ptxTo->vin[nIn].scriptSig; if (!VerifyScript(scriptSig, scriptPubKey, *ptxTo, nIn, nFlags, nHashType)) - return error("CScriptCheck() : %s VerifySignature failed", ptxTo->GetHash().ToString().c_str()); + return error("CScriptCheck() : %s VerifySignature failed", ptxTo->GetHash().ToString()); return true; } @@ -1617,13 +1573,14 @@ bool CheckInputs(const CTransaction& tx, CValidationState &state, CCoinsViewCach // This doesn't trigger the DoS code on purpose; if it did, it would make it easier // for an attacker to attempt to split the network. if (!inputs.HaveInputs(tx)) - return state.Invalid(error("CheckInputs() : %s inputs unavailable", tx.GetHash().ToString().c_str())); + return state.Invalid(error("CheckInputs() : %s inputs unavailable", tx.GetHash().ToString())); // While checking, GetBestBlock() refers to the parent block. // This is also true for mempool checks. - int nSpendHeight = inputs.GetBestBlock()->nHeight + 1; - int64 nValueIn = 0; - int64 nFees = 0; + CBlockIndex *pindexPrev = mapBlockIndex.find(inputs.GetBestBlock())->second; + int nSpendHeight = pindexPrev->nHeight + 1; + int64_t nValueIn = 0; + int64_t nFees = 0; for (unsigned int i = 0; i < tx.vin.size(); i++) { const COutPoint &prevout = tx.vin[i].prevout; @@ -1632,26 +1589,32 @@ bool CheckInputs(const CTransaction& tx, CValidationState &state, CCoinsViewCach // If prev is coinbase, check that it's matured if (coins.IsCoinBase()) { if (nSpendHeight - coins.nHeight < COINBASE_MATURITY) - return state.Invalid(error("CheckInputs() : tried to spend coinbase at depth %d", nSpendHeight - coins.nHeight)); + return state.Invalid( + error("CheckInputs() : tried to spend coinbase at depth %d", nSpendHeight - coins.nHeight), + REJECT_INVALID, "bad-txns-premature-spend-of-coinbase"); } // Check for negative or overflow input values nValueIn += coins.vout[prevout.n].nValue; if (!MoneyRange(coins.vout[prevout.n].nValue) || !MoneyRange(nValueIn)) - return state.DoS(100, error("CheckInputs() : txin values out of range")); + return state.DoS(100, error("CheckInputs() : txin values out of range"), + REJECT_INVALID, "bad-txns-inputvalues-outofrange"); } - if (nValueIn < GetValueOut(tx)) - return state.DoS(100, error("CheckInputs() : %s value in < value out", tx.GetHash().ToString().c_str())); + if (nValueIn < tx.GetValueOut()) + return state.DoS(100, error("CheckInputs() : %s value in < value out", tx.GetHash().ToString()), + REJECT_INVALID, "bad-txns-in-belowout"); // Tally transaction fees - int64 nTxFee = nValueIn - GetValueOut(tx); + int64_t nTxFee = nValueIn - tx.GetValueOut(); if (nTxFee < 0) - return state.DoS(100, error("CheckInputs() : %s nTxFee < 0", tx.GetHash().ToString().c_str())); + return state.DoS(100, error("CheckInputs() : %s nTxFee < 0", tx.GetHash().ToString()), + REJECT_INVALID, "bad-txns-fee-negative"); nFees += nTxFee; if (!MoneyRange(nFees)) - return state.DoS(100, error("CheckInputs() : nFees out of range")); + return state.DoS(100, error("CheckInputs() : nFees out of range"), + REJECT_INVALID, "bad-txns-fee-outofrange"); // The first loop above does all the inexpensive checks. // Only if ALL inputs pass do we perform expensive ECDSA signature checks. @@ -1676,9 +1639,9 @@ bool CheckInputs(const CTransaction& tx, CValidationState &state, CCoinsViewCach // encodings or not; if so, don't trigger DoS protection. CScriptCheck check(coins, tx, i, flags & (~SCRIPT_VERIFY_STRICTENC), 0); if (check()) - return state.Invalid(); + return state.Invalid(false, REJECT_NONSTANDARD, "non-canonical"); } - return state.DoS(100,false); + return state.DoS(100,false, REJECT_NONSTANDARD, "non-canonical"); } } } @@ -1691,7 +1654,7 @@ bool CheckInputs(const CTransaction& tx, CValidationState &state, CCoinsViewCach bool DisconnectBlock(CBlock& block, CValidationState& state, CBlockIndex* pindex, CCoinsViewCache& view, bool* pfClean) { - assert(pindex == view.GetBestBlock()); + assert(pindex->GetBlockHash() == view.GetBestBlock()); if (pfClean) *pfClean = false; @@ -1713,14 +1676,20 @@ bool DisconnectBlock(CBlock& block, CValidationState& state, CBlockIndex* pindex const CTransaction &tx = block.vtx[i]; uint256 hash = tx.GetHash(); - // check that all outputs are available - if (!view.HaveCoins(hash)) { - fClean = fClean && error("DisconnectBlock() : outputs still spent? database corrupted"); - view.SetCoins(hash, CCoins()); - } - CCoins &outs = view.GetCoins(hash); + // Check that all outputs are available and match the outputs in the block itself + // exactly. Note that transactions with only provably unspendable outputs won't + // have outputs available even in the block itself, so we handle that case + // specially with outsEmpty. + CCoins outsEmpty; + CCoins &outs = view.HaveCoins(hash) ? view.GetCoins(hash) : outsEmpty; + outs.ClearUnspendable(); CCoins outsBlock = CCoins(tx, pindex->nHeight); + // The CCoins serialization does not serialize negative numbers. + // No network rules currently depend on the version here, so an inconsistency is harmless + // but it must be corrected before txout nversion ever influences a network rule. + if (outsBlock.nVersion < 0) + outs.nVersion = outsBlock.nVersion; if (outs != outsBlock) fClean = fClean && error("DisconnectBlock() : added transaction mismatch? database corrupted"); @@ -1761,7 +1730,7 @@ bool DisconnectBlock(CBlock& block, CValidationState& state, CBlockIndex* pindex } // move best block pointer to prevout block - view.SetBestBlock(pindex->pprev); + view.SetBestBlock(pindex->pprev->GetBlockHash()); if (pfClean) { *pfClean = fClean; @@ -1805,18 +1774,19 @@ void ThreadScriptCheck() { bool ConnectBlock(CBlock& block, CValidationState& state, CBlockIndex* pindex, CCoinsViewCache& view, bool fJustCheck) { + AssertLockHeld(cs_main); // Check it again in case a previous version let a bad block in if (!CheckBlock(block, state, !fJustCheck, !fJustCheck)) return false; // verify that the view's current state corresponds to the previous block - assert(pindex->pprev == view.GetBestBlock()); + uint256 hashPrevBlock = pindex->pprev == NULL ? uint256(0) : pindex->pprev->GetBlockHash(); + assert(hashPrevBlock == view.GetBestBlock()); // Special case for the genesis block, skipping connection of its transactions // (its coinbase is unspendable) if (block.GetHash() == Params().HashGenesisBlock()) { - view.SetBestBlock(pindex); - pindexGenesisBlock = pindex; + view.SetBestBlock(pindex->GetBlockHash()); return true; } @@ -1834,14 +1804,20 @@ bool ConnectBlock(CBlock& block, CValidationState& state, CBlockIndex* pindex, C // Now that the whole chain is irreversibly beyond that time it is applied to all blocks except the // two in the chain that violate it. This prevents exploiting the issue against nodes in their // initial block download. - for (unsigned int i = 0; i < block.vtx.size(); i++) { - uint256 hash = block.GetTxHash(i); - if (view.HaveCoins(hash) && !view.GetCoins(hash).IsPruned()) - return state.DoS(100, error("ConnectBlock() : tried to overwrite transaction")); + bool fEnforceBIP30 = (!pindex->phashBlock) || // Enforce on CreateNewBlock invocations which don't have a hash. + !((pindex->nHeight==91842 && pindex->GetBlockHash() == uint256("0x00000000000a4d0a398161ffc163c503763b1f4360639393e0e4c8e300e0caec")) || + (pindex->nHeight==91880 && pindex->GetBlockHash() == uint256("0x00000000000743f190a18c5577a3c2d2a1f610ae9601ac046a38084ccb7cd721"))); + if (fEnforceBIP30) { + for (unsigned int i = 0; i < block.vtx.size(); i++) { + uint256 hash = block.GetTxHash(i); + if (view.HaveCoins(hash) && !view.GetCoins(hash).IsPruned()) + return state.DoS(100, error("ConnectBlock() : tried to overwrite transaction"), + REJECT_INVALID, "bad-txns-BIP30"); + } } // BIP16 didn't become active until Apr 1 2012 - int64 nBIP16SwitchTime = 1333238400; + int64_t nBIP16SwitchTime = 1333238400; bool fStrictPayToScriptHash = (pindex->nTime >= nBIP16SwitchTime); unsigned int flags = SCRIPT_VERIFY_NOCACHE | @@ -1851,8 +1827,8 @@ bool ConnectBlock(CBlock& block, CValidationState& state, CBlockIndex* pindex, C CCheckQueueControl control(fScriptChecks && nScriptCheckThreads ? &scriptcheckqueue : NULL); - int64 nStart = GetTimeMicros(); - int64 nFees = 0; + int64_t nStart = GetTimeMicros(); + int64_t nFees = 0; int nInputs = 0; unsigned int nSigOps = 0; CDiskTxPos pos(pindex->GetBlockPos(), GetSizeOfCompactSize(block.vtx.size())); @@ -1865,12 +1841,14 @@ bool ConnectBlock(CBlock& block, CValidationState& state, CBlockIndex* pindex, C nInputs += tx.vin.size(); nSigOps += GetLegacySigOpCount(tx); if (nSigOps > MAX_BLOCK_SIGOPS) - return state.DoS(100, error("ConnectBlock() : too many sigops")); + return state.DoS(100, error("ConnectBlock() : too many sigops"), + REJECT_INVALID, "bad-blk-sigops"); if (!tx.IsCoinBase()) { if (!view.HaveInputs(tx)) - return state.DoS(100, error("ConnectBlock() : inputs missing/spent")); + return state.DoS(100, error("ConnectBlock() : inputs missing/spent"), + REJECT_INVALID, "bad-txns-inputs-missingorspent"); if (fStrictPayToScriptHash) { @@ -1879,10 +1857,11 @@ bool ConnectBlock(CBlock& block, CValidationState& state, CBlockIndex* pindex, C // an incredibly-expensive-to-validate block. nSigOps += GetP2SHSigOpCount(tx, view); if (nSigOps > MAX_BLOCK_SIGOPS) - return state.DoS(100, error("ConnectBlock() : too many sigops")); + return state.DoS(100, error("ConnectBlock() : too many sigops"), + REJECT_INVALID, "bad-blk-sigops"); } - nFees += view.GetValueIn(tx)-GetValueOut(tx); + nFees += view.GetValueIn(tx)-tx.GetValueOut(); std::vector vChecks; if (!CheckInputs(tx, state, view, fScriptChecks, flags, nScriptCheckThreads ? &vChecks : NULL)) @@ -1898,18 +1877,21 @@ bool ConnectBlock(CBlock& block, CValidationState& state, CBlockIndex* pindex, C vPos.push_back(std::make_pair(block.GetTxHash(i), pos)); pos.nTxOffset += ::GetSerializeSize(tx, SER_DISK, CLIENT_VERSION); } - int64 nTime = GetTimeMicros() - nStart; + int64_t nTime = GetTimeMicros() - nStart; if (fBenchmark) - printf("- Connect %u transactions: %.2fms (%.3fms/tx, %.3fms/txin)\n", (unsigned)block.vtx.size(), 0.001 * nTime, 0.001 * nTime / block.vtx.size(), nInputs <= 1 ? 0 : 0.001 * nTime / (nInputs-1)); + LogPrintf("- Connect %u transactions: %.2fms (%.3fms/tx, %.3fms/txin)\n", (unsigned)block.vtx.size(), 0.001 * nTime, 0.001 * nTime / block.vtx.size(), nInputs <= 1 ? 0 : 0.001 * nTime / (nInputs-1)); - if (GetValueOut(block.vtx[0]) > GetBlockValue(pindex->nHeight, nFees)) - return state.DoS(100, error("ConnectBlock() : coinbase pays too much (actual=%"PRI64d" vs limit=%"PRI64d")", GetValueOut(block.vtx[0]), GetBlockValue(pindex->nHeight, nFees))); + if (block.vtx[0].GetValueOut() > GetBlockValue(pindex->nHeight, nFees)) + return state.DoS(100, + error("ConnectBlock() : coinbase pays too much (actual=%d vs limit=%d)", + block.vtx[0].GetValueOut(), GetBlockValue(pindex->nHeight, nFees)), + REJECT_INVALID, "bad-cb-amount"); if (!control.Wait()) return state.DoS(100, false); - int64 nTime2 = GetTimeMicros() - nStart; + int64_t nTime2 = GetTimeMicros() - nStart; if (fBenchmark) - printf("- Verify %u txins: %.2fms (%.3fms/txin)\n", nInputs - 1, 0.001 * nTime2, nInputs <= 1 ? 0 : 0.001 * nTime2 / (nInputs-1)); + LogPrintf("- Verify %u txins: %.2fms (%.3fms/txin)\n", nInputs - 1, 0.001 * nTime2, nInputs <= 1 ? 0 : 0.001 * nTime2 / (nInputs-1)); if (fJustCheck) return true; @@ -1941,170 +1923,59 @@ bool ConnectBlock(CBlock& block, CValidationState& state, CBlockIndex* pindex, C return state.Abort(_("Failed to write transaction index")); // add this block to the view's block chain - assert(view.SetBestBlock(pindex)); + bool ret; + ret = view.SetBestBlock(pindex->GetBlockHash()); + assert(ret); // Watch for transactions paying to me for (unsigned int i = 0; i < block.vtx.size(); i++) - SyncWithWallets(block.GetTxHash(i), block.vtx[i], &block, true); + g_signals.SyncTransaction(block.GetTxHash(i), block.vtx[i], &block); return true; } -bool SetBestChain(CValidationState &state, CBlockIndex* pindexNew) -{ - // All modifications to the coin state will be done in this cache. - // Only when all have succeeded, we push it to pcoinsTip. - CCoinsViewCache view(*pcoinsTip, true); - - // Find the fork (typically, there is none) - CBlockIndex* pfork = view.GetBestBlock(); - CBlockIndex* plonger = pindexNew; - while (pfork && pfork != plonger) - { - while (plonger->nHeight > pfork->nHeight) { - plonger = plonger->pprev; - assert(plonger != NULL); - } - if (pfork == plonger) - break; - pfork = pfork->pprev; - assert(pfork != NULL); - } - - // List of what to disconnect (typically nothing) - vector vDisconnect; - for (CBlockIndex* pindex = view.GetBestBlock(); pindex != pfork; pindex = pindex->pprev) - vDisconnect.push_back(pindex); - - // List of what to connect (typically only pindexNew) - vector vConnect; - for (CBlockIndex* pindex = pindexNew; pindex != pfork; pindex = pindex->pprev) - vConnect.push_back(pindex); - reverse(vConnect.begin(), vConnect.end()); - - if (vDisconnect.size() > 0) { - printf("REORGANIZE: Disconnect %"PRIszu" blocks; %s..\n", vDisconnect.size(), pfork->GetBlockHash().ToString().c_str()); - printf("REORGANIZE: Connect %"PRIszu" blocks; ..%s\n", vConnect.size(), pindexNew->GetBlockHash().ToString().c_str()); - } - - // Disconnect shorter branch - vector vResurrect; - BOOST_FOREACH(CBlockIndex* pindex, vDisconnect) { - CBlock block; - if (!ReadBlockFromDisk(block, pindex)) - return state.Abort(_("Failed to read block")); - int64 nStart = GetTimeMicros(); - if (!DisconnectBlock(block, state, pindex, view)) - return error("SetBestBlock() : DisconnectBlock %s failed", pindex->GetBlockHash().ToString().c_str()); - if (fBenchmark) - printf("- Disconnect: %.2fms\n", (GetTimeMicros() - nStart) * 0.001); - - // Queue memory transactions to resurrect. - // We only do this for blocks after the last checkpoint (reorganisation before that - // point should only happen with -reindex/-loadblock, or a misbehaving peer. - BOOST_FOREACH(const CTransaction& tx, block.vtx) - if (!tx.IsCoinBase() && pindex->nHeight > Checkpoints::GetTotalBlocksEstimate()) - vResurrect.push_back(tx); - } - - // Connect longer branch - vector vDelete; - BOOST_FOREACH(CBlockIndex *pindex, vConnect) { - CBlock block; - if (!ReadBlockFromDisk(block, pindex)) - return state.Abort(_("Failed to read block")); - int64 nStart = GetTimeMicros(); - if (!ConnectBlock(block, state, pindex, view)) { - if (state.IsInvalid()) { - InvalidChainFound(pindexNew); - InvalidBlockFound(pindex); - } - return error("SetBestBlock() : ConnectBlock %s failed", pindex->GetBlockHash().ToString().c_str()); - } - if (fBenchmark) - printf("- Connect: %.2fms\n", (GetTimeMicros() - nStart) * 0.001); - - // Queue memory transactions to delete - BOOST_FOREACH(const CTransaction& tx, block.vtx) - vDelete.push_back(tx); - } - - // Flush changes to global coin state - int64 nStart = GetTimeMicros(); - int nModified = view.GetCacheSize(); - assert(view.Flush()); - int64 nTime = GetTimeMicros() - nStart; - if (fBenchmark) - printf("- Flush %i transactions: %.2fms (%.4fms/tx)\n", nModified, 0.001 * nTime, 0.001 * nTime / nModified); - - // Make sure it's successfully written to disk before changing memory structure - bool fIsInitialDownload = IsInitialBlockDownload(); - if (!fIsInitialDownload || pcoinsTip->GetCacheSize() > nCoinCacheSize) { +// Update the on-disk chain state. +bool static WriteChainState(CValidationState &state) { + static int64_t nLastWrite = 0; + if (!IsInitialBlockDownload() || pcoinsTip->GetCacheSize() > nCoinCacheSize || GetTimeMicros() > nLastWrite + 600*1000000) { // 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())) - return state.Error(); + return state.Error("out of disk space"); FlushBlockFile(); pblocktree->Sync(); if (!pcoinsTip->Flush()) return state.Abort(_("Failed to write to coin database")); + nLastWrite = GetTimeMicros(); } + return true; +} - // At this point, all changes have been done to the database. - // Proceed by updating the memory structures. - - // Register new best chain - vBlockIndexByHeight.resize(pindexNew->nHeight + 1); - BOOST_FOREACH(CBlockIndex* pindex, vConnect) - vBlockIndexByHeight[pindex->nHeight] = pindex; - - // Resurrect memory transactions that were in the disconnected branch - BOOST_FOREACH(CTransaction& tx, vResurrect) { - // ignore validation errors in resurrected transactions - CValidationState stateDummy; - mempool.accept(stateDummy, tx, false, NULL); - } - - // Delete redundant memory transactions that are in the connected branch - BOOST_FOREACH(CTransaction& tx, vDelete) { - mempool.remove(tx); - mempool.removeConflicts(tx); - } +// Update chainActive and related internal data structures. +void static UpdateTip(CBlockIndex *pindexNew) { + chainActive.SetTip(pindexNew); // Update best block in wallet (so we can detect restored wallets) - if ((pindexNew->nHeight % 20160) == 0 || (!fIsInitialDownload && (pindexNew->nHeight % 144) == 0)) - { - const CBlockLocator locator(pindexNew); - ::SetBestChain(locator); - } + bool fIsInitialDownload = IsInitialBlockDownload(); + if ((chainActive.Height() % 20160) == 0 || (!fIsInitialDownload && (chainActive.Height() % 144) == 0)) + g_signals.SetBestChain(chainActive.GetLocator()); // New best block - hashBestChain = pindexNew->GetBlockHash(); - pindexBest = pindexNew; - pblockindexFBBHLast = NULL; - nBestHeight = pindexBest->nHeight; - nBestChainWork = pindexNew->nChainWork; nTimeBestReceived = GetTime(); - nTransactionsUpdated++; - printf("SetBestChain: new best=%s height=%d pow_algo=%d block_work=%s log2_work=%.8g tx=%lu date=%s progress=%f\n", - hashBestChain.ToString().c_str(), - nBestHeight, - pindexNew->GetAlgo(), - pindexNew->GetBlockWorkAdjusted().ToString().c_str(), - log(nBestChainWork.getdouble())/log(2.0), - (unsigned long)pindexNew->nChainTx, - DateTimeStrFormat("%Y-%m-%d %H:%M:%S", pindexBest->GetBlockTime()).c_str(), - Checkpoints::GuessVerificationProgress(pindexBest)); + mempool.AddTransactionsUpdated(1); + LogPrintf("UpdateTip: new best=%s height=%d log2_work=%.8g tx=%lu date=%s progress=%f\n", + chainActive.Tip()->GetBlockHash().ToString(), chainActive.Height(), log(chainActive.Tip()->nChainWork.getdouble())/log(2.0), (unsigned long)chainActive.Tip()->nChainTx, + DateTimeStrFormat("%Y-%m-%d %H:%M:%S", chainActive.Tip()->GetBlockTime()), + Checkpoints::GuessVerificationProgress(chainActive.Tip())); // Check the version of the last 100 blocks to see if we need to upgrade: - /* if (!fIsInitialDownload) { int nUpgraded = 0; - const CBlockIndex* pindex = pindexBest; + const CBlockIndex* pindex = chainActive.Tip(); for (int i = 0; i < 100 && pindex != NULL; i++) { if (pindex->nVersion > CBlock::CURRENT_VERSION) @@ -2112,35 +1983,219 @@ bool SetBestChain(CValidationState &state, CBlockIndex* pindexNew) pindex = pindex->pprev; } if (nUpgraded > 0) - printf("SetBestChain: %d of last 100 blocks above version %d\n", nUpgraded, CBlock::CURRENT_VERSION); + LogPrintf("SetBestChain: %d of last 100 blocks above version %d\n", nUpgraded, (int)CBlock::CURRENT_VERSION); if (nUpgraded > 100/2) // strMiscWarning is read by GetWarnings(), called by Qt and the JSON-RPC code to warn the user: strMiscWarning = _("Warning: This version is obsolete, upgrade required!"); } - */ +} - std::string strCmd = GetArg("-blocknotify", ""); - - if (!fIsInitialDownload && !strCmd.empty()) +// Disconnect chainActive's tip. +bool static DisconnectTip(CValidationState &state) { + CBlockIndex *pindexDelete = chainActive.Tip(); + assert(pindexDelete); + mempool.check(pcoinsTip); + // Read block from disk. + CBlock block; + if (!ReadBlockFromDisk(block, pindexDelete)) + return state.Abort(_("Failed to read block")); + // Apply the block atomically to the chain state. + int64_t nStart = GetTimeMicros(); { - boost::replace_all(strCmd, "%s", hashBestChain.GetHex()); - boost::thread t(runCommand, strCmd); // thread runs free + CCoinsViewCache view(*pcoinsTip, true); + if (!DisconnectBlock(block, state, pindexDelete, view)) + return error("DisconnectTip() : DisconnectBlock %s failed", pindexDelete->GetBlockHash().ToString()); + assert(view.Flush()); + } + if (fBenchmark) + LogPrintf("- Disconnect: %.2fms\n", (GetTimeMicros() - nStart) * 0.001); + // Write the chain state to disk, if necessary. + if (!WriteChainState(state)) + return false; + // Resurrect mempool transactions from the disconnected block. + BOOST_FOREACH(const CTransaction &tx, block.vtx) { + // ignore validation errors in resurrected transactions + list removed; + CValidationState stateDummy; + if (!tx.IsCoinBase()) + if (!AcceptToMemoryPool(mempool, stateDummy, tx, false, NULL)) + mempool.remove(tx, removed, true); + } + mempool.check(pcoinsTip); + // Update chainActive and related variables. + UpdateTip(pindexDelete->pprev); + // Let wallets know transactions went from 1-confirmed to + // 0-confirmed or conflicted: + BOOST_FOREACH(const CTransaction &tx, block.vtx) { + SyncWithWallets(tx.GetHash(), tx, NULL); + } + return true; +} + +// Connect a new block to chainActive. +bool static ConnectTip(CValidationState &state, CBlockIndex *pindexNew) { + assert(pindexNew->pprev == chainActive.Tip()); + mempool.check(pcoinsTip); + // Read block from disk. + CBlock block; + if (!ReadBlockFromDisk(block, pindexNew)) + return state.Abort(_("Failed to read block")); + // Apply the block atomically to the chain state. + int64_t nStart = GetTimeMicros(); + { + CCoinsViewCache view(*pcoinsTip, true); + CInv inv(MSG_BLOCK, pindexNew->GetBlockHash()); + if (!ConnectBlock(block, state, pindexNew, view)) { + if (state.IsInvalid()) + InvalidBlockFound(pindexNew, state); + return error("ConnectTip() : ConnectBlock %s failed", pindexNew->GetBlockHash().ToString()); + } + mapBlockSource.erase(inv.hash); + assert(view.Flush()); + } + if (fBenchmark) + LogPrintf("- Connect: %.2fms\n", (GetTimeMicros() - nStart) * 0.001); + // Write the chain state to disk, if necessary. + if (!WriteChainState(state)) + return false; + // Remove conflicting transactions from the mempool. + list txConflicted; + BOOST_FOREACH(const CTransaction &tx, block.vtx) { + list unused; + mempool.remove(tx, unused); + mempool.removeConflicts(tx, txConflicted); + } + mempool.check(pcoinsTip); + // Update chainActive & related variables. + UpdateTip(pindexNew); + // Tell wallet about transactions that went from mempool + // to conflicted: + BOOST_FOREACH(const CTransaction &tx, txConflicted) { + SyncWithWallets(tx.GetHash(), tx, NULL); + } + // ... and about transactions that got confirmed: + BOOST_FOREACH(const CTransaction &tx, block.vtx) { + SyncWithWallets(tx.GetHash(), tx, &block); + } + return true; +} + +// Make chainMostWork correspond to the chain with the most work in it, that isn't +// known to be invalid (it's however far from certain to be valid). +void static FindMostWorkChain() { + CBlockIndex *pindexNew = NULL; + + // In case the current best is invalid, do not consider it. + while (chainMostWork.Tip() && (chainMostWork.Tip()->nStatus & BLOCK_FAILED_MASK)) { + setBlockIndexValid.erase(chainMostWork.Tip()); + chainMostWork.SetTip(chainMostWork.Tip()->pprev); + } + + do { + // Find the best candidate header. + { + std::set::reverse_iterator it = setBlockIndexValid.rbegin(); + if (it == setBlockIndexValid.rend()) + return; + pindexNew = *it; + } + + // Check whether all blocks on the path between the currently active chain and the candidate are valid. + // Just going until the active chain is an optimization, as we know all blocks in it are valid already. + CBlockIndex *pindexTest = pindexNew; + bool fInvalidAncestor = false; + while (pindexTest && !chainActive.Contains(pindexTest)) { + if (pindexTest->nStatus & BLOCK_FAILED_MASK) { + // Candidate has an invalid ancestor, remove entire chain from the set. + if (pindexBestInvalid == NULL || pindexNew->nChainWork > pindexBestInvalid->nChainWork) + pindexBestInvalid = pindexNew; CBlockIndex *pindexFailed = pindexNew; + while (pindexTest != pindexFailed) { + pindexFailed->nStatus |= BLOCK_FAILED_CHILD; + setBlockIndexValid.erase(pindexFailed); + pindexFailed = pindexFailed->pprev; + } + fInvalidAncestor = true; + break; + } + pindexTest = pindexTest->pprev; + } + if (fInvalidAncestor) + continue; + + break; + } while(true); + + // Check whether it's actually an improvement. + if (chainMostWork.Tip() && !CBlockIndexWorkComparator()(chainMostWork.Tip(), pindexNew)) + return; + + // We have a new best. + chainMostWork.SetTip(pindexNew); +} + +// Try to activate to the most-work chain (thereby connecting it). +bool ActivateBestChain(CValidationState &state) { + LOCK(cs_main); + CBlockIndex *pindexOldTip = chainActive.Tip(); + bool fComplete = false; + while (!fComplete) { + FindMostWorkChain(); + fComplete = true; + + // Check whether we have something to do. + if (chainMostWork.Tip() == NULL) break; + + // Disconnect active blocks which are no longer in the best chain. + while (chainActive.Tip() && !chainMostWork.Contains(chainActive.Tip())) { + if (!DisconnectTip(state)) + return false; + } + + // Connect new blocks. + while (!chainActive.Contains(chainMostWork.Tip())) { + CBlockIndex *pindexConnect = chainMostWork[chainActive.Height() + 1]; + if (!ConnectTip(state, pindexConnect)) { + if (state.IsInvalid()) { + // The block violates a consensus rule. + if (!state.CorruptionPossible()) + InvalidChainFound(chainMostWork.Tip()); + fComplete = false; + state = CValidationState(); + break; + } else { + // A system error occurred (disk space, database error, ...). + return false; + } + } + } + } + + if (chainActive.Tip() != pindexOldTip) { + std::string strCmd = GetArg("-blocknotify", ""); + if (!IsInitialBlockDownload() && !strCmd.empty()) + { + boost::replace_all(strCmd, "%s", chainActive.Tip()->GetBlockHash().GetHex()); + boost::thread t(runCommand, strCmd); // thread runs free + } } return true; } - bool AddToBlockIndex(CBlock& block, CValidationState& state, const CDiskBlockPos& pos) { // Check for duplicate uint256 hash = block.GetHash(); if (mapBlockIndex.count(hash)) - return state.Invalid(error("AddToBlockIndex() : %s already exists", hash.ToString().c_str())); + return state.Invalid(error("AddToBlockIndex() : %s already exists", hash.ToString()), 0, "duplicate"); // Construct new block index object CBlockIndex* pindexNew = new CBlockIndex(block); assert(pindexNew); + { + LOCK(cs_nBlockSequenceId); + pindexNew->nSequenceId = nBlockSequenceId++; + } map::iterator mi = mapBlockIndex.insert(make_pair(hash, pindexNew)).first; pindexNew->phashBlock = &((*mi).first); map::iterator miPrev = mapBlockIndex.find(block.hashPrevBlock); @@ -2162,16 +2217,20 @@ bool AddToBlockIndex(CBlock& block, CValidationState& state, const CDiskBlockPos return state.Abort(_("Failed to write block index")); // New best? - if (!ConnectBestBlock(state)) + if (!ActivateBestChain(state)) return false; - if (pindexNew == pindexBest) + LOCK(cs_main); + if (pindexNew == chainActive.Tip()) { + // Clear fork warning if its no longer applicable + CheckForkWarningConditions(); // Notify UI to display prev block's coinbase if it was ours static uint256 hashPrevBestCoinBase; - UpdatedTransaction(hashPrevBestCoinBase); + g_signals.UpdatedTransaction(hashPrevBestCoinBase); hashPrevBestCoinBase = block.GetTxHash(0); - } + } else + CheckForkWarningConditionsOnNewFork(pindexNew); if (!pblocktree->Flush()) return state.Abort(_("Failed to sync block index")); @@ -2181,7 +2240,7 @@ bool AddToBlockIndex(CBlock& block, CValidationState& state, const CDiskBlockPos } -bool FindBlockPos(CValidationState &state, CDiskBlockPos &pos, unsigned int nAddSize, unsigned int nHeight, uint64 nTime, bool fKnown = false) +bool FindBlockPos(CValidationState &state, CDiskBlockPos &pos, unsigned int nAddSize, unsigned int nHeight, uint64_t nTime, bool fKnown = false) { bool fUpdatedLast = false; @@ -2196,7 +2255,7 @@ bool FindBlockPos(CValidationState &state, CDiskBlockPos &pos, unsigned int nAdd } } else { while (infoLastBlockFile.nSize + nAddSize >= MAX_BLOCKFILE_SIZE) { - printf("Leaving block file %i: %s\n", nLastBlockFile, infoLastBlockFile.ToString().c_str()); + LogPrintf("Leaving block file %i: %s\n", nLastBlockFile, infoLastBlockFile.ToString()); FlushBlockFile(true); nLastBlockFile++; infoLastBlockFile.SetNull(); @@ -2217,13 +2276,13 @@ bool FindBlockPos(CValidationState &state, CDiskBlockPos &pos, unsigned int nAdd if (CheckDiskSpace(nNewChunks * BLOCKFILE_CHUNK_SIZE - pos.nPos)) { FILE *file = OpenBlockFile(pos); if (file) { - printf("Pre-allocating up to position 0x%x in blk%05u.dat\n", nNewChunks * BLOCKFILE_CHUNK_SIZE, pos.nFile); + LogPrintf("Pre-allocating up to position 0x%x in blk%05u.dat\n", nNewChunks * BLOCKFILE_CHUNK_SIZE, pos.nFile); AllocateFileRange(file, pos.nPos, nNewChunks * BLOCKFILE_CHUNK_SIZE - pos.nPos); fclose(file); } } else - return state.Error(); + return state.Error("out of disk space"); } } @@ -2263,13 +2322,13 @@ bool FindUndoPos(CValidationState &state, int nFile, CDiskBlockPos &pos, unsigne if (CheckDiskSpace(nNewChunks * UNDOFILE_CHUNK_SIZE - pos.nPos)) { FILE *file = OpenUndoFile(pos); if (file) { - printf("Pre-allocating up to position 0x%x in rev%05u.dat\n", nNewChunks * UNDOFILE_CHUNK_SIZE, pos.nFile); + LogPrintf("Pre-allocating up to position 0x%x in rev%05u.dat\n", nNewChunks * UNDOFILE_CHUNK_SIZE, pos.nFile); AllocateFileRange(file, pos.nPos, nNewChunks * UNDOFILE_CHUNK_SIZE - pos.nPos); fclose(file); } } else - return state.Error(); + return state.Error("out of disk space"); } return true; @@ -2283,22 +2342,27 @@ bool CheckBlock(const CBlock& block, CValidationState& state, bool fCheckPOW, bo // Size limits if (block.vtx.empty() || block.vtx.size() > MAX_BLOCK_SIZE || ::GetSerializeSize(block, SER_NETWORK, PROTOCOL_VERSION) > MAX_BLOCK_SIZE) - return state.DoS(100, error("CheckBlock() : size limits failed")); + return state.DoS(100, error("CheckBlock() : size limits failed"), + REJECT_INVALID, "bad-blk-length"); // Check proof of work matches claimed amount if (fCheckPOW && !CheckProofOfWork(block.GetPoWHash(block.GetAlgo()), block.nBits, block.GetAlgo())) - return state.DoS(50, error("CheckBlock() : proof of work failed")); + return state.DoS(50, error("CheckBlock() : proof of work failed"), + REJECT_INVALID, "high-hash"); // Check timestamp if (block.GetBlockTime() > GetAdjustedTime() + 2 * 60 * 60) - return state.Invalid(error("CheckBlock() : block timestamp too far in the future")); + return state.Invalid(error("CheckBlock() : block timestamp too far in the future"), + REJECT_INVALID, "time-too-new"); // First transaction must be coinbase, the rest must not be if (block.vtx.empty() || !block.vtx[0].IsCoinBase()) - return state.DoS(100, error("CheckBlock() : first tx is not coinbase")); + return state.DoS(100, error("CheckBlock() : first tx is not coinbase"), + REJECT_INVALID, "bad-cb-missing"); for (unsigned int i = 1; i < block.vtx.size(); i++) if (block.vtx[i].IsCoinBase()) - return state.DoS(100, error("CheckBlock() : more than one coinbase")); + return state.DoS(100, error("CheckBlock() : more than one coinbase"), + REJECT_INVALID, "bad-cb-multiple"); // Check transactions BOOST_FOREACH(const CTransaction& tx, block.vtx) @@ -2317,7 +2381,8 @@ bool CheckBlock(const CBlock& block, CValidationState& state, bool fCheckPOW, bo uniqueTx.insert(block.GetTxHash(i)); } if (uniqueTx.size() != block.vtx.size()) - return state.DoS(100, error("CheckBlock() : duplicate transaction")); + return state.DoS(100, error("CheckBlock() : duplicate transaction"), + REJECT_INVALID, "bad-txns-duplicate", true); unsigned int nSigOps = 0; BOOST_FOREACH(const CTransaction& tx, block.vtx) @@ -2325,21 +2390,24 @@ bool CheckBlock(const CBlock& block, CValidationState& state, bool fCheckPOW, bo nSigOps += GetLegacySigOpCount(tx); } if (nSigOps > MAX_BLOCK_SIGOPS) - return state.DoS(100, error("CheckBlock() : out-of-bounds SigOpCount")); + return state.DoS(100, error("CheckBlock() : out-of-bounds SigOpCount"), + REJECT_INVALID, "bad-blk-sigops", true); // Check merkle root - if (fCheckMerkleRoot && block.hashMerkleRoot != block.BuildMerkleTree()) - return state.DoS(100, error("CheckBlock() : hashMerkleRoot mismatch")); + if (fCheckMerkleRoot && block.hashMerkleRoot != block.vMerkleTree.back()) + return state.DoS(100, error("CheckBlock() : hashMerkleRoot mismatch"), + REJECT_INVALID, "bad-txnmrklroot", true); return true; } bool AcceptBlock(CBlock& block, CValidationState& state, CDiskBlockPos* dbp) { + AssertLockHeld(cs_main); // Check for duplicate uint256 hash = block.GetHash(); if (mapBlockIndex.count(hash)) - return state.Invalid(error("AcceptBlock() : block already in mapBlockIndex")); + return state.Invalid(error("AcceptBlock() : block already in mapBlockIndex"), 0, "duplicate"); // Get prev block index CBlockIndex* pindexPrev = NULL; @@ -2347,35 +2415,44 @@ bool AcceptBlock(CBlock& block, CValidationState& state, CDiskBlockPos* dbp) if (hash != Params().HashGenesisBlock()) { map::iterator mi = mapBlockIndex.find(block.hashPrevBlock); if (mi == mapBlockIndex.end()) - return state.DoS(10, error("AcceptBlock() : prev block not found")); + return state.DoS(10, error("AcceptBlock() : prev block not found"), 0, "bad-prevblk"); pindexPrev = (*mi).second; nHeight = pindexPrev->nHeight+1; // Check proof of work if (block.nBits != GetNextWorkRequired(pindexPrev, &block, block.GetAlgo())) - return state.DoS(100, error("AcceptBlock() : incorrect proof of work")); + return state.DoS(100, error("AcceptBlock() : incorrect proof of work"), + REJECT_INVALID, "bad-diffbits"); // Check timestamp against prev if (block.GetBlockTime() <= pindexPrev->GetMedianTimePast()) - return state.Invalid(error("AcceptBlock() : block's timestamp is too early")); + return state.Invalid(error("AcceptBlock() : block's timestamp is too early"), + REJECT_INVALID, "time-too-old"); // Check that all transactions are finalized BOOST_FOREACH(const CTransaction& tx, block.vtx) if (!IsFinalTx(tx, nHeight, block.GetBlockTime())) - return state.DoS(10, error("AcceptBlock() : contains a non-final transaction")); + return state.DoS(10, error("AcceptBlock() : contains a non-final transaction"), + REJECT_INVALID, "bad-txns-nonfinal"); // Check that the block chain matches the known block chain up to a checkpoint if (!Checkpoints::CheckBlock(nHeight, hash)) - return state.DoS(100, error("AcceptBlock() : rejected by checkpoint lock-in at %d", nHeight)); + return state.DoS(100, error("AcceptBlock() : rejected by checkpoint lock-in at %d", nHeight), + REJECT_CHECKPOINT, "checkpoint mismatch"); + + // Don't accept any forks from the main chain prior to last checkpoint + CBlockIndex* pcheckpoint = Checkpoints::GetLastCheckpoint(mapBlockIndex); + if (pcheckpoint && nHeight < pcheckpoint->nHeight) + return state.DoS(100, error("AcceptBlock() : forked chain older than last checkpoint (height %d)", nHeight)); - /* // Reject block.nVersion=1 blocks when 95% (75% on testnet) of the network has upgraded: if (block.nVersion < 2) { if ((!TestNet() && CBlockIndex::IsSuperMajority(2, pindexPrev, 950, 1000)) || (TestNet() && CBlockIndex::IsSuperMajority(2, pindexPrev, 75, 100))) { - return state.Invalid(error("AcceptBlock() : rejected nVersion=1 block")); + return state.Invalid(error("AcceptBlock() : rejected nVersion=1 block"), + REJECT_OBSOLETE, "bad-version"); } } // Enforce block.nVersion=2 rule that the coinbase starts with serialized block height @@ -2386,11 +2463,12 @@ bool AcceptBlock(CBlock& block, CValidationState& state, CDiskBlockPos* dbp) (TestNet() && CBlockIndex::IsSuperMajority(2, pindexPrev, 51, 100))) { CScript expect = CScript() << nHeight; - if (!std::equal(expect.begin(), expect.end(), block.vtx[0].vin[0].scriptSig.begin())) - return state.DoS(100, error("AcceptBlock() : block height mismatch in coinbase")); + if (block.vtx[0].vin[0].scriptSig.size() < expect.size() || + !std::equal(expect.begin(), expect.end(), block.vtx[0].vin[0].scriptSig.begin())) + return state.DoS(100, error("AcceptBlock() : block height mismatch in coinbase"), + REJECT_INVALID, "bad-cb-height"); } } - */ } // Write block to history file @@ -2412,18 +2490,17 @@ bool AcceptBlock(CBlock& block, CValidationState& state, CDiskBlockPos* dbp) // Relay inventory, but don't relay old inventory during initial block download int nBlockEstimate = Checkpoints::GetTotalBlocksEstimate(); - if (hashBestChain == hash) + if (chainActive.Tip()->GetBlockHash() == hash) { LOCK(cs_vNodes); BOOST_FOREACH(CNode* pnode, vNodes) - if (nBestHeight > (pnode->nStartingHeight != -1 ? pnode->nStartingHeight - 2000 : nBlockEstimate)) + if (chainActive.Height() > (pnode->nStartingHeight != -1 ? pnode->nStartingHeight - 2000 : nBlockEstimate)) pnode->PushInventory(CInv(MSG_BLOCK, hash)); } return true; } -/* bool CBlockIndex::IsSuperMajority(int minVersion, const CBlockIndex* pstart, unsigned int nRequired, unsigned int nToCheck) { unsigned int nFound = 0; @@ -2435,40 +2512,56 @@ bool CBlockIndex::IsSuperMajority(int minVersion, const CBlockIndex* pstart, uns } return (nFound >= nRequired); } -*/ + +int64_t CBlockIndex::GetMedianTime() const +{ + AssertLockHeld(cs_main); + const CBlockIndex* pindex = this; + for (int i = 0; i < nMedianTimeSpan/2; i++) + { + if (!chainActive.Next(pindex)) + return GetBlockTime(); + pindex = chainActive.Next(pindex); + } + return pindex->GetMedianTimePast(); +} void PushGetBlocks(CNode* pnode, CBlockIndex* pindexBegin, uint256 hashEnd) { + AssertLockHeld(cs_main); // Filter out duplicate requests if (pindexBegin == pnode->pindexLastGetBlocksBegin && hashEnd == pnode->hashLastGetBlocksEnd) return; pnode->pindexLastGetBlocksBegin = pindexBegin; pnode->hashLastGetBlocksEnd = hashEnd; - pnode->PushMessage("getblocks", CBlockLocator(pindexBegin), hashEnd); + pnode->PushMessage("getblocks", chainActive.GetLocator(pindexBegin), hashEnd); } bool ProcessBlock(CValidationState &state, CNode* pfrom, CBlock* pblock, CDiskBlockPos *dbp) { + AssertLockHeld(cs_main); + // Check for duplicate uint256 hash = pblock->GetHash(); if (mapBlockIndex.count(hash)) - return state.Invalid(error("ProcessBlock() : already have block %d %s", mapBlockIndex[hash]->nHeight, hash.ToString().c_str())); + return state.Invalid(error("ProcessBlock() : already have block %d %s", mapBlockIndex[hash]->nHeight, hash.ToString()), 0, "duplicate"); if (mapOrphanBlocks.count(hash)) - return state.Invalid(error("ProcessBlock() : already have block (orphan) %s", hash.ToString().c_str())); + return state.Invalid(error("ProcessBlock() : already have block (orphan) %s", hash.ToString()), 0, "duplicate"); // Preliminary checks if (!CheckBlock(*pblock, state)) return error("ProcessBlock() : CheckBlock FAILED"); CBlockIndex* pcheckpoint = Checkpoints::GetLastCheckpoint(mapBlockIndex); - if (pcheckpoint && pblock->hashPrevBlock != hashBestChain) + if (pcheckpoint && pblock->hashPrevBlock != (chainActive.Tip() ? chainActive.Tip()->GetBlockHash() : uint256(0))) { // Extra checks to prevent "fill up memory by spamming with bogus blocks" - int64 deltaTime = pblock->GetBlockTime() - pcheckpoint->nTime; + int64_t deltaTime = pblock->GetBlockTime() - pcheckpoint->nTime; if (deltaTime < 0) { - return state.DoS(100, error("ProcessBlock() : block with timestamp before last checkpoint")); + return state.DoS(100, error("ProcessBlock() : block with timestamp before last checkpoint"), + REJECT_CHECKPOINT, "time-too-old"); } CBigNum bnNewBlock; bnNewBlock.SetCompact(pblock->nBits); @@ -2476,7 +2569,8 @@ bool ProcessBlock(CValidationState &state, CNode* pfrom, CBlock* pblock, CDiskBl bnRequired.SetCompact(ComputeMinWork(pcheckpoint->nBits, deltaTime)); if (bnNewBlock > bnRequired) { - return state.DoS(100, error("ProcessBlock() : block with too little proof-of-work")); + return state.DoS(100, error("ProcessBlock() : block with too little proof-of-work"), + REJECT_INVALID, "bad-diffbits"); } } @@ -2484,16 +2578,24 @@ bool ProcessBlock(CValidationState &state, CNode* pfrom, CBlock* pblock, CDiskBl // If we don't already have its previous block, shunt it off to holding area until we get it if (pblock->hashPrevBlock != 0 && !mapBlockIndex.count(pblock->hashPrevBlock)) { - printf("ProcessBlock: ORPHAN BLOCK, prev=%s\n", pblock->hashPrevBlock.ToString().c_str()); + LogPrintf("ProcessBlock: ORPHAN BLOCK %lu, prev=%s\n", (unsigned long)mapOrphanBlocks.size(), pblock->hashPrevBlock.ToString()); // Accept orphans as long as there is a node to request its parents from if (pfrom) { - CBlock* pblock2 = new CBlock(*pblock); + PruneOrphanBlocks(); + COrphanBlock* pblock2 = new COrphanBlock(); + { + CDataStream ss(SER_DISK, CLIENT_VERSION); + ss << *pblock; + pblock2->vchBlock = std::vector(ss.begin(), ss.end()); + } + pblock2->hashBlock = hash; + pblock2->hashPrev = pblock->hashPrevBlock; mapOrphanBlocks.insert(make_pair(hash, pblock2)); - mapOrphanBlocksByPrev.insert(make_pair(pblock2->hashPrevBlock, pblock2)); + mapOrphanBlocksByPrev.insert(make_pair(pblock2->hashPrev, pblock2)); // Ask this guy to fill in what we're missing - PushGetBlocks(pfrom, pindexBest, GetOrphanRoot(pblock2)); + PushGetBlocks(pfrom, chainActive.Tip(), GetOrphanRoot(hash)); } return true; } @@ -2508,22 +2610,27 @@ bool ProcessBlock(CValidationState &state, CNode* pfrom, CBlock* pblock, CDiskBl for (unsigned int i = 0; i < vWorkQueue.size(); i++) { uint256 hashPrev = vWorkQueue[i]; - for (multimap::iterator mi = mapOrphanBlocksByPrev.lower_bound(hashPrev); + for (multimap::iterator mi = mapOrphanBlocksByPrev.lower_bound(hashPrev); mi != mapOrphanBlocksByPrev.upper_bound(hashPrev); ++mi) { - CBlock* pblockOrphan = (*mi).second; + CBlock block; + { + CDataStream ss(mi->second->vchBlock, SER_DISK, CLIENT_VERSION); + ss >> block; + } + block.BuildMerkleTree(); // Use a dummy CValidationState so someone can't setup nodes to counter-DoS based on orphan resolution (that is, feeding people an invalid block based on LegitBlockX in order to get anyone relaying LegitBlockX banned) CValidationState stateDummy; - if (AcceptBlock(*pblockOrphan, stateDummy)) - vWorkQueue.push_back(pblockOrphan->GetHash()); - mapOrphanBlocks.erase(pblockOrphan->GetHash()); - delete pblockOrphan; + if (AcceptBlock(block, stateDummy)) + vWorkQueue.push_back(mi->second->hashBlock); + mapOrphanBlocks.erase(mi->second->hashBlock); + delete mi->second; } mapOrphanBlocksByPrev.erase(hashPrev); } - printf("ProcessBlock: ACCEPTED\n"); + LogPrintf("ProcessBlock: ACCEPTED\n"); return true; } @@ -2689,15 +2796,15 @@ uint256 CPartialMerkleTree::ExtractMatches(std::vector &vMatch) { bool AbortNode(const std::string &strMessage) { strMiscWarning = strMessage; - printf("*** %s\n", strMessage.c_str()); + LogPrintf("*** %s\n", strMessage); uiInterface.ThreadSafeMessageBox(strMessage, "", CClientUIInterface::MSG_ERROR); StartShutdown(); return false; } -bool CheckDiskSpace(uint64 nAdditionalBytes) +bool CheckDiskSpace(uint64_t nAdditionalBytes) { - uint64 nFreeBytesAvailable = filesystem::space(GetDataDir()).available; + uint64_t nFreeBytesAvailable = filesystem::space(GetDataDir()).available; // Check for nMinDiskSpace bytes (currently 50MB) if (nFreeBytesAvailable < nMinDiskSpace + nAdditionalBytes) @@ -2706,10 +2813,6 @@ bool CheckDiskSpace(uint64 nAdditionalBytes) return true; } -CCriticalSection cs_LastBlockFile; -CBlockFileInfo infoLastBlockFile; -int nLastBlockFile = 0; - FILE* OpenDiskFile(const CDiskBlockPos &pos, const char *prefix, bool fReadOnly) { if (pos.IsNull()) @@ -2720,12 +2823,12 @@ FILE* OpenDiskFile(const CDiskBlockPos &pos, const char *prefix, bool fReadOnly) if (!file && !fReadOnly) file = fopen(path.string().c_str(), "wb+"); if (!file) { - printf("Unable to open file %s\n", path.string().c_str()); + LogPrintf("Unable to open file %s\n", path.string()); return NULL; } if (pos.nPos) { if (fseek(file, pos.nPos, SEEK_SET)) { - printf("Unable to seek to position %u of %s\n", pos.nPos, path.string().c_str()); + LogPrintf("Unable to seek to position %u of %s\n", pos.nPos, path.string()); fclose(file); return NULL; } @@ -2784,18 +2887,15 @@ bool static LoadBlockIndexDB() pindex->nChainTx = (pindex->pprev ? pindex->pprev->nChainTx : 0) + pindex->nTx; if ((pindex->nStatus & BLOCK_VALID_MASK) >= BLOCK_VALID_TRANSACTIONS && !(pindex->nStatus & BLOCK_FAILED_MASK)) setBlockIndexValid.insert(pindex); + if (pindex->nStatus & BLOCK_FAILED_MASK && (!pindexBestInvalid || pindex->nChainWork > pindexBestInvalid->nChainWork)) + pindexBestInvalid = pindex; } // Load block file info pblocktree->ReadLastBlockFile(nLastBlockFile); - printf("LoadBlockIndexDB(): last block file = %i\n", nLastBlockFile); + LogPrintf("LoadBlockIndexDB(): last block file = %i\n", nLastBlockFile); if (pblocktree->ReadBlockFileInfo(nLastBlockFile, infoLastBlockFile)) - printf("LoadBlockIndexDB(): last block file info: %s\n", infoLastBlockFile.ToString().c_str()); - - // Load nBestInvalidWork, OK if it doesn't exist - CBigNum bnBestInvalidWork; - pblocktree->ReadBestInvalidWork(bnBestInvalidWork); - nBestInvalidWork = bnBestInvalidWork.getuint256(); + LogPrintf("LoadBlockIndexDB(): last block file info: %s\n", infoLastBlockFile.ToString()); // Check whether we need to continue reindexing bool fReindexing = false; @@ -2804,73 +2904,65 @@ bool static LoadBlockIndexDB() // Check whether we have a transaction index pblocktree->ReadFlag("txindex", fTxIndex); - printf("LoadBlockIndexDB(): transaction index %s\n", fTxIndex ? "enabled" : "disabled"); + LogPrintf("LoadBlockIndexDB(): transaction index %s\n", fTxIndex ? "enabled" : "disabled"); - // Load hashBestChain pointer to end of best chain - pindexBest = pcoinsTip->GetBestBlock(); - if (pindexBest == NULL) + // Load pointer to end of best chain + std::map::iterator it = mapBlockIndex.find(pcoinsTip->GetBestBlock()); + if (it == mapBlockIndex.end()) return true; - hashBestChain = pindexBest->GetBlockHash(); - nBestHeight = pindexBest->nHeight; - nBestChainWork = pindexBest->nChainWork; - - // register best chain - CBlockIndex *pindex = pindexBest; - vBlockIndexByHeight.resize(pindexBest->nHeight + 1); - while(pindex != NULL) { - vBlockIndexByHeight[pindex->nHeight] = pindex; - pindex = pindex->pprev; - } - printf("LoadBlockIndexDB(): hashBestChain=%s height=%d date=%s\n", - hashBestChain.ToString().c_str(), nBestHeight, - DateTimeStrFormat("%Y-%m-%d %H:%M:%S", pindexBest->GetBlockTime()).c_str()); + chainActive.SetTip(it->second); + LogPrintf("LoadBlockIndexDB(): hashBestChain=%s height=%d date=%s progress=%f\n", + chainActive.Tip()->GetBlockHash().ToString(), chainActive.Height(), + DateTimeStrFormat("%Y-%m-%d %H:%M:%S", chainActive.Tip()->GetBlockTime()), + Checkpoints::GuessVerificationProgress(chainActive.Tip())); return true; } bool VerifyDB(int nCheckLevel, int nCheckDepth) { - if (pindexBest == NULL || pindexBest->pprev == NULL) + LOCK(cs_main); + if (chainActive.Tip() == NULL || chainActive.Tip()->pprev == NULL) return true; // Verify blocks in the best chain if (nCheckDepth <= 0) nCheckDepth = 1000000000; // suffices until the year 19000 - if (nCheckDepth > nBestHeight) - nCheckDepth = nBestHeight; + if (nCheckDepth > chainActive.Height()) + nCheckDepth = chainActive.Height(); nCheckLevel = std::max(0, std::min(4, nCheckLevel)); - printf("Verifying last %i blocks at level %i\n", nCheckDepth, nCheckLevel); + LogPrintf("Verifying last %i blocks at level %i\n", nCheckDepth, nCheckLevel); CCoinsViewCache coins(*pcoinsTip, true); - CBlockIndex* pindexState = pindexBest; + CBlockIndex* pindexState = chainActive.Tip(); CBlockIndex* pindexFailure = NULL; int nGoodTransactions = 0; CValidationState state; - for (CBlockIndex* pindex = pindexBest; pindex && pindex->pprev; pindex = pindex->pprev) + for (CBlockIndex* pindex = chainActive.Tip(); pindex && pindex->pprev; pindex = pindex->pprev) { boost::this_thread::interruption_point(); - if (pindex->nHeight < nBestHeight-nCheckDepth) + if (pindex->nHeight < chainActive.Height()-nCheckDepth) break; CBlock block; // check level 0: read from disk if (!ReadBlockFromDisk(block, pindex)) - return error("VerifyDB() : *** ReadBlockFromDisk failed at %d, hash=%s", pindex->nHeight, pindex->GetBlockHash().ToString().c_str()); + return error("VerifyDB() : *** ReadBlockFromDisk failed at %d, hash=%s", pindex->nHeight, pindex->GetBlockHash().ToString()); // check level 1: verify block validity if (nCheckLevel >= 1 && !CheckBlock(block, state)) - return error("VerifyDB() : *** found bad block at %d, hash=%s\n", pindex->nHeight, pindex->GetBlockHash().ToString().c_str()); + return error("VerifyDB() : *** found bad block at %d, hash=%s\n", pindex->nHeight, pindex->GetBlockHash().ToString()); // check level 2: verify undo validity if (nCheckLevel >= 2 && pindex) { CBlockUndo undo; CDiskBlockPos pos = pindex->GetUndoPos(); if (!pos.IsNull()) { if (!undo.ReadFromDisk(pos, pindex->pprev->GetBlockHash())) - return error("VerifyDB() : *** found bad undo data at %d, hash=%s\n", pindex->nHeight, pindex->GetBlockHash().ToString().c_str()); + return error("VerifyDB() : *** found bad undo data at %d, hash=%s\n", pindex->nHeight, pindex->GetBlockHash().ToString()); } } // check level 3: check for inconsistencies during memory-only disconnect of tip blocks if (nCheckLevel >= 3 && pindex == pindexState && (coins.GetCacheSize() + pcoinsTip->GetCacheSize()) <= 2*nCoinCacheSize + 32000) { 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().c_str()); + return error("VerifyDB() : *** irrecoverable inconsistency in block data at %d, hash=%s", pindex->nHeight, pindex->GetBlockHash().ToString()); pindexState = pindex->pprev; if (!fClean) { nGoodTransactions = 0; @@ -2880,23 +2972,23 @@ bool VerifyDB(int nCheckLevel, int nCheckDepth) } } if (pindexFailure) - return error("VerifyDB() : *** coin database inconsistencies found (last %i blocks, %i good transactions before that)\n", pindexBest->nHeight - pindexFailure->nHeight + 1, nGoodTransactions); + return error("VerifyDB() : *** coin database inconsistencies found (last %i blocks, %i good transactions before that)\n", chainActive.Height() - pindexFailure->nHeight + 1, nGoodTransactions); // check level 4: try reconnecting blocks if (nCheckLevel >= 4) { CBlockIndex *pindex = pindexState; - while (pindex != pindexBest) { + while (pindex != chainActive.Tip()) { boost::this_thread::interruption_point(); - pindex = pindex->GetNextInMainChain(); + pindex = chainActive.Next(pindex); CBlock block; if (!ReadBlockFromDisk(block, pindex)) - return error("VerifyDB() : *** ReadBlockFromDisk failed at %d, hash=%s", pindex->nHeight, pindex->GetBlockHash().ToString().c_str()); + return error("VerifyDB() : *** ReadBlockFromDisk failed at %d, hash=%s", pindex->nHeight, pindex->GetBlockHash().ToString()); if (!ConnectBlock(block, state, pindex, coins)) - return error("VerifyDB() : *** found unconnectable block at %d, hash=%s", pindex->nHeight, pindex->GetBlockHash().ToString().c_str()); + return error("VerifyDB() : *** found unconnectable block at %d, hash=%s", pindex->nHeight, pindex->GetBlockHash().ToString()); } } - printf("No coin database inconsistencies in last %i blocks (%i transactions)\n", pindexBest->nHeight - pindexState->nHeight, nGoodTransactions); + LogPrintf("No coin database inconsistencies in last %i blocks (%i transactions)\n", chainActive.Height() - pindexState->nHeight, nGoodTransactions); return true; } @@ -2905,12 +2997,8 @@ void UnloadBlockIndex() { mapBlockIndex.clear(); setBlockIndexValid.clear(); - pindexGenesisBlock = NULL; - nBestHeight = 0; - nBestChainWork = 0; - nBestInvalidWork = 0; - hashBestChain = 0; - pindexBest = NULL; + chainActive.SetTip(NULL); + pindexBestInvalid = NULL; } bool LoadBlockIndex() @@ -2923,14 +3011,15 @@ bool LoadBlockIndex() bool InitBlockIndex() { + LOCK(cs_main); // Check whether we're already initialized - if (pindexGenesisBlock != NULL) + if (chainActive.Genesis() != NULL) return true; // Use the provided setting for -txindex in the new database fTxIndex = GetBoolArg("-txindex", false); pblocktree->WriteFlag("txindex", fTxIndex); - printf("Initializing databases...\n"); + LogPrintf("Initializing databases...\n"); // Only add the genesis block if not reindexing (in which case we reuse the one already on disk) if (!fReindex) { @@ -2958,6 +3047,7 @@ bool InitBlockIndex() { void PrintBlockTree() { + AssertLockHeld(cs_main); // pre-compute tree structure map > mapNext; for (map::iterator mi = mapBlockIndex.begin(); mi != mapBlockIndex.end(); ++mi) @@ -2970,7 +3060,7 @@ void PrintBlockTree() } vector > vStack; - vStack.push_back(make_pair(0, pindexGenesisBlock)); + vStack.push_back(make_pair(0, chainActive.Genesis())); int nPrevCol = 0; while (!vStack.empty()) @@ -2983,37 +3073,35 @@ void PrintBlockTree() if (nCol > nPrevCol) { for (int i = 0; i < nCol-1; i++) - printf("| "); - printf("|\\\n"); + LogPrintf("| "); + LogPrintf("|\\\n"); } else if (nCol < nPrevCol) { for (int i = 0; i < nCol; i++) - printf("| "); - printf("|\n"); + LogPrintf("| "); + LogPrintf("|\n"); } nPrevCol = nCol; // print columns for (int i = 0; i < nCol; i++) - printf("| "); + LogPrintf("| "); // print item CBlock block; ReadBlockFromDisk(block, pindex); - printf("%d (blk%05u.dat:0x%x) %s tx %"PRIszu"", + LogPrintf("%d (blk%05u.dat:0x%x) %s tx %u\n", pindex->nHeight, pindex->GetBlockPos().nFile, pindex->GetBlockPos().nPos, - DateTimeStrFormat("%Y-%m-%d %H:%M:%S", block.GetBlockTime()).c_str(), + DateTimeStrFormat("%Y-%m-%d %H:%M:%S", block.GetBlockTime()), block.vtx.size()); - PrintWallets(block); - // put the main time-chain first vector& vNext = mapNext[pindex]; for (unsigned int i = 0; i < vNext.size(); i++) { - if (vNext[i]->GetNextInMainChain()) + if (chainActive.Next(vNext[i])) { swap(vNext[0], vNext[i]); break; @@ -3028,12 +3116,12 @@ void PrintBlockTree() bool LoadExternalBlockFile(FILE* fileIn, CDiskBlockPos *dbp) { - int64 nStart = GetTimeMillis(); + int64_t nStart = GetTimeMillis(); int nLoaded = 0; try { CBufferedFile blkdat(fileIn, 2*MAX_BLOCK_SIZE, MAX_BLOCK_SIZE+8, SER_DISK, CLIENT_VERSION); - uint64 nStartByte = 0; + uint64_t nStartByte = 0; if (dbp) { // (try to) skip already indexed part CBlockFileInfo info; @@ -3042,7 +3130,7 @@ bool LoadExternalBlockFile(FILE* fileIn, CDiskBlockPos *dbp) blkdat.Seek(info.nSize); } } - uint64 nRewind = blkdat.GetPos(); + uint64_t nRewind = blkdat.GetPos(); while (blkdat.good() && !blkdat.eof()) { boost::this_thread::interruption_point(); @@ -3052,11 +3140,11 @@ bool LoadExternalBlockFile(FILE* fileIn, CDiskBlockPos *dbp) unsigned int nSize = 0; try { // locate a header - unsigned char buf[4]; + unsigned char buf[MESSAGE_START_SIZE]; blkdat.FindByte(Params().MessageStart()[0]); nRewind = blkdat.GetPos()+1; blkdat >> FLATDATA(buf); - if (memcmp(buf, Params().MessageStart(), 4)) + if (memcmp(buf, Params().MessageStart(), MESSAGE_START_SIZE)) continue; // read size blkdat >> nSize; @@ -3068,7 +3156,7 @@ bool LoadExternalBlockFile(FILE* fileIn, CDiskBlockPos *dbp) } try { // read block - uint64 nBlockPos = blkdat.GetPos(); + uint64_t nBlockPos = blkdat.GetPos(); blkdat.SetLimit(nBlockPos + nSize); CBlock block; blkdat >> block; @@ -3086,7 +3174,7 @@ bool LoadExternalBlockFile(FILE* fileIn, CDiskBlockPos *dbp) break; } } catch (std::exception &e) { - printf("%s() : Deserialize or I/O error caught during load\n", __PRETTY_FUNCTION__); + LogPrintf("%s : Deserialize or I/O error - %s", __func__, e.what()); } } fclose(fileIn); @@ -3094,7 +3182,7 @@ bool LoadExternalBlockFile(FILE* fileIn, CDiskBlockPos *dbp) AbortNode(_("Error: system error: ") + e.what()); } if (nLoaded > 0) - printf("Loaded %i blocks from external file in %"PRI64d"ms\n", nLoaded, GetTimeMillis() - nStart); + LogPrintf("Loaded %i blocks from external file in %dms\n", nLoaded, GetTimeMillis() - nStart); return nLoaded > 0; } @@ -3112,9 +3200,6 @@ bool LoadExternalBlockFile(FILE* fileIn, CDiskBlockPos *dbp) // CAlert // -extern map mapAlerts; -extern CCriticalSection cs_mapAlerts; - string GetWarnings(string strFor) { int nPriority = 0; @@ -3134,11 +3219,15 @@ string GetWarnings(string strFor) strStatusBar = strMiscWarning; } - // Longer invalid proof-of-work chain - if (pindexBest && nBestInvalidWork > nBestChainWork + (pindexBest->GetBlockWorkAdjusted() * 6).getuint256()) + if (fLargeWorkForkFound) { nPriority = 2000; - strStatusBar = strRPC = _("Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade."); + strStatusBar = strRPC = _("Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues."); + } + else if (fLargeWorkInvalidChainFound) + { + nPriority = 2000; + strStatusBar = strRPC = _("Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade."); } // Alerts @@ -3183,10 +3272,7 @@ bool static AlreadyHave(const CInv& inv) case MSG_TX: { bool txInMap = false; - { - LOCK(mempool.cs); - txInMap = mempool.exists(inv.hash); - } + txInMap = mempool.exists(inv.hash); return txInMap || mapOrphanTransactions.count(inv.hash) || pcoinsTip->HaveCoins(inv.hash); } @@ -3199,14 +3285,14 @@ bool static AlreadyHave(const CInv& inv) } - - void static ProcessGetData(CNode* pfrom) { std::deque::iterator it = pfrom->vRecvGetData.begin(); vector vNotFound; + LOCK(cs_main); + while (it != pfrom->vRecvGetData.end()) { // Don't bother if send buffer is too full to respond anyway if (pfrom->nSendSize >= SendBufferSize()) @@ -3219,10 +3305,28 @@ void static ProcessGetData(CNode* pfrom) if (inv.type == MSG_BLOCK || inv.type == MSG_FILTERED_BLOCK) { - // Send block from disk + bool send = false; map::iterator mi = mapBlockIndex.find(inv.hash); if (mi != mapBlockIndex.end()) { + // If the requested block is at a height below our last + // checkpoint, only serve it if it's in the checkpointed chain + int nHeight = mi->second->nHeight; + CBlockIndex* pcheckpoint = Checkpoints::GetLastCheckpoint(mapBlockIndex); + if (pcheckpoint && nHeight < pcheckpoint->nHeight) { + if (!chainActive.Contains(mi->second)) + { + LogPrintf("ProcessGetData(): ignoring request for old block that isn't in the main chain\n"); + } else { + send = true; + } + } else { + send = true; + } + } + if (send) + { + // Send block from disk CBlock block; ReadBlockFromDisk(block, (*mi).second); if (inv.type == MSG_BLOCK) @@ -3256,7 +3360,7 @@ void static ProcessGetData(CNode* pfrom) // and we want it right after the last block so they don't // wait for other stuff first. vector vInv; - vInv.push_back(CInv(MSG_BLOCK, hashBestChain)); + vInv.push_back(CInv(MSG_BLOCK, chainActive.Tip()->GetBlockHash())); pfrom->PushMessage("inv", vInv); pfrom->hashContinue = 0; } @@ -3275,9 +3379,8 @@ void static ProcessGetData(CNode* pfrom) } } if (!pushed && inv.type == MSG_TX) { - LOCK(mempool.cs); - if (mempool.exists(inv.hash)) { - CTransaction tx = mempool.lookup(inv.hash); + CTransaction tx; + if (mempool.lookup(inv.hash, tx)) { CDataStream ss(SER_NETWORK, PROTOCOL_VERSION); ss.reserve(1000); ss << tx; @@ -3291,7 +3394,10 @@ void static ProcessGetData(CNode* pfrom) } // Track requests for our stuff. - Inventory(inv.hash); + g_signals.Inventory(inv.hash); + + if (inv.type == MSG_BLOCK || inv.type == MSG_FILTERED_BLOCK) + break; } } @@ -3312,15 +3418,17 @@ void static ProcessGetData(CNode* pfrom) bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) { RandAddSeedPerfmon(); - if (fDebug) - printf("received: %s (%"PRIszu" bytes)\n", strCommand.c_str(), vRecv.size()); + LogPrint("net", "received: %s (%u bytes)\n", strCommand, vRecv.size()); if (mapArgs.count("-dropmessagestest") && GetRand(atoi(mapArgs["-dropmessagestest"])) == 0) { - printf("dropmessagestest DROPPING RECV MESSAGE\n"); + LogPrintf("dropmessagestest DROPPING RECV MESSAGE\n"); return true; } - + { + LOCK(cs_main); + State(pfrom->GetId())->nLastBlockProcess = GetTimeMicros(); + } @@ -3329,20 +3437,22 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) // Each connection can only send one version message if (pfrom->nVersion != 0) { - pfrom->Misbehaving(1); + pfrom->PushMessage("reject", strCommand, REJECT_DUPLICATE, string("Duplicate version message")); + Misbehaving(pfrom->GetId(), 1); return false; } - int64 nTime; + int64_t nTime; CAddress addrMe; CAddress addrFrom; - uint64 nNonce = 1; + uint64_t nNonce = 1; vRecv >> pfrom->nVersion >> pfrom->nServices >> nTime >> addrMe; - if (pfrom->nVersion < MIN_PROTO_VERSION) + if (pfrom->nVersion < MIN_PEER_PROTO_VERSION) { - // Since February 20, 2012, the protocol is initiated at version 209, - // and earlier versions are no longer supported - printf("partner %s using obsolete version %i; disconnecting\n", pfrom->addr.ToString().c_str(), pfrom->nVersion); + // disconnect from peers older than this proto version + LogPrintf("partner %s using obsolete version %i; disconnecting\n", pfrom->addr.ToString(), pfrom->nVersion); + pfrom->PushMessage("reject", strCommand, REJECT_OBSOLETE, + strprintf("Version must be %d or greater", MIN_PEER_PROTO_VERSION)); pfrom->fDisconnect = true; return false; } @@ -3351,8 +3461,10 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) pfrom->nVersion = 300; if (!vRecv.empty()) vRecv >> addrFrom >> nNonce; - if (!vRecv.empty()) + if (!vRecv.empty()) { vRecv >> pfrom->strSubVer; + pfrom->cleanSubVer = SanitizeString(pfrom->strSubVer); + } if (!vRecv.empty()) vRecv >> pfrom->nStartingHeight; if (!vRecv.empty()) @@ -3369,7 +3481,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) // Disconnect if we connected to ourself if (nNonce == nLocalHostNonce && nNonce > 1) { - printf("connected to self at %s, disconnecting\n", pfrom->addr.ToString().c_str()); + LogPrintf("connected to self at %s, disconnecting\n", pfrom->addr.ToString()); pfrom->fDisconnect = true; return true; } @@ -3380,7 +3492,6 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) pfrom->fClient = !(pfrom->nServices & NODE_NETWORK); - AddTimeData(pfrom->addr, nTime); // Change version pfrom->PushMessage("verack"); @@ -3420,8 +3531,11 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) pfrom->fSuccessfullyConnected = true; - printf("receive version message: version %d, blocks=%d, us=%s, them=%s, peer=%s\n", pfrom->nVersion, pfrom->nStartingHeight, addrMe.ToString().c_str(), addrFrom.ToString().c_str(), pfrom->addr.ToString().c_str()); + LogPrintf("receive version message: %s: version %d, blocks=%d, us=%s, them=%s, peer=%s\n", pfrom->cleanSubVer, pfrom->nVersion, pfrom->nStartingHeight, addrMe.ToString(), addrFrom.ToString(), pfrom->addr.ToString()); + AddTimeData(pfrom->addr, nTime); + + LOCK(cs_main); cPeerBlockCounts.input(pfrom->nStartingHeight); } @@ -3429,7 +3543,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) else if (pfrom->nVersion == 0) { // Must have a version message before anything else - pfrom->Misbehaving(1); + Misbehaving(pfrom->GetId(), 1); return false; } @@ -3450,14 +3564,14 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) return true; if (vAddr.size() > 1000) { - pfrom->Misbehaving(20); - return error("message addr size() = %"PRIszu"", vAddr.size()); + Misbehaving(pfrom->GetId(), 20); + return error("message addr size() = %u", vAddr.size()); } // Store the new addresses vector vAddrOk; - int64 nNow = GetAdjustedTime(); - int64 nSince = nNow - 10 * 60; + int64_t nNow = GetAdjustedTime(); + int64_t nSince = nNow - 10 * 60; BOOST_FOREACH(CAddress& addr, vAddr) { boost::this_thread::interruption_point(); @@ -3476,7 +3590,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) static uint256 hashSalt; if (hashSalt == 0) hashSalt = GetRandHash(); - uint64 hashAddr = addr.GetHash(); + uint64_t hashAddr = addr.GetHash(); uint256 hashRand = hashSalt ^ (hashAddr<<32) ^ ((GetTime()+hashAddr)/(24*60*60)); hashRand = Hash(BEGIN(hashRand), END(hashRand)); multimap mapMix; @@ -3513,18 +3627,12 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) vRecv >> vInv; if (vInv.size() > MAX_INV_SZ) { - pfrom->Misbehaving(20); - return error("message inv size() = %"PRIszu"", vInv.size()); + Misbehaving(pfrom->GetId(), 20); + return error("message inv size() = %u", vInv.size()); } - // find last block in inv vector - unsigned int nLastBlock = (unsigned int)(-1); - for (unsigned int nInv = 0; nInv < vInv.size(); nInv++) { - if (vInv[vInv.size() - 1 - nInv].type == MSG_BLOCK) { - nLastBlock = vInv.size() - 1 - nInv; - break; - } - } + LOCK(cs_main); + for (unsigned int nInv = 0; nInv < vInv.size(); nInv++) { const CInv &inv = vInv[nInv]; @@ -3533,25 +3641,21 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) pfrom->AddInventoryKnown(inv); bool fAlreadyHave = AlreadyHave(inv); - if (fDebug) - printf(" got inventory: %s %s\n", inv.ToString().c_str(), fAlreadyHave ? "have" : "new"); + LogPrint("net", " got inventory: %s %s\n", inv.ToString(), fAlreadyHave ? "have" : "new"); if (!fAlreadyHave) { - if (!fImporting && !fReindex) - pfrom->AskFor(inv); + if (!fImporting && !fReindex) { + if (inv.type == MSG_BLOCK) + AddBlockToQueue(pfrom->GetId(), inv.hash); + else + pfrom->AskFor(inv); + } } else if (inv.type == MSG_BLOCK && mapOrphanBlocks.count(inv.hash)) { - PushGetBlocks(pfrom, pindexBest, GetOrphanRoot(mapOrphanBlocks[inv.hash])); - } else if (nInv == nLastBlock) { - // In case we are on a very long side-chain, it is possible that we already have - // the last block in an inv bundle sent in response to getblocks. Try to detect - // this situation and push another getblocks to continue. - PushGetBlocks(pfrom, mapBlockIndex[inv.hash], uint256(0)); - if (fDebug) - printf("force request: %s\n", inv.ToString().c_str()); + PushGetBlocks(pfrom, chainActive.Tip(), GetOrphanRoot(inv.hash)); } // Track requests for our stuff - Inventory(inv.hash); + g_signals.Inventory(inv.hash); } } @@ -3562,15 +3666,15 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) vRecv >> vInv; if (vInv.size() > MAX_INV_SZ) { - pfrom->Misbehaving(20); - return error("message getdata size() = %"PRIszu"", vInv.size()); + Misbehaving(pfrom->GetId(), 20); + return error("message getdata size() = %u", vInv.size()); } - if (fDebugNet || (vInv.size() != 1)) - printf("received getdata (%"PRIszu" invsz)\n", vInv.size()); + if (fDebug || (vInv.size() != 1)) + LogPrint("net", "received getdata (%u invsz)\n", vInv.size()); - if ((fDebugNet && vInv.size() > 0) || (vInv.size() == 1)) - printf("received getdata for: %s\n", vInv[0].ToString().c_str()); + if ((fDebug && vInv.size() > 0) || (vInv.size() == 1)) + LogPrint("net", "received getdata for: %s\n", vInv[0].ToString()); pfrom->vRecvGetData.insert(pfrom->vRecvGetData.end(), vInv.begin(), vInv.end()); ProcessGetData(pfrom); @@ -3583,19 +3687,21 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) uint256 hashStop; vRecv >> locator >> hashStop; + LOCK(cs_main); + // Find the last block the caller has in the main chain - CBlockIndex* pindex = locator.GetBlockIndex(); + CBlockIndex* pindex = chainActive.FindFork(locator); // Send the rest of the chain if (pindex) - pindex = pindex->GetNextInMainChain(); + pindex = chainActive.Next(pindex); int nLimit = 500; - printf("getblocks %d to %s limit %d\n", (pindex ? pindex->nHeight : -1), hashStop.ToString().c_str(), nLimit); - for (; pindex; pindex = pindex->GetNextInMainChain()) + LogPrint("net", "getblocks %d to %s limit %d\n", (pindex ? pindex->nHeight : -1), hashStop.ToString(), nLimit); + for (; pindex; pindex = chainActive.Next(pindex)) { if (pindex->GetBlockHash() == hashStop) { - printf(" getblocks stopping at %d %s\n", pindex->nHeight, pindex->GetBlockHash().ToString().c_str()); + LogPrint("net", " getblocks stopping at %d %s\n", pindex->nHeight, pindex->GetBlockHash().ToString()); break; } pfrom->PushInventory(CInv(MSG_BLOCK, pindex->GetBlockHash())); @@ -3603,7 +3709,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) { // When this block is requested, we'll send an inv that'll make them // getblocks the next batch of inventory. - printf(" getblocks stopping at limit %d %s\n", pindex->nHeight, pindex->GetBlockHash().ToString().c_str()); + LogPrint("net", " getblocks stopping at limit %d %s\n", pindex->nHeight, pindex->GetBlockHash().ToString()); pfrom->hashContinue = pindex->GetBlockHash(); break; } @@ -3617,6 +3723,8 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) uint256 hashStop; vRecv >> locator >> hashStop; + LOCK(cs_main); + CBlockIndex* pindex = NULL; if (locator.IsNull()) { @@ -3629,16 +3737,16 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) else { // Find the last block the caller has in the main chain - pindex = locator.GetBlockIndex(); + pindex = chainActive.FindFork(locator); if (pindex) - pindex = pindex->GetNextInMainChain(); + pindex = chainActive.Next(pindex); } // we must use CBlocks, as CBlockHeaders won't include the 0x00 nTx count at the end vector vHeaders; int nLimit = 2000; - printf("getheaders %d to %s\n", (pindex ? pindex->nHeight : -1), hashStop.ToString().c_str()); - for (; pindex; pindex = pindex->GetNextInMainChain()) + LogPrint("net", "getheaders %d to %s\n", (pindex ? pindex->nHeight : -1), hashStop.ToString()); + for (; pindex; pindex = chainActive.Next(pindex)) { vHeaders.push_back(pindex->GetBlockHeader()); if (--nLimit <= 0 || pindex->GetBlockHash() == hashStop) @@ -3652,62 +3760,61 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) { vector vWorkQueue; vector vEraseQueue; - CDataStream vMsg(vRecv); CTransaction tx; vRecv >> tx; CInv inv(MSG_TX, tx.GetHash()); pfrom->AddInventoryKnown(inv); - // Truncate messages to the size of the tx in them - unsigned int nSize = ::GetSerializeSize(tx, SER_NETWORK, PROTOCOL_VERSION); - unsigned int oldSize = vMsg.size(); - if (nSize < oldSize) { - vMsg.resize(nSize); - printf("truncating oversized TX %s (%u -> %u)\n", - tx.GetHash().ToString().c_str(), - oldSize, nSize); - } + LOCK(cs_main); bool fMissingInputs = false; CValidationState state; - if (mempool.accept(state, tx, true, &fMissingInputs)) + if (AcceptToMemoryPool(mempool, state, tx, true, &fMissingInputs)) { - RelayTransaction(tx, inv.hash, vMsg); + mempool.check(pcoinsTip); + RelayTransaction(tx, inv.hash); mapAlreadyAskedFor.erase(inv); vWorkQueue.push_back(inv.hash); vEraseQueue.push_back(inv.hash); + + LogPrint("mempool", "AcceptToMemoryPool: %s %s : accepted %s (poolsz %u)\n", + pfrom->addr.ToString(), pfrom->cleanSubVer, + tx.GetHash().ToString(), + mempool.mapTx.size()); + // Recursively process any orphan transactions that depended on this one for (unsigned int i = 0; i < vWorkQueue.size(); i++) { uint256 hashPrev = vWorkQueue[i]; - for (map::iterator mi = mapOrphanTransactionsByPrev[hashPrev].begin(); + for (set::iterator mi = mapOrphanTransactionsByPrev[hashPrev].begin(); mi != mapOrphanTransactionsByPrev[hashPrev].end(); ++mi) { - const CDataStream& vMsg = *((*mi).second); - CTransaction tx; - CDataStream(vMsg) >> tx; - CInv inv(MSG_TX, tx.GetHash()); + const uint256& orphanHash = *mi; + const CTransaction& orphanTx = mapOrphanTransactions[orphanHash]; bool fMissingInputs2 = false; - // Use a dummy CValidationState so someone can't setup nodes to counter-DoS based on orphan resolution (that is, feeding people an invalid transaction based on LegitTxX in order to get anyone relaying LegitTxX banned) + // Use a dummy CValidationState so someone can't setup nodes to counter-DoS based on orphan + // resolution (that is, feeding people an invalid transaction based on LegitTxX in order to get + // anyone relaying LegitTxX banned) CValidationState stateDummy; - if (mempool.accept(stateDummy, tx, true, &fMissingInputs2)) + if (AcceptToMemoryPool(mempool, stateDummy, orphanTx, true, &fMissingInputs2)) { - printf(" accepted orphan tx %s\n", inv.hash.ToString().c_str()); - RelayTransaction(tx, inv.hash, vMsg); - mapAlreadyAskedFor.erase(inv); - vWorkQueue.push_back(inv.hash); - vEraseQueue.push_back(inv.hash); + LogPrint("mempool", " accepted orphan tx %s\n", orphanHash.ToString()); + RelayTransaction(orphanTx, orphanHash); + mapAlreadyAskedFor.erase(CInv(MSG_TX, orphanHash)); + vWorkQueue.push_back(orphanHash); + vEraseQueue.push_back(orphanHash); } else if (!fMissingInputs2) { // invalid or too-little-fee orphan - vEraseQueue.push_back(inv.hash); - printf(" removed orphan tx %s\n", inv.hash.ToString().c_str()); + vEraseQueue.push_back(orphanHash); + LogPrint("mempool", " removed orphan tx %s\n", orphanHash.ToString()); } + mempool.check(pcoinsTip); } } @@ -3716,16 +3823,24 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) } else if (fMissingInputs) { - AddOrphanTx(vMsg); + AddOrphanTx(tx); // DoS prevention: do not allow mapOrphanTransactions to grow unbounded unsigned int nEvicted = LimitOrphanTxSize(MAX_ORPHAN_TRANSACTIONS); if (nEvicted > 0) - printf("mapOrphan overflow, removed %u tx\n", nEvicted); + LogPrint("mempool", "mapOrphan overflow, removed %u tx\n", nEvicted); } - int nDoS; + int nDoS = 0; if (state.IsInvalid(nDoS)) - pfrom->Misbehaving(nDoS); + { + LogPrint("mempool", "%s from %s %s was not accepted into the memory pool: %s\n", tx.GetHash().ToString(), + pfrom->addr.ToString(), pfrom->cleanSubVer, + state.GetRejectReason()); + pfrom->PushMessage("reject", strCommand, state.GetRejectCode(), + state.GetRejectReason(), inv.hash); + if (nDoS > 0) + Misbehaving(pfrom->GetId(), nDoS); + } } @@ -3734,18 +3849,19 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) CBlock block; vRecv >> block; - printf("received block %s\n", block.GetHash().ToString().c_str()); + LogPrint("net", "received block %s\n", block.GetHash().ToString()); // block.print(); CInv inv(MSG_BLOCK, block.GetHash()); pfrom->AddInventoryKnown(inv); + LOCK(cs_main); + // Remember who we got this block from. + mapBlockSource[inv.hash] = pfrom->GetId(); + MarkBlockAsReceived(inv.hash, pfrom->GetId()); + CValidationState state; - if (ProcessBlock(state, pfrom, &block)) - mapAlreadyAskedFor.erase(inv); - int nDoS; - if (state.IsInvalid(nDoS)) - pfrom->Misbehaving(nDoS); + ProcessBlock(state, pfrom, &block); } @@ -3760,17 +3876,23 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) else if (strCommand == "mempool") { + LOCK2(cs_main, pfrom->cs_filter); + std::vector vtxid; - LOCK2(mempool.cs, pfrom->cs_filter); mempool.queryHashes(vtxid); vector vInv; BOOST_FOREACH(uint256& hash, vtxid) { CInv inv(MSG_TX, hash); - if ((pfrom->pfilter && pfrom->pfilter->IsRelevantAndUpdate(mempool.lookup(hash), hash)) || + CTransaction tx; + bool fInMemPool = mempool.lookup(hash, tx); + if (!fInMemPool) continue; // another thread removed since queryHashes, maybe... + if ((pfrom->pfilter && pfrom->pfilter->IsRelevantAndUpdate(tx, hash)) || (!pfrom->pfilter)) vInv.push_back(inv); - if (vInv.size() == MAX_INV_SZ) - break; + if (vInv.size() == MAX_INV_SZ) { + pfrom->PushMessage("inv", vInv); + vInv.clear(); + } } if (vInv.size() > 0) pfrom->PushMessage("inv", vInv); @@ -3781,7 +3903,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) { if (pfrom->nVersion > BIP0031_VERSION) { - uint64 nonce = 0; + uint64_t nonce = 0; vRecv >> nonce; // Echo the message back with the nonce. This allows for two useful features: // @@ -3799,6 +3921,63 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) } + else if (strCommand == "pong") + { + int64_t pingUsecEnd = GetTimeMicros(); + uint64_t nonce = 0; + size_t nAvail = vRecv.in_avail(); + bool bPingFinished = false; + std::string sProblem; + + if (nAvail >= sizeof(nonce)) { + vRecv >> nonce; + + // Only process pong message if there is an outstanding ping (old ping without nonce should never pong) + if (pfrom->nPingNonceSent != 0) { + if (nonce == pfrom->nPingNonceSent) { + // Matching pong received, this ping is no longer outstanding + bPingFinished = true; + int64_t pingUsecTime = pingUsecEnd - pfrom->nPingUsecStart; + if (pingUsecTime > 0) { + // Successful ping time measurement, replace previous + pfrom->nPingUsecTime = pingUsecTime; + } else { + // This should never happen + sProblem = "Timing mishap"; + } + } else { + // Nonce mismatches are normal when pings are overlapping + sProblem = "Nonce mismatch"; + if (nonce == 0) { + // This is most likely a bug in another implementation somewhere, cancel this ping + bPingFinished = true; + sProblem = "Nonce zero"; + } + } + } else { + sProblem = "Unsolicited pong without ping"; + } + } else { + // This is most likely a bug in another implementation somewhere, cancel this ping + bPingFinished = true; + sProblem = "Short payload"; + } + + if (!(sProblem.empty())) { + LogPrint("net", "pong %s %s: %s, %x expected, %x received, %u bytes\n", + pfrom->addr.ToString(), + pfrom->cleanSubVer, + sProblem, + pfrom->nPingNonceSent, + nonce, + nAvail); + } + if (bPingFinished) { + pfrom->nPingNonceSent = 0; + } + } + + else if (strCommand == "alert") { CAlert alert; @@ -3824,7 +4003,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) // This isn't a Misbehaving(100) (immediate ban) because the // peer might be an older or different implementation with // a different signature key, etc. - pfrom->Misbehaving(10); + Misbehaving(pfrom->GetId(), 10); } } } @@ -3837,12 +4016,13 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) if (!filter.IsWithinSizeConstraints()) // There is no excuse for sending a too-large filter - pfrom->Misbehaving(100); + Misbehaving(pfrom->GetId(), 100); else { LOCK(pfrom->cs_filter); delete pfrom->pfilter; pfrom->pfilter = new CBloomFilter(filter); + pfrom->pfilter->UpdateEmptyFull(); } pfrom->fRelayTxes = true; } @@ -3857,13 +4037,13 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) // and thus, the maximum size any matched object can have) in a filteradd message if (vData.size() > MAX_SCRIPT_ELEMENT_SIZE) { - pfrom->Misbehaving(100); + Misbehaving(pfrom->GetId(), 100); } else { LOCK(pfrom->cs_filter); if (pfrom->pfilter) pfrom->pfilter->insert(vData); else - pfrom->Misbehaving(100); + Misbehaving(pfrom->GetId(), 100); } } @@ -3872,11 +4052,34 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) { LOCK(pfrom->cs_filter); delete pfrom->pfilter; - pfrom->pfilter = NULL; + pfrom->pfilter = new CBloomFilter(); pfrom->fRelayTxes = true; } + else if (strCommand == "reject") + { + if (fDebug) + { + string strMsg; unsigned char ccode; string strReason; + vRecv >> strMsg >> ccode >> strReason; + + ostringstream ss; + ss << strMsg << " code " << itostr(ccode) << ": " << strReason; + + if (strMsg == "block" || strMsg == "tx") + { + uint256 hash; + vRecv >> hash; + ss << ": hash " << hash.ToString(); + } + // Truncate to reasonable length and sanitize before printing: + string s = ss.str(); + if (s.size() > 111) s.erase(111, string::npos); + LogPrint("net", "Reject %s\n", SanitizeString(s)); + } + } + else { // Ignore unknown commands for extensibility @@ -3896,7 +4099,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) bool ProcessMessages(CNode* pfrom) { //if (fDebug) - // printf("ProcessMessages(%zu messages)\n", pfrom->vRecvMsg.size()); + // LogPrintf("ProcessMessages(%u messages)\n", pfrom->vRecvMsg.size()); // // Message format @@ -3911,6 +4114,9 @@ bool ProcessMessages(CNode* pfrom) if (!pfrom->vRecvGetData.empty()) ProcessGetData(pfrom); + // this maintains the order of responses + if (!pfrom->vRecvGetData.empty()) return fOk; + std::deque::iterator it = pfrom->vRecvMsg.begin(); while (!pfrom->fDisconnect && it != pfrom->vRecvMsg.end()) { // Don't bother if send buffer is too full to respond anyway @@ -3921,7 +4127,7 @@ bool ProcessMessages(CNode* pfrom) CNetMessage& msg = *it; //if (fDebug) - // printf("ProcessMessages(message %u msgsz, %zu bytes, complete:%s)\n", + // LogPrintf("ProcessMessages(message %u msgsz, %u bytes, complete:%s)\n", // msg.hdr.nMessageSize, msg.vRecv.size(), // msg.complete() ? "Y" : "N"); @@ -3934,7 +4140,7 @@ bool ProcessMessages(CNode* pfrom) // Scan for message start if (memcmp(msg.hdr.pchMessageStart, Params().MessageStart(), MESSAGE_START_SIZE) != 0) { - printf("\n\nPROCESSMESSAGE: INVALID MESSAGESTART\n\n"); + LogPrintf("\n\nPROCESSMESSAGE: INVALID MESSAGESTART\n\n"); fOk = false; break; } @@ -3943,7 +4149,7 @@ bool ProcessMessages(CNode* pfrom) CMessageHeader& hdr = msg.hdr; if (!hdr.IsValid()) { - printf("\n\nPROCESSMESSAGE: ERRORS IN HEADER %s\n\n\n", hdr.GetCommand().c_str()); + LogPrintf("\n\nPROCESSMESSAGE: ERRORS IN HEADER %s\n\n\n", hdr.GetCommand()); continue; } string strCommand = hdr.GetCommand(); @@ -3958,8 +4164,8 @@ bool ProcessMessages(CNode* pfrom) memcpy(&nChecksum, &hash, sizeof(nChecksum)); if (nChecksum != hdr.nChecksum) { - printf("ProcessMessages(%s, %u bytes) : CHECKSUM ERROR nChecksum=%08x hdr.nChecksum=%08x\n", - strCommand.c_str(), nMessageSize, nChecksum, hdr.nChecksum); + LogPrintf("ProcessMessages(%s, %u bytes) : CHECKSUM ERROR nChecksum=%08x hdr.nChecksum=%08x\n", + strCommand, nMessageSize, nChecksum, hdr.nChecksum); continue; } @@ -3967,23 +4173,21 @@ bool ProcessMessages(CNode* pfrom) bool fRet = false; try { - { - LOCK(cs_main); - fRet = ProcessMessage(pfrom, strCommand, vRecv); - } + fRet = ProcessMessage(pfrom, strCommand, vRecv); boost::this_thread::interruption_point(); } catch (std::ios_base::failure& e) { + pfrom->PushMessage("reject", strCommand, REJECT_MALFORMED, string("error parsing message")); if (strstr(e.what(), "end of data")) { // Allow exceptions from under-length message on vRecv - printf("ProcessMessages(%s, %u bytes) : Exception '%s' caught, normally caused by a message being shorter than its stated length\n", strCommand.c_str(), nMessageSize, e.what()); + LogPrintf("ProcessMessages(%s, %u bytes) : Exception '%s' caught, normally caused by a message being shorter than its stated length\n", strCommand, nMessageSize, e.what()); } else if (strstr(e.what(), "size too large")) { // Allow exceptions from over-long size - printf("ProcessMessages(%s, %u bytes) : Exception '%s' caught\n", strCommand.c_str(), nMessageSize, e.what()); + LogPrintf("ProcessMessages(%s, %u bytes) : Exception '%s' caught\n", strCommand, nMessageSize, e.what()); } else { @@ -4000,7 +4204,9 @@ bool ProcessMessages(CNode* pfrom) } if (!fRet) - printf("ProcessMessage(%s, %u bytes) FAILED\n", strCommand.c_str(), nMessageSize); + LogPrintf("ProcessMessage(%s, %u bytes) FAILED\n", strCommand, nMessageSize); + + break; } // In case the connection got shut down, its receive buffer was wiped @@ -4013,38 +4219,47 @@ bool ProcessMessages(CNode* pfrom) bool SendMessages(CNode* pto, bool fSendTrickle) { - TRY_LOCK(cs_main, lockMain); - if (lockMain) { + { // Don't send anything until we get their version message if (pto->nVersion == 0) return true; - // Keep-alive ping. We send a nonce of zero because we don't use it anywhere - // right now. + // + // Message: ping + // + bool pingSend = false; + if (pto->fPingQueued) { + // RPC ping request by user + pingSend = true; + } if (pto->nLastSend && GetTime() - pto->nLastSend > 30 * 60 && pto->vSendMsg.empty()) { - uint64 nonce = 0; - if (pto->nVersion > BIP0031_VERSION) + // Ping automatically sent as a keepalive + pingSend = true; + } + if (pingSend) { + uint64_t nonce = 0; + while (nonce == 0) { + RAND_bytes((unsigned char*)&nonce, sizeof(nonce)); + } + pto->nPingNonceSent = nonce; + pto->fPingQueued = false; + if (pto->nVersion > BIP0031_VERSION) { + // Take timestamp as close as possible before transmitting ping + pto->nPingUsecStart = GetTimeMicros(); pto->PushMessage("ping", nonce); - else + } else { + // Peer is too old to support ping command with nonce, pong will never arrive, disable timing + pto->nPingUsecStart = 0; pto->PushMessage("ping"); + } } - // Start block sync - if (pto->fStartSync && !fImporting && !fReindex) { - pto->fStartSync = false; - PushGetBlocks(pto, pindexBest, uint256(0)); - } - - // Resend wallet transactions that haven't gotten in a block yet - // Except during reindex, importing and IBD, when old wallet - // transactions become unconfirmed and spams other nodes. - if (!fReindex && !fImporting && !IsInitialBlockDownload()) - { - ResendWalletTransactions(); - } + TRY_LOCK(cs_main, lockMain); // Acquire cs_main for IsInitialBlockDownload() and CNodeState() + if (!lockMain) + return true; // Address refresh broadcast - static int64 nLastRebroadcast; + static int64_t nLastRebroadcast; if (!IsInitialBlockDownload() && (GetTime() - nLastRebroadcast > 24 * 60 * 60)) { { @@ -4093,6 +4308,34 @@ bool SendMessages(CNode* pto, bool fSendTrickle) pto->PushMessage("addr", vAddr); } + CNodeState &state = *State(pto->GetId()); + if (state.fShouldBan) { + if (pto->addr.IsLocal()) + LogPrintf("Warning: not banning local node %s!\n", pto->addr.ToString()); + else { + pto->fDisconnect = true; + CNode::Ban(pto->addr); + } + state.fShouldBan = false; + } + + BOOST_FOREACH(const CBlockReject& reject, state.rejects) + pto->PushMessage("reject", (string)"block", reject.chRejectCode, reject.strRejectReason, reject.hashBlock); + state.rejects.clear(); + + // Start block sync + if (pto->fStartSync && !fImporting && !fReindex) { + pto->fStartSync = false; + PushGetBlocks(pto, chainActive.Tip(), uint256(0)); + } + + // Resend wallet transactions that haven't gotten in a block yet + // Except during reindex, importing and IBD, when old wallet + // transactions become unconfirmed and spams other nodes. + if (!fReindex && !fImporting && !IsInitialBlockDownload()) + { + g_signals.Broadcast(); + } // // Message: inventory @@ -4119,15 +4362,6 @@ bool SendMessages(CNode* pto, bool fSendTrickle) hashRand = Hash(BEGIN(hashRand), END(hashRand)); bool fTrickleWait = ((hashRand & 3) != 0); - // always trickle our own transactions - if (!fTrickleWait) - { - CWalletTx wtx; - if (GetTransaction(inv.hash, wtx)) - if (wtx.fFromMe) - fTrickleWait = true; - } - if (fTrickleWait) { vInvWait.push_back(inv); @@ -4152,18 +4386,44 @@ bool SendMessages(CNode* pto, bool fSendTrickle) pto->PushMessage("inv", vInv); + // Detect stalled peers. Require that blocks are in flight, we haven't + // received a (requested) block in one minute, and that all blocks are + // in flight for over two minutes, since we first had a chance to + // process an incoming block. + int64_t nNow = GetTimeMicros(); + if (!pto->fDisconnect && state.nBlocksInFlight && + state.nLastBlockReceive < state.nLastBlockProcess - BLOCK_DOWNLOAD_TIMEOUT*1000000 && + state.vBlocksInFlight.front().nTime < state.nLastBlockProcess - 2*BLOCK_DOWNLOAD_TIMEOUT*1000000) { + LogPrintf("Peer %s is stalling block download, disconnecting\n", state.name.c_str()); + pto->fDisconnect = true; + } + // - // Message: getdata + // Message: getdata (blocks) // vector vGetData; - int64 nNow = GetTime() * 1000000; - while (!pto->mapAskFor.empty() && (*pto->mapAskFor.begin()).first <= nNow) + while (!pto->fDisconnect && state.nBlocksToDownload && state.nBlocksInFlight < MAX_BLOCKS_IN_TRANSIT_PER_PEER) { + uint256 hash = state.vBlocksToDownload.front(); + vGetData.push_back(CInv(MSG_BLOCK, hash)); + MarkBlockAsInFlight(pto->GetId(), hash); + LogPrint("net", "Requesting block %s from %s\n", hash.ToString().c_str(), state.name.c_str()); + if (vGetData.size() >= 1000) + { + pto->PushMessage("getdata", vGetData); + vGetData.clear(); + } + } + + // + // Message: getdata (non-blocks) + // + while (!pto->fDisconnect && !pto->mapAskFor.empty() && (*pto->mapAskFor.begin()).first <= nNow) { const CInv& inv = (*pto->mapAskFor.begin()).second; if (!AlreadyHave(inv)) { - if (fDebugNet) - printf("sending getdata: %s\n", inv.ToString().c_str()); + if (fDebug) + LogPrint("net", "sending getdata: %s\n", inv.ToString()); vGetData.push_back(inv); if (vGetData.size() >= 1000) { @@ -4185,964 +4445,6 @@ bool SendMessages(CNode* pto, bool fSendTrickle) - - - - - - - - -////////////////////////////////////////////////////////////////////////////// -// -// BitcoinMiner -// - -int static FormatHashBlocks(void* pbuffer, unsigned int len) -{ - unsigned char* pdata = (unsigned char*)pbuffer; - unsigned int blocks = 1 + ((len + 8) / 64); - unsigned char* pend = pdata + 64 * blocks; - memset(pdata + len, 0, 64 * blocks - len); - pdata[len] = 0x80; - unsigned int bits = len * 8; - pend[-1] = (bits >> 0) & 0xff; - pend[-2] = (bits >> 8) & 0xff; - pend[-3] = (bits >> 16) & 0xff; - pend[-4] = (bits >> 24) & 0xff; - return blocks; -} - -static const unsigned int pSHA256InitState[8] = -{0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19}; - -void SHA256Transform(void* pstate, void* pinput, const void* pinit) -{ - SHA256_CTX ctx; - unsigned char data[64]; - - SHA256_Init(&ctx); - - for (int i = 0; i < 16; i++) - ((uint32_t*)data)[i] = ByteReverse(((uint32_t*)pinput)[i]); - - for (int i = 0; i < 8; i++) - ctx.h[i] = ((uint32_t*)pinit)[i]; - - SHA256_Update(&ctx, data, sizeof(data)); - for (int i = 0; i < 8; i++) - ((uint32_t*)pstate)[i] = ctx.h[i]; -} - -// -// ScanHash scans nonces looking for a hash with at least some zero bits. -// It operates on big endian data. Caller does the byte reversing. -// All input buffers are 16-byte aligned. nNonce is usually preserved -// between calls, but periodically or if nNonce is 0xffff0000 or above, -// the block is rebuilt and nNonce starts over at zero. -// -unsigned int static ScanHash_CryptoPP(char* pmidstate, char* pdata, char* phash1, char* phash, unsigned int& nHashesDone) -{ - unsigned int& nNonce = *(unsigned int*)(pdata + 12); - for (;;) - { - // Crypto++ SHA256 - // Hash pdata using pmidstate as the starting state into - // pre-formatted buffer phash1, then hash phash1 into phash - nNonce++; - SHA256Transform(phash1, pdata, pmidstate); - SHA256Transform(phash, phash1, pSHA256InitState); - - // Return the nonce if the hash has at least some zero bits, - // caller will check if it has enough to reach the target - if (((unsigned short*)phash)[14] == 0) - return nNonce; - - // If nothing found after trying for a while, return -1 - if ((nNonce & 0xffff) == 0) - { - nHashesDone = 0xffff+1; - return (unsigned int) -1; - } - if ((nNonce & 0xfff) == 0) - boost::this_thread::interruption_point(); - } -} - -// Some explaining would be appreciated -class COrphan -{ -public: - CTransaction* ptx; - set setDependsOn; - double dPriority; - double dFeePerKb; - - COrphan(CTransaction* ptxIn) - { - ptx = ptxIn; - dPriority = dFeePerKb = 0; - } - - void print() const - { - printf("COrphan(hash=%s, dPriority=%.1f, dFeePerKb=%.1f)\n", - ptx->GetHash().ToString().c_str(), dPriority, dFeePerKb); - BOOST_FOREACH(uint256 hash, setDependsOn) - printf(" setDependsOn %s\n", hash.ToString().c_str()); - } -}; - - -uint64 nLastBlockTx = 0; -uint64 nLastBlockSize = 0; - -// We want to sort transactions by priority and fee, so: -typedef boost::tuple TxPriority; -class TxPriorityCompare -{ - bool byFee; -public: - TxPriorityCompare(bool _byFee) : byFee(_byFee) { } - bool operator()(const TxPriority& a, const TxPriority& b) - { - if (byFee) - { - if (a.get<1>() == b.get<1>()) - return a.get<0>() < b.get<0>(); - return a.get<1>() < b.get<1>(); - } - else - { - if (a.get<0>() == b.get<0>()) - return a.get<1>() < b.get<1>(); - return a.get<0>() < b.get<0>(); - } - } -}; - -CBlockTemplate* CreateNewBlock(CReserveKey& reservekey, int algo) -{ - // Create new block - auto_ptr pblocktemplate(new CBlockTemplate()); - if(!pblocktemplate.get()) - return NULL; - CBlock *pblock = &pblocktemplate->block; // pointer for convenience - - // Set block version - pblock->nVersion = BLOCK_VERSION_DEFAULT; - switch (algo) - { - case ALGO_SHA256D: - break; - case ALGO_SCRYPT: - pblock->nVersion |= BLOCK_VERSION_SCRYPT; - break; - case ALGO_GROESTL: - pblock->nVersion |= BLOCK_VERSION_GROESTL; - break; - case ALGO_SKEIN: - pblock->nVersion |= BLOCK_VERSION_SKEIN; - break; - case ALGO_QUBIT: - pblock->nVersion |= BLOCK_VERSION_QUBIT; - break; - default: - error("CreateNewBlock: bad algo"); - return NULL; - } - - // Create coinbase tx - CTransaction txNew; - txNew.vin.resize(1); - txNew.vin[0].prevout.SetNull(); - txNew.vout.resize(1); - CPubKey pubkey; - if (!reservekey.GetReservedKey(pubkey)) - return NULL; - txNew.vout[0].scriptPubKey << pubkey << OP_CHECKSIG; - - // Add our coinbase tx as first transaction - pblock->vtx.push_back(txNew); - pblocktemplate->vTxFees.push_back(-1); // updated at end - pblocktemplate->vTxSigOps.push_back(-1); // updated at end - - // Largest block you're willing to create: - unsigned int nBlockMaxSize = GetArg("-blockmaxsize", MAX_BLOCK_SIZE_GEN/2); - // Limit to betweeen 1K and MAX_BLOCK_SIZE-1K for sanity: - nBlockMaxSize = std::max((unsigned int)1000, std::min((unsigned int)(MAX_BLOCK_SIZE-1000), nBlockMaxSize)); - - // How much of the block should be dedicated to high-priority transactions, - // included regardless of the fees they pay - unsigned int nBlockPrioritySize = GetArg("-blockprioritysize", DEFAULT_BLOCK_PRIORITY_SIZE); - nBlockPrioritySize = std::min(nBlockMaxSize, nBlockPrioritySize); - - // Minimum block size you want to create; block will be filled with free transactions - // until there are no more or the block reaches this size: - unsigned int nBlockMinSize = GetArg("-blockminsize", 0); - nBlockMinSize = std::min(nBlockMaxSize, nBlockMinSize); - - // Collect memory pool transactions into the block - int64 nFees = 0; - { - LOCK2(cs_main, mempool.cs); - CBlockIndex* pindexPrev = pindexBest; - CCoinsViewCache view(*pcoinsTip, true); - - // Priority order to process transactions - list vOrphan; // list memory doesn't move - map > mapDependers; - bool fPrintPriority = GetBoolArg("-printpriority", false); - - // This vector will be sorted into a priority queue: - vector vecPriority; - vecPriority.reserve(mempool.mapTx.size()); - for (map::iterator mi = mempool.mapTx.begin(); mi != mempool.mapTx.end(); ++mi) - { - CTransaction& tx = (*mi).second; - if (tx.IsCoinBase() || !IsFinalTx(tx)) - continue; - - COrphan* porphan = NULL; - double dPriority = 0; - int64 nTotalIn = 0; - bool fMissingInputs = false; - BOOST_FOREACH(const CTxIn& txin, tx.vin) - { - // Read prev transaction - if (!view.HaveCoins(txin.prevout.hash)) - { - // This should never happen; all transactions in the memory - // pool should connect to either transactions in the chain - // or other transactions in the memory pool. - if (!mempool.mapTx.count(txin.prevout.hash)) - { - printf("ERROR: mempool transaction missing input\n"); - if (fDebug) assert("mempool transaction missing input" == 0); - fMissingInputs = true; - if (porphan) - vOrphan.pop_back(); - break; - } - - // Has to wait for dependencies - if (!porphan) - { - // Use list for automatic deletion - vOrphan.push_back(COrphan(&tx)); - porphan = &vOrphan.back(); - } - mapDependers[txin.prevout.hash].push_back(porphan); - porphan->setDependsOn.insert(txin.prevout.hash); - nTotalIn += mempool.mapTx[txin.prevout.hash].vout[txin.prevout.n].nValue; - continue; - } - const CCoins &coins = view.GetCoins(txin.prevout.hash); - - int64 nValueIn = coins.vout[txin.prevout.n].nValue; - nTotalIn += nValueIn; - - int nConf = pindexPrev->nHeight - coins.nHeight + 1; - - dPriority += (double)nValueIn * nConf; - } - if (fMissingInputs) continue; - - // Priority is sum(valuein * age) / txsize - unsigned int nTxSize = ::GetSerializeSize(tx, SER_NETWORK, PROTOCOL_VERSION); - dPriority /= nTxSize; - - // This is a more accurate fee-per-kilobyte than is used by the client code, because the - // client code rounds up the size to the nearest 1K. That's good, because it gives an - // incentive to create smaller transactions. - double dFeePerKb = double(nTotalIn-GetValueOut(tx)) / (double(nTxSize)/1000.0); - - if (porphan) - { - porphan->dPriority = dPriority; - porphan->dFeePerKb = dFeePerKb; - } - else - vecPriority.push_back(TxPriority(dPriority, dFeePerKb, &(*mi).second)); - } - - // Collect transactions into block - uint64 nBlockSize = 1000; - uint64 nBlockTx = 0; - int nBlockSigOps = 100; - bool fSortedByFee = (nBlockPrioritySize <= 0); - - TxPriorityCompare comparer(fSortedByFee); - std::make_heap(vecPriority.begin(), vecPriority.end(), comparer); - - while (!vecPriority.empty()) - { - // Take highest priority transaction off the priority queue: - double dPriority = vecPriority.front().get<0>(); - double dFeePerKb = vecPriority.front().get<1>(); - CTransaction& tx = *(vecPriority.front().get<2>()); - - std::pop_heap(vecPriority.begin(), vecPriority.end(), comparer); - vecPriority.pop_back(); - - // Size limits - unsigned int nTxSize = ::GetSerializeSize(tx, SER_NETWORK, PROTOCOL_VERSION); - if (nBlockSize + nTxSize >= nBlockMaxSize) - continue; - - // Legacy limits on sigOps: - unsigned int nTxSigOps = GetLegacySigOpCount(tx); - if (nBlockSigOps + nTxSigOps >= MAX_BLOCK_SIGOPS) - continue; - - // Skip free transactions if we're past the minimum block size: - if (fSortedByFee && (dFeePerKb < CTransaction::nMinTxFee) && (nBlockSize + nTxSize >= nBlockMinSize)) - continue; - - // Prioritize by fee once past the priority size or we run out of high-priority - // transactions: - if (!fSortedByFee && - ((nBlockSize + nTxSize >= nBlockPrioritySize) || !AllowFree(dPriority))) - { - fSortedByFee = true; - comparer = TxPriorityCompare(fSortedByFee); - std::make_heap(vecPriority.begin(), vecPriority.end(), comparer); - } - - if (!view.HaveInputs(tx)) - continue; - - int64 nTxFees = view.GetValueIn(tx)-GetValueOut(tx); - - nTxSigOps += GetP2SHSigOpCount(tx, view); - if (nBlockSigOps + nTxSigOps >= MAX_BLOCK_SIGOPS) - continue; - - CValidationState state; - if (!CheckInputs(tx, state, view, true, SCRIPT_VERIFY_P2SH)) - continue; - - CTxUndo txundo; - uint256 hash = tx.GetHash(); - UpdateCoins(tx, state, view, txundo, pindexPrev->nHeight+1, hash); - - // Added - pblock->vtx.push_back(tx); - pblocktemplate->vTxFees.push_back(nTxFees); - pblocktemplate->vTxSigOps.push_back(nTxSigOps); - nBlockSize += nTxSize; - ++nBlockTx; - nBlockSigOps += nTxSigOps; - nFees += nTxFees; - - if (fPrintPriority) - { - printf("priority %.1f feeperkb %.1f txid %s\n", - dPriority, dFeePerKb, tx.GetHash().ToString().c_str()); - } - - // Add transactions that depend on this one to the priority queue - if (mapDependers.count(hash)) - { - BOOST_FOREACH(COrphan* porphan, mapDependers[hash]) - { - if (!porphan->setDependsOn.empty()) - { - porphan->setDependsOn.erase(hash); - if (porphan->setDependsOn.empty()) - { - vecPriority.push_back(TxPriority(porphan->dPriority, porphan->dFeePerKb, porphan->ptx)); - std::push_heap(vecPriority.begin(), vecPriority.end(), comparer); - } - } - } - } - } - - nLastBlockTx = nBlockTx; - nLastBlockSize = nBlockSize; - printf("CreateNewBlock(): total size %"PRI64u"\n", nBlockSize); - - pblock->vtx[0].vout[0].nValue = GetBlockValue(pindexPrev->nHeight+1, nFees); - pblocktemplate->vTxFees[0] = -nFees; - - // Fill in header - pblock->hashPrevBlock = pindexPrev->GetBlockHash(); - UpdateTime(*pblock, pindexPrev); - pblock->nBits = GetNextWorkRequired(pindexPrev, pblock, algo); - pblock->nNonce = 0; - pblock->vtx[0].vin[0].scriptSig = CScript() << OP_0 << OP_0; - pblocktemplate->vTxSigOps[0] = GetLegacySigOpCount(pblock->vtx[0]); - - CBlockIndex indexDummy(*pblock); - indexDummy.pprev = pindexPrev; - indexDummy.nHeight = pindexPrev->nHeight + 1; - CCoinsViewCache viewNew(*pcoinsTip, true); - CValidationState state; - if (!ConnectBlock(*pblock, state, &indexDummy, viewNew, true)) - throw std::runtime_error("CreateNewBlock() : ConnectBlock failed"); - } - - return pblocktemplate.release(); -} - - -void IncrementExtraNonce(CBlock* pblock, CBlockIndex* pindexPrev, unsigned int& nExtraNonce) -{ - // Update nExtraNonce - static uint256 hashPrevBlock; - if (hashPrevBlock != pblock->hashPrevBlock) - { - nExtraNonce = 0; - hashPrevBlock = pblock->hashPrevBlock; - } - ++nExtraNonce; - unsigned int nHeight = pindexPrev->nHeight+1; // Height first in coinbase required for block.version=2 - pblock->vtx[0].vin[0].scriptSig = (CScript() << nHeight << CBigNum(nExtraNonce)) + COINBASE_FLAGS; - assert(pblock->vtx[0].vin[0].scriptSig.size() <= 100); - - pblock->hashMerkleRoot = pblock->BuildMerkleTree(); -} - - -void FormatHashBuffers(CBlock* pblock, char* pmidstate, char* pdata, char* phash1) -{ - // - // Pre-build hash buffers - // - struct - { - struct unnamed2 - { - int nVersion; - uint256 hashPrevBlock; - uint256 hashMerkleRoot; - unsigned int nTime; - unsigned int nBits; - unsigned int nNonce; - } - block; - unsigned char pchPadding0[64]; - uint256 hash1; - unsigned char pchPadding1[64]; - } - tmp; - memset(&tmp, 0, sizeof(tmp)); - - tmp.block.nVersion = pblock->nVersion; - tmp.block.hashPrevBlock = pblock->hashPrevBlock; - tmp.block.hashMerkleRoot = pblock->hashMerkleRoot; - tmp.block.nTime = pblock->nTime; - tmp.block.nBits = pblock->nBits; - tmp.block.nNonce = pblock->nNonce; - - FormatHashBlocks(&tmp.block, sizeof(tmp.block)); - FormatHashBlocks(&tmp.hash1, sizeof(tmp.hash1)); - - // Byte swap all the input buffer - for (unsigned int i = 0; i < sizeof(tmp)/4; i++) - ((unsigned int*)&tmp)[i] = ByteReverse(((unsigned int*)&tmp)[i]); - - // Precalc the first half of the first hash, which stays constant - SHA256Transform(pmidstate, &tmp.block, pSHA256InitState); - - memcpy(pdata, &tmp.block, 128); - memcpy(phash1, &tmp.hash1, 64); -} - - -bool CheckWork(CBlock* pblock, CWallet& wallet, CReserveKey& reservekey) -{ - //printf("CheckWork:\n"); - int algo = pblock->GetAlgo(); - //printf("Algo=%d\n", algo); - uint256 hashPoW = pblock->GetPoWHash(algo); - uint256 hashTarget = CBigNum().SetCompact(pblock->nBits).getuint256(); - //printf("pow-hash: %s\n target: %s\n", - // hashPoW.GetHex().c_str(), - // hashTarget.GetHex().c_str()); - - if (hashPoW > hashTarget) - return false; - - uint256 hashBlock = pblock->GetHash(); - - //// debug print - printf("MyriadcoinMiner:\n"); - printf("proof-of-work found\n block-hash: %s\n pow-hash: %s\n target: %s\n", - hashBlock.GetHex().c_str(), - hashPoW.GetHex().c_str(), - hashTarget.GetHex().c_str()); - pblock->print(); - printf("generated %s\n", FormatMoney(pblock->vtx[0].vout[0].nValue).c_str()); - - // Found a solution - { - LOCK(cs_main); - if (pblock->hashPrevBlock != hashBestChain) - return error("MyriadcoinMiner : generated block is stale"); - - // Remove key from key pool - reservekey.KeepKey(); - - // Track how many getdata requests this block gets - { - LOCK(wallet.cs_wallet); - wallet.mapRequestCount[pblock->GetHash()] = 0; - } - - // Process this block the same as if we had received it from another node - CValidationState state; - if (!ProcessBlock(state, NULL, pblock)) - return error("MyriadcoinMiner : ProcessBlock, block not accepted"); - } - - return true; -} - -void static MinerWaitOnline() -{ - if (Params().NetworkID() != CChainParams::REGTEST) - { - // Busy-wait for the network to come online so we don't waste time mining - // on an obsolete chain. In regtest mode we expect to fly solo. - while (vNodes.empty() || IsInitialBlockDownload()) - { - MilliSleep(1000); - boost::this_thread::interruption_point(); - } - } -} - -void static BitcoinMiner(CWallet *pwallet) -{ - // Each thread has its own key and counter - CReserveKey reservekey(pwallet); - unsigned int nExtraNonce = 0; - - loop - { - MinerWaitOnline(); - - // - // Create new block - // - unsigned int nTransactionsUpdatedLast = nTransactionsUpdated; - CBlockIndex* pindexPrev = pindexBest; - - auto_ptr pblocktemplate(CreateNewBlock(reservekey, ALGO_SHA256D)); - if (!pblocktemplate.get()) - return; - CBlock *pblock = &pblocktemplate->block; - IncrementExtraNonce(pblock, pindexPrev, nExtraNonce); - - printf("Running sha265d miner with %"PRIszu" transactions in block (%u bytes)\n", pblock->vtx.size(), - ::GetSerializeSize(*pblock, SER_NETWORK, PROTOCOL_VERSION)); - - // - // Pre-build hash buffers - // - char pmidstatebuf[32+16]; char* pmidstate = alignup<16>(pmidstatebuf); - char pdatabuf[128+16]; char* pdata = alignup<16>(pdatabuf); - char phash1buf[64+16]; char* phash1 = alignup<16>(phash1buf); - - FormatHashBuffers(pblock, pmidstate, pdata, phash1); - - unsigned int& nBlockTime = *(unsigned int*)(pdata + 64 + 4); - unsigned int& nBlockBits = *(unsigned int*)(pdata + 64 + 8); - unsigned int& nBlockNonce = *(unsigned int*)(pdata + 64 + 12); - - - // - // Search - // - int64 nStart = GetTime(); - uint256 hashTarget = CBigNum().SetCompact(pblock->nBits).getuint256(); - uint256 hashbuf[2]; - uint256& hash = *alignup<16>(hashbuf); - loop - { - unsigned int nHashesDone = 0; - unsigned int nNonceFound; - - // Crypto++ SHA256 - nNonceFound = ScanHash_CryptoPP(pmidstate, pdata + 64, phash1, - (char*)&hash, nHashesDone); - - // Check if something found - if (nNonceFound != (unsigned int) -1) - { - for (unsigned int i = 0; i < sizeof(hash)/4; i++) - ((unsigned int*)&hash)[i] = ByteReverse(((unsigned int*)&hash)[i]); - - if (hash <= hashTarget) - { - // Found a solution - pblock->nNonce = ByteReverse(nNonceFound); - assert(hash == pblock->GetHash()); - - SetThreadPriority(THREAD_PRIORITY_NORMAL); - CheckWork(pblock, *pwalletMain, reservekey); - SetThreadPriority(THREAD_PRIORITY_LOWEST); - - // In regression test mode, stop mining after a block is found. This - // allows developers to controllably generate a block on demand. - if (Params().NetworkID() == CChainParams::REGTEST) - throw boost::thread_interrupted(); - - break; - } - } - - // Meter hashes/sec - static int64 nHashCounter; - if (nHPSTimerStart == 0) - { - nHPSTimerStart = GetTimeMillis(); - nHashCounter = 0; - } - else - nHashCounter += nHashesDone; - if (GetTimeMillis() - nHPSTimerStart > 4000) - { - static CCriticalSection cs; - { - LOCK(cs); - if (GetTimeMillis() - nHPSTimerStart > 4000) - { - dHashesPerSec = 1000.0 * nHashCounter / (GetTimeMillis() - nHPSTimerStart); - nHPSTimerStart = GetTimeMillis(); - nHashCounter = 0; - static int64 nLogTime; - if (GetTime() - nLogTime > 30 * 60) - { - nLogTime = GetTime(); - printf("hashmeter %6.0f khash/s\n", dHashesPerSec/1000.0); - } - } - } - } - - // Check for stop or if block needs to be rebuilt - boost::this_thread::interruption_point(); - if (vNodes.empty() && Params().NetworkID() != CChainParams::REGTEST) - break; - if (nBlockNonce >= 0xffff0000) - break; - if (nTransactionsUpdated != nTransactionsUpdatedLast && GetTime() - nStart > 60) - break; - if (pindexPrev != pindexBest) - break; - - // Update nTime every few seconds - UpdateTime(*pblock, pindexPrev); - nBlockTime = ByteReverse(pblock->nTime); - if (TestNet()) - { - // Changing pblock->nTime can change work required on testnet: - nBlockBits = ByteReverse(pblock->nBits); - hashTarget = CBigNum().SetCompact(pblock->nBits).getuint256(); - } - } - } -} - -void static ScryptMiner(CWallet *pwallet) -{ - // Each thread has its own key and counter - CReserveKey reservekey(pwallet); - unsigned int nExtraNonce = 0; - - loop - { - MinerWaitOnline(); - - // - // Create new block - // - unsigned int nTransactionsUpdatedLast = nTransactionsUpdated; - CBlockIndex* pindexPrev = pindexBest; - - auto_ptr pblocktemplate(CreateNewBlock(reservekey, ALGO_SCRYPT)); - if (!pblocktemplate.get()) - return; - CBlock *pblock = &pblocktemplate->block; - IncrementExtraNonce(pblock, pindexPrev, nExtraNonce); - - printf("Running scrypt miner with %"PRIszu" transactions in block (%u bytes)\n", pblock->vtx.size(), - ::GetSerializeSize(*pblock, SER_NETWORK, PROTOCOL_VERSION)); - - // - // Prebuild hash buffers - // - char pmidstatebuf[32+16]; char* pmidstate = alignup<16>(pmidstatebuf); - char pdatabuf[128+16]; char* pdata = alignup<16>(pdatabuf); - char phash1buf[64+16]; char* phash1 = alignup<16>(phash1buf); - - FormatHashBuffers(pblock, pmidstate, pdata, phash1); - - unsigned int& nBlockTime = *(unsigned int*)(pdata + 64 + 4); - unsigned int& nBlockBits = *(unsigned int*)(pdata + 64 + 8); - - // - // Search - // - int64 nStart = GetTime(); - uint256 hashTarget = CBigNum().SetCompact(pblock->nBits).getuint256(); - loop - { - unsigned int nHashesDone = 0; - uint256 thash; - char scratchpad[SCRYPT_SCRATCHPAD_SIZE]; - loop - { -#if defined(USE_SSE2) - // Detection would work, but in cases where we KNOW it always has SSE2, - // it is faster to use directly than to use a function pointer or conditional. -#if defined(_M_X64) || defined(__x86_64__) || defined(_M_AMD64) || (defined(MAC_OSX) && defined(__i386__)) - // Always SSE2: x86_64 or Intel MacOS X - scrypt_1024_1_1_256_sp_sse2(BEGIN(pblock->nVersion), BEGIN(thash), scratchpad); -#else - // Detect SSE2: 32bit x86 Linux or Windows - scrypt_1024_1_1_256_sp(BEGIN(pblock->nVersion), BEGIN(thash), scratchpad); -#endif -#else - // Generic scrypt - scrypt_1024_1_1_256_sp_generic(BEGIN(pblock->nVersion), BEGIN(thash), scratchpad); -#endif - - if (thash <= hashTarget) - { - // Found a solution - SetThreadPriority(THREAD_PRIORITY_NORMAL); - CheckWork(pblock, *pwalletMain, reservekey); - SetThreadPriority(THREAD_PRIORITY_LOWEST); - break; - } - pblock->nNonce += 1; - nHashesDone += 1; - if ((pblock->nNonce & 0xFF) == 0) - break; - } - - // Meter hashes/sec - static int64 nHashCounter; - if (nHPSTimerStart == 0) - { - nHPSTimerStart = GetTimeMillis(); - nHashCounter = 0; - } - else - nHashCounter += nHashesDone; - if (GetTimeMillis() - nHPSTimerStart > 4000) - { - static CCriticalSection cs; - { - LOCK(cs); - if (GetTimeMillis() - nHPSTimerStart > 4000) - { - dHashesPerSec = 1000.0 * nHashCounter / (GetTimeMillis() - nHPSTimerStart); - nHPSTimerStart = GetTimeMillis(); - nHashCounter = 0; - static int64 nLogTime; - if (GetTime() - nLogTime > 30 * 60) - { - nLogTime = GetTime(); - printf("hashmeter %6.0f khash/s\n", dHashesPerSec/1000.0); - } - } - } - } - - // Check for stop or if block needs to be rebuilt - boost::this_thread::interruption_point(); - if (vNodes.empty() && Params().NetworkID() != CChainParams::REGTEST) - break; - if (pblock->nNonce >= 0xffff0000) - break; - if (nTransactionsUpdated != nTransactionsUpdatedLast && GetTime() - nStart > 60) - break; - if (pindexPrev != pindexBest) - break; - - // Update nTime every few seconds - UpdateTime(*pblock, pindexPrev); - nBlockTime = ByteReverse(pblock->nTime); - if (TestNet()) - { - // Changing pblock->nTime can change work required on testnet: - nBlockBits = ByteReverse(pblock->nBits); - hashTarget = CBigNum().SetCompact(pblock->nBits).getuint256(); - } - - } - } -} - -void static GenericMiner(CWallet *pwallet, int algo) -{ - // Each thread has its own key and counter - CReserveKey reservekey(pwallet); - unsigned int nExtraNonce = 0; - - loop - { - MinerWaitOnline(); - - // - // Create new block - // - unsigned int nTransactionsUpdatedLast = nTransactionsUpdated; - CBlockIndex* pindexPrev = pindexBest; - - auto_ptr pblocktemplate(CreateNewBlock(reservekey, algo)); - if (!pblocktemplate.get()) - return; - CBlock *pblock = &pblocktemplate->block; - IncrementExtraNonce(pblock, pindexPrev, nExtraNonce); - - printf("Running %s miner with %"PRIszu" transactions in block (%u bytes)\n", - GetAlgoName(algo).c_str(), - pblock->vtx.size(), - ::GetSerializeSize(*pblock, SER_NETWORK, PROTOCOL_VERSION)); - - // - // Search - // - uint256 hashTarget = CBigNum().SetCompact(pblock->nBits).getuint256(); - int64 nStart = GetTime(); - uint256 hash; - loop - { - hash = pblock->GetPoWHash(algo); - if (hash <= hashTarget){ - SetThreadPriority(THREAD_PRIORITY_NORMAL); - - printf("proof-of-work found \n hash: %s \ntarget: %s\n", hash.GetHex().c_str(), hashTarget.GetHex().c_str()); - pblock->print(); - - CheckWork(pblock, *pwalletMain, reservekey); - SetThreadPriority(THREAD_PRIORITY_LOWEST); - break; - } - ++pblock->nNonce; - - // Meter hashes/sec - static int64 nHashCounter; - if (nHPSTimerStart == 0) - { - nHPSTimerStart = GetTimeMillis(); - nHashCounter = 0; - } - else - nHashCounter += 1; - if (GetTimeMillis() - nHPSTimerStart > 4000) - { - static CCriticalSection cs; - { - LOCK(cs); - if (GetTimeMillis() - nHPSTimerStart > 4000) - { - dHashesPerSec = 1000.0 * nHashCounter / (GetTimeMillis() - nHPSTimerStart); - nHPSTimerStart = GetTimeMillis(); - nHashCounter = 0; - static int64 nLogTime; - if (GetTime() - nLogTime > 30 * 60) - { - nLogTime = GetTime(); - printf("hashmeter %6.0f khash/s\n", dHashesPerSec/1000.0); - } - } - } - } - - // Check for stop or if block needs to be rebuilt - boost::this_thread::interruption_point(); - if (vNodes.empty() && Params().NetworkID() != CChainParams::REGTEST) - break; - if (++pblock->nNonce >= 0xffff0000) - break; - if (nTransactionsUpdated != nTransactionsUpdatedLast && GetTime() - nStart > 60) - break; - if (pindexPrev != pindexBest) - break; - - // Update nTime every few seconds - UpdateTime(*pblock, pindexPrev); - // nBlockTime = ByteReverse(pblock->nTime); - if (TestNet()) - { - // Changing pblock->nTime can change work required on testnet: - // nBlockBits = ByteReverse(pblock->nBits); - // hashTarget = CBigNum().SetCompact(pblock->nBits).getuint256(); - } - } - } -} - -void static ThreadBitcoinMiner(CWallet *pwallet) -{ - printf("Myriadcoin miner started\n"); - SetThreadPriority(THREAD_PRIORITY_LOWEST); - RenameThread("bitcoin-miner"); - - try - { - switch (miningAlgo) - { - case ALGO_SHA256D: - BitcoinMiner(pwallet); - break; - case ALGO_SCRYPT: - ScryptMiner(pwallet); - break; - case ALGO_GROESTL: - GenericMiner(pwallet, ALGO_GROESTL); - break; - case ALGO_SKEIN: - GenericMiner(pwallet, ALGO_SKEIN); - break; - case ALGO_QUBIT: - GenericMiner(pwallet, ALGO_QUBIT); - break; - } - } - catch (boost::thread_interrupted) - { - printf("Myriadcoin miner terminated\n"); - throw; - } -} - -void GenerateBitcoins(bool fGenerate, CWallet* pwallet) -{ - static boost::thread_group* minerThreads = NULL; - - int nThreads = GetArg("-genproclimit", -1); - if (nThreads < 0) { - if (Params().NetworkID() == CChainParams::REGTEST) - nThreads = 1; - else - nThreads = boost::thread::hardware_concurrency(); - } - - if (minerThreads != NULL) - { - minerThreads->interrupt_all(); - delete minerThreads; - minerThreads = NULL; - } - - if (nThreads == 0 || !fGenerate) - return; - - minerThreads = new boost::thread_group(); - for (int i = 0; i < nThreads; i++) - minerThreads->create_thread(boost::bind(&ThreadBitcoinMiner, pwallet)); -} - - - class CMainCleanup { public: @@ -5155,15 +4457,12 @@ public: mapBlockIndex.clear(); // orphan blocks - std::map::iterator it2 = mapOrphanBlocks.begin(); + std::map::iterator it2 = mapOrphanBlocks.begin(); for (; it2 != mapOrphanBlocks.end(); it2++) delete (*it2).second; mapOrphanBlocks.clear(); // orphan transactions - std::map::iterator it3 = mapOrphanTransactions.begin(); - for (; it3 != mapOrphanTransactions.end(); it3++) - delete (*it3).second; mapOrphanTransactions.clear(); } } instance_of_cmaincleanup; diff --git a/src/main.h b/src/main.h index 3d85cf66..fc2c37c4 100644 --- a/src/main.h +++ b/src/main.h @@ -1,127 +1,129 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2014 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef BITCOIN_MAIN_H #define BITCOIN_MAIN_H -#include "core.h" +#if defined(HAVE_CONFIG_H) +#include "bitcoin-config.h" +#endif + #include "bignum.h" -#include "sync.h" +#include "chainparams.h" +#include "coins.h" +#include "core.h" #include "net.h" #include "script.h" +#include "sync.h" +#include "txmempool.h" +#include "uint256.h" -#include +#include +#include +#include +#include +#include +#include +#include +#include -class CWallet; -class CBlock; class CBlockIndex; -class CKeyItem; -class CReserveKey; - -class CAddress; +class CBloomFilter; class CInv; -class CNode; - -struct CBlockIndexWorkComparator; /** The maximum allowed size for a serialized block, in bytes (network rule) */ static const unsigned int MAX_BLOCK_SIZE = 1000000; -/** The maximum size for mined blocks */ -static const unsigned int MAX_BLOCK_SIZE_GEN = MAX_BLOCK_SIZE/2; +/** Default for -blockmaxsize and -blockminsize, which control the range of sizes the mining code will create **/ +static const unsigned int DEFAULT_BLOCK_MAX_SIZE = 750000; +static const unsigned int DEFAULT_BLOCK_MIN_SIZE = 0; +/** Default for -blockprioritysize, maximum space for zero/low-fee transactions **/ +static const unsigned int DEFAULT_BLOCK_PRIORITY_SIZE = 50000; /** The maximum size for transactions we're willing to relay/mine */ -static const unsigned int MAX_STANDARD_TX_SIZE = MAX_BLOCK_SIZE_GEN/5; +static const unsigned int MAX_STANDARD_TX_SIZE = 100000; /** The maximum allowed number of signature check operations in a block (network rule) */ static const unsigned int MAX_BLOCK_SIGOPS = MAX_BLOCK_SIZE/50; /** The maximum number of orphan transactions kept in memory */ static const unsigned int MAX_ORPHAN_TRANSACTIONS = MAX_BLOCK_SIZE/100; +/** The maximum number of orphan blocks kept in memory */ +static const unsigned int MAX_ORPHAN_BLOCKS = 750; /** The maximum size of a blk?????.dat file (since 0.8) */ static const unsigned int MAX_BLOCKFILE_SIZE = 0x8000000; // 128 MiB /** The pre-allocation chunk size for blk?????.dat files (since 0.8) */ static const unsigned int BLOCKFILE_CHUNK_SIZE = 0x1000000; // 16 MiB /** The pre-allocation chunk size for rev?????.dat files (since 0.8) */ static const unsigned int UNDOFILE_CHUNK_SIZE = 0x100000; // 1 MiB -/** Fake height value used in CCoins to signify they are only in the memory pool (since 0.8) */ -static const unsigned int MEMPOOL_HEIGHT = 0x7FFFFFFF; -/** No amount larger than this (in satoshi) is valid */ -static const int64 MAX_MONEY = 2000000000 * COIN; -inline bool MoneyRange(int64 nValue) { return (nValue >= 0 && nValue <= MAX_MONEY); } /** Coinbase transaction outputs can only be spent after this number of new blocks (network rule) */ static const int COINBASE_MATURITY = 100; /** Threshold for nLockTime: below this value it is interpreted as block number, otherwise as UNIX timestamp. */ static const unsigned int LOCKTIME_THRESHOLD = 500000000; // Tue Nov 5 00:53:20 1985 UTC /** Maximum number of script-checking threads allowed */ static const int MAX_SCRIPTCHECK_THREADS = 16; -/** Default amount of block size reserved for high-priority transactions (in bytes) */ -static const int DEFAULT_BLOCK_PRIORITY_SIZE = 27000; +/** -par default (number of script-checking threads, 0 = auto) */ +static const int DEFAULT_SCRIPTCHECK_THREADS = 0; +/** Number of blocks that can be requested at any given time from a single peer. */ +static const int MAX_BLOCKS_IN_TRANSIT_PER_PEER = 128; +/** Timeout in seconds before considering a block download peer unresponsive. */ +static const unsigned int BLOCK_DOWNLOAD_TIMEOUT = 60; + #ifdef USE_UPNP static const int fHaveUPnP = true; #else static const int fHaveUPnP = false; #endif +/** "reject" message codes **/ +static const unsigned char REJECT_MALFORMED = 0x01; +static const unsigned char REJECT_INVALID = 0x10; +static const unsigned char REJECT_OBSOLETE = 0x11; +static const unsigned char REJECT_DUPLICATE = 0x12; +static const unsigned char REJECT_NONSTANDARD = 0x40; +static const unsigned char REJECT_DUST = 0x41; +static const unsigned char REJECT_INSUFFICIENTFEE = 0x42; +static const unsigned char REJECT_CHECKPOINT = 0x43; + extern CScript COINBASE_FLAGS; - - -extern int miningAlgo; - - extern CCriticalSection cs_main; +extern CTxMemPool mempool; extern std::map mapBlockIndex; -extern std::vector vBlockIndexByHeight; -extern std::set setBlockIndexValid; -extern CBlockIndex* pindexGenesisBlock; -extern int nBestHeight; -extern uint256 nBestChainWork; -extern uint256 nBestInvalidWork; -extern uint256 hashBestChain; -extern CBlockIndex* pindexBest; -extern unsigned int nTransactionsUpdated; -extern uint64 nLastBlockTx; -extern uint64 nLastBlockSize; +extern uint64_t nLastBlockTx; +extern uint64_t nLastBlockSize; extern const std::string strMessageMagic; -extern double dHashesPerSec; -extern int64 nHPSTimerStart; -extern int64 nTimeBestReceived; -extern CCriticalSection cs_setpwalletRegistered; -extern std::set setpwalletRegistered; +extern int64_t nTimeBestReceived; extern bool fImporting; extern bool fReindex; extern bool fBenchmark; extern int nScriptCheckThreads; extern bool fTxIndex; extern unsigned int nCoinCacheSize; -extern bool fHaveGUI; +extern int miningAlgo; -// Settings -extern int64 nTransactionFee; // Minimum disk space required - used in CheckDiskSpace() -static const uint64 nMinDiskSpace = 52428800; +static const uint64_t nMinDiskSpace = 52428800; -class CReserveKey; class CCoinsDB; class CBlockTreeDB; struct CDiskBlockPos; -class CCoins; class CTxUndo; -class CCoinsView; -class CCoinsViewCache; class CScriptCheck; class CValidationState; +class CWalletInterface; +struct CNodeStateStats; struct CBlockTemplate; /** Register a wallet to receive updates from core */ -void RegisterWallet(CWallet* pwalletIn); +void RegisterWallet(CWalletInterface* pwalletIn); /** Unregister a wallet from core */ -void UnregisterWallet(CWallet* pwalletIn); +void UnregisterWallet(CWalletInterface* pwalletIn); /** Unregister all wallets from core */ void UnregisterAllWallets(); /** Push an updated transaction to all registered wallets */ -void SyncWithWallets(const uint256 &hash, const CTransaction& tx, const CBlock* pblock = NULL, bool fUpdate = false); +void SyncWithWallets(const uint256 &hash, const CTransaction& tx, const CBlock* pblock = NULL); /** Register with a network node to receive its signals */ void RegisterNodeSignals(CNodeSignals& nodeSignals); @@ -133,7 +135,7 @@ void PushGetBlocks(CNode* pnode, CBlockIndex* pindexBegin, uint256 hashEnd); /** Process an incoming block */ bool ProcessBlock(CValidationState &state, CNode* pfrom, CBlock* pblock, CDiskBlockPos *dbp = NULL); /** Check whether enough disk space is available for an incoming block */ -bool CheckDiskSpace(uint64 nAdditionalBytes = 0); +bool CheckDiskSpace(uint64_t nAdditionalBytes = 0); /** Open a block file (blk?????.dat) */ FILE* OpenBlockFile(const CDiskBlockPos &pos, bool fReadOnly = false); /** Open an undo file (rev?????.dat) */ @@ -150,28 +152,16 @@ void UnloadBlockIndex(); bool VerifyDB(int nCheckLevel, int nCheckDepth); /** Print the loaded block tree */ void PrintBlockTree(); -/** Find a block by height in the currently-connected chain */ -CBlockIndex* FindBlockByHeight(int nHeight); /** Process protocol messages received from a given node */ bool ProcessMessages(CNode* pfrom); /** Send queued protocol messages to be sent to a give node */ bool SendMessages(CNode* pto, bool fSendTrickle); /** Run an instance of the script checking thread */ void ThreadScriptCheck(); -/** Run the miner threads */ -void GenerateBitcoins(bool fGenerate, CWallet* pwallet); -/** Generate a new block, without valid proof-of-work */ -CBlockTemplate* CreateNewBlock(CReserveKey& reservekey, int algo); -/** Modify the extranonce in a block */ -void IncrementExtraNonce(CBlock* pblock, CBlockIndex* pindexPrev, unsigned int& nExtraNonce); -/** Do mining precalculation */ -void FormatHashBuffers(CBlock* pblock, char* pmidstate, char* pdata, char* phash1); -/** Check mined block */ -bool CheckWork(CBlock* pblock, CWallet& wallet, CReserveKey& reservekey); /** Check whether a block hash satisfies the proof-of-work requirement specified by nBits */ bool CheckProofOfWork(uint256 hash, unsigned int nBits, int algo); /** Calculate the minimum amount of work a received block needs, without knowing its direct parent */ -unsigned int ComputeMinWork(unsigned int nBase, int64 nTime); +unsigned int ComputeMinWork(unsigned int nBase, int64_t nTime); /** Get the number of active peers */ int GetNumBlocksOfPeers(); /** Check whether we are doing an initial block download (synchronizing from disk or network) */ @@ -180,10 +170,10 @@ bool IsInitialBlockDownload(); std::string GetWarnings(std::string strFor); /** Retrieve a transaction (from memory pool, or from disk, if possible) */ bool GetTransaction(const uint256 &hash, CTransaction &tx, uint256 &hashBlock, bool fAllowSlow = false); -/** Connect/disconnect blocks until pindexNew is the new tip of the active block chain */ -bool SetBestChain(CValidationState &state, CBlockIndex* pindexNew); /** Find the best known block, and make it the tip of the block chain */ -bool ConnectBestBlock(CValidationState &state); +bool ActivateBestChain(CValidationState &state); +int64_t GetBlockValue(int nHeight, int64_t nFees); +unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHeader *pblock, int algo); void UpdateTime(CBlockHeader& block, const CBlockIndex* pindexPrev); @@ -193,6 +183,15 @@ CBlockIndex * InsertBlockIndex(uint256 hash); bool VerifySignature(const CCoins& txFrom, const CTransaction& txTo, unsigned int nIn, unsigned int flags, int nHashType); /** Abort with a message */ bool AbortNode(const std::string &msg); +/** Get statistics from node state */ +bool GetNodeStateStats(NodeId nodeid, CNodeStateStats &stats); +/** Increase a node's misbehavior score. */ +void Misbehaving(NodeId nodeid, int howmuch); + + +/** (try to) add transaction to memory pool **/ +bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransaction &tx, bool fLimitFree, + bool* pfMissingInputs, bool fRejectInsaneFee=false); @@ -201,8 +200,9 @@ bool AbortNode(const std::string &msg); - -bool GetWalletFile(CWallet* pwallet, std::string &strWalletFileOut); +struct CNodeStateStats { + int nMisbehavior; +}; struct CDiskBlockPos { @@ -265,7 +265,7 @@ enum GetMinFee_mode GMF_SEND, }; -int64 GetMinFee(const CTransaction& tx, bool fAllowFree, enum GetMinFee_mode mode); +int64_t GetMinFee(const CTransaction& tx, unsigned int nBytes, bool fAllowFree, enum GetMinFee_mode mode); // // Check transaction inputs, and make sure any @@ -279,10 +279,10 @@ int64 GetMinFee(const CTransaction& tx, bool fAllowFree, enum GetMinFee_mode mod // DUP CHECKSIG DROP ... repeated 100 times... OP_1 // - /** Check for standard transaction types - @param[in] mapInputs Map of previous transactions that have outputs we're spending - @return True if all inputs (scriptSigs) use only standard transaction forms - */ +/** Check for standard transaction types + @param[in] mapInputs Map of previous transactions that have outputs we're spending + @return True if all inputs (scriptSigs) use only standard transaction forms +*/ bool AreInputsStandard(const CTransaction& tx, CCoinsViewCache& mapInputs); /** Count ECDSA signature operations the old-fashioned (pre-0.6) way @@ -315,7 +315,7 @@ bool CheckInputs(const CTransaction& tx, CValidationState &state, CCoinsViewCach std::vector *pvChecks = NULL); // Apply the effects of this transaction on the UTXO set represented by view -bool UpdateCoins(const CTransaction& tx, CCoinsViewCache &view, CTxUndo &txundo, int nHeight, const uint256 &txhash); +void UpdateCoins(const CTransaction& tx, CValidationState &state, CCoinsViewCache &inputs, CTxUndo &txundo, int nHeight, const uint256 &txhash); // Context-independent validity checks bool CheckTransaction(const CTransaction& tx, CValidationState& state); @@ -325,12 +325,7 @@ bool CheckTransaction(const CTransaction& tx, CValidationState& state); */ bool IsStandardTx(const CTransaction& tx, std::string& reason); -bool IsFinalTx(const CTransaction &tx, int nBlockHeight = 0, int64 nBlockTime = 0); - -/** Amount of bitcoins spent by the transaction. - @return sum of all outputs (note: does not include fees) - */ -int64 GetValueOut(const CTransaction& tx); +bool IsFinalTx(const CTransaction &tx, int nBlockHeight = 0, int64_t nBlockTime = 0); /** Undo information for a CBlock */ class CBlockUndo @@ -347,7 +342,7 @@ public: // Open history file to append CAutoFile fileout = CAutoFile(OpenUndoFile(pos), SER_DISK, CLIENT_VERSION); if (!fileout) - return error("CBlockUndo::WriteToDisk() : OpenUndoFile failed"); + return error("CBlockUndo::WriteToDisk : OpenUndoFile failed"); // Write index header unsigned int nSize = fileout.GetSerializeSize(*this); @@ -356,7 +351,7 @@ public: // Write undo data long fileOutPos = ftell(fileout); if (fileOutPos < 0) - return error("CBlockUndo::WriteToDisk() : ftell failed"); + return error("CBlockUndo::WriteToDisk : ftell failed"); pos.nPos = (unsigned int)fileOutPos; fileout << *this; @@ -379,7 +374,7 @@ public: // Open history file to read CAutoFile filein = CAutoFile(OpenUndoFile(pos, true), SER_DISK, CLIENT_VERSION); if (!filein) - return error("CBlockUndo::ReadFromDisk() : OpenBlockFile failed"); + return error("CBlockUndo::ReadFromDisk : OpenBlockFile failed"); // Read block uint256 hashChecksum; @@ -388,7 +383,7 @@ public: filein >> hashChecksum; } catch (std::exception &e) { - return error("%s() : deserialize or I/O error", __PRETTY_FUNCTION__); + return error("%s : Deserialize or I/O error - %s", __func__, e.what()); } // Verify checksum @@ -396,7 +391,7 @@ public: hasher << hashBlock; hasher << *this; if (hashChecksum != hasher.GetHash()) - return error("CBlockUndo::ReadFromDisk() : checksum mismatch"); + return error("CBlockUndo::ReadFromDisk : Checksum mismatch"); return true; } @@ -434,6 +429,9 @@ public: /** A transaction with a merkle branch linking it to the block chain. */ class CMerkleTx : public CTransaction { +private: + int GetDepthInMainChainINTERNAL(CBlockIndex* &pindexRet) const; + public: uint256 hashBlock; std::vector vMerkleBranch; @@ -472,9 +470,14 @@ public: int SetMerkleBranch(const CBlock* pblock=NULL); + + // Return depth of transaction in blockchain: + // -1 : not in blockchain, and not in memory pool (conflicted transaction) + // 0 : in memory pool, waiting to be included in a block + // >=1 : this many blocks deep in the main chain int GetDepthInMainChain(CBlockIndex* &pindexRet) const; int GetDepthInMainChain() const { CBlockIndex *pindexRet; return GetDepthInMainChain(pindexRet); } - bool IsInMainChain() const { return GetDepthInMainChain() > 0; } + bool IsInMainChain() const { CBlockIndex *pindexRet; return GetDepthInMainChainINTERNAL(pindexRet) > 0; } int GetBlocksToMaturity() const; bool AcceptToMemoryPool(bool fLimitFree=true); }; @@ -618,8 +621,8 @@ public: unsigned int nUndoSize; // number of used bytes in the undo file unsigned int nHeightFirst; // lowest height of block in file unsigned int nHeightLast; // highest height of block in file - uint64 nTimeFirst; // earliest time of block in file - uint64 nTimeLast; // latest time of block in file + uint64_t nTimeFirst; // earliest time of block in file + uint64_t nTimeLast; // latest time of block in file IMPLEMENT_SERIALIZE( READWRITE(VARINT(nBlocks)); @@ -650,25 +653,19 @@ public: } // update statistics (does not update nSize) - void AddBlock(unsigned int nHeightIn, uint64 nTimeIn) { + void AddBlock(unsigned int nHeightIn, uint64_t nTimeIn) { if (nBlocks==0 || nHeightFirst > nHeightIn) nHeightFirst = nHeightIn; if (nBlocks==0 || nTimeFirst > nTimeIn) nTimeFirst = nTimeIn; nBlocks++; - if (nHeightIn > nHeightFirst) + if (nHeightIn > nHeightLast) nHeightLast = nHeightIn; if (nTimeIn > nTimeLast) nTimeLast = nTimeIn; } }; - - -extern CCriticalSection cs_LastBlockFile; -extern CBlockFileInfo infoLastBlockFile; -extern int nLastBlockFile; - enum BlockStatus { BLOCK_VALID_UNKNOWN = 0, BLOCK_VALID_HEADER = 1, // parsed, version ok, hash satisfies claimed PoW, 1 <= vtx count <= max, timestamp not in future @@ -687,7 +684,7 @@ enum BlockStatus { BLOCK_FAILED_MASK = 96 }; -const int64 nBlockAlgoWorkWeightStart = 142000; // block where algo work weighting starts +const int64_t nBlockAlgoWorkWeightStart = 142000; // block where algo work weighting starts /** The block chain is a tree shaped structure starting with the * genesis block at the root, with each block potentially having multiple @@ -735,6 +732,8 @@ public: unsigned int nBits; unsigned int nNonce; + // (memory only) Sequencial id assigned to distinguish order in which blocks are received. + uint32_t nSequenceId; CBlockIndex() { @@ -748,6 +747,7 @@ public: nTx = 0; nChainTx = 0; nStatus = 0; + nSequenceId = 0; nVersion = 0; hashMerkleRoot = 0; @@ -768,6 +768,7 @@ public: nTx = 0; nChainTx = 0; nStatus = 0; + nSequenceId = 0; nVersion = block.nVersion; hashMerkleRoot = block.hashMerkleRoot; @@ -775,7 +776,7 @@ public: nBits = block.nBits; nNonce = block.nNonce; } - + int GetAlgo() const { return ::GetAlgo(nVersion); } CDiskBlockPos GetBlockPos() const { @@ -814,9 +815,9 @@ public: return *phashBlock; } - int64 GetBlockTime() const + int64_t GetBlockTime() const { - return (int64)nTime; + return (int64_t)nTime; } CBigNum GetBlockWork() const @@ -863,15 +864,6 @@ public: return bnRes; } - bool IsInMainChain() const - { - return nHeight < (int)vBlockIndexByHeight.size() && vBlockIndexByHeight[nHeight] == this; - } - - CBlockIndex *GetNextInMainChain() const { - return nHeight+1 >= (int)vBlockIndexByHeight.size() ? NULL : vBlockIndexByHeight[nHeight+1]; - } - bool CheckIndex() const { int algo = GetAlgo(); @@ -883,11 +875,11 @@ public: enum { nMedianTimeSpan=11 }; - int64 GetMedianTimePast() const + int64_t GetMedianTimePast() const { - int64 pmedian[nMedianTimeSpan]; - int64* pbegin = &pmedian[nMedianTimeSpan]; - int64* pend = &pmedian[nMedianTimeSpan]; + int64_t pmedian[nMedianTimeSpan]; + int64_t* pbegin = &pmedian[nMedianTimeSpan]; + int64_t* pend = &pmedian[nMedianTimeSpan]; const CBlockIndex* pindex = this; for (int i = 0; i < nMedianTimeSpan && pindex; i++, pindex = pindex->pprev) @@ -897,59 +889,32 @@ public: return pbegin[(pend - pbegin)/2]; } - int64 GetMedianTime() const - { - const CBlockIndex* pindex = this; - for (int i = 0; i < nMedianTimeSpan/2; i++) - { - if (!pindex->GetNextInMainChain()) - return GetBlockTime(); - pindex = pindex->GetNextInMainChain(); - } - return pindex->GetMedianTimePast(); - } + int64_t GetMedianTime() const; /** * Returns true if there are nRequired or more blocks of minVersion or above * in the last nToCheck blocks, starting at pstart and going backwards. */ - /* static bool IsSuperMajority(int minVersion, const CBlockIndex* pstart, unsigned int nRequired, unsigned int nToCheck); - */ std::string ToString() const { - return strprintf("CBlockIndex(pprev=%p, pnext=%p, nHeight=%d, merkle=%s, hashBlock=%s)", - pprev, GetNextInMainChain(), nHeight, + return strprintf("CBlockIndex(pprev=%p, nHeight=%d, merkle=%s, hashBlock=%s)", + pprev, nHeight, hashMerkleRoot.ToString().c_str(), GetBlockHash().ToString().c_str()); } void print() const { - printf("%s\n", ToString().c_str()); + LogPrintf("%s\n", ToString().c_str()); } }; -struct CBlockIndexWorkComparator -{ - bool operator()(CBlockIndex *pa, CBlockIndex *pb) { - if (pa->nChainWork > pb->nChainWork) return false; - if (pa->nChainWork < pb->nChainWork) return true; - - if (pa->GetBlockHash() < pb->GetBlockHash()) return false; - if (pa->GetBlockHash() > pb->GetBlockHash()) return true; - - return false; // identical blocks - } -}; - - const CBlockIndex* GetLastBlockIndex(const CBlockIndex* pindex, int algo); const CBlockIndex* GetLastBlockIndexForAlgo(const CBlockIndex* pindex, int algo); - /** Used to marshal pointers into hashes for db storage. */ class CDiskBlockIndex : public CBlockIndex { @@ -1013,7 +978,7 @@ public: void print() const { - printf("%s\n", ToString().c_str()); + LogPrintf("%s\n", ToString().c_str()); } }; @@ -1026,266 +991,123 @@ private: MODE_ERROR, // run-time error } mode; int nDoS; + std::string strRejectReason; + unsigned char chRejectCode; + bool corruptionPossible; public: - CValidationState() : mode(MODE_VALID), nDoS(0) {} - bool DoS(int level, bool ret = false) { + CValidationState() : mode(MODE_VALID), nDoS(0), corruptionPossible(false) {} + bool DoS(int level, bool ret = false, + unsigned char chRejectCodeIn=0, std::string strRejectReasonIn="", + bool corruptionIn=false) { + chRejectCode = chRejectCodeIn; + strRejectReason = strRejectReasonIn; + corruptionPossible = corruptionIn; if (mode == MODE_ERROR) return ret; nDoS += level; mode = MODE_INVALID; return ret; } - bool Invalid(bool ret = false) { - return DoS(0, ret); + bool Invalid(bool ret = false, + unsigned char _chRejectCode=0, std::string _strRejectReason="") { + return DoS(0, ret, _chRejectCode, _strRejectReason); } - bool Error() { + bool Error(std::string strRejectReasonIn="") { + if (mode == MODE_VALID) + strRejectReason = strRejectReasonIn; mode = MODE_ERROR; return false; } bool Abort(const std::string &msg) { AbortNode(msg); - return Error(); + return Error(msg); } - bool IsValid() { + bool IsValid() const { return mode == MODE_VALID; } - bool IsInvalid() { + bool IsInvalid() const { return mode == MODE_INVALID; } - bool IsError() { + bool IsError() const { return mode == MODE_ERROR; } - bool IsInvalid(int &nDoSOut) { + bool IsInvalid(int &nDoSOut) const { if (IsInvalid()) { nDoSOut = nDoS; return true; } return false; } + bool CorruptionPossible() const { + return corruptionPossible; + } + unsigned char GetRejectCode() const { return chRejectCode; } + std::string GetRejectReason() const { return strRejectReason; } }; - - - - - - -/** Describes a place in the block chain to another node such that if the - * other node doesn't have the same branch, it can find a recent common trunk. - * The further back it is, the further before the fork it may be. - */ -class CBlockLocator -{ -protected: - std::vector vHave; -public: - CBlockLocator() {} - - explicit CBlockLocator(const CBlockIndex* pindex) - { - Set(pindex); - } - - explicit CBlockLocator(uint256 hashBlock); - - CBlockLocator(const std::vector& vHaveIn) - { - vHave = vHaveIn; - } - - IMPLEMENT_SERIALIZE - ( - if (!(nType & SER_GETHASH)) - READWRITE(nVersion); - READWRITE(vHave); - ) - - void SetNull() - { - vHave.clear(); - } - - bool IsNull() - { - return vHave.empty(); - } - - /** Given a block initialises the locator to that point in the chain. */ - void Set(const CBlockIndex* pindex); - /** Returns the distance in blocks this locator is from our chain head. */ - int GetDistanceBack(); - /** Returns the first best-chain block the locator contains. */ - CBlockIndex* GetBlockIndex(); - /** Returns the hash of the first best chain block the locator contains. */ - uint256 GetBlockHash(); - /** Returns the height of the first best chain block the locator has. */ - int GetHeight(); -}; - - - - - - - - -class CTxMemPool -{ -public: - mutable CCriticalSection cs; - std::map mapTx; - std::map mapNextTx; - - bool accept(CValidationState &state, CTransaction &tx, bool fLimitFree, bool* pfMissingInputs); - bool addUnchecked(const uint256& hash, CTransaction &tx); - bool remove(const CTransaction &tx, bool fRecursive = false); - bool removeConflicts(const CTransaction &tx); - void clear(); - void queryHashes(std::vector& vtxid); - void pruneSpent(const uint256& hash, CCoins &coins); - - unsigned long size() - { - LOCK(cs); - return mapTx.size(); - } - - bool exists(uint256 hash) - { - return (mapTx.count(hash) != 0); - } - - CTransaction& lookup(uint256 hash) - { - return mapTx[hash]; - } -}; - -extern CTxMemPool mempool; - -struct CCoinsStats -{ - int nHeight; - uint256 hashBlock; - uint64 nTransactions; - uint64 nTransactionOutputs; - uint64 nSerializedSize; - uint256 hashSerialized; - int64 nTotalAmount; - - CCoinsStats() : nHeight(0), hashBlock(0), nTransactions(0), nTransactionOutputs(0), nSerializedSize(0), hashSerialized(0), nTotalAmount(0) {} -}; - -/** Abstract view on the open txout dataset. */ -class CCoinsView -{ -public: - // Retrieve the CCoins (unspent transaction outputs) for a given txid - virtual bool GetCoins(const uint256 &txid, CCoins &coins); - - // Modify the CCoins for a given txid - virtual bool SetCoins(const uint256 &txid, const CCoins &coins); - - // Just check whether we have data for a given txid. - // This may (but cannot always) return true for fully spent transactions - virtual bool HaveCoins(const uint256 &txid); - - // Retrieve the block index whose state this CCoinsView currently represents - virtual CBlockIndex *GetBestBlock(); - - // Modify the currently active block index - virtual bool SetBestBlock(CBlockIndex *pindex); - - // Do a bulk modification (multiple SetCoins + one SetBestBlock) - virtual bool BatchWrite(const std::map &mapCoins, CBlockIndex *pindex); - - // Calculate statistics about the unspent transaction output set - virtual bool GetStats(CCoinsStats &stats); - - // As we use CCoinsViews polymorphically, have a virtual destructor - virtual ~CCoinsView() {} -}; - -/** CCoinsView backed by another CCoinsView */ -class CCoinsViewBacked : public CCoinsView -{ -protected: - CCoinsView *base; - -public: - CCoinsViewBacked(CCoinsView &viewIn); - bool GetCoins(const uint256 &txid, CCoins &coins); - bool SetCoins(const uint256 &txid, const CCoins &coins); - bool HaveCoins(const uint256 &txid); - CBlockIndex *GetBestBlock(); - bool SetBestBlock(CBlockIndex *pindex); - void SetBackend(CCoinsView &viewIn); - bool BatchWrite(const std::map &mapCoins, CBlockIndex *pindex); - bool GetStats(CCoinsStats &stats); -}; - -/** CCoinsView that adds a memory cache for transactions to another CCoinsView */ -class CCoinsViewCache : public CCoinsViewBacked -{ -protected: - CBlockIndex *pindexTip; - std::map cacheCoins; - -public: - CCoinsViewCache(CCoinsView &baseIn, bool fDummy = false); - - // Standard CCoinsView methods - bool GetCoins(const uint256 &txid, CCoins &coins); - bool SetCoins(const uint256 &txid, const CCoins &coins); - bool HaveCoins(const uint256 &txid); - CBlockIndex *GetBestBlock(); - bool SetBestBlock(CBlockIndex *pindex); - bool BatchWrite(const std::map &mapCoins, CBlockIndex *pindex); - - // Return a modifiable reference to a CCoins. Check HaveCoins first. - // Many methods explicitly require a CCoinsViewCache because of this method, to reduce - // copying. - CCoins &GetCoins(const uint256 &txid); - - // Push the modifications applied to this cache to its base. - // Failure to call this method before destruction will cause the changes to be forgotten. - bool Flush(); - - // Calculate the size of the cache (in number of transactions) - unsigned int GetCacheSize(); - - /** Amount of bitcoins coming in to a transaction - Note that lightweight clients may not know anything besides the hash of previous transactions, - so may not be able to calculate this. - - @param[in] tx transaction for which we are checking input total - @return Sum of value of all inputs (scriptSigs) - @see CTransaction::FetchInputs - */ - int64 GetValueIn(const CTransaction& tx); - - // Check whether all prevouts of the transaction are present in the UTXO set represented by this view - bool HaveInputs(const CTransaction& tx); - - const CTxOut &GetOutputFor(const CTxIn& input); - +/** An in-memory indexed chain of blocks. */ +class CChain { private: - std::map::iterator FetchCoins(const uint256 &txid); -}; - -/** CCoinsView that brings transactions from a memorypool into view. - It does not check for spendings by memory pool transactions. */ -class CCoinsViewMemPool : public CCoinsViewBacked -{ -protected: - CTxMemPool &mempool; + std::vector vChain; public: - CCoinsViewMemPool(CCoinsView &baseIn, CTxMemPool &mempoolIn); - bool GetCoins(const uint256 &txid, CCoins &coins); - bool HaveCoins(const uint256 &txid); + /** Returns the index entry for the genesis block of this chain, or NULL if none. */ + CBlockIndex *Genesis() const { + return vChain.size() > 0 ? vChain[0] : NULL; + } + + /** Returns the index entry for the tip of this chain, or NULL if none. */ + CBlockIndex *Tip() const { + return vChain.size() > 0 ? vChain[vChain.size() - 1] : NULL; + } + + /** Returns the index entry at a particular height in this chain, or NULL if no such height exists. */ + CBlockIndex *operator[](int nHeight) const { + if (nHeight < 0 || nHeight >= (int)vChain.size()) + return NULL; + return vChain[nHeight]; + } + + /** Compare two chains efficiently. */ + friend bool operator==(const CChain &a, const CChain &b) { + return a.vChain.size() == b.vChain.size() && + a.vChain[a.vChain.size() - 1] == b.vChain[b.vChain.size() - 1]; + } + + /** Efficiently check whether a block is present in this chain. */ + bool Contains(const CBlockIndex *pindex) const { + return (*this)[pindex->nHeight] == pindex; + } + + /** Find the successor of a block in this chain, or NULL if the given index is not found or is the tip. */ + CBlockIndex *Next(const CBlockIndex *pindex) const { + if (Contains(pindex)) + return (*this)[pindex->nHeight + 1]; + else + return NULL; + } + + /** Return the maximal height in the chain. Is equal to chain.Tip() ? chain.Tip()->nHeight : -1. */ + int Height() const { + return vChain.size() - 1; + } + + /** Set/initialize a chain with a given tip. Returns the forking point. */ + CBlockIndex *SetTip(CBlockIndex *pindex); + + /** Return a CBlockLocator that refers to a block in this chain (by default the tip). */ + CBlockLocator GetLocator(const CBlockIndex *pindex = NULL) const; + + /** Find the last common block between this chain and a locator. */ + CBlockIndex *FindFork(const CBlockLocator &locator) const; }; +/** The currently-connected chain of blocks. */ +extern CChain chainActive; + +/** The currently best known chain of headers (some of which may be invalid). */ +extern CChain chainMostWork; + /** Global variable that points to the active CCoinsView (protected by cs_main) */ extern CCoinsViewCache *pcoinsTip; @@ -1331,4 +1153,18 @@ public: ) }; + +class CWalletInterface { +protected: + virtual void SyncTransaction(const uint256 &hash, const CTransaction &tx, const CBlock *pblock) =0; + virtual void EraseFromWallet(const uint256 &hash) =0; + virtual void SetBestChain(const CBlockLocator &locator) =0; + virtual void UpdatedTransaction(const uint256 &hash) =0; + virtual void Inventory(const uint256 &hash) =0; + virtual void ResendWalletTransactions() =0; + friend void ::RegisterWallet(CWalletInterface*); + friend void ::UnregisterWallet(CWalletInterface*); + friend void ::UnregisterAllWallets(); +}; + #endif diff --git a/src/makefile.linux-mingw b/src/makefile.linux-mingw deleted file mode 100644 index 2d92f512..00000000 --- a/src/makefile.linux-mingw +++ /dev/null @@ -1,150 +0,0 @@ -# Copyright (c) 2009-2010 Satoshi Nakamoto -# Distributed under the MIT/X11 software license, see the accompanying -# file COPYING or http://www.opensource.org/licenses/mit-license.php. - -DEPSDIR:=/usr/i586-mingw32msvc - -CC := i586-mingw32msvc-gcc -CXX := i586-mingw32msvc-g++ - -USE_UPNP:=0 -USE_IPV6:=1 - -INCLUDEPATHS= \ - -I"$(CURDIR)" \ - -I"$(CURDIR)"/obj \ - -I"$(DEPSDIR)/boost_1_50_0" \ - -I"$(DEPSDIR)/db-4.8.30.NC/build_unix" \ - -I"$(DEPSDIR)/openssl-1.0.1c/include" \ - -I"$(DEPSDIR)" - -LIBPATHS= \ - -L"$(DEPSDIR)/boost_1_50_0/stage/lib" \ - -L"$(DEPSDIR)/db-4.8.30.NC/build_unix" \ - -L"$(DEPSDIR)/openssl-1.0.1c" - -LIBS= \ - $(CURDIR)/leveldb/libleveldb.a $(CURDIR)/leveldb/libmemenv.a \ - -l boost_system-mt-s \ - -l boost_filesystem-mt-s \ - -l boost_program_options-mt-s \ - -l boost_thread_win32-mt-s \ - -l boost_chrono-mt-s \ - -l db_cxx \ - -l ssl \ - -l crypto - -DEFS=-D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB -DBOOST_SPIRIT_THREADSAFE -DEBUGFLAGS=-g -xCXXFLAGS=-O2 -w -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter $(DEBUGFLAGS) $(DEFS) $(INCLUDEPATHS) $(CXXFLAGS) -# enable: ASLR, DEP and large address aware -xLDFLAGS=-Wl,--dynamicbase -Wl,--nxcompat -Wl,--large-address-aware $(LDFLAGS) - -TESTDEFS = -DTEST_DATA_DIR=$(abspath test/data) - -ifndef USE_UPNP - override USE_UPNP = - -endif -ifneq (${USE_UPNP}, -) - LIBPATHS += -L"$(DEPSDIR)/miniupnpc" - LIBS += -l miniupnpc -l iphlpapi - DEFS += -DSTATICLIB -DUSE_UPNP=$(USE_UPNP) -endif - -ifneq (${USE_IPV6}, -) - DEFS += -DUSE_IPV6=$(USE_IPV6) -endif - -LIBS += -l mingwthrd -l kernel32 -l user32 -l gdi32 -l comdlg32 -l winspool -l winmm -l shell32 -l comctl32 -l ole32 -l oleaut32 -l uuid -l rpcrt4 -l advapi32 -l ws2_32 -l mswsock -l shlwapi - -# TODO: make the mingw builds smarter about dependencies, like the linux/osx builds are -HEADERS = $(wildcard *.h) - -OBJS= \ - leveldb/libleveldb.a \ - obj/alert.o \ - obj/version.o \ - obj/checkpoints.o \ - obj/netbase.o \ - obj/addrman.o \ - obj/crypter.o \ - obj/key.o \ - obj/db.o \ - obj/init.o \ - obj/bitcoind.o \ - obj/keystore.o \ - obj/core.o \ - obj/main.o \ - obj/net.o \ - obj/protocol.o \ - obj/bitcoinrpc.o \ - obj/rpcdump.o \ - obj/rpcnet.o \ - obj/rpcmining.o \ - obj/rpcwallet.o \ - obj/rpcblockchain.o \ - obj/rpcrawtransaction.o \ - obj/script.o \ - obj/sync.o \ - obj/util.o \ - obj/wallet.o \ - obj/walletdb.o \ - obj/noui.o \ - obj/hash.o \ - obj/bloom.o \ - obj/leveldb.o \ - obj/txdb.o \ - obj/chainparams.o \ - obj/scrypt.o \ - obj/scrypt-sse2.o \ - obj/blake.o \ - obj/bmw.o \ - obj/groestl.o \ - obj/jh.o \ - obj/keccak.o \ - obj/skein.o \ - obj/echo.o \ - obj/luffa.o \ - obj/simd.o \ - obj/cubehash.o \ - obj/shavite.o - -all: myriadcoind.exe - -DEFS += -I"$(CURDIR)/leveldb/include" -DEFS += -I"$(CURDIR)/leveldb/helpers" -leveldb/libleveldb.a: - @echo "Building LevelDB ..." && cd leveldb && TARGET_OS=OS_WINDOWS_CROSSCOMPILE $(MAKE) CC=$(CC) CXX=$(CXX) OPT="$(xCXXFLAGS)" libleveldb.a libmemenv.a && i586-mingw32msvc-ranlib libleveldb.a && i586-mingw32msvc-ranlib libmemenv.a && cd .. - -obj/build.h: FORCE - /bin/sh ../share/genbuild.sh obj/build.h -version.cpp: obj/build.h -DEFS += -DHAVE_BUILD_INFO - -obj/%.o: %.cpp $(HEADERS) - $(CXX) -c $(xCXXFLAGS) -o $@ $< - -obj/%.o: %.c $(HEADERS) - $(CXX) -c $(xCXXFLAGS) -fpermissive -o $@ $< - -myriadcoind.exe: $(OBJS:obj/%=obj/%) - $(CXX) $(xCXXFLAGS) $(xLDFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS) - -TESTOBJS := $(patsubst test/%.cpp,obj-test/%.o,$(wildcard test/*.cpp)) - -obj-test/%.o: test/%.cpp $(HEADERS) - $(CXX) -c $(TESTDEFS) $(xCXXFLAGS) -o $@ $< - -test_myriadcoin.exe: $(TESTOBJS) $(filter-out obj/init.o obj/myriadcoind.o,$(OBJS:obj/%=obj/%)) - $(CXX) $(xCXXFLAGS) $(xLDFLAGS) -o $@ $(LIBPATHS) $^ -lboost_unit_test_framework-mt-s $(LIBS) - - -clean: - -rm -f obj/*.o - -rm -f myriadcoind.exe - -rm -f obj-test/*.o - -rm -f test_myriadcoin.exe - -rm -f obj/build.h - cd leveldb && TARGET_OS=OS_WINDOWS_CROSSCOMPILE $(MAKE) clean && cd .. - -FORCE: diff --git a/src/makefile.mingw b/src/makefile.mingw deleted file mode 100644 index 4bbf1cc2..00000000 --- a/src/makefile.mingw +++ /dev/null @@ -1,158 +0,0 @@ -# Copyright (c) 2009-2010 Satoshi Nakamoto -# Distributed under the MIT/X11 software license, see the accompanying -# file COPYING or http://www.opensource.org/licenses/mit-license.php. - -# Makefile for the MinGW g++ compiler/toolchain -# -# Assumes Berkeley DB, Boost, and OpenSSL have all been compiled and installed -# into /usr/local (/usr/local/include, /usr/local/lib). -# -# If dependencies are somewhere else, run 'make DEPSDIR=/path/' -# -# Boost libraries are given wacky names that include the particular version of -# boost you're using; set BOOST_SUFFIX appropriately. -# -# 'make clean' assumes it is running inside a MSYS shell, and uses 'rm' -# to remove files. - -CXX ?= g++ - -USE_UPNP:=- -USE_IPV6:=1 - -DEPSDIR?=/usr/local -BOOST_SUFFIX?=-mgw46-mt-s-1_52 - -INCLUDEPATHS= \ - -I"$(CURDIR)" \ - -I"$(DEPSDIR)/include" - -LIBPATHS= \ - -L"$(CURDIR)/leveldb" \ - -L"$(DEPSDIR)/lib" - -LIBS= \ - -l leveldb \ - -l memenv \ - -l boost_system$(BOOST_SUFFIX) \ - -l boost_filesystem$(BOOST_SUFFIX) \ - -l boost_program_options$(BOOST_SUFFIX) \ - -l boost_thread$(BOOST_SUFFIX) \ - -l boost_chrono$(BOOST_SUFFIX) \ - -l db_cxx \ - -l ssl \ - -l crypto - -DEFS=-DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB -DBOOST_SPIRIT_THREADSAFE -DEBUGFLAGS=-g -CFLAGS=-mthreads -O2 -w -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter $(DEBUGFLAGS) $(DEFS) $(INCLUDEPATHS) -# enable: ASLR, DEP and large address aware -LDFLAGS=-Wl,--dynamicbase -Wl,--nxcompat -Wl,--large-address-aware - -TESTDEFS = -DTEST_DATA_DIR=$(abspath test/data) - -ifndef USE_UPNP - override USE_UPNP = - -endif -ifneq (${USE_UPNP}, -) - LIBS += -l miniupnpc -l iphlpapi - DEFS += -DSTATICLIB -DUSE_UPNP=$(USE_UPNP) -endif - -ifneq (${USE_IPV6}, -) - DEFS += -DUSE_IPV6=$(USE_IPV6) -endif - -LIBS += -l kernel32 -l user32 -l gdi32 -l comdlg32 -l winspool -l winmm -l shell32 -l comctl32 -l ole32 -l oleaut32 -l uuid -l rpcrt4 -l advapi32 -l ws2_32 -l mswsock -l shlwapi - -# TODO: make the mingw builds smarter about dependencies, like the linux/osx builds are -HEADERS = $(wildcard *.h) - -OBJS= \ - leveldb/libleveldb.a \ - obj/alert.o \ - obj/version.o \ - obj/checkpoints.o \ - obj/netbase.o \ - obj/addrman.o \ - obj/crypter.o \ - obj/key.o \ - obj/db.o \ - obj/init.o \ - obj/bitcoind.o \ - obj/keystore.o \ - obj/core.o \ - obj/main.o \ - obj/net.o \ - obj/protocol.o \ - obj/bitcoinrpc.o \ - obj/rpcdump.o \ - obj/rpcnet.o \ - obj/rpcmining.o \ - obj/rpcwallet.o \ - obj/rpcblockchain.o \ - obj/rpcrawtransaction.o \ - obj/script.o \ - obj/sync.o \ - obj/util.o \ - obj/wallet.o \ - obj/walletdb.o \ - obj/hash.o \ - obj/bloom.o \ - obj/noui.o \ - obj/leveldb.o \ - obj/txdb.o \ - obj/chainparams.o \ - obj/scrypt.o \ - obj/scrypt-sse2.o \ - obj/blake.o \ - obj/bmw.o \ - obj/groestl.o \ - obj/jh.o \ - obj/keccak.o \ - obj/skein.o \ - obj/echo.o \ - obj/luffa.o \ - obj/simd.o \ - obj/cubehash.o \ - obj/shavite.o - - -all: myriadcoind.exe - -test check: test_myriadcoin.exe FORCE - test_myriadcoin.exe - -# -# LevelDB support -# -DEFS += $(addprefix -I,$(CURDIR)/leveldb/include) -DEFS += $(addprefix -I,$(CURDIR)/leveldb/helpers) - -leveldb/libleveldb.a: - cd leveldb && $(MAKE) CC=$(CC) CXX=$(CXX) OPT="$(CFLAGS)" TARGET_OS=NATIVE_WINDOWS libleveldb.a libmemenv.a && cd .. - -obj/%.o: %.cpp $(HEADERS) - $(CXX) -c $(CFLAGS) -o $@ $< - -obj/%.o: %.c $(HEADERS) - $(CXX) -c $(CFLAGS) -fpermissive -o $@ $< - -myriadcoind.exe: $(OBJS:obj/%=obj/%) - $(CXX) $(CFLAGS) $(LDFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS) - -TESTOBJS := $(patsubst test/%.cpp,obj-test/%.o,$(wildcard test/*.cpp)) - -obj-test/%.o: test/%.cpp $(HEADERS) - $(CXX) -c $(TESTDEFS) $(CFLAGS) -o $@ $< - -test_myriadcoin.exe: $(TESTOBJS) $(filter-out obj/init.o obj/myriadcoind.o,$(OBJS:obj/%=obj/%)) - $(CXX) $(CFLAGS) $(LDFLAGS) -o $@ $(LIBPATHS) $^ -lboost_unit_test_framework$(BOOST_SUFFIX) $(LIBS) - -clean: - rm -f myriadcoind.exe test_myriadcoin.exe - rm -f obj/* - rm -f obj-test/* - cd leveldb && $(MAKE) TARGET_OS=NATIVE_WINDOWS clean && cd .. - -FORCE: diff --git a/src/makefile.osx b/src/makefile.osx deleted file mode 100644 index 8eb8af32..00000000 --- a/src/makefile.osx +++ /dev/null @@ -1,200 +0,0 @@ -# -*- mode: Makefile; -*- -# Copyright (c) 2011 Bitcoin Developers -# Distributed under the MIT/X11 software license, see the accompanying -# file COPYING or http://www.opensource.org/licenses/mit-license.php. - -# Mac OS X makefile for myriadcoin -# Originally by Laszlo Hanyecz (solar@heliacal.net) - -CXX=llvm-g++ -DEPSDIR=/opt/local - -INCLUDEPATHS= \ - -I"$(CURDIR)" \ - -I"$(CURDIR)"/obj \ - -I"$(DEPSDIR)/include" \ - -I"$(DEPSDIR)/include/db48" - -LIBPATHS= \ - -L"$(DEPSDIR)/lib" \ - -L"$(DEPSDIR)/lib/db48" - -USE_UPNP:=1 -USE_IPV6:=1 - -LIBS= -dead_strip - -TESTDEFS = -DTEST_DATA_DIR=$(abspath test/data) - -ifdef STATIC -# Build STATIC if you are redistributing the myriadcoind binary -TESTLIBS += \ - $(DEPSDIR)/lib/libboost_unit_test_framework-mt.a -LIBS += \ - $(DEPSDIR)/lib/db48/libdb_cxx-4.8.a \ - $(DEPSDIR)/lib/libboost_system-mt.a \ - $(DEPSDIR)/lib/libboost_filesystem-mt.a \ - $(DEPSDIR)/lib/libboost_program_options-mt.a \ - $(DEPSDIR)/lib/libboost_thread-mt.a \ - $(DEPSDIR)/lib/libboost_chrono-mt.a \ - $(DEPSDIR)/lib/libssl.a \ - $(DEPSDIR)/lib/libcrypto.a \ - -lz -else -TESTLIBS += \ - -lboost_unit_test_framework-mt -LIBS += \ - -ldb_cxx-4.8 \ - -lboost_system-mt \ - -lboost_filesystem-mt \ - -lboost_program_options-mt \ - -lboost_thread-mt \ - -lboost_chrono-mt \ - -lssl \ - -lcrypto \ - -lz -TESTDEFS += -DBOOST_TEST_DYN_LINK -endif - -DEFS=-DMAC_OSX -DMSG_NOSIGNAL=0 -DBOOST_SPIRIT_THREADSAFE - -ifdef RELEASE -# Compile for maximum compatibility and smallest size. -# This requires that dependencies are compiled -# the same way. -CFLAGS = -mmacosx-version-min=10.5 -arch i386 -O3 -else -DEBUGFLAGS = -g -endif - -# ppc doesn't work because we don't support big-endian -CFLAGS += -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter \ - $(DEBUGFLAGS) $(DEFS) $(INCLUDEPATHS) - -OBJS= \ - leveldb/libleveldb.a \ - obj/alert.o \ - obj/version.o \ - obj/checkpoints.o \ - obj/netbase.o \ - obj/addrman.o \ - obj/crypter.o \ - obj/key.o \ - obj/db.o \ - obj/init.o \ - obj/bitcoind.o \ - obj/keystore.o \ - obj/core.o \ - obj/main.o \ - obj/net.o \ - obj/protocol.o \ - obj/bitcoinrpc.o \ - obj/rpcdump.o \ - obj/rpcnet.o \ - obj/rpcmining.o \ - obj/rpcwallet.o \ - obj/rpcblockchain.o \ - obj/rpcrawtransaction.o \ - obj/script.o \ - obj/sync.o \ - obj/util.o \ - obj/wallet.o \ - obj/walletdb.o \ - obj/hash.o \ - obj/bloom.o \ - obj/noui.o \ - obj/leveldb.o \ - obj/txdb.o \ - obj/chainparams.o \ - obj/scrypt.o \ - obj/scrypt-sse2.o \ - obj/blake.o \ - obj/bmw.o \ - obj/groestl.o \ - obj/jh.o \ - obj/keccak.o \ - obj/skein.o \ - obj/echo.o \ - obj/luffa.o \ - obj/simd.o \ - obj/cubehash.o \ - obj/shavite.o - -ifndef USE_UPNP - override USE_UPNP = - -endif -ifneq (${USE_UPNP}, -) - DEFS += -DUSE_UPNP=$(USE_UPNP) -ifdef STATIC - LIBS += $(DEPSDIR)/lib/libminiupnpc.a -else - LIBS += -lminiupnpc -endif -endif - -ifneq (${USE_IPV6}, -) - DEFS += -DUSE_IPV6=$(USE_IPV6) -endif - -all: myriadcoind - -test check: test_myriadcoin FORCE - ./test_myriadcoin - -# -# LevelDB support -# -LIBS += $(CURDIR)/leveldb/libleveldb.a $(CURDIR)/leveldb/libmemenv.a -DEFS += $(addprefix -I,$(CURDIR)/leveldb/include) -DEFS += $(addprefix -I,$(CURDIR)/leveldb/helpers) -leveldb/libleveldb.a: - @echo "Building LevelDB ..." && cd leveldb && $(MAKE) CC=$(CC) CXX=$(CXX) OPT="$(CFLAGS)" libleveldb.a libmemenv.a && cd .. - -# auto-generated dependencies: --include obj/*.P --include obj-test/*.P - -obj/build.h: FORCE - /bin/sh ../share/genbuild.sh obj/build.h -version.cpp: obj/build.h -DEFS += -DHAVE_BUILD_INFO - -obj/%.o: %.cpp - $(CXX) -c $(CFLAGS) -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -obj/%.o: %.c - $(CXX) -c $(CFLAGS) -fpermissive -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -myriadcoind: $(OBJS:obj/%=obj/%) - $(CXX) $(CFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS) - -TESTOBJS := $(patsubst test/%.cpp,obj-test/%.o,$(wildcard test/*.cpp)) - -obj-test/%.o: test/%.cpp - $(CXX) -c $(TESTDEFS) $(CFLAGS) -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -test_myriadcoin: $(TESTOBJS) $(filter-out obj/init.o obj/myriadcoind.o,$(OBJS:obj/%=obj/%)) - $(CXX) $(CFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS) $(TESTLIBS) - -clean: - -rm -f myriadcoind test_myriadcoin - -rm -f obj/*.o - -rm -f obj-test/*.o - -rm -f obj/*.P - -rm -f obj-test/*.P - -rm -f obj/build.h - -cd leveldb && $(MAKE) clean || true - -FORCE: diff --git a/src/makefile.unix b/src/makefile.unix deleted file mode 100644 index c7b9d410..00000000 --- a/src/makefile.unix +++ /dev/null @@ -1,224 +0,0 @@ -# Copyright (c) 2009-2010 Satoshi Nakamoto -# Distributed under the MIT/X11 software license, see the accompanying -# file COPYING or http://www.opensource.org/licenses/mit-license.php. - -# :=0 --> UPnP support turned off by default at runtime -# :=1 --> UPnP support turned on by default at runtime -# :=- --> No UPnP support - miniupnp not required -USE_UPNP:=0 - -# :=1 --> Enable IPv6 support -# :=0 --> Disable IPv6 support -USE_IPV6:=1 - -LINK:=$(CXX) - -DEFS=-DBOOST_SPIRIT_THREADSAFE -D_FILE_OFFSET_BITS=64 - -DEFS += $(addprefix -I,$(CURDIR) $(CURDIR)/obj $(BOOST_INCLUDE_PATH) $(BDB_INCLUDE_PATH) $(OPENSSL_INCLUDE_PATH)) -LIBS = $(addprefix -L,$(BOOST_LIB_PATH) $(BDB_LIB_PATH) $(OPENSSL_LIB_PATH)) - -TESTDEFS = -DTEST_DATA_DIR=$(abspath test/data) - -LMODE = dynamic -LMODE2 = dynamic -ifdef STATIC - LMODE = static - ifeq (${STATIC}, all) - LMODE2 = static - endif -else - TESTDEFS += -DBOOST_TEST_DYN_LINK -endif - -# for boost 1.37, add -mt to the boost libraries -LIBS += \ - -Wl,-B$(LMODE) \ - -l boost_system$(BOOST_LIB_SUFFIX) \ - -l boost_filesystem$(BOOST_LIB_SUFFIX) \ - -l boost_program_options$(BOOST_LIB_SUFFIX) \ - -l boost_thread$(BOOST_LIB_SUFFIX) \ - -l db_cxx$(BDB_LIB_SUFFIX) \ - -l ssl \ - -l crypto - -TESTLIBS += \ - -Wl,-B$(LMODE) \ - -l boost_unit_test_framework$(BOOST_LIB_SUFFIX) - -ifndef USE_UPNP - override USE_UPNP = - -endif -ifneq (${USE_UPNP}, -) - LIBS += -l miniupnpc - DEFS += -DUSE_UPNP=$(USE_UPNP) -endif - -ifneq (${USE_IPV6}, -) - DEFS += -DUSE_IPV6=$(USE_IPV6) -endif - -LIBS+= \ - -Wl,-B$(LMODE2) \ - -l z \ - -l dl \ - -l pthread - - -# Hardening -# Make some classes of vulnerabilities unexploitable in case one is discovered. -# - # This is a workaround for Ubuntu bug #691722, the default -fstack-protector causes - # -fstack-protector-all to be ignored unless -fno-stack-protector is used first. - # see: https://bugs.launchpad.net/ubuntu/+source/gcc-4.5/+bug/691722 - HARDENING=-fno-stack-protector - - # Stack Canaries - # Put numbers at the beginning of each stack frame and check that they are the same. - # If a stack buffer if overflowed, it writes over the canary number and then on return - # when that number is checked, it won't be the same and the program will exit with - # a "Stack smashing detected" error instead of being exploited. - HARDENING+=-fstack-protector-all -Wstack-protector - - # Make some important things such as the global offset table read only as soon as - # the dynamic linker is finished building it. This will prevent overwriting of addresses - # which would later be jumped to. - LDHARDENING+=-Wl,-z,relro -Wl,-z,now - - # Build position independent code to take advantage of Address Space Layout Randomization - # offered by some kernels. - # see doc/build-unix.txt for more information. - ifdef PIE - HARDENING+=-fPIE - LDHARDENING+=-pie - endif - - # -D_FORTIFY_SOURCE=2 does some checking for potentially exploitable code patterns in - # the source such overflowing a statically defined buffer. - HARDENING+=-D_FORTIFY_SOURCE=2 -# - - -DEBUGFLAGS=-g - -# CXXFLAGS can be specified on the make command line, so we use xCXXFLAGS that only -# adds some defaults in front. Unfortunately, CXXFLAGS=... $(CXXFLAGS) does not work. -xCXXFLAGS=-O2 -pthread -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter \ - $(DEBUGFLAGS) $(DEFS) $(HARDENING) $(CXXFLAGS) - -# LDFLAGS can be specified on the make command line, so we use xLDFLAGS that only -# adds some defaults in front. Unfortunately, LDFLAGS=... $(LDFLAGS) does not work. -xLDFLAGS=$(LDHARDENING) $(LDFLAGS) - -OBJS= \ - leveldb/libleveldb.a \ - obj/alert.o \ - obj/version.o \ - obj/checkpoints.o \ - obj/netbase.o \ - obj/addrman.o \ - obj/crypter.o \ - obj/key.o \ - obj/db.o \ - obj/init.o \ - obj/bitcoind.o \ - obj/keystore.o \ - obj/core.o \ - obj/main.o \ - obj/net.o \ - obj/protocol.o \ - obj/bitcoinrpc.o \ - obj/rpcdump.o \ - obj/rpcnet.o \ - obj/rpcmining.o \ - obj/rpcwallet.o \ - obj/rpcblockchain.o \ - obj/rpcrawtransaction.o \ - obj/script.o \ - obj/sync.o \ - obj/util.o \ - obj/wallet.o \ - obj/walletdb.o \ - obj/hash.o \ - obj/bloom.o \ - obj/noui.o \ - obj/leveldb.o \ - obj/txdb.o \ - obj/chainparams.o \ - obj/scrypt.o \ - obj/scrypt-sse2.o \ - obj/blake.o \ - obj/bmw.o \ - obj/groestl.o \ - obj/jh.o \ - obj/keccak.o \ - obj/skein.o \ - obj/echo.o \ - obj/luffa.o \ - obj/simd.o \ - obj/cubehash.o \ - obj/shavite.o - -all: myriadcoind - -test check: test_myriadcoin FORCE - ./test_myriadcoin - -# -# LevelDB support -# -MAKEOVERRIDES = -LIBS += $(CURDIR)/leveldb/libleveldb.a $(CURDIR)/leveldb/libmemenv.a -DEFS += $(addprefix -I,$(CURDIR)/leveldb/include) -DEFS += $(addprefix -I,$(CURDIR)/leveldb/helpers) -leveldb/libleveldb.a: - @echo "Building LevelDB ..." && cd leveldb && $(MAKE) CC=$(CC) CXX=$(CXX) OPT="$(xCXXFLAGS)" libleveldb.a libmemenv.a && cd .. - -# auto-generated dependencies: --include obj/*.P --include obj-test/*.P - -obj/build.h: FORCE - /bin/sh ../share/genbuild.sh obj/build.h -version.cpp: obj/build.h -DEFS += -DHAVE_BUILD_INFO - -obj/%.o: %.cpp - $(CXX) -c $(xCXXFLAGS) -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -obj/%.o: %.c - $(CXX) -c $(xCXXFLAGS) -fpermissive -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -myriadcoind: $(OBJS:obj/%=obj/%) - $(LINK) $(xCXXFLAGS) -o $@ $^ $(xLDFLAGS) $(LIBS) - -TESTOBJS := $(patsubst test/%.cpp,obj-test/%.o,$(wildcard test/*.cpp)) - -obj-test/%.o: test/%.cpp - $(CXX) -c $(TESTDEFS) $(xCXXFLAGS) -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -test_myriadcoin: $(TESTOBJS) $(filter-out obj/init.o obj/myriadcoind.o,$(OBJS:obj/%=obj/%)) - $(LINK) $(xCXXFLAGS) -o $@ $(LIBPATHS) $^ $(TESTLIBS) $(xLDFLAGS) $(LIBS) - -clean: - -rm -f myriadcoind test_myriadcoin - -rm -f obj/*.o - -rm -f obj-test/*.o - -rm -f obj/*.P - -rm -f obj-test/*.P - -rm -f obj/build.h - -cd leveldb && $(MAKE) clean || true - -FORCE: diff --git a/src/miner.cpp b/src/miner.cpp index e50c0b57..735730a2 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -1,18 +1,16 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2014 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include "core.h" -#include "wallet.h" #include "miner.h" + +#include "core.h" #include "main.h" - - - - - - +#include "net.h" +#ifdef ENABLE_WALLET +#include "wallet.h" +#endif ////////////////////////////////////////////////////////////////////////////// // // BitcoinMiner @@ -54,51 +52,16 @@ void SHA256Transform(void* pstate, void* pinput, const void* pinit) ((uint32_t*)pstate)[i] = ctx.h[i]; } -// -// ScanHash scans nonces looking for a hash with at least some zero bits. -// It operates on big endian data. Caller does the byte reversing. -// All input buffers are 16-byte aligned. nNonce is usually preserved -// between calls, but periodically or if nNonce is 0xffff0000 or above, -// the block is rebuilt and nNonce starts over at zero. -// -unsigned int static ScanHash_CryptoPP(char* pmidstate, char* pdata, char* phash1, char* phash, unsigned int& nHashesDone) -{ - unsigned int& nNonce = *(unsigned int*)(pdata + 12); - for (;;) - { - // Crypto++ SHA256 - // Hash pdata using pmidstate as the starting state into - // pre-formatted buffer phash1, then hash phash1 into phash - nNonce++; - SHA256Transform(phash1, pdata, pmidstate); - SHA256Transform(phash, phash1, pSHA256InitState); - - // Return the nonce if the hash has at least some zero bits, - // caller will check if it has enough to reach the target - if (((unsigned short*)phash)[14] == 0) - return nNonce; - - // If nothing found after trying for a while, return -1 - if ((nNonce & 0xffff) == 0) - { - nHashesDone = 0xffff+1; - return (unsigned int) -1; - } - if ((nNonce & 0xfff) == 0) - boost::this_thread::interruption_point(); - } -} - // Some explaining would be appreciated class COrphan { public: - CTransaction* ptx; + const CTransaction* ptx; set setDependsOn; double dPriority; double dFeePerKb; - COrphan(CTransaction* ptxIn) + COrphan(const CTransaction* ptxIn) { ptx = ptxIn; dPriority = dFeePerKb = 0; @@ -106,19 +69,19 @@ public: void print() const { - printf("COrphan(hash=%s, dPriority=%.1f, dFeePerKb=%.1f)\n", - ptx->GetHash().ToString().c_str(), dPriority, dFeePerKb); + LogPrintf("COrphan(hash=%s, dPriority=%.1f, dFeePerKb=%.1f)\n", + ptx->GetHash().ToString(), dPriority, dFeePerKb); BOOST_FOREACH(uint256 hash, setDependsOn) - printf(" setDependsOn %s\n", hash.ToString().c_str()); + LogPrintf(" setDependsOn %s\n", hash.ToString()); } }; -uint64 nLastBlockTx = 0; -uint64 nLastBlockSize = 0; +uint64_t nLastBlockTx = 0; +uint64_t nLastBlockSize = 0; // We want to sort transactions by priority and fee, so: -typedef boost::tuple TxPriority; +typedef boost::tuple TxPriority; class TxPriorityCompare { bool byFee; @@ -141,7 +104,7 @@ public: } }; -CBlockTemplate* CreateNewBlock(CReserveKey& reservekey) +CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn, int algo) { // Create new block auto_ptr pblocktemplate(new CBlockTemplate()); @@ -149,15 +112,35 @@ CBlockTemplate* CreateNewBlock(CReserveKey& reservekey) return NULL; CBlock *pblock = &pblocktemplate->block; // pointer for convenience + // Set block version + pblock->nVersion = BLOCK_VERSION_DEFAULT; + switch (algo) + { + case ALGO_SHA256D: + break; + case ALGO_SCRYPT: + pblock->nVersion |= BLOCK_VERSION_SCRYPT; + break; + case ALGO_GROESTL: + pblock->nVersion |= BLOCK_VERSION_GROESTL; + break; + case ALGO_SKEIN: + pblock->nVersion |= BLOCK_VERSION_SKEIN; + break; + case ALGO_QUBIT: + pblock->nVersion |= BLOCK_VERSION_QUBIT; + break; + default: + error("CreateNewBlock: bad algo"); + return NULL; + } + // Create coinbase tx CTransaction txNew; txNew.vin.resize(1); txNew.vin[0].prevout.SetNull(); txNew.vout.resize(1); - CPubKey pubkey; - if (!reservekey.GetReservedKey(pubkey)) - return NULL; - txNew.vout[0].scriptPubKey << pubkey << OP_CHECKSIG; + txNew.vout[0].scriptPubKey = scriptPubKeyIn; // Add our coinbase tx as first transaction pblock->vtx.push_back(txNew); @@ -165,7 +148,7 @@ CBlockTemplate* CreateNewBlock(CReserveKey& reservekey) pblocktemplate->vTxSigOps.push_back(-1); // updated at end // Largest block you're willing to create: - unsigned int nBlockMaxSize = GetArg("-blockmaxsize", MAX_BLOCK_SIZE_GEN/2); + unsigned int nBlockMaxSize = GetArg("-blockmaxsize", DEFAULT_BLOCK_MAX_SIZE); // Limit to betweeen 1K and MAX_BLOCK_SIZE-1K for sanity: nBlockMaxSize = std::max((unsigned int)1000, std::min((unsigned int)(MAX_BLOCK_SIZE-1000), nBlockMaxSize)); @@ -176,14 +159,14 @@ CBlockTemplate* CreateNewBlock(CReserveKey& reservekey) // Minimum block size you want to create; block will be filled with free transactions // until there are no more or the block reaches this size: - unsigned int nBlockMinSize = GetArg("-blockminsize", 0); + unsigned int nBlockMinSize = GetArg("-blockminsize", DEFAULT_BLOCK_MIN_SIZE); nBlockMinSize = std::min(nBlockMaxSize, nBlockMinSize); // Collect memory pool transactions into the block - int64 nFees = 0; + int64_t nFees = 0; { LOCK2(cs_main, mempool.cs); - CBlockIndex* pindexPrev = pindexBest; + CBlockIndex* pindexPrev = chainActive.Tip(); CCoinsViewCache view(*pcoinsTip, true); // Priority order to process transactions @@ -194,15 +177,16 @@ CBlockTemplate* CreateNewBlock(CReserveKey& reservekey) // This vector will be sorted into a priority queue: vector vecPriority; vecPriority.reserve(mempool.mapTx.size()); - for (map::iterator mi = mempool.mapTx.begin(); mi != mempool.mapTx.end(); ++mi) + for (map::iterator mi = mempool.mapTx.begin(); + mi != mempool.mapTx.end(); ++mi) { - CTransaction& tx = (*mi).second; - if (tx.IsCoinBase() || !IsFinalTx(tx)) + const CTransaction& tx = mi->second.GetTx(); + if (tx.IsCoinBase() || !IsFinalTx(tx, pindexPrev->nHeight + 1)) continue; COrphan* porphan = NULL; double dPriority = 0; - int64 nTotalIn = 0; + int64_t nTotalIn = 0; bool fMissingInputs = false; BOOST_FOREACH(const CTxIn& txin, tx.vin) { @@ -214,7 +198,7 @@ CBlockTemplate* CreateNewBlock(CReserveKey& reservekey) // or other transactions in the memory pool. if (!mempool.mapTx.count(txin.prevout.hash)) { - printf("ERROR: mempool transaction missing input\n"); + LogPrintf("ERROR: mempool transaction missing input\n"); if (fDebug) assert("mempool transaction missing input" == 0); fMissingInputs = true; if (porphan) @@ -231,12 +215,12 @@ CBlockTemplate* CreateNewBlock(CReserveKey& reservekey) } mapDependers[txin.prevout.hash].push_back(porphan); porphan->setDependsOn.insert(txin.prevout.hash); - nTotalIn += mempool.mapTx[txin.prevout.hash].vout[txin.prevout.n].nValue; + nTotalIn += mempool.mapTx[txin.prevout.hash].GetTx().vout[txin.prevout.n].nValue; continue; } const CCoins &coins = view.GetCoins(txin.prevout.hash); - int64 nValueIn = coins.vout[txin.prevout.n].nValue; + int64_t nValueIn = coins.vout[txin.prevout.n].nValue; nTotalIn += nValueIn; int nConf = pindexPrev->nHeight - coins.nHeight + 1; @@ -245,14 +229,14 @@ CBlockTemplate* CreateNewBlock(CReserveKey& reservekey) } if (fMissingInputs) continue; - // Priority is sum(valuein * age) / txsize + // Priority is sum(valuein * age) / modified_txsize unsigned int nTxSize = ::GetSerializeSize(tx, SER_NETWORK, PROTOCOL_VERSION); - dPriority /= nTxSize; + dPriority = tx.ComputePriority(dPriority, nTxSize); // This is a more accurate fee-per-kilobyte than is used by the client code, because the // client code rounds up the size to the nearest 1K. That's good, because it gives an // incentive to create smaller transactions. - double dFeePerKb = double(nTotalIn-GetValueOut(tx)) / (double(nTxSize)/1000.0); + double dFeePerKb = double(nTotalIn-tx.GetValueOut()) / (double(nTxSize)/1000.0); if (porphan) { @@ -260,12 +244,12 @@ CBlockTemplate* CreateNewBlock(CReserveKey& reservekey) porphan->dFeePerKb = dFeePerKb; } else - vecPriority.push_back(TxPriority(dPriority, dFeePerKb, &(*mi).second)); + vecPriority.push_back(TxPriority(dPriority, dFeePerKb, &mi->second.GetTx())); } // Collect transactions into block - uint64 nBlockSize = 1000; - uint64 nBlockTx = 0; + uint64_t nBlockSize = 1000; + uint64_t nBlockTx = 0; int nBlockSigOps = 100; bool fSortedByFee = (nBlockPrioritySize <= 0); @@ -277,7 +261,7 @@ CBlockTemplate* CreateNewBlock(CReserveKey& reservekey) // Take highest priority transaction off the priority queue: double dPriority = vecPriority.front().get<0>(); double dFeePerKb = vecPriority.front().get<1>(); - CTransaction& tx = *(vecPriority.front().get<2>()); + const CTransaction& tx = *(vecPriority.front().get<2>()); std::pop_heap(vecPriority.begin(), vecPriority.end(), comparer); vecPriority.pop_back(); @@ -293,7 +277,7 @@ CBlockTemplate* CreateNewBlock(CReserveKey& reservekey) continue; // Skip free transactions if we're past the minimum block size: - if (fSortedByFee && (dFeePerKb < CTransaction::nMinTxFee) && (nBlockSize + nTxSize >= nBlockMinSize)) + if (fSortedByFee && (dFeePerKb < CTransaction::nMinRelayTxFee) && (nBlockSize + nTxSize >= nBlockMinSize)) continue; // Prioritize by fee once past the priority size or we run out of high-priority @@ -309,7 +293,7 @@ CBlockTemplate* CreateNewBlock(CReserveKey& reservekey) if (!view.HaveInputs(tx)) continue; - int64 nTxFees = view.GetValueIn(tx)-GetValueOut(tx); + int64_t nTxFees = view.GetValueIn(tx)-tx.GetValueOut(); nTxSigOps += GetP2SHSigOpCount(tx, view); if (nBlockSigOps + nTxSigOps >= MAX_BLOCK_SIGOPS) @@ -334,8 +318,8 @@ CBlockTemplate* CreateNewBlock(CReserveKey& reservekey) if (fPrintPriority) { - printf("priority %.1f feeperkb %.1f txid %s\n", - dPriority, dFeePerKb, tx.GetHash().ToString().c_str()); + LogPrintf("priority %.1f feeperkb %.1f txid %s\n", + dPriority, dFeePerKb, tx.GetHash().ToString()); } // Add transactions that depend on this one to the priority queue @@ -358,7 +342,7 @@ CBlockTemplate* CreateNewBlock(CReserveKey& reservekey) nLastBlockTx = nBlockTx; nLastBlockSize = nBlockSize; - printf("CreateNewBlock(): total size %"PRI64u"\n", nBlockSize); + LogPrintf("CreateNewBlock(): total size %u\n", nBlockSize); pblock->vtx[0].vout[0].nValue = GetBlockValue(pindexPrev->nHeight+1, nFees); pblocktemplate->vTxFees[0] = -nFees; @@ -366,7 +350,7 @@ CBlockTemplate* CreateNewBlock(CReserveKey& reservekey) // Fill in header pblock->hashPrevBlock = pindexPrev->GetBlockHash(); UpdateTime(*pblock, pindexPrev); - pblock->nBits = GetNextWorkRequired(pindexPrev, pblock); + pblock->nBits = GetNextWorkRequired(pindexPrev, pblock, algo); pblock->nNonce = 0; pblock->vtx[0].vin[0].scriptSig = CScript() << OP_0 << OP_0; pblocktemplate->vTxSigOps[0] = GetLegacySigOpCount(pblock->vtx[0]); @@ -383,7 +367,6 @@ CBlockTemplate* CreateNewBlock(CReserveKey& reservekey) return pblocktemplate.release(); } - void IncrementExtraNonce(CBlock* pblock, CBlockIndex* pindexPrev, unsigned int& nExtraNonce) { // Update nExtraNonce @@ -447,26 +430,84 @@ void FormatHashBuffers(CBlock* pblock, char* pmidstate, char* pdata, char* phash memcpy(phash1, &tmp.hash1, 64); } +#ifdef ENABLE_WALLET +////////////////////////////////////////////////////////////////////////////// +// +// Internal miner +// +double dHashesPerSec = 0.0; +int64_t nHPSTimerStart = 0; + +// +// ScanHash scans nonces looking for a hash with at least some zero bits. +// It operates on big endian data. Caller does the byte reversing. +// All input buffers are 16-byte aligned. nNonce is usually preserved +// between calls, but periodically or if nNonce is 0xffff0000 or above, +// the block is rebuilt and nNonce starts over at zero. +// +unsigned int static ScanHash_CryptoPP(char* pmidstate, char* pdata, char* phash1, char* phash, unsigned int& nHashesDone) +{ + unsigned int& nNonce = *(unsigned int*)(pdata + 12); + for (;;) + { + // Crypto++ SHA256 + // Hash pdata using pmidstate as the starting state into + // pre-formatted buffer phash1, then hash phash1 into phash + nNonce++; + SHA256Transform(phash1, pdata, pmidstate); + SHA256Transform(phash, phash1, pSHA256InitState); + + // Return the nonce if the hash has at least some zero bits, + // caller will check if it has enough to reach the target + if (((unsigned short*)phash)[14] == 0) + return nNonce; + + // If nothing found after trying for a while, return -1 + if ((nNonce & 0xffff) == 0) + { + nHashesDone = 0xffff+1; + return (unsigned int) -1; + } + if ((nNonce & 0xfff) == 0) + boost::this_thread::interruption_point(); + } +} + +CBlockTemplate* CreateNewBlockWithKey(CReserveKey& reservekey, int algo) +{ + CPubKey pubkey; + if (!reservekey.GetReservedKey(pubkey)) + return NULL; + + CScript scriptPubKey = CScript() << pubkey << OP_CHECKSIG; + return CreateNewBlock(scriptPubKey, algo); +} bool CheckWork(CBlock* pblock, CWallet& wallet, CReserveKey& reservekey) { - uint256 hash = pblock->GetHash(); + int algo = pblock->GetAlgo(); + uint256 hashPoW = pblock->GetPoWHash(algo); uint256 hashTarget = CBigNum().SetCompact(pblock->nBits).getuint256(); - if (hash > hashTarget) + if (hashPoW > hashTarget) return false; + uint256 hashBlock = pblock->GetHash(); + //// debug print - printf("BitcoinMiner:\n"); - printf("proof-of-work found \n hash: %s \ntarget: %s\n", hash.GetHex().c_str(), hashTarget.GetHex().c_str()); + LogPrintf("MyriadcoinMiner:\n"); + LogPrintf("proof-of-work found \n block-hash: %s\n pow-hash: %s\ntarget: %s\n", + hashBlock.GetHex(), + hashPoW.GetHex(), + hashTarget.GetHex()); pblock->print(); - printf("generated %s\n", FormatMoney(pblock->vtx[0].vout[0].nValue).c_str()); + LogPrintf("generated %s\n", FormatMoney(pblock->vtx[0].vout[0].nValue)); // Found a solution { LOCK(cs_main); - if (pblock->hashPrevBlock != hashBestChain) - return error("BitcoinMiner : generated block is stale"); + if (pblock->hashPrevBlock != chainActive.Tip()->GetBlockHash()) + return error("MyriadcoinMiner : generated block is stale"); // Remove key from key pool reservekey.KeepKey(); @@ -480,43 +521,49 @@ bool CheckWork(CBlock* pblock, CWallet& wallet, CReserveKey& reservekey) // Process this block the same as if we had received it from another node CValidationState state; if (!ProcessBlock(state, NULL, pblock)) - return error("BitcoinMiner : ProcessBlock, block not accepted"); + return error("MyriadcoinMiner : ProcessBlock, block not accepted"); } return true; } +void static MinerWaitOnline() +{ + if (Params().NetworkID() != CChainParams::REGTEST) + { + // Busy-wait for the network to come online so we don't waste time mining + // on an obsolete chain. In regtest mode we expect to fly solo. + while (vNodes.empty() || IsInitialBlockDownload()) + { + MilliSleep(1000); + boost::this_thread::interruption_point(); + } + } +} + void static BitcoinMiner(CWallet *pwallet) { - printf("BitcoinMiner started\n"); - SetThreadPriority(THREAD_PRIORITY_LOWEST); - RenameThread("bitcoin-miner"); - // Each thread has its own key and counter CReserveKey reservekey(pwallet); unsigned int nExtraNonce = 0; - try { while (true) { - if (Params().NetworkID() != CChainParams::REGTEST) { - // Busy-wait for the network to come online so we don't waste time mining - // on an obsolete chain. In regtest mode we expect to fly solo. - while (vNodes.empty()) - MilliSleep(1000); - } + while(true) + { + MinerWaitOnline(); // // Create new block // - unsigned int nTransactionsUpdatedLast = nTransactionsUpdated; - CBlockIndex* pindexPrev = pindexBest; + unsigned int nTransactionsUpdatedLast = mempool.GetTransactionsUpdated(); + CBlockIndex* pindexPrev = chainActive.Tip(); - auto_ptr pblocktemplate(CreateNewBlock(reservekey)); + auto_ptr pblocktemplate(CreateNewBlockWithKey(reservekey, ALGO_SHA256D)); if (!pblocktemplate.get()) return; CBlock *pblock = &pblocktemplate->block; IncrementExtraNonce(pblock, pindexPrev, nExtraNonce); - printf("Running BitcoinMiner with %"PRIszu" transactions in block (%u bytes)\n", pblock->vtx.size(), + LogPrintf("Running sha256d with %u transactions in block (%u bytes)\n", pblock->vtx.size(), ::GetSerializeSize(*pblock, SER_NETWORK, PROTOCOL_VERSION)); // @@ -536,7 +583,7 @@ void static BitcoinMiner(CWallet *pwallet) // // Search // - int64 nStart = GetTime(); + int64_t nStart = GetTime(); uint256 hashTarget = CBigNum().SetCompact(pblock->nBits).getuint256(); uint256 hashbuf[2]; uint256& hash = *alignup<16>(hashbuf); @@ -575,7 +622,7 @@ void static BitcoinMiner(CWallet *pwallet) } // Meter hashes/sec - static int64 nHashCounter; + static int64_t nHashCounter; if (nHPSTimerStart == 0) { nHPSTimerStart = GetTimeMillis(); @@ -593,11 +640,11 @@ void static BitcoinMiner(CWallet *pwallet) dHashesPerSec = 1000.0 * nHashCounter / (GetTimeMillis() - nHPSTimerStart); nHPSTimerStart = GetTimeMillis(); nHashCounter = 0; - static int64 nLogTime; + static int64_t nLogTime; if (GetTime() - nLogTime > 30 * 60) { nLogTime = GetTime(); - printf("hashmeter %6.0f khash/s\n", dHashesPerSec/1000.0); + LogPrintf("hashmeter %6.0f khash/s\n", dHashesPerSec/1000.0); } } } @@ -609,9 +656,9 @@ void static BitcoinMiner(CWallet *pwallet) break; if (nBlockNonce >= 0xffff0000) break; - if (nTransactionsUpdated != nTransactionsUpdatedLast && GetTime() - nStart > 60) + if (mempool.GetTransactionsUpdated() != nTransactionsUpdatedLast && GetTime() - nStart > 60) break; - if (pindexPrev != pindexBest) + if (pindexPrev != chainActive.Tip()) break; // Update nTime every few seconds @@ -624,19 +671,280 @@ void static BitcoinMiner(CWallet *pwallet) hashTarget = CBigNum().SetCompact(pblock->nBits).getuint256(); } } - } } + } +} + +void static ScryptMiner(CWallet *pwallet) +{ + // Each thread has its own key and counter + CReserveKey reservekey(pwallet); + unsigned int nExtraNonce = 0; + + while(true) + { + MinerWaitOnline(); + + // + // Create new block + // + unsigned int nTransactionsUpdatedLast = mempool.GetTransactionsUpdated(); + CBlockIndex* pindexPrev = chainActive.Tip(); + + auto_ptr pblocktemplate(CreateNewBlockWithKey(reservekey, ALGO_SCRYPT)); + if (!pblocktemplate.get()) + return; + CBlock *pblock = &pblocktemplate->block; + IncrementExtraNonce(pblock, pindexPrev, nExtraNonce); + + LogPrintf("Running scrypt miner with %u transactions in block (%u bytes)\n", pblock->vtx.size(), + ::GetSerializeSize(*pblock, SER_NETWORK, PROTOCOL_VERSION)); + + // + // Prebuild hash buffers + // + char pmidstatebuf[32+16]; char* pmidstate = alignup<16>(pmidstatebuf); + char pdatabuf[128+16]; char* pdata = alignup<16>(pdatabuf); + char phash1buf[64+16]; char* phash1 = alignup<16>(phash1buf); + + FormatHashBuffers(pblock, pmidstate, pdata, phash1); + + unsigned int& nBlockTime = *(unsigned int*)(pdata + 64 + 4); + unsigned int& nBlockBits = *(unsigned int*)(pdata + 64 + 8); + + // + // Search + // + int64_t nStart = GetTime(); + uint256 hashTarget = CBigNum().SetCompact(pblock->nBits).getuint256(); + while(true) + { + unsigned int nHashesDone = 0; + uint256 thash; + char scratchpad[SCRYPT_SCRATCHPAD_SIZE]; + while(true) + { +#if defined(USE_SSE2) + // Detection would work, but in cases where we KNOW it always has SSE2, + // it is faster to use directly than to use a function pointer or conditional. +#if defined(_M_X64) || defined(__x86_64__) || defined(_M_AMD64) || (defined(MAC_OSX) && defined(__i386__)) + // Always SSE2: x86_64 or Intel MacOS X + scrypt_1024_1_1_256_sp_sse2(BEGIN(pblock->nVersion), BEGIN(thash), scratchpad); +#else + // Detect SSE2: 32bit x86 Linux or Windows + scrypt_1024_1_1_256_sp(BEGIN(pblock->nVersion), BEGIN(thash), scratchpad); +#endif +#else + // Generic scrypt + scrypt_1024_1_1_256_sp_generic(BEGIN(pblock->nVersion), BEGIN(thash), scratchpad); +#endif + + if (thash <= hashTarget) + { + // Found a solution + SetThreadPriority(THREAD_PRIORITY_NORMAL); + CheckWork(pblock, *pwallet, reservekey); + SetThreadPriority(THREAD_PRIORITY_LOWEST); + break; + } + pblock->nNonce += 1; + nHashesDone += 1; + if ((pblock->nNonce & 0xFF) == 0) + break; + } + + // Meter hashes/sec + static int64_t nHashCounter; + if (nHPSTimerStart == 0) + { + nHPSTimerStart = GetTimeMillis(); + nHashCounter = 0; + } + else + nHashCounter += nHashesDone; + if (GetTimeMillis() - nHPSTimerStart > 4000) + { + static CCriticalSection cs; + { + LOCK(cs); + if (GetTimeMillis() - nHPSTimerStart > 4000) + { + dHashesPerSec = 1000.0 * nHashCounter / (GetTimeMillis() - nHPSTimerStart); + nHPSTimerStart = GetTimeMillis(); + nHashCounter = 0; + static int64_t nLogTime; + if (GetTime() - nLogTime > 30 * 60) + { + nLogTime = GetTime(); + LogPrintf("hashmeter %6.0f khash/s\n", dHashesPerSec/1000.0); + } + } + } + } + + // Check for stop or if block needs to be rebuilt + boost::this_thread::interruption_point(); + if (vNodes.empty() && Params().NetworkID() != CChainParams::REGTEST) + break; + if (pblock->nNonce >= 0xffff0000) + break; + if (mempool.GetTransactionsUpdated() != nTransactionsUpdatedLast && GetTime() - nStart > 60) + break; + if (pindexPrev != chainActive.Tip()) + break; + + // Update nTime every few seconds + UpdateTime(*pblock, pindexPrev); + nBlockTime = ByteReverse(pblock->nTime); + if (TestNet()) + { + // Changing pblock->nTime can change work required on testnet: + nBlockBits = ByteReverse(pblock->nBits); + hashTarget = CBigNum().SetCompact(pblock->nBits).getuint256(); + } + + } + } +} + +void static GenericMiner(CWallet *pwallet, int algo) +{ + // Each thread has its own key and counter + CReserveKey reservekey(pwallet); + unsigned int nExtraNonce = 0; + + while(true) + { + MinerWaitOnline(); + + // + // Create new block + // + unsigned int nTransactionsUpdatedLast = mempool.GetTransactionsUpdated(); + CBlockIndex* pindexPrev = chainActive.Tip(); + + auto_ptr pblocktemplate(CreateNewBlockWithKey(reservekey, algo)); + if (!pblocktemplate.get()) + return; + CBlock *pblock = &pblocktemplate->block; + IncrementExtraNonce(pblock, pindexPrev, nExtraNonce); + + LogPrintf("Running %s miner with %u transactions in block (%u bytes)\n", + GetAlgoName(algo).c_str(), + pblock->vtx.size(), + ::GetSerializeSize(*pblock, SER_NETWORK, PROTOCOL_VERSION)); + + // + // Search + // + uint256 hashTarget = CBigNum().SetCompact(pblock->nBits).getuint256(); + int64_t nStart = GetTime(); + uint256 hash; + while(true) + { + hash = pblock->GetPoWHash(algo); + if (hash <= hashTarget){ + SetThreadPriority(THREAD_PRIORITY_NORMAL); + + LogPrintf("proof-of-work found \n hash: %s \ntarget: %s\n", hash.GetHex().c_str(), hashTarget.GetHex().c_str()); + pblock->print(); + + CheckWork(pblock, *pwallet, reservekey); + SetThreadPriority(THREAD_PRIORITY_LOWEST); + break; + } + ++pblock->nNonce; + + // Meter hashes/sec + static int64_t nHashCounter; + if (nHPSTimerStart == 0) + { + nHPSTimerStart = GetTimeMillis(); + nHashCounter = 0; + } + else + nHashCounter += 1; + if (GetTimeMillis() - nHPSTimerStart > 4000) + { + static CCriticalSection cs; + { + LOCK(cs); + if (GetTimeMillis() - nHPSTimerStart > 4000) + { + dHashesPerSec = 1000.0 * nHashCounter / (GetTimeMillis() - nHPSTimerStart); + nHPSTimerStart = GetTimeMillis(); + nHashCounter = 0; + static int64_t nLogTime; + if (GetTime() - nLogTime > 30 * 60) + { + nLogTime = GetTime(); + LogPrintf("hashmeter %6.0f khash/s\n", dHashesPerSec/1000.0); + } + } + } + } + + // Check for stop or if block needs to be rebuilt + boost::this_thread::interruption_point(); + if (vNodes.empty() && Params().NetworkID() != CChainParams::REGTEST) + break; + if (++pblock->nNonce >= 0xffff0000) + break; + if (mempool.GetTransactionsUpdated() != nTransactionsUpdatedLast && GetTime() - nStart > 60) + break; + if (pindexPrev != chainActive.Tip()) + break; + + // Update nTime every few seconds + UpdateTime(*pblock, pindexPrev); + // nBlockTime = ByteReverse(pblock->nTime); + if (TestNet()) + { + // Changing pblock->nTime can change work required on testnet: + // nBlockBits = ByteReverse(pblock->nBits); + // hashTarget = CBigNum().SetCompact(pblock->nBits).getuint256(); + } + } + } +} + +void static ThreadBitcoinMiner(CWallet *pwallet) +{ + LogPrintf("Myriadcoin miner started\n"); + SetThreadPriority(THREAD_PRIORITY_LOWEST); + RenameThread("bitcoin-miner"); + + try + { + switch (miningAlgo) + { + case ALGO_SHA256D: + BitcoinMiner(pwallet); + break; + case ALGO_SCRYPT: + ScryptMiner(pwallet); + break; + case ALGO_GROESTL: + GenericMiner(pwallet, ALGO_GROESTL); + break; + case ALGO_SKEIN: + GenericMiner(pwallet, ALGO_SKEIN); + break; + case ALGO_QUBIT: + GenericMiner(pwallet, ALGO_QUBIT); + break; + } + } catch (boost::thread_interrupted) { - printf("BitcoinMiner terminated\n"); + LogPrintf("Myriadcoin miner terminated\n"); throw; } } -void GenerateBitcoins(bool fGenerate, CWallet* pwallet) +void GenerateBitcoins(bool fGenerate, CWallet* pwallet, int nThreads) { static boost::thread_group* minerThreads = NULL; - int nThreads = GetArg("-genproclimit", -1); if (nThreads < 0) { if (Params().NetworkID() == CChainParams::REGTEST) nThreads = 1; @@ -656,8 +964,8 @@ void GenerateBitcoins(bool fGenerate, CWallet* pwallet) minerThreads = new boost::thread_group(); for (int i = 0; i < nThreads; i++) - minerThreads->create_thread(boost::bind(&BitcoinMiner, pwallet)); + minerThreads->create_thread(boost::bind(&ThreadBitcoinMiner, pwallet)); } - +#endif diff --git a/src/miner.h b/src/miner.h index 51d6a2e3..5c80fe2d 100644 --- a/src/miner.h +++ b/src/miner.h @@ -1,17 +1,25 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2013 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef BITCOIN_MINER_H #define BITCOIN_MINER_H -#include "core.h" -#include "wallet.h" +#include + +class CBlock; +class CBlockIndex; +struct CBlockTemplate; +class CReserveKey; +class CScript; +class CWallet; /** Run the miner threads */ -void GenerateBitcoins(bool fGenerate, CWallet* pwallet); +void GenerateBitcoins(bool fGenerate, CWallet* pwallet, int nThreads); /** Generate a new block, without valid proof-of-work */ -CBlockTemplate* CreateNewBlock(CReserveKey& reservekey); +CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn, int algo); +CBlockTemplate* CreateNewBlockWithKey(CReserveKey& reservekey, int algo); /** Modify the extranonce in a block */ void IncrementExtraNonce(CBlock* pblock, CBlockIndex* pindexPrev, unsigned int& nExtraNonce); /** Do mining precalculation */ @@ -21,4 +29,7 @@ bool CheckWork(CBlock* pblock, CWallet& wallet, CReserveKey& reservekey); /** Base sha256 mining transform */ void SHA256Transform(void* pstate, void* pinput, const void* pinit); +extern double dHashesPerSec; +extern int64_t nHPSTimerStart; + #endif // BITCOIN_MINER_H diff --git a/src/mruset.h b/src/mruset.h index a5273518..c1c08b02 100644 --- a/src/mruset.h +++ b/src/mruset.h @@ -1,11 +1,13 @@ // Copyright (c) 2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef BITCOIN_MRUSET_H #define BITCOIN_MRUSET_H -#include #include +#include +#include /** STL-like set container that only keeps the most recent N elements. */ template class mruset @@ -30,6 +32,7 @@ public: bool empty() const { return set.empty(); } iterator find(const key_type& k) const { return set.find(k); } size_type count(const key_type& k) const { return set.count(k); } + void clear() { set.clear(); queue.clear(); } bool inline friend operator==(const mruset& a, const mruset& b) { return a.set == b.set; } bool inline friend operator==(const mruset& a, const std::set& b) { return a.set == b; } bool inline friend operator<(const mruset& a, const mruset& b) { return a.set < b.set; } diff --git a/src/net.cpp b/src/net.cpp index 4555fd19..f33a6c97 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -1,30 +1,41 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2014 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include "chainparams.h" -#include "db.h" +#if defined(HAVE_CONFIG_H) +#include "bitcoin-config.h" +#endif + #include "net.h" -#include "core.h" + #include "addrman.h" +#include "chainparams.h" +#include "core.h" #include "ui_interface.h" -#include "script.h" #ifdef WIN32 #include +#else +#include #endif #ifdef USE_UPNP -#include #include +#include #include #include #endif +#include + // Dump addresses to peers.dat every 15 minutes (900s) #define DUMP_ADDRESSES_INTERVAL 900 +#if !defined(HAVE_MSG_NOSIGNAL) && !defined(MSG_NOSIGNAL) +#define MSG_NOSIGNAL 0 +#endif + using namespace std; using namespace boost; @@ -33,23 +44,18 @@ static const int MAX_OUTBOUND_CONNECTIONS = 8; bool OpenNetworkConnection(const CAddress& addrConnect, CSemaphoreGrant *grantOutbound = NULL, const char *strDest = NULL, bool fOneShot = false); -struct LocalServiceInfo { - int nScore; - int nPort; -}; - // // Global state variables // bool fDiscover = true; -uint64 nLocalServices = NODE_NETWORK; -static CCriticalSection cs_mapLocalHost; -static map mapLocalHost; +uint64_t nLocalServices = NODE_NETWORK; +CCriticalSection cs_mapLocalHost; +map mapLocalHost; static bool vfReachable[NET_MAX] = {}; static bool vfLimited[NET_MAX] = {}; static CNode* pnodeLocalHost = NULL; static CNode* pnodeSync = NULL; -uint64 nLocalHostNonce = 0; +uint64_t nLocalHostNonce = 0; static std::vector vhListenSocket; CAddrMan addrman; int nMaxConnections = 125; @@ -57,9 +63,9 @@ int nMaxConnections = 125; vector vNodes; CCriticalSection cs_vNodes; map mapRelay; -deque > vRelayExpiration; +deque > vRelayExpiration; CCriticalSection cs_mapRelay; -limitedmap mapAlreadyAskedFor(MAX_INV_SZ); +limitedmap mapAlreadyAskedFor(MAX_INV_SZ); static deque vOneShots; CCriticalSection cs_vOneShots; @@ -70,6 +76,9 @@ CCriticalSection cs_setservAddNodeAddresses; vector vAddedNodes; CCriticalSection cs_vAddedNodes; +NodeId nLastNodeId = 0; +CCriticalSection cs_nLastNodeId; + static CSemaphore *semOutbound = NULL; // Signals for message handling @@ -129,7 +138,7 @@ CAddress GetLocalAddress(const CNetAddr *paddrPeer) bool RecvLine(SOCKET hSocket, string& strLine) { strLine = ""; - loop + while (true) { char c; int nBytes = recv(hSocket, &c, 1, 0); @@ -162,14 +171,14 @@ bool RecvLine(SOCKET hSocket, string& strLine) if (nBytes == 0) { // socket closed - printf("socket closed\n"); + LogPrint("net", "socket closed\n"); return false; } else { // socket error int nErr = WSAGetLastError(); - printf("recv failed: %d\n", nErr); + LogPrint("net", "recv failed: %s\n", NetworkErrorString(nErr)); return false; } } @@ -215,7 +224,7 @@ bool AddLocal(const CService& addr, int nScore) if (IsLimited(addr)) return false; - printf("AddLocal(%s,%i)\n", addr.ToString().c_str(), nScore); + LogPrintf("AddLocal(%s,%i)\n", addr.ToString(), nScore); { LOCK(cs_mapLocalHost); @@ -292,7 +301,7 @@ bool GetMyExternalIP2(const CService& addrConnect, const char* pszGet, const cha { SOCKET hSocket; if (!ConnectSocket(addrConnect, hSocket)) - return error("GetMyExternalIP() : connection to %s failed", addrConnect.ToString().c_str()); + return error("GetMyExternalIP() : connection to %s failed", addrConnect.ToString()); send(hSocket, pszGet, strlen(pszGet), MSG_NOSIGNAL); @@ -301,7 +310,7 @@ bool GetMyExternalIP2(const CService& addrConnect, const char* pszGet, const cha { if (strLine.empty()) // HTTP response is separated from headers by blank line { - loop + while (true) { if (!RecvLine(hSocket, strLine)) { @@ -323,7 +332,7 @@ bool GetMyExternalIP2(const CService& addrConnect, const char* pszGet, const cha while (strLine.size() > 0 && isspace(strLine[strLine.size()-1])) strLine.resize(strLine.size()-1); CService addr(strLine,0,true); - printf("GetMyExternalIP() received [%s] %s\n", strLine.c_str(), addr.ToString().c_str()); + LogPrintf("GetMyExternalIP() received [%s] %s\n", strLine, addr.ToString()); if (!addr.IsValid() || !addr.IsRoutable()) return false; ipRet.SetIP(addr); @@ -398,7 +407,7 @@ void ThreadGetMyExternalIP() CNetAddr addrLocalHost; if (GetMyExternalIP(addrLocalHost)) { - printf("GetMyExternalIP() returned %s\n", addrLocalHost.ToStringIP().c_str()); + LogPrintf("GetMyExternalIP() returned %s\n", addrLocalHost.ToStringIP()); AddLocal(addrLocalHost, LOCAL_HTTP); } } @@ -415,8 +424,10 @@ void AddressCurrentlyConnected(const CService& addr) - - +uint64_t CNode::nTotalBytesRecv = 0; +uint64_t CNode::nTotalBytesSent = 0; +CCriticalSection CNode::cs_totalBytesRecv; +CCriticalSection CNode::cs_totalBytesSent; CNode* FindNode(const CNetAddr& ip) { @@ -462,8 +473,8 @@ CNode* ConnectNode(CAddress addrConnect, const char *pszDest) /// debug print - printf("trying connection %s lastseen=%.1fhrs\n", - pszDest ? pszDest : addrConnect.ToString().c_str(), + LogPrint("net", "trying connection %s lastseen=%.1fhrs\n", + pszDest ? pszDest : addrConnect.ToString(), pszDest ? 0 : (double)(GetAdjustedTime() - addrConnect.nTime)/3600.0); // Connect @@ -472,17 +483,16 @@ CNode* ConnectNode(CAddress addrConnect, const char *pszDest) { addrman.Attempt(addrConnect); - /// debug print - printf("connected %s\n", pszDest ? pszDest : addrConnect.ToString().c_str()); + LogPrint("net", "connected %s\n", pszDest ? pszDest : addrConnect.ToString()); // Set to non-blocking #ifdef WIN32 u_long nOne = 1; if (ioctlsocket(hSocket, FIONBIO, &nOne) == SOCKET_ERROR) - printf("ConnectSocket() : ioctlsocket non-blocking setting failed, error %d\n", WSAGetLastError()); + LogPrintf("ConnectSocket() : ioctlsocket non-blocking setting failed, error %s\n", NetworkErrorString(WSAGetLastError())); #else if (fcntl(hSocket, F_SETFL, O_NONBLOCK) == SOCKET_ERROR) - printf("ConnectSocket() : fcntl non-blocking setting failed, error %d\n", errno); + LogPrintf("ConnectSocket() : fcntl non-blocking setting failed, error %s\n", NetworkErrorString(errno)); #endif // Add node @@ -508,7 +518,7 @@ void CNode::CloseSocketDisconnect() fDisconnect = true; if (hSocket != INVALID_SOCKET) { - printf("disconnecting node %s\n", addrName.c_str()); + LogPrint("net", "disconnecting node %s\n", addrName); closesocket(hSocket); hSocket = INVALID_SOCKET; } @@ -530,12 +540,14 @@ void CNode::Cleanup() void CNode::PushVersion() { + int nBestHeight = g_signals.GetHeight().get_value_or(0); + /// when NTP implemented, change to just nTime = GetAdjustedTime() - int64 nTime = (fInbound ? GetAdjustedTime() : GetTime()); + int64_t nTime = (fInbound ? GetAdjustedTime() : GetTime()); CAddress addrYou = (addr.IsRoutable() && !IsProxy(addr) ? addr : CAddress(CService("0.0.0.0",0))); CAddress addrMe = GetLocalAddress(&addr); RAND_bytes((unsigned char*)&nLocalHostNonce, sizeof(nLocalHostNonce)); - printf("send version message: version %d, blocks=%d, us=%s, them=%s, peer=%s\n", PROTOCOL_VERSION, nBestHeight, addrMe.ToString().c_str(), addrYou.ToString().c_str(), addr.ToString().c_str()); + LogPrint("net", "send version message: version %d, blocks=%d, us=%s, them=%s, peer=%s\n", PROTOCOL_VERSION, nBestHeight, addrMe.ToString(), addrYou.ToString(), addr.ToString()); PushMessage("version", PROTOCOL_VERSION, nLocalServices, nTime, addrYou, addrMe, nLocalHostNonce, FormatSubVersion(CLIENT_NAME, CLIENT_VERSION, std::vector()), nBestHeight, true); } @@ -544,7 +556,7 @@ void CNode::PushVersion() -std::map CNode::setBanned; +std::map CNode::setBanned; CCriticalSection CNode::cs_setBanned; void CNode::ClearBanned() @@ -557,10 +569,10 @@ bool CNode::IsBanned(CNetAddr ip) bool fResult = false; { LOCK(cs_setBanned); - std::map::iterator i = setBanned.find(ip); + std::map::iterator i = setBanned.find(ip); if (i != setBanned.end()) { - int64 t = (*i).second; + int64_t t = (*i).second; if (GetTime() < t) fResult = true; } @@ -568,48 +580,51 @@ bool CNode::IsBanned(CNetAddr ip) return fResult; } -bool CNode::Misbehaving(int howmuch) -{ - if (addr.IsLocal()) +bool CNode::Ban(const CNetAddr &addr) { + int64_t banTime = GetTime()+GetArg("-bantime", 60*60*24); // Default 24-hour ban { - printf("Warning: Local node %s misbehaving (delta: %d)!\n", addrName.c_str(), howmuch); - return false; + LOCK(cs_setBanned); + if (setBanned[addr] < banTime) + setBanned[addr] = banTime; } - - nMisbehavior += howmuch; - if (nMisbehavior >= GetArg("-banscore", 100)) - { - int64 banTime = GetTime()+GetArg("-bantime", 60*60*24); // Default 24-hour ban - printf("Misbehaving: %s (%d -> %d) DISCONNECTING\n", addr.ToString().c_str(), nMisbehavior-howmuch, nMisbehavior); - { - LOCK(cs_setBanned); - if (setBanned[addr] < banTime) - setBanned[addr] = banTime; - } - CloseSocketDisconnect(); - return true; - } else - printf("Misbehaving: %s (%d -> %d)\n", addr.ToString().c_str(), nMisbehavior-howmuch, nMisbehavior); - return false; + return true; } #undef X #define X(name) stats.name = name void CNode::copyStats(CNodeStats &stats) { + stats.nodeid = this->GetId(); X(nServices); X(nLastSend); X(nLastRecv); X(nTimeConnected); X(addrName); X(nVersion); - X(strSubVer); + X(cleanSubVer); X(fInbound); X(nStartingHeight); - X(nMisbehavior); X(nSendBytes); X(nRecvBytes); stats.fSyncNode = (this == pnodeSync); + + // It is common for nodes with good ping times to suddenly become lagged, + // due to a new block arriving or other large transfer. + // Merely reporting pingtime might fool the caller into thinking the node was still responsive, + // since pingtime does not update until the ping is complete, which might take a while. + // So, if a ping is taking an unusually long time in flight, + // the caller can immediately detect that this is happening. + int64_t nPingUsecWait = 0; + if ((0 != nPingNonceSent) && (0 != nPingUsecStart)) { + nPingUsecWait = GetTimeMicros() - nPingUsecStart; + } + + // Raw ping time is in microseconds, but show it to user as whole seconds (Bitcoin users should be well used to small numbers with many decimal places by now :) + stats.dPingTime = (((double)nPingUsecTime) / 1e6); + stats.dPingWait = (((double)nPingUsecWait) / 1e6); + + // Leave string empty if addrLocal invalid (not filled in yet) + stats.addrLocal = addrLocal.IsValid() ? addrLocal.ToString() : ""; } #undef X @@ -706,6 +721,7 @@ void SocketSendData(CNode *pnode) pnode->nLastSend = GetTime(); pnode->nSendBytes += nBytes; pnode->nSendOffset += nBytes; + pnode->RecordBytesSent(nBytes); if (pnode->nSendOffset == data.size()) { pnode->nSendOffset = 0; pnode->nSendSize -= data.size(); @@ -720,7 +736,7 @@ void SocketSendData(CNode *pnode) int nErr = WSAGetLastError(); if (nErr != WSAEWOULDBLOCK && nErr != WSAEMSGSIZE && nErr != WSAEINTR && nErr != WSAEINPROGRESS) { - printf("socket send error %d\n", nErr); + LogPrintf("socket send error %s\n", NetworkErrorString(nErr)); pnode->CloseSocketDisconnect(); } } @@ -741,7 +757,7 @@ static list vNodesDisconnected; void ThreadSocketHandler() { unsigned int nPrevNodeCount = 0; - loop + while (true) { // // Disconnect nodes @@ -771,7 +787,8 @@ void ThreadSocketHandler() vNodesDisconnected.push_back(pnode); } } - + } + { // Delete disconnected nodes list vNodesDisconnectedCopy = vNodesDisconnected; BOOST_FOREACH(CNode* pnode, vNodesDisconnectedCopy) @@ -801,10 +818,9 @@ void ThreadSocketHandler() } } } - if (vNodes.size() != nPrevNodeCount) - { + if(vNodes.size() != nPrevNodeCount) { nPrevNodeCount = vNodes.size(); - uiInterface.NotifyNumConnectionsChanged(vNodes.size()); + uiInterface.NotifyNumConnectionsChanged(nPrevNodeCount); } @@ -880,7 +896,7 @@ void ThreadSocketHandler() if (have_fds) { int nErr = WSAGetLastError(); - printf("socket select error %d\n", nErr); + LogPrintf("socket select error %s\n", NetworkErrorString(nErr)); for (unsigned int i = 0; i <= hSocketMax; i++) FD_SET(i, &fdsetRecv); } @@ -896,11 +912,7 @@ void ThreadSocketHandler() BOOST_FOREACH(SOCKET hListenSocket, vhListenSocket) if (hListenSocket != INVALID_SOCKET && FD_ISSET(hListenSocket, &fdsetRecv)) { -#ifdef USE_IPV6 struct sockaddr_storage sockaddr; -#else - struct sockaddr sockaddr; -#endif socklen_t len = sizeof(sockaddr); SOCKET hSocket = accept(hListenSocket, (struct sockaddr*)&sockaddr, &len); CAddress addr; @@ -908,7 +920,7 @@ void ThreadSocketHandler() if (hSocket != INVALID_SOCKET) if (!addr.SetSockAddr((const struct sockaddr*)&sockaddr)) - printf("Warning: Unknown socket family\n"); + LogPrintf("Warning: Unknown socket family\n"); { LOCK(cs_vNodes); @@ -921,24 +933,20 @@ void ThreadSocketHandler() { int nErr = WSAGetLastError(); if (nErr != WSAEWOULDBLOCK) - printf("socket error accept failed: %d\n", nErr); + LogPrintf("socket error accept failed: %s\n", NetworkErrorString(nErr)); } else if (nInbound >= nMaxConnections - MAX_OUTBOUND_CONNECTIONS) { - { - LOCK(cs_setservAddNodeAddresses); - if (!setservAddNodeAddresses.count(addr)) - closesocket(hSocket); - } + closesocket(hSocket); } else if (CNode::IsBanned(addr)) { - printf("connection from %s dropped (banned)\n", addr.ToString().c_str()); + LogPrintf("connection from %s dropped (banned)\n", addr.ToString()); closesocket(hSocket); } else { - printf("accepted connection %s\n", addr.ToString().c_str()); + LogPrint("net", "accepted connection %s\n", addr.ToString()); CNode* pnode = new CNode(hSocket, addr, "", true); pnode->AddRef(); { @@ -983,12 +991,13 @@ void ThreadSocketHandler() pnode->CloseSocketDisconnect(); pnode->nLastRecv = GetTime(); pnode->nRecvBytes += nBytes; + pnode->RecordBytesRecv(nBytes); } else if (nBytes == 0) { // socket closed gracefully if (!pnode->fDisconnect) - printf("socket closed\n"); + LogPrint("net", "socket closed\n"); pnode->CloseSocketDisconnect(); } else if (nBytes < 0) @@ -998,7 +1007,7 @@ void ThreadSocketHandler() if (nErr != WSAEWOULDBLOCK && nErr != WSAEMSGSIZE && nErr != WSAEINTR && nErr != WSAEINPROGRESS) { if (!pnode->fDisconnect) - printf("socket recv error %d\n", nErr); + LogPrintf("socket recv error %s\n", NetworkErrorString(nErr)); pnode->CloseSocketDisconnect(); } } @@ -1027,17 +1036,17 @@ void ThreadSocketHandler() { if (pnode->nLastRecv == 0 || pnode->nLastSend == 0) { - printf("socket no message in first 60 seconds, %d %d\n", pnode->nLastRecv != 0, pnode->nLastSend != 0); + LogPrint("net", "socket no message in first 60 seconds, %d %d\n", pnode->nLastRecv != 0, pnode->nLastSend != 0); pnode->fDisconnect = true; } else if (GetTime() - pnode->nLastSend > 90*60 && GetTime() - pnode->nLastSendEmpty > 90*60) { - printf("socket not sending\n"); + LogPrintf("socket not sending\n"); pnode->fDisconnect = true; } else if (GetTime() - pnode->nLastRecv > 90*60) { - printf("socket inactivity timeout\n"); + LogPrintf("socket inactivity timeout\n"); pnode->fDisconnect = true; } } @@ -1089,23 +1098,23 @@ void ThreadMapPort() char externalIPAddress[40]; r = UPNP_GetExternalIPAddress(urls.controlURL, data.first.servicetype, externalIPAddress); if(r != UPNPCOMMAND_SUCCESS) - printf("UPnP: GetExternalIPAddress() returned %d\n", r); + LogPrintf("UPnP: GetExternalIPAddress() returned %d\n", r); else { if(externalIPAddress[0]) { - printf("UPnP: ExternalIPAddress = %s\n", externalIPAddress); + LogPrintf("UPnP: ExternalIPAddress = %s\n", externalIPAddress); AddLocal(CNetAddr(externalIPAddress), LOCAL_UPNP); } else - printf("UPnP: GetExternalIPAddress failed.\n"); + LogPrintf("UPnP: GetExternalIPAddress failed.\n"); } } string strDesc = "Myriadcoin " + FormatFullVersion(); try { - loop { + while (true) { #ifndef UPNPDISCOVER_SUCCESS /* miniupnpc 1.5 */ r = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype, @@ -1117,10 +1126,10 @@ void ThreadMapPort() #endif if(r!=UPNPCOMMAND_SUCCESS) - printf("AddPortMapping(%s, %s, %s) failed with code %d (%s)\n", - port.c_str(), port.c_str(), lanaddr, r, strupnperror(r)); + LogPrintf("AddPortMapping(%s, %s, %s) failed with code %d (%s)\n", + port, port, lanaddr, r, strupnperror(r)); else - printf("UPnP Port Mapping successful.\n");; + LogPrintf("UPnP Port Mapping successful.\n");; MilliSleep(20*60*1000); // Refresh every 20 minutes } @@ -1128,13 +1137,13 @@ void ThreadMapPort() catch (boost::thread_interrupted) { r = UPNP_DeletePortMapping(urls.controlURL, data.first.servicetype, port.c_str(), "TCP", 0); - printf("UPNP_DeletePortMapping() returned : %d\n", r); + LogPrintf("UPNP_DeletePortMapping() returned : %d\n", r); freeUPNPDevlist(devlist); devlist = 0; FreeUPNPUrls(&urls); throw; } } else { - printf("No valid UPnP IGDs found\n"); + LogPrintf("No valid UPnP IGDs found\n"); freeUPNPDevlist(devlist); devlist = 0; if (r != 0) FreeUPNPUrls(&urls); @@ -1179,7 +1188,7 @@ void ThreadDNSAddressSeed() const vector &vSeeds = Params().DNSSeeds(); int found = 0; - printf("Loading addresses from DNS seeds (could take a while)\n"); + LogPrintf("Loading addresses from DNS seeds (could take a while)\n"); BOOST_FOREACH(const CDNSSeedData &seed, vSeeds) { if (HaveNameProxy()) { @@ -1202,7 +1211,7 @@ void ThreadDNSAddressSeed() } } - printf("%d addresses found from DNS seeds\n", found); + LogPrintf("%d addresses found from DNS seeds\n", found); } @@ -1218,12 +1227,12 @@ void ThreadDNSAddressSeed() void DumpAddresses() { - int64 nStart = GetTimeMillis(); + int64_t nStart = GetTimeMillis(); CAddrDB adb; adb.Write(addrman); - printf("Flushed %d addresses to peers.dat %"PRI64d"ms\n", + LogPrint("net", "Flushed %d addresses to peers.dat %dms\n", addrman.size(), GetTimeMillis() - nStart); } @@ -1250,7 +1259,7 @@ void ThreadOpenConnections() // Connect to specific addresses if (mapArgs.count("-connect") && mapMultiArgs["-connect"].size() > 0) { - for (int64 nLoop = 0;; nLoop++) + for (int64_t nLoop = 0;; nLoop++) { ProcessOneShot(); BOOST_FOREACH(string strAddr, mapMultiArgs["-connect"]) @@ -1267,8 +1276,8 @@ void ThreadOpenConnections() } // Initiate network connections - int64 nStart = GetTime(); - loop + int64_t nStart = GetTime(); + while (true) { ProcessOneShot(); @@ -1281,7 +1290,7 @@ void ThreadOpenConnections() if (addrman.size() == 0 && (GetTime() - nStart > 60)) { static bool done = false; if (!done) { - printf("Adding fixed seed nodes as DNS doesn't seem to be available.\n"); + LogPrintf("Adding fixed seed nodes as DNS doesn't seem to be available.\n"); addrman.Add(Params().FixedSeeds(), CNetAddr("127.0.0.1")); done = true; } @@ -1306,10 +1315,10 @@ void ThreadOpenConnections() } } - int64 nANow = GetAdjustedTime(); + int64_t nANow = GetAdjustedTime(); int nTries = 0; - loop + while (true) { // use an nUnkBias between 10 (no outgoing connections) and 90 (8 outgoing connections) CAddress addr = addrman.Select(10 + min(nOutbound,8)*10); @@ -1449,13 +1458,15 @@ bool OpenNetworkConnection(const CAddress& addrConnect, CSemaphoreGrant *grantOu // for now, use a very simple selection metric: the node from which we received // most recently -double static NodeSyncScore(const CNode *pnode) { - return -pnode->nLastRecv; +static int64_t NodeSyncScore(const CNode *pnode) { + return pnode->nLastRecv; } void static StartSync(const vector &vNodes) { CNode *pnodeNewSync = NULL; - double dBestScore = 0; + int64_t nBestScore = 0; + + int nBestHeight = g_signals.GetHeight().get_value_or(0); // Iterate over all nodes BOOST_FOREACH(CNode* pnode, vNodes) { @@ -1465,10 +1476,10 @@ void static StartSync(const vector &vNodes) { (pnode->nStartingHeight > (nBestHeight - 144)) && (pnode->nVersion < NOBLKS_VERSION_START || pnode->nVersion >= NOBLKS_VERSION_END)) { // if ok, compare node's score with the best so far - double dScore = NodeSyncScore(pnode); - if (pnodeNewSync == NULL || dScore > dBestScore) { + int64_t nScore = NodeSyncScore(pnode); + if (pnodeNewSync == NULL || nScore > nBestScore) { pnodeNewSync = pnode; - dBestScore = dScore; + nBestScore = nScore; } } } @@ -1504,6 +1515,9 @@ void ThreadMessageHandler() CNode* pnodeTrickle = NULL; if (!vNodesCopy.empty()) pnodeTrickle = vNodesCopy[GetRand(vNodesCopy.size())]; + + bool fSleep = true; + BOOST_FOREACH(CNode* pnode, vNodesCopy) { if (pnode->fDisconnect) @@ -1513,8 +1527,18 @@ void ThreadMessageHandler() { TRY_LOCK(pnode->cs_vRecvMsg, lockRecv); if (lockRecv) + { if (!g_signals.ProcessMessages(pnode)) pnode->CloseSocketDisconnect(); + + if (pnode->nSendSize < SendBufferSize()) + { + if (!pnode->vRecvGetData.empty() || (!pnode->vRecvMsg.empty() && pnode->vRecvMsg[0].complete())) + { + fSleep = false; + } + } + } } boost::this_thread::interruption_point(); @@ -1533,7 +1557,8 @@ void ThreadMessageHandler() pnode->Release(); } - MilliSleep(20); + if (fSleep) + MilliSleep(100); } } @@ -1548,24 +1573,20 @@ bool BindListenPort(const CService &addrBind, string& strError) int nOne = 1; // Create socket for listening for incoming connections -#ifdef USE_IPV6 struct sockaddr_storage sockaddr; -#else - struct sockaddr sockaddr; -#endif socklen_t len = sizeof(sockaddr); if (!addrBind.GetSockAddr((struct sockaddr*)&sockaddr, &len)) { - strError = strprintf("Error: bind address family for %s not supported", addrBind.ToString().c_str()); - printf("%s\n", strError.c_str()); + strError = strprintf("Error: bind address family for %s not supported", addrBind.ToString()); + LogPrintf("%s\n", strError); return false; } SOCKET hListenSocket = socket(((struct sockaddr*)&sockaddr)->sa_family, SOCK_STREAM, IPPROTO_TCP); if (hListenSocket == INVALID_SOCKET) { - strError = strprintf("Error: Couldn't open socket for incoming connections (socket returned error %d)", WSAGetLastError()); - printf("%s\n", strError.c_str()); + strError = strprintf("Error: Couldn't open socket for incoming connections (socket returned error %s)", NetworkErrorString(WSAGetLastError())); + LogPrintf("%s\n", strError); return false; } @@ -1588,12 +1609,11 @@ bool BindListenPort(const CService &addrBind, string& strError) if (fcntl(hListenSocket, F_SETFL, O_NONBLOCK) == SOCKET_ERROR) #endif { - strError = strprintf("Error: Couldn't set properties on socket for incoming connections (error %d)", WSAGetLastError()); - printf("%s\n", strError.c_str()); + strError = strprintf("Error: Couldn't set properties on socket for incoming connections (error %s)", NetworkErrorString(WSAGetLastError())); + LogPrintf("%s\n", strError); return false; } -#ifdef USE_IPV6 // some systems don't have IPV6_V6ONLY but are always v6only; others do have the option // and enable it by default or not. Try to enable it, if possible. if (addrBind.IsIPv6()) { @@ -1611,25 +1631,24 @@ bool BindListenPort(const CService &addrBind, string& strError) setsockopt(hListenSocket, IPPROTO_IPV6, nParameterId, (const char*)&nProtLevel, sizeof(int)); #endif } -#endif if (::bind(hListenSocket, (struct sockaddr*)&sockaddr, len) == SOCKET_ERROR) { int nErr = WSAGetLastError(); if (nErr == WSAEADDRINUSE) - strError = strprintf(_("Unable to bind to %s on this computer. Myriadcoin is probably already running."), addrBind.ToString().c_str()); + strError = strprintf(_("Unable to bind to %s on this computer. Myriadcoin Core is probably already running."), addrBind.ToString()); else - strError = strprintf(_("Unable to bind to %s on this computer (bind returned error %d, %s)"), addrBind.ToString().c_str(), nErr, strerror(nErr)); - printf("%s\n", strError.c_str()); + strError = strprintf(_("Unable to bind to %s on this computer (bind returned error %s)"), addrBind.ToString(), NetworkErrorString(nErr)); + LogPrintf("%s\n", strError); return false; } - printf("Bound to %s\n", addrBind.ToString().c_str()); + LogPrintf("Bound to %s\n", addrBind.ToString()); // Listen for incoming connections if (listen(hListenSocket, SOMAXCONN) == SOCKET_ERROR) { - strError = strprintf("Error: Listening for incoming connections failed (listen returned error %d)", WSAGetLastError()); - printf("%s\n", strError.c_str()); + strError = strprintf(_("Error: Listening for incoming connections failed (listen returned error %s)"), NetworkErrorString(WSAGetLastError())); + LogPrintf("%s\n", strError); return false; } @@ -1641,7 +1660,7 @@ bool BindListenPort(const CService &addrBind, string& strError) return true; } -void static Discover() +void static Discover(boost::thread_group& threadGroup) { if (!fDiscover) return; @@ -1676,17 +1695,15 @@ void static Discover() struct sockaddr_in* s4 = (struct sockaddr_in*)(ifa->ifa_addr); CNetAddr addr(s4->sin_addr); if (AddLocal(addr, LOCAL_IF)) - printf("IPv4 %s: %s\n", ifa->ifa_name, addr.ToString().c_str()); + LogPrintf("IPv4 %s: %s\n", ifa->ifa_name, addr.ToString()); } -#ifdef USE_IPV6 else if (ifa->ifa_addr->sa_family == AF_INET6) { struct sockaddr_in6* s6 = (struct sockaddr_in6*)(ifa->ifa_addr); CNetAddr addr(s6->sin6_addr); if (AddLocal(addr, LOCAL_IF)) - printf("IPv6 %s: %s\n", ifa->ifa_name, addr.ToString().c_str()); + LogPrintf("IPv6 %s: %s\n", ifa->ifa_name, addr.ToString()); } -#endif } freeifaddrs(myaddrs); } @@ -1694,7 +1711,7 @@ void static Discover() // Don't use external IPv4 discovery, when -onlynet="IPv6" if (!IsLimited(NET_IPV4)) - boost::thread(boost::bind(&TraceThread, "ext-ip", &ThreadGetMyExternalIP)); + threadGroup.create_thread(boost::bind(&TraceThread, "ext-ip", &ThreadGetMyExternalIP)); } void StartNode(boost::thread_group& threadGroup) @@ -1708,14 +1725,14 @@ void StartNode(boost::thread_group& threadGroup) if (pnodeLocalHost == NULL) pnodeLocalHost = new CNode(INVALID_SOCKET, CAddress(CService("127.0.0.1", 0), nLocalServices)); - Discover(); + Discover(threadGroup); // // Start threads // if (!GetBoolArg("-dnsseed", true)) - printf("DNS seeding disabled\n"); + LogPrintf("DNS seeding disabled\n"); else threadGroup.create_thread(boost::bind(&TraceThread, "dnsseed", &ThreadDNSAddressSeed)); @@ -1742,7 +1759,7 @@ void StartNode(boost::thread_group& threadGroup) bool StopNode() { - printf("StopNode()\n"); + LogPrintf("StopNode()\n"); MapPort(false); if (semOutbound) for (int i=0; iPushInventory(inv); } } + +void CNode::RecordBytesRecv(uint64_t bytes) +{ + LOCK(cs_totalBytesRecv); + nTotalBytesRecv += bytes; +} + +void CNode::RecordBytesSent(uint64_t bytes) +{ + LOCK(cs_totalBytesSent); + nTotalBytesSent += bytes; +} + +uint64_t CNode::GetTotalBytesRecv() +{ + LOCK(cs_totalBytesRecv); + return nTotalBytesRecv; +} + +uint64_t CNode::GetTotalBytesSent() +{ + LOCK(cs_totalBytesSent); + return nTotalBytesSent; +} + +void CNode::Fuzz(int nChance) +{ + if (!fSuccessfullyConnected) return; // Don't fuzz initial handshake + if (GetRand(nChance) != 0) return; // Fuzz 1 of every nChance messages + + switch (GetRand(3)) + { + case 0: + // xor a random byte with a random value: + if (!ssSend.empty()) { + CDataStream::size_type pos = GetRand(ssSend.size()); + ssSend[pos] ^= (unsigned char)(GetRand(256)); + } + break; + case 1: + // delete a random byte: + if (!ssSend.empty()) { + CDataStream::size_type pos = GetRand(ssSend.size()); + ssSend.erase(ssSend.begin()+pos); + } + break; + case 2: + // insert a random byte at a random position + { + CDataStream::size_type pos = GetRand(ssSend.size()); + char ch = (char)GetRand(256); + ssSend.insert(ssSend.begin()+pos, ch); + } + break; + } + // Chance of more than one change half the time: + // (more changes exponentially less likely): + Fuzz(2); +} + +// +// CAddrDB +// + +CAddrDB::CAddrDB() +{ + pathAddr = GetDataDir() / "peers.dat"; +} + +bool CAddrDB::Write(const CAddrMan& addr) +{ + // Generate random temporary filename + unsigned short randv = 0; + RAND_bytes((unsigned char *)&randv, sizeof(randv)); + std::string tmpfn = strprintf("peers.dat.%04x", randv); + + // serialize addresses, checksum data up to that point, then append csum + CDataStream ssPeers(SER_DISK, CLIENT_VERSION); + ssPeers << FLATDATA(Params().MessageStart()); + ssPeers << addr; + uint256 hash = Hash(ssPeers.begin(), ssPeers.end()); + ssPeers << hash; + + // open temp output file, and associate with CAutoFile + boost::filesystem::path pathTmp = GetDataDir() / tmpfn; + FILE *file = fopen(pathTmp.string().c_str(), "wb"); + CAutoFile fileout = CAutoFile(file, SER_DISK, CLIENT_VERSION); + if (!fileout) + return error("%s : Failed to open file %s", __func__, pathTmp.string()); + + // Write and commit header, data + try { + fileout << ssPeers; + } + catch (std::exception &e) { + return error("%s : Serialize or I/O error - %s", __func__, e.what()); + } + FileCommit(fileout); + fileout.fclose(); + + // replace existing peers.dat, if any, with new peers.dat.XXXX + if (!RenameOver(pathTmp, pathAddr)) + return error("%s : Rename-into-place failed", __func__); + + return true; +} + +bool CAddrDB::Read(CAddrMan& addr) +{ + // open input file, and associate with CAutoFile + FILE *file = fopen(pathAddr.string().c_str(), "rb"); + CAutoFile filein = CAutoFile(file, SER_DISK, CLIENT_VERSION); + if (!filein) + return error("%s : Failed to open file %s", __func__, pathAddr.string()); + + // use file size to size memory buffer + int fileSize = boost::filesystem::file_size(pathAddr); + int dataSize = fileSize - sizeof(uint256); + // Don't try to resize to a negative number if file is small + if (dataSize < 0) + dataSize = 0; + vector vchData; + vchData.resize(dataSize); + uint256 hashIn; + + // read data and checksum from file + try { + filein.read((char *)&vchData[0], dataSize); + filein >> hashIn; + } + catch (std::exception &e) { + return error("%s : Deserialize or I/O error - %s", __func__, e.what()); + } + filein.fclose(); + + CDataStream ssPeers(vchData, SER_DISK, CLIENT_VERSION); + + // verify stored checksum matches input data + uint256 hashTmp = Hash(ssPeers.begin(), ssPeers.end()); + if (hashIn != hashTmp) + return error("%s : Checksum mismatch, data corrupted", __func__); + + unsigned char pchMsgTmp[4]; + try { + // de-serialize file header (network specific magic number) and .. + ssPeers >> FLATDATA(pchMsgTmp); + + // ... verify the network matches ours + if (memcmp(pchMsgTmp, Params().MessageStart(), sizeof(pchMsgTmp))) + return error("%s : Invalid network magic number", __func__); + + // de-serialize address data into one CAddrMan object + ssPeers >> addr; + } + catch (std::exception &e) { + return error("%s : Deserialize or I/O error - %s", __func__, e.what()); + } + + return true; +} diff --git a/src/net.h b/src/net.h index e75fe48f..f9b953c8 100644 --- a/src/net.h +++ b/src/net.h @@ -1,37 +1,44 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2014 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef BITCOIN_NET_H #define BITCOIN_NET_H +#include "bloom.h" +#include "compat.h" +#include "hash.h" +#include "limitedmap.h" +#include "mruset.h" +#include "netbase.h" +#include "protocol.h" +#include "sync.h" +#include "uint256.h" +#include "util.h" + #include -#include -#include -#include -#include +#include #ifndef WIN32 #include #endif -#include "mruset.h" -#include "limitedmap.h" -#include "netbase.h" -#include "protocol.h" -#include "addrman.h" -#include "hash.h" -#include "bloom.h" +#include +#include +#include + +class CAddrMan; +class CBlockIndex; +class CNode; + +namespace boost { + class thread_group; +} /** The maximum number of entries in an 'inv' protocol message */ static const unsigned int MAX_INV_SZ = 50000; -class CNode; -class CBlockIndex; -extern int nBestHeight; - - - inline unsigned int ReceiveFloodSize() { return 1000*GetArg("-maxreceivebuffer", 5*1000); } inline unsigned int SendBufferSize() { return 1000*GetArg("-maxsendbuffer", 1*1000); } @@ -49,13 +56,19 @@ void StartNode(boost::thread_group& threadGroup); bool StopNode(); void SocketSendData(CNode *pnode); +typedef int NodeId; + // Signals for message handling struct CNodeSignals { + boost::signals2::signal GetHeight; boost::signals2::signal ProcessMessages; boost::signals2::signal SendMessages; + boost::signals2::signal InitializeNode; + boost::signals2::signal FinalizeNode; }; + CNodeSignals& GetNodeSignals(); @@ -85,40 +98,51 @@ CAddress GetLocalAddress(const CNetAddr *paddrPeer = NULL); extern bool fDiscover; -extern uint64 nLocalServices; -extern uint64 nLocalHostNonce; +extern uint64_t nLocalServices; +extern uint64_t nLocalHostNonce; extern CAddrMan addrman; extern int nMaxConnections; extern std::vector vNodes; extern CCriticalSection cs_vNodes; extern std::map mapRelay; -extern std::deque > vRelayExpiration; +extern std::deque > vRelayExpiration; extern CCriticalSection cs_mapRelay; -extern limitedmap mapAlreadyAskedFor; +extern limitedmap mapAlreadyAskedFor; extern std::vector vAddedNodes; extern CCriticalSection cs_vAddedNodes; +extern NodeId nLastNodeId; +extern CCriticalSection cs_nLastNodeId; +struct LocalServiceInfo { + int nScore; + int nPort; +}; +extern CCriticalSection cs_mapLocalHost; +extern map mapLocalHost; class CNodeStats { public: - uint64 nServices; - int64 nLastSend; - int64 nLastRecv; - int64 nTimeConnected; + NodeId nodeid; + uint64_t nServices; + int64_t nLastSend; + int64_t nLastRecv; + int64_t nTimeConnected; std::string addrName; int nVersion; - std::string strSubVer; + std::string cleanSubVer; bool fInbound; int nStartingHeight; - int nMisbehavior; - uint64 nSendBytes; - uint64 nRecvBytes; + uint64_t nSendBytes; + uint64_t nRecvBytes; bool fSyncNode; + double dPingTime; + double dPingWait; + std::string addrLocal; }; @@ -168,30 +192,34 @@ class CNode { public: // socket - uint64 nServices; + uint64_t nServices; SOCKET hSocket; CDataStream ssSend; size_t nSendSize; // total size of all vSendMsg entries size_t nSendOffset; // offset inside the first vSendMsg already sent - uint64 nSendBytes; + uint64_t nSendBytes; std::deque vSendMsg; CCriticalSection cs_vSend; std::deque vRecvGetData; std::deque vRecvMsg; CCriticalSection cs_vRecvMsg; - uint64 nRecvBytes; + uint64_t nRecvBytes; int nRecvVersion; - int64 nLastSend; - int64 nLastRecv; - int64 nLastSendEmpty; - int64 nTimeConnected; + int64_t nLastSend; + int64_t nLastRecv; + int64_t nLastSendEmpty; + int64_t nTimeConnected; CAddress addr; std::string addrName; CService addrLocal; int nVersion; - std::string strSubVer; + // strSubVer is whatever byte array we read from the wire. However, this field is intended + // to be printed out, displayed to humans in various forms and so on. So we sanitize it and + // store the sanitized version in cleanSubVer. The original should be used when dealing with + // the network or wire types and the cleaned string used when displayed or logged. + std::string strSubVer, cleanSubVer; bool fOneShot; bool fClient; bool fInbound; @@ -207,13 +235,16 @@ public: CCriticalSection cs_filter; CBloomFilter* pfilter; int nRefCount; + NodeId id; protected: // Denial-of-service detection/prevention // Key is IP address, value is banned-until-time - static std::map setBanned; + static std::map setBanned; static CCriticalSection cs_setBanned; - int nMisbehavior; + + // Basic fuzz-testing + void Fuzz(int nChance); // modifies ssSend public: uint256 hashContinue; @@ -224,7 +255,7 @@ public: // flood relay std::vector vAddrToSend; - std::set setAddrKnown; + mruset setAddrKnown; bool fGetAddr; std::set setKnown; @@ -232,13 +263,19 @@ public: mruset setInventoryKnown; std::vector vInventoryToSend; CCriticalSection cs_inventory; - std::multimap mapAskFor; + std::multimap mapAskFor; - CNode(SOCKET hSocketIn, CAddress addrIn, std::string addrNameIn = "", bool fInboundIn=false) : ssSend(SER_NETWORK, MIN_PROTO_VERSION) + // Ping time measurement + uint64_t nPingNonceSent; + int64_t nPingUsecStart; + int64_t nPingUsecTime; + bool fPingQueued; + + CNode(SOCKET hSocketIn, CAddress addrIn, std::string addrNameIn = "", bool fInboundIn=false) : ssSend(SER_NETWORK, INIT_PROTO_VERSION), setAddrKnown(5000) { nServices = 0; hSocket = hSocketIn; - nRecvVersion = MIN_PROTO_VERSION; + nRecvVersion = INIT_PROTO_VERSION; nLastSend = 0; nLastRecv = 0; nSendBytes = 0; @@ -264,14 +301,24 @@ public: nStartingHeight = -1; fStartSync = false; fGetAddr = false; - nMisbehavior = 0; fRelayTxes = false; setInventoryKnown.max_size(SendBufferSize() / 1000); - pfilter = NULL; + pfilter = new CBloomFilter(); + nPingNonceSent = 0; + nPingUsecStart = 0; + nPingUsecTime = 0; + fPingQueued = false; + + { + LOCK(cs_nLastNodeId); + id = nLastNodeId++; + } // Be shy and don't send version until we hear if (hSocket != INVALID_SOCKET && !fInbound) PushVersion(); + + GetNodeSignals().InitializeNode(GetId(), this); } ~CNode() @@ -283,13 +330,24 @@ public: } if (pfilter) delete pfilter; + GetNodeSignals().FinalizeNode(GetId()); } private: + // Network usage totals + static CCriticalSection cs_totalBytesRecv; + static CCriticalSection cs_totalBytesSent; + static uint64_t nTotalBytesRecv; + static uint64_t nTotalBytesSent; + CNode(const CNode&); void operator=(const CNode&); + public: + NodeId GetId() const { + return id; + } int GetRefCount() { @@ -301,7 +359,7 @@ public: unsigned int GetTotalRecvSize() { unsigned int total = 0; - BOOST_FOREACH(const CNetMessage &msg, vRecvMsg) + BOOST_FOREACH(const CNetMessage &msg, vRecvMsg) total += msg.vRecv.size() + 24; return total; } @@ -366,18 +424,17 @@ public: { // We're using mapAskFor as a priority queue, // the key is the earliest time the request can be sent - int64 nRequestTime; - limitedmap::const_iterator it = mapAlreadyAskedFor.find(inv); + int64_t nRequestTime; + limitedmap::const_iterator it = mapAlreadyAskedFor.find(inv); if (it != mapAlreadyAskedFor.end()) nRequestTime = it->second; else nRequestTime = 0; - if (fDebugNet) - printf("askfor %s %"PRI64d" (%s)\n", inv.ToString().c_str(), nRequestTime, DateTimeStrFormat("%H:%M:%S", nRequestTime/1000000).c_str()); + LogPrint("net", "askfor %s %d (%s)\n", inv.ToString().c_str(), nRequestTime, DateTimeStrFormat("%H:%M:%S", nRequestTime/1000000).c_str()); // Make sure not to reuse time indexes to keep things in the same order - int64 nNow = (GetTime() - 1) * 1000000; - static int64 nLastTime; + int64_t nNow = GetTimeMicros() - 1000000; + static int64_t nLastTime; ++nLastTime; nNow = std::max(nNow, nLastTime); nLastTime = nNow; @@ -399,8 +456,7 @@ public: ENTER_CRITICAL_SECTION(cs_vSend); assert(ssSend.size() == 0); ssSend << CMessageHeader(pszCommand, 0); - if (fDebug) - printf("sending: %s ", pszCommand); + LogPrint("net", "sending: %s ", pszCommand); } // TODO: Document the precondition of this function. Is cs_vSend locked? @@ -410,19 +466,23 @@ public: LEAVE_CRITICAL_SECTION(cs_vSend); - if (fDebug) - printf("(aborted)\n"); + LogPrint("net", "(aborted)\n"); } // TODO: Document the precondition of this function. Is cs_vSend locked? void EndMessage() UNLOCK_FUNCTION(cs_vSend) { - if (mapArgs.count("-dropmessagestest") && GetRand(atoi(mapArgs["-dropmessagestest"])) == 0) + // The -*messagestest options are intentionally not documented in the help message, + // since they are only used during development to debug the networking code and are + // not intended for end-users. + if (mapArgs.count("-dropmessagestest") && GetRand(GetArg("-dropmessagestest", 2)) == 0) { - printf("dropmessages DROPPING SEND MESSAGE\n"); + LogPrint("net", "dropmessages DROPPING SEND MESSAGE\n"); AbortMessage(); return; } + if (mapArgs.count("-fuzzmessagestest")) + Fuzz(GetArg("-fuzzmessagestest", 10)); if (ssSend.size() == 0) return; @@ -438,9 +498,7 @@ public: assert(ssSend.size () >= CMessageHeader::CHECKSUM_OFFSET + sizeof(nChecksum)); memcpy((char*)&ssSend[CMessageHeader::CHECKSUM_OFFSET], &nChecksum, sizeof(nChecksum)); - if (fDebug) { - printf("(%d bytes)\n", nSize); - } + LogPrint("net", "(%d bytes)\n", nSize); std::deque::iterator it = vSendMsg.insert(vSendMsg.end(), CSerializeData()); ssSend.GetAndClear(*it); @@ -637,8 +695,15 @@ public: // new code. static void ClearBanned(); // needed for unit testing static bool IsBanned(CNetAddr ip); - bool Misbehaving(int howmuch); // 1 == a little, 100 == a lot + static bool Ban(const CNetAddr &ip); void copyStats(CNodeStats &stats); + + // Network stats + static void RecordBytesRecv(uint64_t bytes); + static void RecordBytesSent(uint64_t bytes); + + static uint64_t GetTotalBytesRecv(); + static uint64_t GetTotalBytesSent(); }; @@ -647,4 +712,15 @@ class CTransaction; void RelayTransaction(const CTransaction& tx, const uint256& hash); void RelayTransaction(const CTransaction& tx, const uint256& hash, const CDataStream& ss); +/** Access to the (IP) address database (peers.dat) */ +class CAddrDB +{ +private: + boost::filesystem::path pathAddr; +public: + CAddrDB(); + bool Write(const CAddrMan& addr); + bool Read(CAddrMan& addr); +}; + #endif diff --git a/src/netbase.cpp b/src/netbase.cpp index 08d13374..eb6859e2 100644 --- a/src/netbase.cpp +++ b/src/netbase.cpp @@ -1,20 +1,26 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2014 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "netbase.h" -#include "util.h" -#include "sync.h" + #include "hash.h" +#include "sync.h" +#include "uint256.h" +#include "util.h" #ifndef WIN32 -#include +#include #endif #include // for to_lower() #include // for startswith() and endswith() +#if !defined(HAVE_MSG_NOSIGNAL) && !defined(MSG_NOSIGNAL) +#define MSG_NOSIGNAL 0 +#endif + using namespace std; // Settings @@ -72,11 +78,7 @@ bool static LookupIntern(const char *pszName, std::vector& vIP, unsign aiHint.ai_socktype = SOCK_STREAM; aiHint.ai_protocol = IPPROTO_TCP; -#ifdef USE_IPV6 aiHint.ai_family = AF_UNSPEC; -#else - aiHint.ai_family = AF_INET; -#endif #ifdef WIN32 aiHint.ai_flags = fAllowLookup ? 0 : AI_NUMERICHOST; #else @@ -96,13 +98,11 @@ bool static LookupIntern(const char *pszName, std::vector& vIP, unsign vIP.push_back(CNetAddr(((struct sockaddr_in*)(aiTrav->ai_addr))->sin_addr)); } -#ifdef USE_IPV6 if (aiTrav->ai_family == AF_INET6) { assert(aiTrav->ai_addrlen >= sizeof(sockaddr_in6)); vIP.push_back(CNetAddr(((struct sockaddr_in6*)(aiTrav->ai_addr))->sin6_addr)); } -#endif aiTrav = aiTrav->ai_next; } @@ -165,7 +165,7 @@ bool LookupNumeric(const char *pszName, CService& addr, int portDefault) bool static Socks4(const CService &addrDest, SOCKET& hSocket) { - printf("SOCKS4 connecting %s\n", addrDest.ToString().c_str()); + LogPrintf("SOCKS4 connecting %s\n", addrDest.ToString()); if (!addrDest.IsIPv4()) { closesocket(hSocket); @@ -200,16 +200,16 @@ bool static Socks4(const CService &addrDest, SOCKET& hSocket) { closesocket(hSocket); if (pchRet[1] != 0x5b) - printf("ERROR: Proxy returned error %d\n", pchRet[1]); + LogPrintf("ERROR: Proxy returned error %d\n", pchRet[1]); return false; } - printf("SOCKS4 connected %s\n", addrDest.ToString().c_str()); + LogPrintf("SOCKS4 connected %s\n", addrDest.ToString()); return true; } bool static Socks5(string strDest, int port, SOCKET& hSocket) { - printf("SOCKS5 connecting %s\n", strDest.c_str()); + LogPrintf("SOCKS5 connecting %s\n", strDest); if (strDest.size() > 255) { closesocket(hSocket); @@ -287,8 +287,10 @@ bool static Socks5(string strDest, int port, SOCKET& hSocket) case 0x03: { ret = recv(hSocket, pchRet3, 1, 0) != 1; - if (ret) + if (ret) { + closesocket(hSocket); return error("Error reading from proxy"); + } int nRecv = pchRet3[0]; ret = recv(hSocket, pchRet3, nRecv, 0) != nRecv; break; @@ -305,7 +307,7 @@ bool static Socks5(string strDest, int port, SOCKET& hSocket) closesocket(hSocket); return error("Error reading from proxy"); } - printf("SOCKS5 connected %s\n", strDest.c_str()); + LogPrintf("SOCKS5 connected %s\n", strDest); return true; } @@ -313,14 +315,10 @@ bool static ConnectSocketDirectly(const CService &addrConnect, SOCKET& hSocketRe { hSocketRet = INVALID_SOCKET; -#ifdef USE_IPV6 struct sockaddr_storage sockaddr; -#else - struct sockaddr sockaddr; -#endif socklen_t len = sizeof(sockaddr); if (!addrConnect.GetSockAddr((struct sockaddr*)&sockaddr, &len)) { - printf("Cannot connect to %s: unsupported network\n", addrConnect.ToString().c_str()); + LogPrintf("Cannot connect to %s: unsupported network\n", addrConnect.ToString()); return false; } @@ -359,13 +357,13 @@ bool static ConnectSocketDirectly(const CService &addrConnect, SOCKET& hSocketRe int nRet = select(hSocket + 1, NULL, &fdset, NULL, &timeout); if (nRet == 0) { - printf("connection timeout\n"); + LogPrint("net", "connection to %s timeout\n", addrConnect.ToString()); closesocket(hSocket); return false; } if (nRet == SOCKET_ERROR) { - printf("select() for connection failed: %i\n",WSAGetLastError()); + LogPrintf("select() for %s failed: %s\n", addrConnect.ToString(), NetworkErrorString(WSAGetLastError())); closesocket(hSocket); return false; } @@ -376,13 +374,13 @@ bool static ConnectSocketDirectly(const CService &addrConnect, SOCKET& hSocketRe if (getsockopt(hSocket, SOL_SOCKET, SO_ERROR, &nRet, &nRetSize) == SOCKET_ERROR) #endif { - printf("getsockopt() for connection failed: %i\n",WSAGetLastError()); + LogPrintf("getsockopt() for %s failed: %s\n", addrConnect.ToString(), NetworkErrorString(WSAGetLastError())); closesocket(hSocket); return false; } if (nRet != 0) { - printf("connect() failed after select(): %s\n",strerror(nRet)); + LogPrintf("connect() to %s failed after select(): %s\n", addrConnect.ToString(), NetworkErrorString(nRet)); closesocket(hSocket); return false; } @@ -393,7 +391,7 @@ bool static ConnectSocketDirectly(const CService &addrConnect, SOCKET& hSocketRe else #endif { - printf("connect() failed: %i\n",WSAGetLastError()); + LogPrintf("connect() to %s failed: %s\n", addrConnect.ToString(), NetworkErrorString(WSAGetLastError())); closesocket(hSocket); return false; } @@ -495,6 +493,7 @@ bool ConnectSocket(const CService &addrDest, SOCKET& hSocketRet, int nTimeout) return false; break; default: + closesocket(hSocket); return false; } @@ -526,7 +525,9 @@ bool ConnectSocketByName(CService &addr, SOCKET& hSocketRet, const char *pszDest switch(nameproxy.second) { default: - case 4: return false; + case 4: + closesocket(hSocket); + return false; case 5: if (!Socks5(strDest, port, hSocket)) return false; @@ -574,12 +575,10 @@ CNetAddr::CNetAddr(const struct in_addr& ipv4Addr) memcpy(ip+12, &ipv4Addr, 4); } -#ifdef USE_IPV6 CNetAddr::CNetAddr(const struct in6_addr& ipv6Addr) { memcpy(ip, &ipv6Addr, 16); } -#endif CNetAddr::CNetAddr(const char *pszIp, bool fAllowLookup) { @@ -753,11 +752,7 @@ std::string CNetAddr::ToStringIP() const if (IsTor()) return EncodeBase32(&ip[6], 10) + ".onion"; CService serv(*this, 0); -#ifdef USE_IPV6 struct sockaddr_storage sockaddr; -#else - struct sockaddr sockaddr; -#endif socklen_t socklen = sizeof(sockaddr); if (serv.GetSockAddr((struct sockaddr*)&sockaddr, &socklen)) { char name[1025] = ""; @@ -802,13 +797,11 @@ bool CNetAddr::GetInAddr(struct in_addr* pipv4Addr) const return true; } -#ifdef USE_IPV6 bool CNetAddr::GetIn6Addr(struct in6_addr* pipv6Addr) const { memcpy(pipv6Addr, ip, 16); return true; } -#endif // get canonical identifier of an address' group // no two connections will be attempted to addresses with the same group @@ -860,7 +853,7 @@ std::vector CNetAddr::GetGroup() const nBits = 4; } // for he.net, use /36 groups - else if (GetByte(15) == 0x20 && GetByte(14) == 0x11 && GetByte(13) == 0x04 && GetByte(12) == 0x70) + else if (GetByte(15) == 0x20 && GetByte(14) == 0x01 && GetByte(13) == 0x04 && GetByte(12) == 0x70) nBits = 36; // for the rest of the IPv6 network, use /32 groups else @@ -879,17 +872,17 @@ std::vector CNetAddr::GetGroup() const return vchRet; } -uint64 CNetAddr::GetHash() const +uint64_t CNetAddr::GetHash() const { uint256 hash = Hash(&ip[0], &ip[16]); - uint64 nRet; + uint64_t nRet; memcpy(&nRet, &hash, sizeof(nRet)); return nRet; } void CNetAddr::print() const { - printf("CNetAddr(%s)\n", ToString().c_str()); + LogPrintf("CNetAddr(%s)\n", ToString()); } // private extensions to enum Network, only returned by GetExtNetwork, @@ -982,23 +975,19 @@ CService::CService(const struct in_addr& ipv4Addr, unsigned short portIn) : CNet { } -#ifdef USE_IPV6 CService::CService(const struct in6_addr& ipv6Addr, unsigned short portIn) : CNetAddr(ipv6Addr), port(portIn) { } -#endif CService::CService(const struct sockaddr_in& addr) : CNetAddr(addr.sin_addr), port(ntohs(addr.sin_port)) { assert(addr.sin_family == AF_INET); } -#ifdef USE_IPV6 CService::CService(const struct sockaddr_in6 &addr) : CNetAddr(addr.sin6_addr), port(ntohs(addr.sin6_port)) { assert(addr.sin6_family == AF_INET6); } -#endif bool CService::SetSockAddr(const struct sockaddr *paddr) { @@ -1006,11 +995,9 @@ bool CService::SetSockAddr(const struct sockaddr *paddr) case AF_INET: *this = CService(*(const struct sockaddr_in*)paddr); return true; -#ifdef USE_IPV6 case AF_INET6: *this = CService(*(const struct sockaddr_in6*)paddr); return true; -#endif default: return false; } @@ -1082,7 +1069,6 @@ bool CService::GetSockAddr(struct sockaddr* paddr, socklen_t *addrlen) const paddrin->sin_port = htons(port); return true; } -#ifdef USE_IPV6 if (IsIPv6()) { if (*addrlen < (socklen_t)sizeof(struct sockaddr_in6)) return false; @@ -1095,7 +1081,6 @@ bool CService::GetSockAddr(struct sockaddr* paddr, socklen_t *addrlen) const paddrin6->sin6_port = htons(port); return true; } -#endif return false; } @@ -1130,10 +1115,44 @@ std::string CService::ToString() const void CService::print() const { - printf("CService(%s)\n", ToString().c_str()); + LogPrintf("CService(%s)\n", ToString()); } void CService::SetPort(unsigned short portIn) { port = portIn; } + +#ifdef WIN32 +std::string NetworkErrorString(int err) +{ + char buf[256]; + buf[0] = 0; + if(FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_MAX_WIDTH_MASK, + NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + buf, sizeof(buf), NULL)) + { + return strprintf("%s (%d)", buf, err); + } + else + { + return strprintf("Unknown error (%d)", err); + } +} +#else +std::string NetworkErrorString(int err) +{ + char buf[256]; + const char *s = buf; + buf[0] = 0; + /* Too bad there are two incompatible implementations of the + * thread-safe strerror. */ +#ifdef STRERROR_R_CHAR_P /* GNU variant can return a pointer outside the passed buffer */ + s = strerror_r(err, buf, sizeof(buf)); +#else /* POSIX variant always returns message in buffer */ + (void) strerror_r(err, buf, sizeof(buf)); +#endif + return strprintf("%s (%d)", s, err); +} +#endif + diff --git a/src/netbase.h b/src/netbase.h index e4ec4ef5..b3358dcf 100644 --- a/src/netbase.h +++ b/src/netbase.h @@ -1,15 +1,21 @@ -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2013 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef BITCOIN_NETBASE_H #define BITCOIN_NETBASE_H +#if defined(HAVE_CONFIG_H) +#include "bitcoin-config.h" +#endif + +#include "compat.h" +#include "serialize.h" + +#include #include #include -#include "serialize.h" -#include "compat.h" - extern int nConnectTimeout; #ifdef WIN32 @@ -50,7 +56,7 @@ class CNetAddr bool IsRFC3849() const; // IPv6 documentation address (2001:0DB8::/32) bool IsRFC3927() const; // IPv4 autoconfig (169.254.0.0/16) bool IsRFC3964() const; // IPv6 6to4 tunnelling (2002::/16) - bool IsRFC4193() const; // IPv6 unique local (FC00::/15) + bool IsRFC4193() const; // IPv6 unique local (FC00::/7) bool IsRFC4380() const; // IPv6 Teredo tunnelling (2001::/32) bool IsRFC4843() const; // IPv6 ORCHID (2001:10::/28) bool IsRFC4862() const; // IPv6 autoconfig (FE80::/64) @@ -65,16 +71,14 @@ class CNetAddr std::string ToString() const; std::string ToStringIP() const; unsigned int GetByte(int n) const; - uint64 GetHash() const; + uint64_t GetHash() const; bool GetInAddr(struct in_addr* pipv4Addr) const; std::vector GetGroup() const; int GetReachabilityFrom(const CNetAddr *paddrPartner = NULL) const; void print() const; -#ifdef USE_IPV6 CNetAddr(const struct in6_addr& pipv6Addr); bool GetIn6Addr(struct in6_addr* pipv6Addr) const; -#endif friend bool operator==(const CNetAddr& a, const CNetAddr& b); friend bool operator!=(const CNetAddr& a, const CNetAddr& b); @@ -115,10 +119,8 @@ class CService : public CNetAddr std::string ToStringIPPort() const; void print() const; -#ifdef USE_IPV6 CService(const struct in6_addr& ipv6Addr, unsigned short port); CService(const struct sockaddr_in6& addr); -#endif IMPLEMENT_SERIALIZE ( @@ -147,5 +149,7 @@ bool Lookup(const char *pszName, std::vector& vAddr, int portDefault = bool LookupNumeric(const char *pszName, CService& addr, int portDefault = 0); bool ConnectSocket(const CService &addr, SOCKET& hSocketRet, int nTimeout = nConnectTimeout); bool ConnectSocketByName(CService &addr, SOCKET& hSocketRet, const char *pszDest, int portDefault = 0, int nTimeout = nConnectTimeout); +/** Return readable error string for a network error code */ +std::string NetworkErrorString(int err); #endif diff --git a/src/noui.cpp b/src/noui.cpp index 3f90cd04..32c861b0 100644 --- a/src/noui.cpp +++ b/src/noui.cpp @@ -1,12 +1,14 @@ // Copyright (c) 2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2014 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include "ui_interface.h" -#include "init.h" -#include "bitcoinrpc.h" +#include "noui.h" +#include "ui_interface.h" +#include "util.h" + +#include #include static bool noui_ThreadSafeMessageBox(const std::string& message, const std::string& caption, unsigned int style) @@ -27,25 +29,19 @@ static bool noui_ThreadSafeMessageBox(const std::string& message, const std::str strCaption += caption; // Use supplied caption (can be empty) } - printf("%s: %s\n", strCaption.c_str(), message.c_str()); + LogPrintf("%s: %s\n", strCaption, message); fprintf(stderr, "%s: %s\n", strCaption.c_str(), message.c_str()); return false; } -static bool noui_ThreadSafeAskFee(int64 /*nFeeRequired*/) -{ - return true; -} - static void noui_InitMessage(const std::string &message) { - printf("init message: %s\n", message.c_str()); + LogPrintf("init message: %s\n", message); } void noui_connect() { - // Connect myriadcoind signal handlers + // Connect bitcoind signal handlers uiInterface.ThreadSafeMessageBox.connect(noui_ThreadSafeMessageBox); - uiInterface.ThreadSafeAskFee.connect(noui_ThreadSafeAskFee); uiInterface.InitMessage.connect(noui_InitMessage); } diff --git a/src/noui.h b/src/noui.h new file mode 100644 index 00000000..755d987f --- /dev/null +++ b/src/noui.h @@ -0,0 +1,10 @@ +// Copyright (c) 2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITCOIN_NOUI_H +#define BITCOIN_NOUI_H + +extern void noui_connect(); + +#endif diff --git a/src/protocol.cpp b/src/protocol.cpp index 745b4338..c77a92f0 100644 --- a/src/protocol.cpp +++ b/src/protocol.cpp @@ -1,11 +1,11 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2014 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "protocol.h" + #include "util.h" -#include "netbase.h" #ifndef WIN32 # include @@ -67,7 +67,7 @@ bool CMessageHeader::IsValid() const // Message size if (nMessageSize > MAX_SIZE) { - printf("CMessageHeader::IsValid() : (%s, %u bytes) nMessageSize > MAX_SIZE\n", GetCommand().c_str(), nMessageSize); + LogPrintf("CMessageHeader::IsValid() : (%s, %u bytes) nMessageSize > MAX_SIZE\n", GetCommand(), nMessageSize); return false; } @@ -81,7 +81,7 @@ CAddress::CAddress() : CService() Init(); } -CAddress::CAddress(CService ipIn, uint64 nServicesIn) : CService(ipIn) +CAddress::CAddress(CService ipIn, uint64_t nServicesIn) : CService(ipIn) { Init(); nServices = nServicesIn; @@ -118,7 +118,7 @@ CInv::CInv(const std::string& strType, const uint256& hashIn) } } if (i == ARRAYLEN(ppszTypeName)) - throw std::out_of_range(strprintf("CInv::CInv(string, uint256) : unknown type '%s'", strType.c_str())); + throw std::out_of_range(strprintf("CInv::CInv(string, uint256) : unknown type '%s'", strType)); hash = hashIn; } @@ -141,11 +141,11 @@ const char* CInv::GetCommand() const std::string CInv::ToString() const { - return strprintf("%s %s", GetCommand(), hash.ToString().c_str()); + return strprintf("%s %s", GetCommand(), hash.ToString()); } void CInv::print() const { - printf("CInv(%s)\n", ToString().c_str()); + LogPrintf("CInv(%s)\n", ToString()); } diff --git a/src/protocol.h b/src/protocol.h index ae541dfd..86e08ddc 100644 --- a/src/protocol.h +++ b/src/protocol.h @@ -1,5 +1,5 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2013 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -11,11 +11,13 @@ #define __INCLUDED_PROTOCOL_H__ #include "chainparams.h" -#include "serialize.h" #include "netbase.h" -#include +#include "serialize.h" #include "uint256.h" +#include +#include + /** Message header. * (4) message start. * (12) command. @@ -67,7 +69,7 @@ class CAddress : public CService { public: CAddress(); - explicit CAddress(CService ipIn, uint64 nServicesIn=NODE_NETWORK); + explicit CAddress(CService ipIn, uint64_t nServicesIn=NODE_NETWORK); void Init(); @@ -90,13 +92,13 @@ class CAddress : public CService // TODO: make private (improves encapsulation) public: - uint64 nServices; + uint64_t nServices; // disk and network only unsigned int nTime; // memory only - int64 nLastTry; + int64_t nLastTry; }; /** inv message data */ diff --git a/src/qt/aboutdialog.cpp b/src/qt/aboutdialog.cpp deleted file mode 100644 index 6bcea832..00000000 --- a/src/qt/aboutdialog.cpp +++ /dev/null @@ -1,34 +0,0 @@ -#include "aboutdialog.h" -#include "ui_aboutdialog.h" - -#include "clientmodel.h" -#include "clientversion.h" - -AboutDialog::AboutDialog(QWidget *parent) : - QDialog(parent), - ui(new Ui::AboutDialog) -{ - ui->setupUi(this); - - // Set current copyright year - ui->copyrightLabel->setText(tr("Copyright") + QString(" © 2009-2013 ") + tr("The Bitcoin developers")); - ui->copyrightLabel2->setText(tr("Copyright") + QString(" © 2013-%1 ").arg(COPYRIGHT_YEAR) + tr("The Myriadcoin developers")); -} - -void AboutDialog::setModel(ClientModel *model) -{ - if(model) - { - ui->versionLabel->setText(model->formatFullVersion()); - } -} - -AboutDialog::~AboutDialog() -{ - delete ui; -} - -void AboutDialog::on_buttonBox_accepted() -{ - close(); -} diff --git a/src/qt/aboutdialog.h b/src/qt/aboutdialog.h deleted file mode 100644 index 33b14376..00000000 --- a/src/qt/aboutdialog.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef ABOUTDIALOG_H -#define ABOUTDIALOG_H - -#include - -namespace Ui { - class AboutDialog; -} -class ClientModel; - -/** "About" dialog box */ -class AboutDialog : public QDialog -{ - Q_OBJECT - -public: - explicit AboutDialog(QWidget *parent = 0); - ~AboutDialog(); - - void setModel(ClientModel *model); - -private: - Ui::AboutDialog *ui; - -private slots: - void on_buttonBox_accepted(); -}; - -#endif // ABOUTDIALOG_H diff --git a/src/qt/addressbookpage.cpp b/src/qt/addressbookpage.cpp index e2ebac49..6873094f 100644 --- a/src/qt/addressbookpage.cpp +++ b/src/qt/addressbookpage.cpp @@ -1,27 +1,29 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#if defined(HAVE_CONFIG_H) +#include "bitcoin-config.h" +#endif + #include "addressbookpage.h" #include "ui_addressbookpage.h" #include "addresstablemodel.h" -#include "optionsmodel.h" #include "bitcoingui.h" -#include "editaddressdialog.h" #include "csvmodelwriter.h" +#include "editaddressdialog.h" #include "guiutil.h" -#ifdef USE_QRCODE -#include "qrcodedialog.h" -#endif - -#include -#include -#include +#include #include +#include +#include AddressBookPage::AddressBookPage(Mode mode, Tabs tab, QWidget *parent) : QDialog(parent), ui(new Ui::AddressBookPage), model(0), - optionsModel(0), mode(mode), tab(tab) { @@ -31,25 +33,29 @@ AddressBookPage::AddressBookPage(Mode mode, Tabs tab, QWidget *parent) : ui->newAddress->setIcon(QIcon()); ui->copyAddress->setIcon(QIcon()); ui->deleteAddress->setIcon(QIcon()); - ui->verifyMessage->setIcon(QIcon()); - ui->signMessage->setIcon(QIcon()); ui->exportButton->setIcon(QIcon()); #endif -#ifndef USE_QRCODE - ui->showQRCode->setVisible(false); -#endif - switch(mode) { - case ForSending: + case ForSelection: + switch(tab) + { + case SendingTab: setWindowTitle(tr("Choose the address to send coins to")); break; + case ReceivingTab: setWindowTitle(tr("Choose the address to receive coins with")); break; + } connect(ui->tableView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(accept())); ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers); ui->tableView->setFocus(); + ui->closeButton->setText(tr("C&hoose")); ui->exportButton->hide(); break; case ForEditing: - ui->buttonBox->setVisible(false); + switch(tab) + { + case SendingTab: setWindowTitle(tr("Sending addresses")); break; + case ReceivingTab: setWindowTitle(tr("Receiving addresses")); break; + } break; } switch(tab) @@ -57,23 +63,17 @@ AddressBookPage::AddressBookPage(Mode mode, Tabs tab, QWidget *parent) : case SendingTab: ui->labelExplanation->setText(tr("These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins.")); ui->deleteAddress->setVisible(true); - ui->signMessage->setVisible(false); break; case ReceivingTab: - ui->labelExplanation->setText(tr("These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you.")); + ui->labelExplanation->setText(tr("These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction.")); ui->deleteAddress->setVisible(false); - ui->signMessage->setVisible(true); break; } // Context menu actions - QAction *copyAddressAction = new QAction(ui->copyAddress->text(), this); + QAction *copyAddressAction = new QAction(tr("&Copy Address"), this); QAction *copyLabelAction = new QAction(tr("Copy &Label"), this); QAction *editAction = new QAction(tr("&Edit"), this); - QAction *sendCoinsAction = new QAction(tr("Send &Coins"), this); - QAction *showQRCodeAction = new QAction(ui->showQRCode->text(), this); - QAction *signMessageAction = new QAction(ui->signMessage->text(), this); - QAction *verifyMessageAction = new QAction(ui->verifyMessage->text(), this); deleteAction = new QAction(ui->deleteAddress->text(), this); // Build context menu @@ -84,30 +84,16 @@ AddressBookPage::AddressBookPage(Mode mode, Tabs tab, QWidget *parent) : if(tab == SendingTab) contextMenu->addAction(deleteAction); contextMenu->addSeparator(); - if(tab == SendingTab) - contextMenu->addAction(sendCoinsAction); -#ifdef USE_QRCODE - contextMenu->addAction(showQRCodeAction); -#endif - if(tab == ReceivingTab) - contextMenu->addAction(signMessageAction); - else if(tab == SendingTab) - contextMenu->addAction(verifyMessageAction); // Connect signals for context menu actions connect(copyAddressAction, SIGNAL(triggered()), this, SLOT(on_copyAddress_clicked())); connect(copyLabelAction, SIGNAL(triggered()), this, SLOT(onCopyLabelAction())); connect(editAction, SIGNAL(triggered()), this, SLOT(onEditAction())); connect(deleteAction, SIGNAL(triggered()), this, SLOT(on_deleteAddress_clicked())); - connect(sendCoinsAction, SIGNAL(triggered()), this, SLOT(onSendCoinsAction())); - connect(showQRCodeAction, SIGNAL(triggered()), this, SLOT(on_showQRCode_clicked())); - connect(signMessageAction, SIGNAL(triggered()), this, SLOT(on_signMessage_clicked())); - connect(verifyMessageAction, SIGNAL(triggered()), this, SLOT(on_verifyMessage_clicked())); connect(ui->tableView, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(contextualMenu(QPoint))); - // Pass through accept action from button box - connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(accept())); + connect(ui->closeButton, SIGNAL(clicked()), this, SLOT(accept())); } AddressBookPage::~AddressBookPage() @@ -152,7 +138,7 @@ void AddressBookPage::setModel(AddressTableModel *model) #endif connect(ui->tableView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), - this, SLOT(selectionChanged())); + this, SLOT(selectionChanged())); // Select row for newly created address connect(model, SIGNAL(rowsInserted(QModelIndex,int,int)), this, SLOT(selectNewAddress(QModelIndex,int,int))); @@ -160,11 +146,6 @@ void AddressBookPage::setModel(AddressTableModel *model) selectionChanged(); } -void AddressBookPage::setOptionsModel(OptionsModel *optionsModel) -{ - this->optionsModel = optionsModel; -} - void AddressBookPage::on_copyAddress_clicked() { GUIUtil::copyEntryData(ui->tableView, AddressTableModel::Address); @@ -177,6 +158,9 @@ void AddressBookPage::onCopyLabelAction() void AddressBookPage::onEditAction() { + if(!model) + return; + if(!ui->tableView->selectionModel()) return; QModelIndexList indexes = ui->tableView->selectionModel()->selectedRows(); @@ -184,60 +168,24 @@ void AddressBookPage::onEditAction() return; EditAddressDialog dlg( - tab == SendingTab ? - EditAddressDialog::EditSendingAddress : - EditAddressDialog::EditReceivingAddress); + tab == SendingTab ? + EditAddressDialog::EditSendingAddress : + EditAddressDialog::EditReceivingAddress, this); dlg.setModel(model); QModelIndex origIndex = proxyModel->mapToSource(indexes.at(0)); dlg.loadRow(origIndex.row()); dlg.exec(); } -void AddressBookPage::on_signMessage_clicked() -{ - QTableView *table = ui->tableView; - QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address); - - foreach (QModelIndex index, indexes) - { - QString address = index.data().toString(); - emit signMessage(address); - } -} - -void AddressBookPage::on_verifyMessage_clicked() -{ - QTableView *table = ui->tableView; - QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address); - - foreach (QModelIndex index, indexes) - { - QString address = index.data().toString(); - emit verifyMessage(address); - } -} - -void AddressBookPage::onSendCoinsAction() -{ - QTableView *table = ui->tableView; - QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address); - - foreach (QModelIndex index, indexes) - { - QString address = index.data().toString(); - emit sendCoins(address); - } -} - void AddressBookPage::on_newAddress_clicked() { if(!model) return; EditAddressDialog dlg( - tab == SendingTab ? - EditAddressDialog::NewSendingAddress : - EditAddressDialog::NewReceivingAddress, this); + tab == SendingTab ? + EditAddressDialog::NewSendingAddress : + EditAddressDialog::NewReceivingAddress, this); dlg.setModel(model); if(dlg.exec()) { @@ -274,32 +222,20 @@ void AddressBookPage::selectionChanged() ui->deleteAddress->setEnabled(true); ui->deleteAddress->setVisible(true); deleteAction->setEnabled(true); - ui->signMessage->setEnabled(false); - ui->signMessage->setVisible(false); - ui->verifyMessage->setEnabled(true); - ui->verifyMessage->setVisible(true); break; case ReceivingTab: // Deleting receiving addresses, however, is not allowed ui->deleteAddress->setEnabled(false); ui->deleteAddress->setVisible(false); deleteAction->setEnabled(false); - ui->signMessage->setEnabled(true); - ui->signMessage->setVisible(true); - ui->verifyMessage->setEnabled(false); - ui->verifyMessage->setVisible(false); break; } ui->copyAddress->setEnabled(true); - ui->showQRCode->setEnabled(true); } else { ui->deleteAddress->setEnabled(false); - ui->showQRCode->setEnabled(false); ui->copyAddress->setEnabled(false); - ui->signMessage->setEnabled(false); - ui->verifyMessage->setEnabled(false); } } @@ -308,9 +244,6 @@ void AddressBookPage::done(int retval) QTableView *table = ui->tableView; if(!table->selectionModel() || !table->model()) return; - // When this is a tab/widget and not a model dialog, ignore "done" - if(mode == ForEditing) - return; // Figure out which address was selected, and return it QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address); @@ -333,12 +266,12 @@ void AddressBookPage::done(int retval) void AddressBookPage::on_exportButton_clicked() { // CSV is currently the only supported format - QString filename = GUIUtil::getSaveFileName( - this, - tr("Export Address Book Data"), QString(), - tr("Comma separated file (*.csv)")); + QString filename = GUIUtil::getSaveFileName(this, + tr("Export Address List"), QString(), + tr("Comma separated file (*.csv)"), NULL); - if (filename.isNull()) return; + if (filename.isNull()) + return; CSVModelWriter writer(filename); @@ -347,32 +280,12 @@ void AddressBookPage::on_exportButton_clicked() writer.addColumn("Label", AddressTableModel::Label, Qt::EditRole); writer.addColumn("Address", AddressTableModel::Address, Qt::EditRole); - if(!writer.write()) - { - QMessageBox::critical(this, tr("Error exporting"), tr("Could not write to file %1.").arg(filename), - QMessageBox::Abort, QMessageBox::Abort); + if(!writer.write()) { + QMessageBox::critical(this, tr("Exporting Failed"), + tr("There was an error trying to save the address list to %1.").arg(filename)); } } -void AddressBookPage::on_showQRCode_clicked() -{ -#ifdef USE_QRCODE - QTableView *table = ui->tableView; - QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address); - - foreach (QModelIndex index, indexes) - { - QString address = index.data().toString(); - QString label = index.sibling(index.row(), 0).data(Qt::EditRole).toString(); - - QRCodeDialog *dialog = new QRCodeDialog(address, label, tab == ReceivingTab, this); - dialog->setModel(optionsModel); - dialog->setAttribute(Qt::WA_DeleteOnClose); - dialog->show(); - } -#endif -} - void AddressBookPage::contextualMenu(const QPoint &point) { QModelIndex index = ui->tableView->indexAt(point); diff --git a/src/qt/addressbookpage.h b/src/qt/addressbookpage.h index 34465aa6..20beb51e 100644 --- a/src/qt/addressbookpage.h +++ b/src/qt/addressbookpage.h @@ -1,20 +1,25 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef ADDRESSBOOKPAGE_H #define ADDRESSBOOKPAGE_H #include -namespace Ui { - class AddressBookPage; -} class AddressTableModel; class OptionsModel; +namespace Ui { + class AddressBookPage; +} + QT_BEGIN_NAMESPACE -class QTableView; class QItemSelection; -class QSortFilterProxyModel; class QMenu; class QModelIndex; +class QSortFilterProxyModel; +class QTableView; QT_END_NAMESPACE /** Widget that shows a list of sending or receiving addresses. @@ -30,15 +35,14 @@ public: }; enum Mode { - ForSending, /**< Open address book to pick address for sending */ + ForSelection, /**< Open address book to pick address */ ForEditing /**< Open address book for editing */ }; - explicit AddressBookPage(Mode mode, Tabs tab, QWidget *parent = 0); + explicit AddressBookPage(Mode mode, Tabs tab, QWidget *parent); ~AddressBookPage(); void setModel(AddressTableModel *model); - void setOptionsModel(OptionsModel *optionsModel); const QString &getReturnValue() const { return returnValue; } public slots: @@ -47,7 +51,6 @@ public slots: private: Ui::AddressBookPage *ui; AddressTableModel *model; - OptionsModel *optionsModel; Mode mode; Tabs tab; QString returnValue; @@ -63,14 +66,6 @@ private slots: void on_newAddress_clicked(); /** Copy address of currently selected address entry to clipboard */ void on_copyAddress_clicked(); - /** Open the sign message tab in the Sign/Verify Message dialog with currently selected address */ - void on_signMessage_clicked(); - /** Open the verify message tab in the Sign/Verify Message dialog with currently selected address */ - void on_verifyMessage_clicked(); - /** Open send coins dialog for currently selected address (no button) */ - void onSendCoinsAction(); - /** Generate a QR Code from the currently selected address */ - void on_showQRCode_clicked(); /** Copy label of currently selected address entry to clipboard (no button) */ void onCopyLabelAction(); /** Edit currently selected address entry (no button) */ @@ -86,8 +81,6 @@ private slots: void selectNewAddress(const QModelIndex &parent, int begin, int /*end*/); signals: - void signMessage(QString addr); - void verifyMessage(QString addr); void sendCoins(QString addr); }; diff --git a/src/qt/addresstablemodel.cpp b/src/qt/addresstablemodel.cpp index 18014445..dfbd445c 100644 --- a/src/qt/addresstablemodel.cpp +++ b/src/qt/addresstablemodel.cpp @@ -1,12 +1,17 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #include "addresstablemodel.h" #include "guiutil.h" #include "walletmodel.h" -#include "wallet.h" #include "base58.h" +#include "wallet.h" #include +#include const QString AddressTableModel::Send = "S"; const QString AddressTableModel::Receive = "R"; @@ -15,7 +20,8 @@ struct AddressTableEntry { enum Type { Sending, - Receiving + Receiving, + Hidden /* QSortFilterProxyModel will filter these out */ }; Type type; @@ -43,6 +49,20 @@ struct AddressTableEntryLessThan } }; +/* Determine address type from address purpose */ +static AddressTableEntry::Type translateTransactionType(const QString &strPurpose, bool isMine) +{ + AddressTableEntry::Type addressType = AddressTableEntry::Hidden; + // "refund" addresses aren't shown, and change addresses aren't in mapAddressBook at all. + if (strPurpose == "send") + addressType = AddressTableEntry::Sending; + else if (strPurpose == "receive") + addressType = AddressTableEntry::Receiving; + else if (strPurpose == "unknown" || strPurpose == "") // if purpose not set, guess + addressType = (isMine ? AddressTableEntry::Receiving : AddressTableEntry::Sending); + return addressType; +} + // Private implementation class AddressTablePriv { @@ -59,21 +79,25 @@ public: cachedAddressTable.clear(); { LOCK(wallet->cs_wallet); - BOOST_FOREACH(const PAIRTYPE(CTxDestination, std::string)& item, wallet->mapAddressBook) + BOOST_FOREACH(const PAIRTYPE(CTxDestination, CAddressBookData)& item, wallet->mapAddressBook) { const CBitcoinAddress& address = item.first; - const std::string& strName = item.second; bool fMine = IsMine(*wallet, address.Get()); - cachedAddressTable.append(AddressTableEntry(fMine ? AddressTableEntry::Receiving : AddressTableEntry::Sending, + AddressTableEntry::Type addressType = translateTransactionType( + QString::fromStdString(item.second.purpose), fMine); + const std::string& strName = item.second.name; + cachedAddressTable.append(AddressTableEntry(addressType, QString::fromStdString(strName), QString::fromStdString(address.ToString()))); } } // qLowerBound() and qUpperBound() require our cachedAddressTable list to be sorted in asc order + // Even though the map is already sorted this re-sorting step is needed because the originating map + // is sorted by binary address, not by base58() address. qSort(cachedAddressTable.begin(), cachedAddressTable.end(), AddressTableEntryLessThan()); } - void updateEntry(const QString &address, const QString &label, bool isMine, int status) + void updateEntry(const QString &address, const QString &label, bool isMine, const QString &purpose, int status) { // Find address / label in model QList::iterator lower = qLowerBound( @@ -83,14 +107,14 @@ public: int lowerIndex = (lower - cachedAddressTable.begin()); int upperIndex = (upper - cachedAddressTable.begin()); bool inModel = (lower != upper); - AddressTableEntry::Type newEntryType = isMine ? AddressTableEntry::Receiving : AddressTableEntry::Sending; + AddressTableEntry::Type newEntryType = translateTransactionType(purpose, isMine); switch(status) { case CT_NEW: if(inModel) { - OutputDebugStringF("Warning: AddressTablePriv::updateEntry: Got CT_NOW, but entry is already in model\n"); + qDebug() << "AddressTablePriv::updateEntry : Warning: Got CT_NEW, but entry is already in model"; break; } parent->beginInsertRows(QModelIndex(), lowerIndex, lowerIndex); @@ -100,7 +124,7 @@ public: case CT_UPDATED: if(!inModel) { - OutputDebugStringF("Warning: AddressTablePriv::updateEntry: Got CT_UPDATED, but entry is not in model\n"); + qDebug() << "AddressTablePriv::updateEntry : Warning: Got CT_UPDATED, but entry is not in model"; break; } lower->type = newEntryType; @@ -110,7 +134,7 @@ public: case CT_DELETED: if(!inModel) { - OutputDebugStringF("Warning: AddressTablePriv::updateEntry: Got CT_DELETED, but entry is not in model\n"); + qDebug() << "AddressTablePriv::updateEntry : Warning: Got CT_DELETED, but entry is not in model"; break; } parent->beginRemoveRows(QModelIndex(), lowerIndex, upperIndex-1); @@ -215,38 +239,39 @@ bool AddressTableModel::setData(const QModelIndex &index, const QVariant &value, if(!index.isValid()) return false; AddressTableEntry *rec = static_cast(index.internalPointer()); - + std::string strPurpose = (rec->type == AddressTableEntry::Sending ? "send" : "receive"); editStatus = OK; if(role == Qt::EditRole) { - switch(index.column()) + LOCK(wallet->cs_wallet); /* For SetAddressBook / DelAddressBook */ + CTxDestination curAddress = CBitcoinAddress(rec->address.toStdString()).Get(); + if(index.column() == Label) { - case Label: // Do nothing, if old label == new label if(rec->label == value.toString()) { editStatus = NO_CHANGES; return false; } - wallet->SetAddressBookName(CBitcoinAddress(rec->address.toStdString()).Get(), value.toString().toStdString()); - break; - case Address: - // Do nothing, if old address == new address - if(CBitcoinAddress(rec->address.toStdString()) == CBitcoinAddress(value.toString().toStdString())) - { - editStatus = NO_CHANGES; - return false; - } + wallet->SetAddressBook(curAddress, value.toString().toStdString(), strPurpose); + } else if(index.column() == Address) { + CTxDestination newAddress = CBitcoinAddress(value.toString().toStdString()).Get(); // Refuse to set invalid address, set error status and return false - else if(!walletModel->validateAddress(value.toString())) + if(boost::get(&newAddress)) { editStatus = INVALID_ADDRESS; return false; } + // Do nothing, if old address == new address + else if(newAddress == curAddress) + { + editStatus = NO_CHANGES; + return false; + } // Check for duplicate addresses to prevent accidental deletion of addresses, if you try // to paste an existing address over another address (with a different label) - else if(wallet->mapAddressBook.count(CBitcoinAddress(value.toString().toStdString()).Get())) + else if(wallet->mapAddressBook.count(newAddress)) { editStatus = DUPLICATE_ADDRESS; return false; @@ -254,15 +279,11 @@ bool AddressTableModel::setData(const QModelIndex &index, const QVariant &value, // Double-check that we're not overwriting a receiving address else if(rec->type == AddressTableEntry::Sending) { - { - LOCK(wallet->cs_wallet); - // Remove old entry - wallet->DelAddressBookName(CBitcoinAddress(rec->address.toStdString()).Get()); - // Add new entry with new address - wallet->SetAddressBookName(CBitcoinAddress(value.toString().toStdString()).Get(), rec->label.toStdString()); - } + // Remove old entry + wallet->DelAddressBook(curAddress); + // Add new entry with new address + wallet->SetAddressBook(newAddress, rec->label.toStdString(), strPurpose); } - break; } return true; } @@ -273,7 +294,7 @@ QVariant AddressTableModel::headerData(int section, Qt::Orientation orientation, { if(orientation == Qt::Horizontal) { - if(role == Qt::DisplayRole) + if(role == Qt::DisplayRole && section < columns.size()) { return columns[section]; } @@ -312,10 +333,11 @@ QModelIndex AddressTableModel::index(int row, int column, const QModelIndex &par } } -void AddressTableModel::updateEntry(const QString &address, const QString &label, bool isMine, int status) +void AddressTableModel::updateEntry(const QString &address, + const QString &label, bool isMine, const QString &purpose, int status) { // Update address book model from Bitcoin core - priv->updateEntry(address, label, isMine, status); + priv->updateEntry(address, label, isMine, purpose, status); } QString AddressTableModel::addRow(const QString &type, const QString &label, const QString &address) @@ -345,18 +367,21 @@ QString AddressTableModel::addRow(const QString &type, const QString &label, con else if(type == Receive) { // Generate a new address to associate with given label - WalletModel::UnlockContext ctx(walletModel->requestUnlock()); - if(!ctx.isValid()) - { - // Unlock wallet failed or was cancelled - editStatus = WALLET_UNLOCK_FAILURE; - return QString(); - } CPubKey newKey; - if(!wallet->GetKeyFromPool(newKey, true)) + if(!wallet->GetKeyFromPool(newKey)) { - editStatus = KEY_GENERATION_FAILURE; - return QString(); + WalletModel::UnlockContext ctx(walletModel->requestUnlock()); + if(!ctx.isValid()) + { + // Unlock wallet failed or was cancelled + editStatus = WALLET_UNLOCK_FAILURE; + return QString(); + } + if(!wallet->GetKeyFromPool(newKey)) + { + editStatus = KEY_GENERATION_FAILURE; + return QString(); + } } strAddress = CBitcoinAddress(newKey.GetID()).ToString(); } @@ -368,7 +393,8 @@ QString AddressTableModel::addRow(const QString &type, const QString &label, con // Add entry { LOCK(wallet->cs_wallet); - wallet->SetAddressBookName(CBitcoinAddress(strAddress).Get(), strLabel); + wallet->SetAddressBook(CBitcoinAddress(strAddress).Get(), strLabel, + (type == Send ? "send" : "receive")); } return QString::fromStdString(strAddress); } @@ -385,7 +411,7 @@ bool AddressTableModel::removeRows(int row, int count, const QModelIndex &parent } { LOCK(wallet->cs_wallet); - wallet->DelAddressBookName(CBitcoinAddress(rec->address.toStdString()).Get()); + wallet->DelAddressBook(CBitcoinAddress(rec->address.toStdString()).Get()); } return true; } @@ -397,10 +423,10 @@ QString AddressTableModel::labelForAddress(const QString &address) const { LOCK(wallet->cs_wallet); CBitcoinAddress address_parsed(address.toStdString()); - std::map::iterator mi = wallet->mapAddressBook.find(address_parsed.Get()); + std::map::iterator mi = wallet->mapAddressBook.find(address_parsed.Get()); if (mi != wallet->mapAddressBook.end()) { - return QString::fromStdString(mi->second); + return QString::fromStdString(mi->second.name); } } return QString(); diff --git a/src/qt/addresstablemodel.h b/src/qt/addresstablemodel.h index 48baff5e..71691f5a 100644 --- a/src/qt/addresstablemodel.h +++ b/src/qt/addresstablemodel.h @@ -1,3 +1,7 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef ADDRESSTABLEMODEL_H #define ADDRESSTABLEMODEL_H @@ -5,9 +9,10 @@ #include class AddressTablePriv; -class CWallet; class WalletModel; +class CWallet; + /** Qt model of the address book in the core. This allows views to access and modify the address book. */ @@ -79,13 +84,10 @@ private: /** Notify listeners that data changed. */ void emitDataChanged(int index); -signals: - void defaultAddressChanged(const QString &address); - public slots: /* Update address list from core. */ - void updateEntry(const QString &address, const QString &label, bool isMine, int status); + void updateEntry(const QString &address, const QString &label, bool isMine, const QString &purpose, int status); friend class AddressTablePriv; }; diff --git a/src/qt/askpassphrasedialog.cpp b/src/qt/askpassphrasedialog.cpp index 4a0908c8..1c7c3993 100644 --- a/src/qt/askpassphrasedialog.cpp +++ b/src/qt/askpassphrasedialog.cpp @@ -1,12 +1,18 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #include "askpassphrasedialog.h" #include "ui_askpassphrasedialog.h" #include "guiconstants.h" #include "walletmodel.h" +#include "allocators.h" + +#include #include #include -#include AskPassphraseDialog::AskPassphraseDialog(Mode mode, QWidget *parent) : QDialog(parent), @@ -16,6 +22,7 @@ AskPassphraseDialog::AskPassphraseDialog(Mode mode, QWidget *parent) : fCapsLock(false) { ui->setupUi(this); + ui->passEdit1->setMaxLength(MAX_PASSPHRASE_SIZE); ui->passEdit2->setMaxLength(MAX_PASSPHRASE_SIZE); ui->passEdit3->setMaxLength(MAX_PASSPHRASE_SIZE); diff --git a/src/qt/askpassphrasedialog.h b/src/qt/askpassphrasedialog.h index 9df002da..1119e086 100644 --- a/src/qt/askpassphrasedialog.h +++ b/src/qt/askpassphrasedialog.h @@ -1,12 +1,17 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef ASKPASSPHRASEDIALOG_H #define ASKPASSPHRASEDIALOG_H #include +class WalletModel; + namespace Ui { class AskPassphraseDialog; } -class WalletModel; /** Multifunctional dialog to ask for passphrases. Used for encryption, unlocking, and changing the passphrase. */ @@ -22,7 +27,7 @@ public: Decrypt /**< Ask passphrase and decrypt wallet */ }; - explicit AskPassphraseDialog(Mode mode, QWidget *parent = 0); + explicit AskPassphraseDialog(Mode mode, QWidget *parent); ~AskPassphraseDialog(); void accept(); @@ -37,6 +42,8 @@ private: private slots: void textChanged(); + +protected: bool event(QEvent *event); bool eventFilter(QObject *object, QEvent *event); }; diff --git a/src/qt/bitcoin.cpp b/src/qt/bitcoin.cpp index 1ff559f8..9b69ed5d 100644 --- a/src/qt/bitcoin.cpp +++ b/src/qt/bitcoin.cpp @@ -1,98 +1,71 @@ -/* - * W.J. van der Laan 2011-2012 - */ +// Copyright (c) 2011-2014 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include +#if defined(HAVE_CONFIG_H) +#include "bitcoin-config.h" +#endif #include "bitcoingui.h" -#include "clientmodel.h" -#include "walletmodel.h" -#include "optionsmodel.h" -#include "guiutil.h" -#include "guiconstants.h" -#include "init.h" -#include "util.h" -#include "ui_interface.h" -#include "paymentserver.h" -#include "splashscreen.h" -#include "intro.h" -#include -#if QT_VERSION < 0x050000 -#include +#include "clientmodel.h" +#include "guiconstants.h" +#include "guiutil.h" +#include "intro.h" +#include "optionsmodel.h" +#include "splashscreen.h" +#include "utilitydialog.h" +#include "winshutdownmonitor.h" +#ifdef ENABLE_WALLET +#include "paymentserver.h" +#include "walletmodel.h" #endif + +#include "init.h" +#include "main.h" +#include "rpcserver.h" +#include "ui_interface.h" +#include "util.h" +#ifdef ENABLE_WALLET +#include "wallet.h" +#endif + +#include + +#include +#include +#include #include +#include +#include #include #include -#include -#include +#include -#if defined(BITCOIN_NEED_QT_PLUGINS) && !defined(_BITCOIN_QT_PLUGINS_INCLUDED) -#define _BITCOIN_QT_PLUGINS_INCLUDED -#define __INSURE__ +#if defined(QT_STATICPLUGIN) #include +#if QT_VERSION < 0x050000 Q_IMPORT_PLUGIN(qcncodecs) Q_IMPORT_PLUGIN(qjpcodecs) Q_IMPORT_PLUGIN(qtwcodecs) Q_IMPORT_PLUGIN(qkrcodecs) Q_IMPORT_PLUGIN(qtaccessiblewidgets) +#else +Q_IMPORT_PLUGIN(AccessibleFactory) +Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin); +#endif +#endif + +#if QT_VERSION < 0x050000 +#include #endif // Declare meta types used for QMetaObject::invokeMethod Q_DECLARE_METATYPE(bool*) -// Need a global reference for the notifications to find the GUI -static BitcoinGUI *guiref; -static SplashScreen *splashref; - -static bool ThreadSafeMessageBox(const std::string& message, const std::string& caption, unsigned int style) -{ - // Message from network thread - if(guiref) - { - bool modal = (style & CClientUIInterface::MODAL); - bool ret = false; - // In case of modal message, use blocking connection to wait for user to click a button - QMetaObject::invokeMethod(guiref, "message", - modal ? GUIUtil::blockingGUIThreadConnection() : Qt::QueuedConnection, - Q_ARG(QString, QString::fromStdString(caption)), - Q_ARG(QString, QString::fromStdString(message)), - Q_ARG(unsigned int, style), - Q_ARG(bool*, &ret)); - return ret; - } - else - { - printf("%s: %s\n", caption.c_str(), message.c_str()); - fprintf(stderr, "%s: %s\n", caption.c_str(), message.c_str()); - return false; - } -} - -static bool ThreadSafeAskFee(int64 nFeeRequired) -{ - if(!guiref) - return false; - if(nFeeRequired < CTransaction::nMinTxFee || nFeeRequired <= nTransactionFee || fDaemon) - return true; - - bool payFee = false; - - QMetaObject::invokeMethod(guiref, "askFee", GUIUtil::blockingGUIThreadConnection(), - Q_ARG(qint64, nFeeRequired), - Q_ARG(bool*, &payFee)); - - return payFee; -} - static void InitMessage(const std::string &message) { - if(splashref) - { - splashref->showMessage(QString::fromStdString(message), Qt::AlignBottom|Qt::AlignHCenter, QColor(55,55,55)); - qApp->processEvents(); - } - printf("init message: %s\n", message.c_str()); + LogPrintf("init message: %s\n", message); } /* @@ -103,20 +76,17 @@ static std::string Translate(const char* psz) return QCoreApplication::translate("bitcoin-core", psz).toStdString(); } -/* Handle runaway exceptions. Shows a message box with the problem and quits the program. - */ -static void handleRunawayException(std::exception *e) -{ - PrintExceptionContinue(e, "Runaway exception"); - QMessageBox::critical(0, "Runaway exception", BitcoinGUI::tr("A fatal error occurred. Myriadcoin can no longer continue safely and will quit.") + QString("\n\n") + QString::fromStdString(strMiscWarning)); - exit(1); -} - /** Set up translations */ static void initTranslations(QTranslator &qtTranslatorBase, QTranslator &qtTranslator, QTranslator &translatorBase, QTranslator &translator) { QSettings settings; + // Remove old translators + QApplication::removeTranslator(&qtTranslatorBase); + QApplication::removeTranslator(&qtTranslator); + QApplication::removeTranslator(&translatorBase); + QApplication::removeTranslator(&translator); + // Get desired locale (e.g. "de_DE") // 1) System default language QString lang_territory = QLocale::system().name(); @@ -152,14 +122,352 @@ static void initTranslations(QTranslator &qtTranslatorBase, QTranslator &qtTrans QApplication::installTranslator(&translator); } +/* qDebug() message handler --> debug.log */ +#if QT_VERSION < 0x050000 +void DebugMessageHandler(QtMsgType type, const char *msg) +{ + Q_UNUSED(type); + LogPrint("qt", "GUI: %s\n", msg); +} +#else +void DebugMessageHandler(QtMsgType type, const QMessageLogContext& context, const QString &msg) +{ + Q_UNUSED(type); + Q_UNUSED(context); + LogPrint("qt", "GUI: %s\n", qPrintable(msg)); +} +#endif + +/** Class encapsulating Bitcoin Core startup and shutdown. + * Allows running startup and shutdown in a different thread from the UI thread. + */ +class BitcoinCore: public QObject +{ + Q_OBJECT +public: + explicit BitcoinCore(); + +public slots: + void initialize(); + void shutdown(); + +signals: + void initializeResult(int retval); + void shutdownResult(int retval); + void runawayException(const QString &message); + +private: + boost::thread_group threadGroup; + + /// Pass fatal exception message to UI thread + void handleRunawayException(std::exception *e); +}; + +/** Main Bitcoin application object */ +class BitcoinApplication: public QApplication +{ + Q_OBJECT +public: + explicit BitcoinApplication(int &argc, char **argv); + ~BitcoinApplication(); + +#ifdef ENABLE_WALLET + /// Create payment server + void createPaymentServer(); +#endif + /// Create options model + void createOptionsModel(); + /// Create main window + void createWindow(bool isaTestNet); + /// Create splash screen + void createSplashScreen(bool isaTestNet); + + /// Request core initialization + void requestInitialize(); + /// Request core shutdown + void requestShutdown(); + + /// Get process return value + int getReturnValue() { return returnValue; } + + /// Get window identifier of QMainWindow (BitcoinGUI) + WId getMainWinId() const; + +public slots: + void initializeResult(int retval); + void shutdownResult(int retval); + /// Handle runaway exceptions. Shows a message box with the problem and quits the program. + void handleRunawayException(const QString &message); + +signals: + void requestedInitialize(); + void requestedShutdown(); + void stopThread(); + void splashFinished(QWidget *window); + +private: + QThread *coreThread; + OptionsModel *optionsModel; + ClientModel *clientModel; + BitcoinGUI *window; + QTimer *pollShutdownTimer; +#ifdef ENABLE_WALLET + PaymentServer* paymentServer; + WalletModel *walletModel; +#endif + int returnValue; + + void startThread(); +}; + +#include "bitcoin.moc" + +BitcoinCore::BitcoinCore(): + QObject() +{ +} + +void BitcoinCore::handleRunawayException(std::exception *e) +{ + PrintExceptionContinue(e, "Runaway exception"); + emit runawayException(QString::fromStdString(strMiscWarning)); +} + +void BitcoinCore::initialize() +{ + try + { + LogPrintf("Running AppInit2 in thread\n"); + int rv = AppInit2(threadGroup); + if(rv) + { + /* Start a dummy RPC thread if no RPC thread is active yet + * to handle timeouts. + */ + StartDummyRPCThread(); + } + emit initializeResult(rv); + } catch (std::exception& e) { + handleRunawayException(&e); + } catch (...) { + handleRunawayException(NULL); + } +} + +void BitcoinCore::shutdown() +{ + try + { + LogPrintf("Running Shutdown in thread\n"); + threadGroup.interrupt_all(); + threadGroup.join_all(); + Shutdown(); + LogPrintf("Shutdown finished\n"); + emit shutdownResult(1); + } catch (std::exception& e) { + handleRunawayException(&e); + } catch (...) { + handleRunawayException(NULL); + } +} + +BitcoinApplication::BitcoinApplication(int &argc, char **argv): + QApplication(argc, argv), + coreThread(0), + optionsModel(0), + clientModel(0), + window(0), + pollShutdownTimer(0), +#ifdef ENABLE_WALLET + paymentServer(0), + walletModel(0), +#endif + returnValue(0) +{ + setQuitOnLastWindowClosed(false); + startThread(); +} + +BitcoinApplication::~BitcoinApplication() +{ + LogPrintf("Stopping thread\n"); + emit stopThread(); + coreThread->wait(); + LogPrintf("Stopped thread\n"); + + delete window; + window = 0; +#ifdef ENABLE_WALLET + delete paymentServer; + paymentServer = 0; +#endif + delete optionsModel; + optionsModel = 0; +} + +#ifdef ENABLE_WALLET +void BitcoinApplication::createPaymentServer() +{ + paymentServer = new PaymentServer(this); +} +#endif + +void BitcoinApplication::createOptionsModel() +{ + optionsModel = new OptionsModel(); +} + +void BitcoinApplication::createWindow(bool isaTestNet) +{ + window = new BitcoinGUI(isaTestNet, 0); + + pollShutdownTimer = new QTimer(window); + connect(pollShutdownTimer, SIGNAL(timeout()), window, SLOT(detectShutdown())); + pollShutdownTimer->start(200); +} + +void BitcoinApplication::createSplashScreen(bool isaTestNet) +{ + SplashScreen *splash = new SplashScreen(QPixmap(), 0, isaTestNet); + splash->setAttribute(Qt::WA_DeleteOnClose); + splash->show(); + connect(this, SIGNAL(splashFinished(QWidget*)), splash, SLOT(slotFinish(QWidget*))); +} + +void BitcoinApplication::startThread() +{ + coreThread = new QThread(this); + BitcoinCore *executor = new BitcoinCore(); + executor->moveToThread(coreThread); + + /* communication to and from thread */ + connect(executor, SIGNAL(initializeResult(int)), this, SLOT(initializeResult(int))); + connect(executor, SIGNAL(shutdownResult(int)), this, SLOT(shutdownResult(int))); + connect(executor, SIGNAL(runawayException(QString)), this, SLOT(handleRunawayException(QString))); + connect(this, SIGNAL(requestedInitialize()), executor, SLOT(initialize())); + connect(this, SIGNAL(requestedShutdown()), executor, SLOT(shutdown())); + /* make sure executor object is deleted in its own thread */ + connect(this, SIGNAL(stopThread()), executor, SLOT(deleteLater())); + connect(this, SIGNAL(stopThread()), coreThread, SLOT(quit())); + + coreThread->start(); +} + +void BitcoinApplication::requestInitialize() +{ + LogPrintf("Requesting initialize\n"); + emit requestedInitialize(); +} + +void BitcoinApplication::requestShutdown() +{ + LogPrintf("Requesting shutdown\n"); + window->hide(); + window->setClientModel(0); + pollShutdownTimer->stop(); + +#ifdef ENABLE_WALLET + window->removeAllWallets(); + delete walletModel; + walletModel = 0; +#endif + delete clientModel; + clientModel = 0; + + // Show a simple window indicating shutdown status + ShutdownWindow::showShutdownWindow(window); + + // Request shutdown from core thread + emit requestedShutdown(); +} + +void BitcoinApplication::initializeResult(int retval) +{ + LogPrintf("Initialization result: %i\n", retval); + // Set exit result: 0 if successful, 1 if failure + returnValue = retval ? 0 : 1; + if(retval) + { +#ifdef ENABLE_WALLET + PaymentServer::LoadRootCAs(); + paymentServer->setOptionsModel(optionsModel); +#endif + + emit splashFinished(window); + + clientModel = new ClientModel(optionsModel); + window->setClientModel(clientModel); + +#ifdef ENABLE_WALLET + if(pwalletMain) + { + walletModel = new WalletModel(pwalletMain, optionsModel); + + window->addWallet("~Default", walletModel); + window->setCurrentWallet("~Default"); + + connect(walletModel, SIGNAL(coinsSent(CWallet*,SendCoinsRecipient,QByteArray)), + paymentServer, SLOT(fetchPaymentACK(CWallet*,const SendCoinsRecipient&,QByteArray))); + } +#endif + + // If -min option passed, start window minimized. + if(GetBoolArg("-min", false)) + { + window->showMinimized(); + } + else + { + window->show(); + } +#ifdef ENABLE_WALLET + // Now that initialization/startup is done, process any command-line + // bitcoin: URIs or payment requests: + connect(paymentServer, SIGNAL(receivedPaymentRequest(SendCoinsRecipient)), + window, SLOT(handlePaymentRequest(SendCoinsRecipient))); + connect(window, SIGNAL(receivedURI(QString)), + paymentServer, SLOT(handleURIOrFile(QString))); + connect(paymentServer, SIGNAL(message(QString,QString,unsigned int)), + window, SLOT(message(QString,QString,unsigned int))); + QTimer::singleShot(100, paymentServer, SLOT(uiReady())); +#endif + } else { + quit(); // Exit main loop + } +} + +void BitcoinApplication::shutdownResult(int retval) +{ + LogPrintf("Shutdown result: %i\n", retval); + quit(); // Exit main loop after shutdown finished +} + +void BitcoinApplication::handleRunawayException(const QString &message) +{ + QMessageBox::critical(0, "Runaway exception", BitcoinGUI::tr("A fatal error occurred. Myriadcoin can no longer continue safely and will quit.") + QString("\n\n") + message); + ::exit(1); +} + +WId BitcoinApplication::getMainWinId() const +{ + if (!window) + return 0; + + return window->winId(); +} + #ifndef BITCOIN_QT_TEST int main(int argc, char *argv[]) { - fHaveGUI = true; + SetupEnvironment(); + /// 1. Parse command-line options. These take precedence over anything else. // Command-line options take precedence: ParseParameters(argc, argv); + // Do not refer to data directory yet, this can be overridden by Intro::pickDataDirectory + + /// 2. Basic Qt initialization (not dependent on parameters or configuration) #if QT_VERSION < 0x050000 // Internal string conversion is all UTF-8 QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8")); @@ -167,149 +475,140 @@ int main(int argc, char *argv[]) #endif Q_INIT_RESOURCE(bitcoin); - QApplication app(argc, argv); + BitcoinApplication app(argc, argv); +#if QT_VERSION > 0x050100 + // Generate high-dpi pixmaps + QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); +#endif +#ifdef Q_OS_MAC + QApplication::setAttribute(Qt::AA_DontShowIconsInMenus); +#endif // Register meta types used for QMetaObject::invokeMethod qRegisterMetaType< bool* >(); - // Application identification (must be set before OptionsModel is initialized, - // as it is used to locate QSettings) - QApplication::setOrganizationName("Myriadcoin"); - QApplication::setOrganizationDomain("myriadcoin.org"); - if (GetBoolArg("-testnet", false)) // Separate UI settings for testnet - QApplication::setApplicationName("Myriadcoin-Qt-testnet"); - else - QApplication::setApplicationName("Myriadcoin-Qt"); + /// 3. Application identification + // must be set before OptionsModel is initialized or translations are loaded, + // as it is used to locate QSettings + QApplication::setOrganizationName(QAPP_ORG_NAME); + QApplication::setOrganizationDomain(QAPP_ORG_DOMAIN); + QApplication::setApplicationName(QAPP_APP_NAME_DEFAULT); + /// 4. Initialization of translations, so that intro dialog is in user's language // Now that QSettings are accessible, initialize translations QTranslator qtTranslatorBase, qtTranslator, translatorBase, translator; initTranslations(qtTranslatorBase, qtTranslator, translatorBase, translator); - - // User language is set up: pick a data directory - Intro::pickDataDirectory(); - - // Do this early as we don't want to bother initializing if we are just calling IPC - // ... but do it after creating app, so QCoreApplication::arguments is initialized: - if (PaymentServer::ipcSendCommandLine()) - exit(0); - PaymentServer* paymentServer = new PaymentServer(&app); - - // Install global event filter that makes sure that long tooltips can be word-wrapped - app.installEventFilter(new GUIUtil::ToolTipToRichTextFilter(TOOLTIP_WRAP_THRESHOLD, &app)); - - // ... then myriadcoin.conf: - if (!boost::filesystem::is_directory(GetDataDir(false))) - { - QMessageBox::critical(0, QObject::tr("Myriadcoin"), - QObject::tr("Error: Specified data directory \"%1\" does not exist.").arg(QString::fromStdString(mapArgs["-datadir"]))); - return 1; - } - ReadConfigFile(mapArgs, mapMultiArgs); - - // ... then GUI settings: - OptionsModel optionsModel; - - // Subscribe to global signals from core - uiInterface.ThreadSafeMessageBox.connect(ThreadSafeMessageBox); - uiInterface.ThreadSafeAskFee.connect(ThreadSafeAskFee); - uiInterface.InitMessage.connect(InitMessage); uiInterface.Translate.connect(Translate); // Show help message immediately after parsing command-line options (for "-lang") and setting locale, // but before showing splash screen. if (mapArgs.count("-?") || mapArgs.count("--help")) { - GUIUtil::HelpMessageBox help; + HelpMessageDialog help(NULL); help.showOrPrint(); return 1; } - SplashScreen splash(QPixmap(), 0); - if (GetBoolArg("-splash", true) && !GetBoolArg("-min", false)) + /// 5. Now that settings and translations are available, ask user for data directory + // User language is set up: pick a data directory + Intro::pickDataDirectory(); + + /// 6. Determine availability of data directory and parse bitcoin.conf + /// - Do not call GetDataDir(true) before this step finishes + if (!boost::filesystem::is_directory(GetDataDir(false))) { - splash.show(); - splash.setAutoFillBackground(true); - splashref = &splash; + QMessageBox::critical(0, QObject::tr("Myriadcoin"), + QObject::tr("Error: Specified data directory \"%1\" does not exist.").arg(QString::fromStdString(mapArgs["-datadir"]))); + return 1; + } + try { + ReadConfigFile(mapArgs, mapMultiArgs); + } catch(std::exception &e) { + QMessageBox::critical(0, QObject::tr("Myriadcoin"), + QObject::tr("Error: Cannot parse configuration file: %1. Only use key=value syntax.").arg(e.what())); + return false; } - app.processEvents(); - app.setQuitOnLastWindowClosed(false); + /// 7. Determine network (and switch to network specific options) + // - Do not call Params() before this step + // - Do this after parsing the configuration file, as the network can be switched there + // - QSettings() will use the new application name after this, resulting in network-specific settings + // - Needs to be done before createOptionsModel + + // Check for -testnet or -regtest parameter (Params() calls are only valid after this clause) + if (!SelectParamsFromCommandLine()) { + QMessageBox::critical(0, QObject::tr("Myriadcoin"), QObject::tr("Error: Invalid combination of -regtest and -testnet.")); + return 1; + } +#ifdef ENABLE_WALLET + // Parse URIs on command line -- this can affect Params() + if (!PaymentServer::ipcParseCommandLine(argc, argv)) + exit(0); +#endif + bool isaTestNet = Params().NetworkID() != CChainParams::MAIN; + // Allow for separate UI settings for testnets + if (isaTestNet) + QApplication::setApplicationName(QAPP_APP_NAME_TESTNET); + else + QApplication::setApplicationName(QAPP_APP_NAME_DEFAULT); + // Re-initialize translations after changing application name (language in network-specific settings can be different) + initTranslations(qtTranslatorBase, qtTranslator, translatorBase, translator); + +#ifdef ENABLE_WALLET + /// 8. URI IPC sending + // - Do this early as we don't want to bother initializing if we are just calling IPC + // - Do this *after* setting up the data directory, as the data directory hash is used in the name + // of the server. + // - Do this after creating app and setting up translations, so errors are + // translated properly. + if (PaymentServer::ipcSendCommandLine()) + exit(0); + + // Start up the payment server early, too, so impatient users that click on + // bitcoin: links repeatedly have their payment requests routed to this process: + app.createPaymentServer(); +#endif + + /// 9. Main GUI initialization + // Install global event filter that makes sure that long tooltips can be word-wrapped + app.installEventFilter(new GUIUtil::ToolTipToRichTextFilter(TOOLTIP_WRAP_THRESHOLD, &app)); +#if QT_VERSION < 0x050000 + // Install qDebug() message handler to route to debug.log + qInstallMsgHandler(DebugMessageHandler); +#else +#if defined(Q_OS_WIN) + // Install global event filter for processing Windows session related Windows messages (WM_QUERYENDSESSION and WM_ENDSESSION) + qApp->installNativeEventFilter(new WinShutdownMonitor()); +#endif + // Install qDebug() message handler to route to debug.log + qInstallMessageHandler(DebugMessageHandler); +#endif + // Load GUI settings from QSettings + app.createOptionsModel(); + + // Subscribe to global signals from core + uiInterface.InitMessage.connect(InitMessage); + + if (GetBoolArg("-splash", true) && !GetBoolArg("-min", false)) + app.createSplashScreen(isaTestNet); try { -#ifndef Q_OS_MAC - // Regenerate startup link, to fix links to old versions - // OSX: makes no sense on mac and might also scan/mount external (and sleeping) volumes (can take up some secs) - if (GUIUtil::GetStartOnSystemStartup()) - GUIUtil::SetStartOnSystemStartup(true); + app.createWindow(isaTestNet); + app.requestInitialize(); +#if defined(Q_OS_WIN) && QT_VERSION >= 0x050000 + WinShutdownMonitor::registerShutdownBlockReason(QObject::tr("Myriadcoin Core didn't yet exit safely..."), (HWND)app.getMainWinId()); #endif - - boost::thread_group threadGroup; - - BitcoinGUI window(GetBoolArg("-testnet", false), 0); - guiref = &window; - - QTimer* pollShutdownTimer = new QTimer(guiref); - QObject::connect(pollShutdownTimer, SIGNAL(timeout()), guiref, SLOT(detectShutdown())); - pollShutdownTimer->start(200); - - if(AppInit2(threadGroup)) - { - { - // Put this in a block, so that the Model objects are cleaned up before - // calling Shutdown(). - - optionsModel.Upgrade(); // Must be done after AppInit2 - - if (splashref) - splash.finish(&window); - - ClientModel clientModel(&optionsModel); - WalletModel walletModel(pwalletMain, &optionsModel); - - window.setClientModel(&clientModel); - window.addWallet("~Default", &walletModel); - window.setCurrentWallet("~Default"); - - // If -min option passed, start window minimized. - if(GetBoolArg("-min", false)) - { - window.showMinimized(); - } - else - { - window.show(); - } - - // Now that initialization/startup is done, process any command-line - // myriadcoin: URIs - QObject::connect(paymentServer, SIGNAL(receivedURI(QString)), &window, SLOT(handleURI(QString))); - QTimer::singleShot(100, paymentServer, SLOT(uiReady())); - - app.exec(); - - window.hide(); - window.setClientModel(0); - window.removeAllWallets(); - guiref = 0; - } - // Shutdown the core and its threads, but don't exit Myriadcoin-Qt here - threadGroup.interrupt_all(); - threadGroup.join_all(); - Shutdown(); - } - else - { - threadGroup.interrupt_all(); - threadGroup.join_all(); - Shutdown(); - return 1; - } + app.exec(); + app.requestShutdown(); + app.exec(); } catch (std::exception& e) { - handleRunawayException(&e); + PrintExceptionContinue(&e, "Runaway exception"); + app.handleRunawayException(QString::fromStdString(strMiscWarning)); } catch (...) { - handleRunawayException(NULL); + PrintExceptionContinue(NULL, "Runaway exception"); + app.handleRunawayException(QString::fromStdString(strMiscWarning)); } - return 0; + return app.getReturnValue(); } #endif // BITCOIN_QT_TEST diff --git a/src/qt/bitcoin.qrc b/src/qt/bitcoin.qrc index c2f83085..e1c739b0 100644 --- a/src/qt/bitcoin.qrc +++ b/src/qt/bitcoin.qrc @@ -12,6 +12,7 @@ res/icons/connect4_16.png res/icons/transaction0.png res/icons/transaction2.png + res/icons/transaction_conflicted.png res/icons/clock1.png res/icons/clock2.png res/icons/clock3.png @@ -47,55 +48,113 @@ res/images/splash_testnet.png - res/movies/update_spinner.mng + res/movies/spinner-000.png + res/movies/spinner-001.png + res/movies/spinner-002.png + res/movies/spinner-003.png + res/movies/spinner-004.png + res/movies/spinner-005.png + res/movies/spinner-006.png + res/movies/spinner-007.png + res/movies/spinner-008.png + res/movies/spinner-009.png + res/movies/spinner-010.png + res/movies/spinner-011.png + res/movies/spinner-012.png + res/movies/spinner-013.png + res/movies/spinner-014.png + res/movies/spinner-015.png + res/movies/spinner-016.png + res/movies/spinner-017.png + res/movies/spinner-018.png + res/movies/spinner-019.png + res/movies/spinner-020.png + res/movies/spinner-021.png + res/movies/spinner-022.png + res/movies/spinner-023.png + res/movies/spinner-024.png + res/movies/spinner-025.png + res/movies/spinner-026.png + res/movies/spinner-027.png + res/movies/spinner-028.png + res/movies/spinner-029.png + res/movies/spinner-030.png + res/movies/spinner-031.png + res/movies/spinner-032.png + res/movies/spinner-033.png + res/movies/spinner-034.png + locale/bitcoin_ach.qm locale/bitcoin_af_ZA.qm locale/bitcoin_ar.qm + locale/bitcoin_be_BY.qm locale/bitcoin_bg.qm - locale/bitcoin_bs.ts - locale/bitcoin_ca.ts + locale/bitcoin_bs.qm locale/bitcoin_ca_ES.qm + locale/bitcoin_ca.qm + locale/bitcoin_ca@valencia.qm + locale/bitcoin_cmn.qm locale/bitcoin_cs.qm - locale/bitcoin_cy.ts + locale/bitcoin_cy.qm locale/bitcoin_da.qm locale/bitcoin_de.qm locale/bitcoin_el_GR.qm locale/bitcoin_en.qm - locale/bitcoin_eo.ts - locale/bitcoin_es.qm + locale/bitcoin_eo.qm locale/bitcoin_es_CL.qm + locale/bitcoin_es_DO.qm + locale/bitcoin_es_MX.qm + locale/bitcoin_es.qm + locale/bitcoin_es_UY.qm locale/bitcoin_et.qm locale/bitcoin_eu_ES.qm - locale/bitcoin_fa.qm locale/bitcoin_fa_IR.qm + locale/bitcoin_fa.qm locale/bitcoin_fi.qm - locale/bitcoin_fr.qm locale/bitcoin_fr_CA.qm - locale/bitcoin_gu_IN.ts + locale/bitcoin_fr.qm + locale/bitcoin_gl.qm + locale/bitcoin_gu_IN.qm locale/bitcoin_he.qm - locale/bitcoin_hi_IN.ts + locale/bitcoin_hi_IN.qm locale/bitcoin_hr.qm locale/bitcoin_hu.qm + locale/bitcoin_id_ID.qm locale/bitcoin_it.qm - locale/bitcoin_ja.ts - locale/bitcoin_la.ts + locale/bitcoin_ja.qm + locale/bitcoin_ka.qm + locale/bitcoin_kk_KZ.qm + locale/bitcoin_ko_KR.qm + locale/bitcoin_ky.qm + locale/bitcoin_la.qm locale/bitcoin_lt.qm - locale/bitcoin_lv_LV.ts + locale/bitcoin_lv_LV.qm + locale/bitcoin_mn.qm + locale/bitcoin_ms_MY.qm locale/bitcoin_nb.qm locale/bitcoin_nl.qm + locale/bitcoin_pam.qm locale/bitcoin_pl.qm locale/bitcoin_pt_BR.qm locale/bitcoin_pt_PT.qm locale/bitcoin_ro_RO.qm locale/bitcoin_ru.qm + locale/bitcoin_sah.qm locale/bitcoin_sk.qm + locale/bitcoin_sl_SI.qm + locale/bitcoin_sq.qm locale/bitcoin_sr.qm locale/bitcoin_sv.qm - locale/bitcoin_th_TH.ts + locale/bitcoin_th_TH.qm locale/bitcoin_tr.qm locale/bitcoin_uk.qm + locale/bitcoin_ur_PK.qm + locale/bitcoin_uz@Cyrl.qm + locale/bitcoin_vi.qm + locale/bitcoin_vi_VN.qm locale/bitcoin_zh_CN.qm + locale/bitcoin_zh_HK.qm locale/bitcoin_zh_TW.qm diff --git a/src/qt/bitcoinaddressvalidator.cpp b/src/qt/bitcoinaddressvalidator.cpp index 5136ea0c..293cc168 100644 --- a/src/qt/bitcoinaddressvalidator.cpp +++ b/src/qt/bitcoinaddressvalidator.cpp @@ -1,5 +1,11 @@ +// Copyright (c) 2011-2014 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #include "bitcoinaddressvalidator.h" +#include "base58.h" + /* Base58 characters are: "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" @@ -7,21 +13,23 @@ - All numbers except for '0' - All upper-case letters except for 'I' and 'O' - All lower-case letters except for 'l' - - User friendly Base58 input can map - - 'l' and 'I' to '1' - - '0' and 'O' to 'o' */ -BitcoinAddressValidator::BitcoinAddressValidator(QObject *parent) : +BitcoinAddressEntryValidator::BitcoinAddressEntryValidator(QObject *parent) : QValidator(parent) { } -QValidator::State BitcoinAddressValidator::validate(QString &input, int &pos) const +QValidator::State BitcoinAddressEntryValidator::validate(QString &input, int &pos) const { + Q_UNUSED(pos); + + // Empty address is "intermediate" input + if (input.isEmpty()) + return QValidator::Intermediate; + // Correction - for(int idx=0; idx= '0' && ch<='9') || - (ch >= 'a' && ch<='z') || - (ch >= 'A' && ch<='Z')) && - ch != 'l' && ch != 'I' && ch != '0' && ch != 'O') + if (((ch >= '0' && ch<='9') || + (ch >= 'a' && ch<='z') || + (ch >= 'A' && ch<='Z')) && + ch != 'l' && ch != 'I' && ch != '0' && ch != 'O') { // Alphanumeric and not a 'forbidden' character } @@ -67,11 +77,21 @@ QValidator::State BitcoinAddressValidator::validate(QString &input, int &pos) co } } - // Empty address is "intermediate" input - if(input.isEmpty()) - { - state = QValidator::Intermediate; - } - return state; } + +BitcoinAddressCheckValidator::BitcoinAddressCheckValidator(QObject *parent) : + QValidator(parent) +{ +} + +QValidator::State BitcoinAddressCheckValidator::validate(QString &input, int &pos) const +{ + Q_UNUSED(pos); + // Validate the passed Bitcoin address + CBitcoinAddress addr(input.toStdString()); + if (addr.IsValid()) + return QValidator::Acceptable; + + return QValidator::Invalid; +} diff --git a/src/qt/bitcoinaddressvalidator.h b/src/qt/bitcoinaddressvalidator.h index 2b6a5936..0fb779f7 100644 --- a/src/qt/bitcoinaddressvalidator.h +++ b/src/qt/bitcoinaddressvalidator.h @@ -1,21 +1,35 @@ +// Copyright (c) 2011-2014 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef BITCOINADDRESSVALIDATOR_H #define BITCOINADDRESSVALIDATOR_H #include -/** Base48 entry widget validator. - Corrects near-miss characters and refuses characters that are no part of base48. +/** Base58 entry widget validator, checks for valid characters and + * removes some whitespace. */ -class BitcoinAddressValidator : public QValidator +class BitcoinAddressEntryValidator : public QValidator { Q_OBJECT public: - explicit BitcoinAddressValidator(QObject *parent = 0); + explicit BitcoinAddressEntryValidator(QObject *parent); State validate(QString &input, int &pos) const; +}; - static const int MaxAddressLength = 35; +/** Bitcoin address widget validator, checks for a valid bitcoin address. + */ +class BitcoinAddressCheckValidator : public QValidator +{ + Q_OBJECT + +public: + explicit BitcoinAddressCheckValidator(QObject *parent); + + State validate(QString &input, int &pos) const; }; #endif // BITCOINADDRESSVALIDATOR_H diff --git a/src/qt/bitcoinamountfield.cpp b/src/qt/bitcoinamountfield.cpp index b502505f..25ad0c66 100644 --- a/src/qt/bitcoinamountfield.cpp +++ b/src/qt/bitcoinamountfield.cpp @@ -1,24 +1,30 @@ +// Copyright (c) 2011-2014 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #include "bitcoinamountfield.h" -#include "qvaluecombobox.h" #include "bitcoinunits.h" #include "guiconstants.h" +#include "qvaluecombobox.h" +#include +#include #include #include -#include -#include #include // for qPow() -BitcoinAmountField::BitcoinAmountField(QWidget *parent): - QWidget(parent), amount(0), currentUnit(-1) +BitcoinAmountField::BitcoinAmountField(QWidget *parent) : + QWidget(parent), + amount(0), + currentUnit(-1) { + nSingleStep = 100000; // satoshis + amount = new QDoubleSpinBox(this); amount->setLocale(QLocale::c()); - amount->setDecimals(8); amount->installEventFilter(this); amount->setMaximumWidth(170); - amount->setSingleStep(0.001); QHBoxLayout *layout = new QHBoxLayout(this); layout->addWidget(amount); @@ -110,7 +116,8 @@ bool BitcoinAmountField::eventFilter(QObject *object, QEvent *event) QWidget *BitcoinAmountField::setupTabChain(QWidget *prev) { QWidget::setTabOrder(prev, amount); - return amount; + QWidget::setTabOrder(amount, unit); + return unit; } qint64 BitcoinAmountField::value(bool *valid_out) const @@ -129,6 +136,12 @@ void BitcoinAmountField::setValue(qint64 value) setText(BitcoinUnits::format(currentUnit, value)); } +void BitcoinAmountField::setReadOnly(bool fReadOnly) +{ + amount->setReadOnly(fReadOnly); + unit->setEnabled(!fReadOnly); +} + void BitcoinAmountField::unitChanged(int idx) { // Use description tooltip for current unit for the combobox @@ -146,11 +159,7 @@ void BitcoinAmountField::unitChanged(int idx) // Set max length after retrieving the value, to prevent truncation amount->setDecimals(BitcoinUnits::decimals(currentUnit)); amount->setMaximum(qPow(10, BitcoinUnits::amountDigits(currentUnit)) - qPow(10, -amount->decimals())); - - if (currentUnit == BitcoinUnits::uBTC) - amount->setSingleStep(0.01); - else - amount->setSingleStep(0.001); + amount->setSingleStep((double)nSingleStep / (double)BitcoinUnits::factor(currentUnit)); if (valid) { @@ -169,3 +178,9 @@ void BitcoinAmountField::setDisplayUnit(int newUnit) { unit->setValue(newUnit); } + +void BitcoinAmountField::setSingleStep(qint64 step) +{ + nSingleStep = step; + unitChanged(unit->currentIndex()); +} diff --git a/src/qt/bitcoinamountfield.h b/src/qt/bitcoinamountfield.h index dacbb395..521a9ed5 100644 --- a/src/qt/bitcoinamountfield.h +++ b/src/qt/bitcoinamountfield.h @@ -1,3 +1,7 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef BITCOINAMOUNTFIELD_H #define BITCOINAMOUNTFIELD_H @@ -22,6 +26,12 @@ public: qint64 value(bool *valid=0) const; void setValue(qint64 value); + /** Set single step in satoshis **/ + void setSingleStep(qint64 step); + + /** Make read-only **/ + void setReadOnly(bool fReadOnly); + /** Mark current value as invalid in UI. */ void setValid(bool valid); /** Perform input validation, mark field as invalid if entered value is not valid. */ @@ -49,6 +59,7 @@ private: QDoubleSpinBox *amount; QValueComboBox *unit; int currentUnit; + qint64 nSingleStep; void setText(const QString &text); QString text() const; diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index e09345f3..5e2aada1 100644 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -1,101 +1,133 @@ -/* - * Qt4 bitcoin GUI. - * - * W.J. van der Laan 2011-2012 - * The Bitcoin Developers 2011-2012 - */ - -#include +// Copyright (c) 2011-2014 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "bitcoingui.h" -#include "transactiontablemodel.h" -#include "optionsdialog.h" -#include "aboutdialog.h" -#include "clientmodel.h" -#include "walletmodel.h" -#include "walletframe.h" -#include "optionsmodel.h" -#include "transactiondescdialog.h" #include "bitcoinunits.h" +#include "clientmodel.h" #include "guiconstants.h" -#include "notificator.h" #include "guiutil.h" +#include "notificator.h" +#include "openuridialog.h" +#include "optionsdialog.h" +#include "optionsmodel.h" #include "rpcconsole.h" -#include "ui_interface.h" -#include "wallet.h" -#include "init.h" +#include "utilitydialog.h" +#ifdef ENABLE_WALLET +#include "walletframe.h" +#include "walletmodel.h" +#endif #ifdef Q_OS_MAC #include "macdockiconhandler.h" #endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#if QT_VERSION < 0x050000 -#include -#endif -#include -#include -#include -#include -#include +#include "init.h" +#include "ui_interface.h" #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if QT_VERSION < 0x050000 +#include +#include +#else +#include +#endif + const QString BitcoinGUI::DEFAULT_WALLET = "~Default"; BitcoinGUI::BitcoinGUI(bool fIsTestnet, QWidget *parent) : QMainWindow(parent), clientModel(0), + walletFrame(0), encryptWalletAction(0), changePassphraseAction(0), aboutQtAction(0), trayIcon(0), notificator(0), rpcConsole(0), - prevBlocks(0) + prevBlocks(0), + spinnerFrame(0) { - restoreWindowGeometry(); + GUIUtil::restoreWindowGeometry("nWindow", QSize(850, 550), this); + + QString windowTitle = tr("Myriadcoin Core") + " - "; +#ifdef ENABLE_WALLET + /* if compiled with wallet support, -disablewallet can still disable the wallet */ + bool enableWallet = !GetBoolArg("-disablewallet", false); +#else + bool enableWallet = false; +#endif + if(enableWallet) + { + windowTitle += tr("Wallet"); + } else { + windowTitle += tr("Node"); + } -#ifndef Q_OS_MAC if (!fIsTestnet) { - setWindowTitle(tr("Myriadcoin") + " - " + tr("Wallet")); +#ifndef Q_OS_MAC QApplication::setWindowIcon(QIcon(":icons/bitcoin")); setWindowIcon(QIcon(":icons/bitcoin")); +#else + MacDockIconHandler::instance()->setIcon(QIcon(":icons/bitcoin")); +#endif } else { - setWindowTitle(tr("Myriadcoin") + " - " + tr("Wallet") + " " + tr("[testnet]")); + windowTitle += " " + tr("[testnet]"); +#ifndef Q_OS_MAC QApplication::setWindowIcon(QIcon(":icons/bitcoin_testnet")); setWindowIcon(QIcon(":icons/bitcoin_testnet")); - } #else - setUnifiedTitleAndToolBarOnMac(true); - QApplication::setAttribute(Qt::AA_DontShowIconsInMenus); - - if (!fIsTestnet) - MacDockIconHandler::instance()->setIcon(QIcon(":icons/bitcoin")); - else MacDockIconHandler::instance()->setIcon(QIcon(":icons/bitcoin_testnet")); #endif + } + setWindowTitle(windowTitle); - // Create wallet frame and make it the central widget - walletFrame = new WalletFrame(this); - setCentralWidget(walletFrame); +#if defined(Q_OS_MAC) && QT_VERSION < 0x050000 + // This property is not implemented in Qt 5. Setting it has no effect. + // A replacement API (QtMacUnifiedToolBar) is available in QtMacExtras. + setUnifiedTitleAndToolBarOnMac(true); +#endif + + rpcConsole = new RPCConsole(enableWallet ? this : 0); +#ifdef ENABLE_WALLET + if(enableWallet) + { + /** Create wallet frame and make it the central widget */ + walletFrame = new WalletFrame(this); + setCentralWidget(walletFrame); + } else +#endif + { + /* When compiled without wallet or -disablewallet is provided, + * the central widget is the rpc console. + */ + setCentralWidget(rpcConsole); + } // Accept D&D of URIs setAcceptDrops(true); @@ -119,8 +151,7 @@ BitcoinGUI::BitcoinGUI(bool fIsTestnet, QWidget *parent) : // Status bar notification icons QFrame *frameBlocks = new QFrame(); frameBlocks->setContentsMargins(0,0,0,0); - frameBlocks->setMinimumWidth(56); - frameBlocks->setMaximumWidth(56); + frameBlocks->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); QHBoxLayout *frameBlocksLayout = new QHBoxLayout(frameBlocks); frameBlocksLayout->setContentsMargins(3,0,3,0); frameBlocksLayout->setSpacing(3); @@ -155,18 +186,27 @@ BitcoinGUI::BitcoinGUI(bool fIsTestnet, QWidget *parent) : statusBar()->addWidget(progressBar); statusBar()->addPermanentWidget(frameBlocks); - syncIconMovie = new QMovie(":/movies/update_spinner", "mng", this); - - rpcConsole = new RPCConsole(this); connect(openRPCConsoleAction, SIGNAL(triggered()), rpcConsole, SLOT(show())); + // prevents an oben debug window from becoming stuck/unusable on client shutdown + connect(quitAction, SIGNAL(triggered()), rpcConsole, SLOT(hide())); + // Install event filter to be able to catch status tip events (QEvent::StatusTip) this->installEventFilter(this); + + // Initially wallet actions should be disabled + setWalletActionsEnabled(false); + + // Subscribe to notifications from core + subscribeToCoreSignals(); } BitcoinGUI::~BitcoinGUI() { - saveWindowGeometry(); + // Unsubscribe from notifications from core + unsubscribeFromCoreSignals(); + + GUIUtil::saveWindowGeometry("nWindow", this); if(trayIcon) // Hide tray icon, as deleting will let it linger until quit (on Ubuntu) trayIcon->hide(); #ifdef Q_OS_MAC @@ -194,7 +234,7 @@ void BitcoinGUI::createActions(bool fIsTestnet) tabGroup->addAction(sendCoinsAction); receiveCoinsAction = new QAction(QIcon(":/icons/receiving_addresses"), tr("&Receive"), this); - receiveCoinsAction->setStatusTip(tr("Show the list of addresses for receiving payments")); + receiveCoinsAction->setStatusTip(tr("Request payments (generates QR codes and myriadcoin: URIs)")); receiveCoinsAction->setToolTip(receiveCoinsAction->statusTip()); receiveCoinsAction->setCheckable(true); receiveCoinsAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_3)); @@ -207,13 +247,8 @@ void BitcoinGUI::createActions(bool fIsTestnet) historyAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_4)); tabGroup->addAction(historyAction); - addressBookAction = new QAction(QIcon(":/icons/address-book"), tr("&Addresses"), this); - addressBookAction->setStatusTip(tr("Edit the list of stored addresses and labels")); - addressBookAction->setToolTip(addressBookAction->statusTip()); - addressBookAction->setCheckable(true); - addressBookAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_5)); - tabGroup->addAction(addressBookAction); - + // These showNormalIfMinimized are needed because Send Coins and Receive Coins + // can be triggered from the tray menu, and need to show the GUI to be useful. connect(overviewAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized())); connect(overviewAction, SIGNAL(triggered()), this, SLOT(gotoOverviewPage())); connect(sendCoinsAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized())); @@ -222,20 +257,22 @@ void BitcoinGUI::createActions(bool fIsTestnet) connect(receiveCoinsAction, SIGNAL(triggered()), this, SLOT(gotoReceiveCoinsPage())); connect(historyAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized())); connect(historyAction, SIGNAL(triggered()), this, SLOT(gotoHistoryPage())); - connect(addressBookAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized())); - connect(addressBookAction, SIGNAL(triggered()), this, SLOT(gotoAddressBookPage())); quitAction = new QAction(QIcon(":/icons/quit"), tr("E&xit"), this); quitAction->setStatusTip(tr("Quit application")); quitAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q)); quitAction->setMenuRole(QAction::QuitRole); if (!fIsTestnet) - aboutAction = new QAction(QIcon(":/icons/bitcoin"), tr("&About Myriadcoin"), this); + aboutAction = new QAction(QIcon(":/icons/bitcoin"), tr("&About Myriadcoin Core"), this); else - aboutAction = new QAction(QIcon(":/icons/bitcoin_testnet"), tr("&About Myriadcoin"), this); + aboutAction = new QAction(QIcon(":/icons/bitcoin_testnet"), tr("&About Myriadcoin Core"), this); aboutAction->setStatusTip(tr("Show information about Myriadcoin")); aboutAction->setMenuRole(QAction::AboutRole); +#if QT_VERSION < 0x050000 aboutQtAction = new QAction(QIcon(":/trolltech/qmessagebox/images/qtlogo-64.png"), tr("About &Qt"), this); +#else + aboutQtAction = new QAction(QIcon(":/qt-project.org/qmessagebox/images/qtlogo-64.png"), tr("About &Qt"), this); +#endif aboutQtAction->setStatusTip(tr("Show information about Qt")); aboutQtAction->setMenuRole(QAction::AboutQtRole); optionsAction = new QAction(QIcon(":/icons/options"), tr("&Options..."), this); @@ -262,16 +299,36 @@ void BitcoinGUI::createActions(bool fIsTestnet) openRPCConsoleAction = new QAction(QIcon(":/icons/debugwindow"), tr("&Debug window"), this); openRPCConsoleAction->setStatusTip(tr("Open debugging and diagnostic console")); + usedSendingAddressesAction = new QAction(QIcon(":/icons/address-book"), tr("&Sending addresses..."), this); + usedSendingAddressesAction->setStatusTip(tr("Show the list of used sending addresses and labels")); + usedReceivingAddressesAction = new QAction(QIcon(":/icons/address-book"), tr("&Receiving addresses..."), this); + usedReceivingAddressesAction->setStatusTip(tr("Show the list of used receiving addresses and labels")); + + openAction = new QAction(QApplication::style()->standardIcon(QStyle::SP_FileIcon), tr("Open &URI..."), this); + openAction->setStatusTip(tr("Open a myriadcoin: URI or payment request")); + + showHelpMessageAction = new QAction(QApplication::style()->standardIcon(QStyle::SP_MessageBoxInformation), tr("&Command-line options"), this); + showHelpMessageAction->setStatusTip(tr("Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options")); + connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit())); connect(aboutAction, SIGNAL(triggered()), this, SLOT(aboutClicked())); connect(aboutQtAction, SIGNAL(triggered()), qApp, SLOT(aboutQt())); connect(optionsAction, SIGNAL(triggered()), this, SLOT(optionsClicked())); connect(toggleHideAction, SIGNAL(triggered()), this, SLOT(toggleHidden())); - connect(encryptWalletAction, SIGNAL(triggered(bool)), walletFrame, SLOT(encryptWallet(bool))); - connect(backupWalletAction, SIGNAL(triggered()), walletFrame, SLOT(backupWallet())); - connect(changePassphraseAction, SIGNAL(triggered()), walletFrame, SLOT(changePassphrase())); - connect(signMessageAction, SIGNAL(triggered()), this, SLOT(gotoSignMessageTab())); - connect(verifyMessageAction, SIGNAL(triggered()), this, SLOT(gotoVerifyMessageTab())); + connect(showHelpMessageAction, SIGNAL(triggered()), this, SLOT(showHelpMessageClicked())); +#ifdef ENABLE_WALLET + if(walletFrame) + { + connect(encryptWalletAction, SIGNAL(triggered(bool)), walletFrame, SLOT(encryptWallet(bool))); + connect(backupWalletAction, SIGNAL(triggered()), walletFrame, SLOT(backupWallet())); + connect(changePassphraseAction, SIGNAL(triggered()), walletFrame, SLOT(changePassphrase())); + connect(signMessageAction, SIGNAL(triggered()), this, SLOT(gotoSignMessageTab())); + connect(verifyMessageAction, SIGNAL(triggered()), this, SLOT(gotoVerifyMessageTab())); + connect(usedSendingAddressesAction, SIGNAL(triggered()), walletFrame, SLOT(usedSendingAddresses())); + connect(usedReceivingAddressesAction, SIGNAL(triggered()), walletFrame, SLOT(usedReceivingAddresses())); + connect(openAction, SIGNAL(triggered()), this, SLOT(openClicked())); + } +#endif } void BitcoinGUI::createMenuBar() @@ -286,20 +343,34 @@ void BitcoinGUI::createMenuBar() // Configure the menus QMenu *file = appMenuBar->addMenu(tr("&File")); - file->addAction(backupWalletAction); - file->addAction(signMessageAction); - file->addAction(verifyMessageAction); - file->addSeparator(); + if(walletFrame) + { + file->addAction(openAction); + file->addAction(backupWalletAction); + file->addAction(signMessageAction); + file->addAction(verifyMessageAction); + file->addSeparator(); + file->addAction(usedSendingAddressesAction); + file->addAction(usedReceivingAddressesAction); + file->addSeparator(); + } file->addAction(quitAction); QMenu *settings = appMenuBar->addMenu(tr("&Settings")); - settings->addAction(encryptWalletAction); - settings->addAction(changePassphraseAction); - settings->addSeparator(); + if(walletFrame) + { + settings->addAction(encryptWalletAction); + settings->addAction(changePassphraseAction); + settings->addSeparator(); + } settings->addAction(optionsAction); QMenu *help = appMenuBar->addMenu(tr("&Help")); - help->addAction(openRPCConsoleAction); + if(walletFrame) + { + help->addAction(openRPCConsoleAction); + } + help->addAction(showHelpMessageAction); help->addSeparator(); help->addAction(aboutAction); help->addAction(aboutQtAction); @@ -307,13 +378,16 @@ void BitcoinGUI::createMenuBar() void BitcoinGUI::createToolBars() { - QToolBar *toolbar = addToolBar(tr("Tabs toolbar")); - toolbar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); - toolbar->addAction(overviewAction); - toolbar->addAction(sendCoinsAction); - toolbar->addAction(receiveCoinsAction); - toolbar->addAction(historyAction); - toolbar->addAction(addressBookAction); + if(walletFrame) + { + QToolBar *toolbar = addToolBar(tr("Tabs toolbar")); + toolbar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); + toolbar->addAction(overviewAction); + toolbar->addAction(sendCoinsAction); + toolbar->addAction(receiveCoinsAction); + toolbar->addAction(historyAction); + overviewAction->setChecked(true); + } } void BitcoinGUI::setClientModel(ClientModel *clientModel) @@ -332,28 +406,59 @@ void BitcoinGUI::setClientModel(ClientModel *clientModel) setNumBlocks(clientModel->getNumBlocks(), clientModel->getNumBlocksOfPeers()); connect(clientModel, SIGNAL(numBlocksChanged(int,int)), this, SLOT(setNumBlocks(int,int))); - // Receive and report messages from network/worker thread + // Receive and report messages from client model connect(clientModel, SIGNAL(message(QString,QString,unsigned int)), this, SLOT(message(QString,QString,unsigned int))); rpcConsole->setClientModel(clientModel); - walletFrame->setClientModel(clientModel); +#ifdef ENABLE_WALLET + if(walletFrame) + { + walletFrame->setClientModel(clientModel); + } +#endif } } +#ifdef ENABLE_WALLET bool BitcoinGUI::addWallet(const QString& name, WalletModel *walletModel) { + if(!walletFrame) + return false; + setWalletActionsEnabled(true); return walletFrame->addWallet(name, walletModel); } bool BitcoinGUI::setCurrentWallet(const QString& name) { + if(!walletFrame) + return false; return walletFrame->setCurrentWallet(name); } void BitcoinGUI::removeAllWallets() { + if(!walletFrame) + return; + setWalletActionsEnabled(false); walletFrame->removeAllWallets(); } +#endif + +void BitcoinGUI::setWalletActionsEnabled(bool enabled) +{ + overviewAction->setEnabled(enabled); + sendCoinsAction->setEnabled(enabled); + receiveCoinsAction->setEnabled(enabled); + historyAction->setEnabled(enabled); + encryptWalletAction->setEnabled(enabled); + backupWalletAction->setEnabled(enabled); + changePassphraseAction->setEnabled(enabled); + signMessageAction->setEnabled(enabled); + verifyMessageAction->setEnabled(enabled); + usedSendingAddressesAction->setEnabled(enabled); + usedReceivingAddressesAction->setEnabled(enabled); + openAction->setEnabled(enabled); +} void BitcoinGUI::createTrayIcon(bool fIsTestnet) { @@ -374,7 +479,7 @@ void BitcoinGUI::createTrayIcon(bool fIsTestnet) trayIcon->show(); #endif - notificator = new Notificator(QApplication::applicationName(), trayIcon); + notificator = new Notificator(QApplication::applicationName(), trayIcon, this); } void BitcoinGUI::createTrayIconMenu() @@ -425,66 +530,64 @@ void BitcoinGUI::trayIconActivated(QSystemTrayIcon::ActivationReason reason) } #endif -void BitcoinGUI::saveWindowGeometry() -{ - QSettings settings; - settings.setValue("nWindowPos", pos()); - settings.setValue("nWindowSize", size()); -} - -void BitcoinGUI::restoreWindowGeometry() -{ - QSettings settings; - QPoint pos = settings.value("nWindowPos").toPoint(); - QSize size = settings.value("nWindowSize", QSize(850, 550)).toSize(); - if (!pos.x() && !pos.y()) - { - QRect screen = QApplication::desktop()->screenGeometry(); - pos.setX((screen.width()-size.width())/2); - pos.setY((screen.height()-size.height())/2); - } - resize(size); - move(pos); -} - void BitcoinGUI::optionsClicked() { if(!clientModel || !clientModel->getOptionsModel()) return; - OptionsDialog dlg; + + OptionsDialog dlg(this); dlg.setModel(clientModel->getOptionsModel()); dlg.exec(); } void BitcoinGUI::aboutClicked() { - AboutDialog dlg; + if(!clientModel) + return; + + AboutDialog dlg(this); dlg.setModel(clientModel); dlg.exec(); } +void BitcoinGUI::showHelpMessageClicked() +{ + HelpMessageDialog *help = new HelpMessageDialog(this); + help->setAttribute(Qt::WA_DeleteOnClose); + help->show(); +} + +#ifdef ENABLE_WALLET +void BitcoinGUI::openClicked() +{ + OpenURIDialog dlg(this); + if(dlg.exec()) + { + emit receivedURI(dlg.getURI()); + } +} + void BitcoinGUI::gotoOverviewPage() { + overviewAction->setChecked(true); if (walletFrame) walletFrame->gotoOverviewPage(); } void BitcoinGUI::gotoHistoryPage() { + historyAction->setChecked(true); if (walletFrame) walletFrame->gotoHistoryPage(); } -void BitcoinGUI::gotoAddressBookPage() -{ - if (walletFrame) walletFrame->gotoAddressBookPage(); -} - void BitcoinGUI::gotoReceiveCoinsPage() { + receiveCoinsAction->setChecked(true); if (walletFrame) walletFrame->gotoReceiveCoinsPage(); } void BitcoinGUI::gotoSendCoinsPage(QString addr) { + sendCoinsAction->setChecked(true); if (walletFrame) walletFrame->gotoSendCoinsPage(addr); } @@ -497,6 +600,7 @@ void BitcoinGUI::gotoVerifyMessageTab(QString addr) { if (walletFrame) walletFrame->gotoVerifyMessageTab(addr); } +#endif void BitcoinGUI::setNumConnections(int count) { @@ -557,7 +661,10 @@ void BitcoinGUI::setNumBlocks(int count, int nTotalBlocks) tooltip = tr("Up to date") + QString(".
") + tooltip; labelBlocksIcon->setPixmap(QIcon(":/icons/synced").pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE)); - walletFrame->showOutOfSyncWarning(false); +#ifdef ENABLE_WALLET + if(walletFrame) + walletFrame->showOutOfSyncWarning(false); +#endif progressBarLabel->setVisible(false); progressBar->setVisible(false); @@ -566,17 +673,27 @@ void BitcoinGUI::setNumBlocks(int count, int nTotalBlocks) { // Represent time from last generated block in human readable text QString timeBehindText; - if(secs < 48*60*60) + const int HOUR_IN_SECONDS = 60*60; + const int DAY_IN_SECONDS = 24*60*60; + const int WEEK_IN_SECONDS = 7*24*60*60; + const int YEAR_IN_SECONDS = 31556952; // Average length of year in Gregorian calendar + if(secs < 2*DAY_IN_SECONDS) { - timeBehindText = tr("%n hour(s)","",secs/(60*60)); + timeBehindText = tr("%n hour(s)","",secs/HOUR_IN_SECONDS); } - else if(secs < 14*24*60*60) + else if(secs < 2*WEEK_IN_SECONDS) { - timeBehindText = tr("%n day(s)","",secs/(24*60*60)); + timeBehindText = tr("%n day(s)","",secs/DAY_IN_SECONDS); + } + else if(secs < YEAR_IN_SECONDS) + { + timeBehindText = tr("%n week(s)","",secs/WEEK_IN_SECONDS); } else { - timeBehindText = tr("%n week(s)","",secs/(7*24*60*60)); + int years = secs / YEAR_IN_SECONDS; + int remainder = secs % YEAR_IN_SECONDS; + timeBehindText = tr("%1 and %2").arg(tr("%n year(s)", "", years)).arg(tr("%n week(s)","", remainder/WEEK_IN_SECONDS)); } progressBarLabel->setVisible(true); @@ -586,12 +703,19 @@ void BitcoinGUI::setNumBlocks(int count, int nTotalBlocks) progressBar->setVisible(true); tooltip = tr("Catching up...") + QString("
") + tooltip; - labelBlocksIcon->setMovie(syncIconMovie); if(count != prevBlocks) - syncIconMovie->jumpToNextFrame(); + { + labelBlocksIcon->setPixmap(QIcon(QString( + ":/movies/spinner-%1").arg(spinnerFrame, 3, 10, QChar('0'))) + .pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE)); + spinnerFrame = (spinnerFrame + 1) % SPINNER_FRAMES; + } prevBlocks = count; - walletFrame->showOutOfSyncWarning(true); +#ifdef ENABLE_WALLET + if(walletFrame) + walletFrame->showOutOfSyncWarning(true); +#endif tooltip += QString("
"); tooltip += tr("Last received block was generated %1 ago.").arg(timeBehindText); @@ -614,21 +738,28 @@ void BitcoinGUI::message(const QString &title, const QString &message, unsigned int nMBoxIcon = QMessageBox::Information; int nNotifyIcon = Notificator::Information; - // Override title based on style QString msgType; - switch (style) { - case CClientUIInterface::MSG_ERROR: - msgType = tr("Error"); - break; - case CClientUIInterface::MSG_WARNING: - msgType = tr("Warning"); - break; - case CClientUIInterface::MSG_INFORMATION: - msgType = tr("Information"); - break; - default: - msgType = title; // Use supplied title + + // Prefer supplied title over style based title + if (!title.isEmpty()) { + msgType = title; } + else { + switch (style) { + case CClientUIInterface::MSG_ERROR: + msgType = tr("Error"); + break; + case CClientUIInterface::MSG_WARNING: + msgType = tr("Warning"); + break; + case CClientUIInterface::MSG_INFORMATION: + msgType = tr("Information"); + break; + default: + break; + } + } + // Append title to "Bitcoin - " if (!msgType.isEmpty()) strTitle += " - " + msgType; @@ -649,7 +780,12 @@ void BitcoinGUI::message(const QString &title, const QString &message, unsigned if (!(buttons = (QMessageBox::StandardButton)(style & CClientUIInterface::BTN_MASK))) buttons = QMessageBox::Ok; - QMessageBox mBox((QMessageBox::Icon)nMBoxIcon, strTitle, message, buttons); + // Ensure we get users attention, but only if main window is visible + // as we don't want to pop up the main window for messages that happen before + // initialization is finished. + if(!(style & CClientUIInterface::NOSHOWGUI)) + showNormalIfMinimized(); + QMessageBox mBox((QMessageBox::Icon)nMBoxIcon, strTitle, message, buttons, this); int r = mBox.exec(); if (ret != NULL) *ret = r == QMessageBox::Ok; @@ -692,17 +828,7 @@ void BitcoinGUI::closeEvent(QCloseEvent *event) QMainWindow::closeEvent(event); } -void BitcoinGUI::askFee(qint64 nFeeRequired, bool *payFee) -{ - QString strMessage = tr("This transaction is over the size limit. You can still send it for a fee of %1, " - "which goes to the nodes that process your transaction and helps to support the network. " - "Do you want to pay the fee?").arg(BitcoinUnits::formatWithUnit(BitcoinUnits::BTC, nFeeRequired)); - QMessageBox::StandardButton retval = QMessageBox::question( - this, tr("Confirm transaction fee"), strMessage, - QMessageBox::Yes|QMessageBox::Cancel, QMessageBox::Yes); - *payFee = (retval == QMessageBox::Yes); -} - +#ifdef ENABLE_WALLET void BitcoinGUI::incomingTransaction(const QString& date, int unit, qint64 amount, const QString& type, const QString& address) { // On new transaction, make an info balloon @@ -716,6 +842,7 @@ void BitcoinGUI::incomingTransaction(const QString& date, int unit, qint64 amoun .arg(type) .arg(address), CClientUIInterface::MSG_INFORMATION); } +#endif void BitcoinGUI::dragEnterEvent(QDragEnterEvent *event) { @@ -728,22 +855,11 @@ void BitcoinGUI::dropEvent(QDropEvent *event) { if(event->mimeData()->hasUrls()) { - int nValidUrisFound = 0; - QList uris = event->mimeData()->urls(); - foreach(const QUrl &uri, uris) + foreach(const QUrl &uri, event->mimeData()->urls()) { - if (walletFrame->handleURI(uri.toString())) - nValidUrisFound++; + emit receivedURI(uri.toString()); } - - // if valid URIs were found - if (nValidUrisFound) - walletFrame->gotoSendCoinsPage(); - else - message(tr("URI handling"), tr("URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters."), - CClientUIInterface::ICON_WARNING); } - event->acceptProposedAction(); } @@ -759,12 +875,18 @@ bool BitcoinGUI::eventFilter(QObject *object, QEvent *event) return QMainWindow::eventFilter(object, event); } -void BitcoinGUI::handleURI(QString strURI) +#ifdef ENABLE_WALLET +bool BitcoinGUI::handlePaymentRequest(const SendCoinsRecipient& recipient) { // URI has to be valid - if (!walletFrame->handleURI(strURI)) - message(tr("URI handling"), tr("URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters."), - CClientUIInterface::ICON_WARNING); + if (walletFrame && walletFrame->handlePaymentRequest(recipient)) + { + showNormalIfMinimized(); + gotoSendCoinsPage(); + return true; + } + else + return false; } void BitcoinGUI::setEncryptionStatus(int status) @@ -795,6 +917,7 @@ void BitcoinGUI::setEncryptionStatus(int status) break; } } +#endif void BitcoinGUI::showNormalIfMinimized(bool fToggleHidden) { @@ -826,5 +949,35 @@ void BitcoinGUI::toggleHidden() void BitcoinGUI::detectShutdown() { if (ShutdownRequested()) - QMetaObject::invokeMethod(QCoreApplication::instance(), "quit", Qt::QueuedConnection); + { + if(rpcConsole) + rpcConsole->hide(); + qApp->quit(); + } +} + +static bool ThreadSafeMessageBox(BitcoinGUI *gui, const std::string& message, const std::string& caption, unsigned int style) +{ + bool modal = (style & CClientUIInterface::MODAL); + bool ret = false; + // In case of modal message, use blocking connection to wait for user to click a button + QMetaObject::invokeMethod(gui, "message", + modal ? GUIUtil::blockingGUIThreadConnection() : Qt::QueuedConnection, + Q_ARG(QString, QString::fromStdString(caption)), + Q_ARG(QString, QString::fromStdString(message)), + Q_ARG(unsigned int, style), + Q_ARG(bool*, &ret)); + return ret; +} + +void BitcoinGUI::subscribeToCoreSignals() +{ + // Connect signals to client + uiInterface.ThreadSafeMessageBox.connect(boost::bind(ThreadSafeMessageBox, this, _1, _2, _3)); +} + +void BitcoinGUI::unsubscribeFromCoreSignals() +{ + // Disconnect signals from client + uiInterface.ThreadSafeMessageBox.disconnect(boost::bind(ThreadSafeMessageBox, this, _1, _2, _3)); } diff --git a/src/qt/bitcoingui.h b/src/qt/bitcoingui.h index 685ce8b4..0cc1ebc5 100644 --- a/src/qt/bitcoingui.h +++ b/src/qt/bitcoingui.h @@ -1,35 +1,31 @@ +// Copyright (c) 2011-2014 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef BITCOINGUI_H #define BITCOINGUI_H -#include -#include -#include +#if defined(HAVE_CONFIG_H) +#include "bitcoin-config.h" +#endif + +#include +#include +#include -class TransactionTableModel; -class WalletFrame; -class WalletView; class ClientModel; -class WalletModel; -class WalletStack; -class TransactionView; -class OverviewPage; -class AddressBookPage; -class SendCoinsDialog; -class SignVerifyMessageDialog; class Notificator; class RPCConsole; +class SendCoinsRecipient; +class WalletFrame; +class WalletModel; class CWallet; QT_BEGIN_NAMESPACE -class QLabel; -class QModelIndex; -class QProgressBar; -class QStackedWidget; -class QUrl; -class QListWidget; -class QPushButton; class QAction; +class QLabel; +class QProgressBar; QT_END_NAMESPACE /** @@ -50,23 +46,16 @@ public: The client model represents the part of the core that communicates with the P2P network, and is wallet-agnostic. */ void setClientModel(ClientModel *clientModel); + +#ifdef ENABLE_WALLET /** Set the wallet model. The wallet model represents a bitcoin wallet, and offers access to the list of transactions, address book and sending functionality. */ - bool addWallet(const QString& name, WalletModel *walletModel); bool setCurrentWallet(const QString& name); - void removeAllWallets(); - - /** Used by WalletView to allow access to needed QActions */ - // Todo: Use Qt signals for these - QAction * getOverviewAction() { return overviewAction; } - QAction * getHistoryAction() { return historyAction; } - QAction * getAddressBookAction() { return addressBookAction; } - QAction * getReceiveCoinsAction() { return receiveCoinsAction; } - QAction * getSendCoinsAction() { return sendCoinsAction; } +#endif protected: void changeEvent(QEvent *e); @@ -90,7 +79,8 @@ private: QAction *historyAction; QAction *quitAction; QAction *sendCoinsAction; - QAction *addressBookAction; + QAction *usedSendingAddressesAction; + QAction *usedReceivingAddressesAction; QAction *signMessageAction; QAction *verifyMessageAction; QAction *aboutAction; @@ -102,15 +92,16 @@ private: QAction *changePassphraseAction; QAction *aboutQtAction; QAction *openRPCConsoleAction; + QAction *openAction; + QAction *showHelpMessageAction; QSystemTrayIcon *trayIcon; Notificator *notificator; - TransactionView *transactionView; RPCConsole *rpcConsole; - QMovie *syncIconMovie; /** Keep track of previous number of blocks, to detect progress */ int prevBlocks; + int spinnerFrame; /** Create the main UI actions. */ void createActions(bool fIsTestnet); @@ -122,21 +113,24 @@ private: void createTrayIcon(bool fIsTestnet); /** Create system tray menu (or setup the dock menu) */ void createTrayIconMenu(); - /** Save window size and position */ - void saveWindowGeometry(); - /** Restore window size and position */ - void restoreWindowGeometry(); + + /** Enable or disable all wallet-related actions */ + void setWalletActionsEnabled(bool enabled); + + /** Connect core signals to GUI client */ + void subscribeToCoreSignals(); + /** Disconnect core signals from GUI client */ + void unsubscribeFromCoreSignals(); + +signals: + /** Signal raised when a URI was entered or dragged to the GUI */ + void receivedURI(const QString &uri); public slots: /** Set number of connections shown in the UI */ void setNumConnections(int count); /** Set number of blocks shown in the UI */ void setNumBlocks(int count, int nTotalBlocks); - /** Set the encryption status as shown in the UI. - @param[in] status current encryption status - @see WalletModel::EncryptionStatus - */ - void setEncryptionStatus(int status); /** Notify the user of an event from the core network or transaction handling code. @param[in] title the message box / notification title @@ -146,27 +140,26 @@ public slots: @param[in] ret pointer to a bool that will be modified to whether Ok was clicked (modal only) */ void message(const QString &title, const QString &message, unsigned int style, bool *ret = NULL); - /** Asks the user whether to pay the transaction fee or to cancel the transaction. - It is currently not possible to pass a return value to another thread through - BlockingQueuedConnection, so an indirected pointer is used. - https://bugreports.qt-project.org/browse/QTBUG-10440 - @param[in] nFeeRequired the required fee - @param[out] payFee true to pay the fee, false to not pay the fee +#ifdef ENABLE_WALLET + /** Set the encryption status as shown in the UI. + @param[in] status current encryption status + @see WalletModel::EncryptionStatus */ - void askFee(qint64 nFeeRequired, bool *payFee); - void handleURI(QString strURI); + void setEncryptionStatus(int status); + + bool handlePaymentRequest(const SendCoinsRecipient& recipient); /** Show incoming transaction notification for new transactions. */ void incomingTransaction(const QString& date, int unit, qint64 amount, const QString& type, const QString& address); +#endif private slots: +#ifdef ENABLE_WALLET /** Switch to overview (home) page */ void gotoOverviewPage(); /** Switch to history (transactions) page */ void gotoHistoryPage(); - /** Switch to address book page */ - void gotoAddressBookPage(); /** Switch to receive coins page */ void gotoReceiveCoinsPage(); /** Switch to send coins page */ @@ -177,10 +170,15 @@ private slots: /** Show Sign/Verify Message dialog and switch to verify message tab */ void gotoVerifyMessageTab(QString addr = ""); + /** Show open dialog */ + void openClicked(); +#endif /** Show configuration dialog */ void optionsClicked(); /** Show about dialog */ void aboutClicked(); + /** Show help message dialog */ + void showHelpMessageClicked(); #ifndef Q_OS_MAC /** Handle tray icon clicked */ void trayIconActivated(QSystemTrayIcon::ActivationReason reason); diff --git a/src/qt/bitcoinstrings.cpp b/src/qt/bitcoinstrings.cpp index 833ee787..e7fd3e74 100644 --- a/src/qt/bitcoinstrings.cpp +++ b/src/qt/bitcoinstrings.cpp @@ -1,4 +1,7 @@ + + #include + // Automatically generated by extract_strings.py #ifdef __GNUC__ #define UNUSED __attribute__((unused)) @@ -19,8 +22,8 @@ QT_TRANSLATE_NOOP("bitcoin-core", "" "It is also recommended to set alertnotify so you are notified of problems;\n" "for example: alertnotify=echo %%s | mail -s \"Myriadcoin Alert\" admin@foo.com\n"), QT_TRANSLATE_NOOP("bitcoin-core", "" -"Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:" -"@STRENGTH)"), +"Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!" +"3DES:@STRENGTH)"), QT_TRANSLATE_NOOP("bitcoin-core", "" "An error occurred while setting up the RPC port %u for listening on IPv4: %s"), QT_TRANSLATE_NOOP("bitcoin-core", "" @@ -30,13 +33,21 @@ QT_TRANSLATE_NOOP("bitcoin-core", "" "Bind to given address and always listen on it. Use [host]:port notation for " "IPv6"), QT_TRANSLATE_NOOP("bitcoin-core", "" -"Cannot obtain a lock on data directory %s. Myriadcoin is probably already " +"Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already " "running."), QT_TRANSLATE_NOOP("bitcoin-core", "" +"Continuously rate-limit free transactions to *1000 bytes per minute " +"(default:15)"), +QT_TRANSLATE_NOOP("bitcoin-core", "" "Enter regression test mode, which uses a special chain in which blocks can " "be solved instantly. This is intended for regression testing tools and app " "development."), QT_TRANSLATE_NOOP("bitcoin-core", "" +"Enter regression test mode, which uses a special chain in which blocks can " +"be solved instantly."), +QT_TRANSLATE_NOOP("bitcoin-core", "" +"Error: Listening for incoming connections failed (listen returned error %d)"), +QT_TRANSLATE_NOOP("bitcoin-core", "" "Error: The transaction was rejected! This might happen if some of the coins " "in your wallet were already spent, such as if you used a copy of wallet.dat " "and coins were spent in the copy but not marked as spent here."), @@ -44,8 +55,8 @@ QT_TRANSLATE_NOOP("bitcoin-core", "" "Error: This transaction requires a transaction fee of at least %s because of " "its amount, complexity, or use of recently received funds!"), QT_TRANSLATE_NOOP("bitcoin-core", "" -"Execute command when a relevant alert is received (%s in cmd is replaced by " -"message)"), +"Execute command when a relevant alert is received or we see a really long " +"fork (%s in cmd is replaced by message)"), QT_TRANSLATE_NOOP("bitcoin-core", "" "Execute command when a wallet transaction changes (%s in cmd is replaced by " "TxID)"), @@ -53,31 +64,53 @@ QT_TRANSLATE_NOOP("bitcoin-core", "" "Execute command when the best block changes (%s in cmd is replaced by block " "hash)"), QT_TRANSLATE_NOOP("bitcoin-core", "" +"Fees smaller than this are considered zero fee (for transaction creation) " +"(default:"), +QT_TRANSLATE_NOOP("bitcoin-core", "" +"Flush database activity from memory pool to disk log every megabytes " +"(default: 100)"), +QT_TRANSLATE_NOOP("bitcoin-core", "" +"How thorough the block verification of -checkblocks is (0-4, default: 3)"), +QT_TRANSLATE_NOOP("bitcoin-core", "" +"In this mode -genproclimit controls how many blocks are generated " +"immediately."), +QT_TRANSLATE_NOOP("bitcoin-core", "" "Listen for JSON-RPC connections on (default: 8332 or testnet: 18332)"), QT_TRANSLATE_NOOP("bitcoin-core", "" "Number of seconds to keep misbehaving peers from reconnecting (default: " "86400)"), QT_TRANSLATE_NOOP("bitcoin-core", "" -"Set maximum size of high-priority/low-fee transactions in bytes (default: " -"27000)"), +"Output debugging information (default: 0, supplying is optional)"), QT_TRANSLATE_NOOP("bitcoin-core", "" -"Set the number of script verification threads (up to 16, 0 = auto, <0 = " -"leave that many cores free, default: 0)"), +"Set maximum size of high-priority/low-fee transactions in bytes (default: %d)"), +QT_TRANSLATE_NOOP("bitcoin-core", "" +"Set the number of script verification threads (%u to %d, 0 = auto, <0 = " +"leave that many cores free, default: %d)"), +QT_TRANSLATE_NOOP("bitcoin-core", "" +"Set the processor limit for when generation is on (-1 = unlimited, default: " +"-1)"), QT_TRANSLATE_NOOP("bitcoin-core", "" "This is a pre-release test build - use at your own risk - do not use for " "mining or merchant applications"), QT_TRANSLATE_NOOP("bitcoin-core", "" -"Unable to bind to %s on this computer. Myriadcoin is probably already running."), +"Unable to bind to %s on this computer. Myriadcoin Core is probably already " +"running."), +QT_TRANSLATE_NOOP("bitcoin-core", "" +"Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -" +"proxy)"), QT_TRANSLATE_NOOP("bitcoin-core", "" "Warning: -paytxfee is set very high! This is the transaction fee you will " "pay if you send a transaction."), QT_TRANSLATE_NOOP("bitcoin-core", "" -"Warning: Displayed transactions may not be correct! You may need to upgrade, " -"or other nodes may need to upgrade."), -QT_TRANSLATE_NOOP("bitcoin-core", "" "Warning: Please check that your computer's date and time are correct! If " "your clock is wrong Myriadcoin will not work properly."), QT_TRANSLATE_NOOP("bitcoin-core", "" +"Warning: The network does not appear to fully agree! Some miners appear to " +"be experiencing issues."), +QT_TRANSLATE_NOOP("bitcoin-core", "" +"Warning: We do not appear to fully agree with our peers! You may need to " +"upgrade, or other nodes may need to upgrade."), +QT_TRANSLATE_NOOP("bitcoin-core", "" "Warning: error reading wallet.dat! All keys read correctly, but transaction " "data or address book entries might be missing or incorrect."), QT_TRANSLATE_NOOP("bitcoin-core", "" @@ -89,23 +122,33 @@ QT_TRANSLATE_NOOP("bitcoin-core", "" "%s\n" "If the file does not exist, create it with owner-readable-only file " "permissions."), +QT_TRANSLATE_NOOP("bitcoin-core", "(default: 1)"), +QT_TRANSLATE_NOOP("bitcoin-core", "(default: wallet.dat)"), +QT_TRANSLATE_NOOP("bitcoin-core", " can be:"), QT_TRANSLATE_NOOP("bitcoin-core", "Accept command line and JSON-RPC commands"), QT_TRANSLATE_NOOP("bitcoin-core", "Accept connections from outside (default: 1 if no -proxy or -connect)"), QT_TRANSLATE_NOOP("bitcoin-core", "Add a node to connect to and attempt to keep the connection open"), QT_TRANSLATE_NOOP("bitcoin-core", "Allow DNS lookups for -addnode, -seednode and -connect"), QT_TRANSLATE_NOOP("bitcoin-core", "Allow JSON-RPC connections from specified IP address"), QT_TRANSLATE_NOOP("bitcoin-core", "Attempt to recover private keys from a corrupt wallet.dat"), -QT_TRANSLATE_NOOP("bitcoin-core", "Myriadcoin version"), +QT_TRANSLATE_NOOP("bitcoin-core", "Myriadcoin Core Daemon"), +QT_TRANSLATE_NOOP("bitcoin-core", "Myriadcoin Core RPC client version"), QT_TRANSLATE_NOOP("bitcoin-core", "Block creation options:"), QT_TRANSLATE_NOOP("bitcoin-core", "Cannot downgrade wallet"), QT_TRANSLATE_NOOP("bitcoin-core", "Cannot resolve -bind address: '%s'"), QT_TRANSLATE_NOOP("bitcoin-core", "Cannot resolve -externalip address: '%s'"), QT_TRANSLATE_NOOP("bitcoin-core", "Cannot write default address"), +QT_TRANSLATE_NOOP("bitcoin-core", "Clear list of wallet transactions (diagnostic tool; implies -rescan)"), QT_TRANSLATE_NOOP("bitcoin-core", "Connect only to the specified node(s)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Connect through socks proxy"), +QT_TRANSLATE_NOOP("bitcoin-core", "Connect through SOCKS proxy"), +QT_TRANSLATE_NOOP("bitcoin-core", "Connect to JSON-RPC on (default: 8332 or testnet: 18332)"), QT_TRANSLATE_NOOP("bitcoin-core", "Connect to a node to retrieve peer addresses, and disconnect"), +QT_TRANSLATE_NOOP("bitcoin-core", "Connection options:"), QT_TRANSLATE_NOOP("bitcoin-core", "Corrupted block database detected"), +QT_TRANSLATE_NOOP("bitcoin-core", "Debugging/Testing options:"), +QT_TRANSLATE_NOOP("bitcoin-core", "Disable safemode, override a real safe mode event (default: 0)"), QT_TRANSLATE_NOOP("bitcoin-core", "Discover own IP address (default: 1 when listening and no -externalip)"), +QT_TRANSLATE_NOOP("bitcoin-core", "Do not load the wallet and disable wallet RPC calls"), QT_TRANSLATE_NOOP("bitcoin-core", "Do you want to rebuild the block database now?"), QT_TRANSLATE_NOOP("bitcoin-core", "Done loading"), QT_TRANSLATE_NOOP("bitcoin-core", "Error initializing block database"), @@ -130,27 +173,32 @@ QT_TRANSLATE_NOOP("bitcoin-core", "Failed to write file info"), QT_TRANSLATE_NOOP("bitcoin-core", "Failed to write to coin database"), QT_TRANSLATE_NOOP("bitcoin-core", "Failed to write transaction index"), QT_TRANSLATE_NOOP("bitcoin-core", "Failed to write undo data"), -QT_TRANSLATE_NOOP("bitcoin-core", "Fee per KB to add to transactions you send"), +QT_TRANSLATE_NOOP("bitcoin-core", "Fee per kB to add to transactions you send"), +QT_TRANSLATE_NOOP("bitcoin-core", "Fees smaller than this are considered zero fee (for relaying) (default:"), QT_TRANSLATE_NOOP("bitcoin-core", "Find peers using DNS lookup (default: 1 unless -connect)"), +QT_TRANSLATE_NOOP("bitcoin-core", "Force safe mode (default: 0)"), QT_TRANSLATE_NOOP("bitcoin-core", "Generate coins (default: 0)"), QT_TRANSLATE_NOOP("bitcoin-core", "Get help for a command"), QT_TRANSLATE_NOOP("bitcoin-core", "How many blocks to check at startup (default: 288, 0 = all)"), -QT_TRANSLATE_NOOP("bitcoin-core", "How thorough the block verification is (0-4, default: 3)"), +QT_TRANSLATE_NOOP("bitcoin-core", "If is not supplied, output all debugging information."), +QT_TRANSLATE_NOOP("bitcoin-core", "Importing..."), QT_TRANSLATE_NOOP("bitcoin-core", "Imports blocks from external blk000??.dat file"), QT_TRANSLATE_NOOP("bitcoin-core", "Incorrect or no genesis block found. Wrong datadir for network?"), QT_TRANSLATE_NOOP("bitcoin-core", "Information"), QT_TRANSLATE_NOOP("bitcoin-core", "Insufficient funds"), +QT_TRANSLATE_NOOP("bitcoin-core", "Invalid -onion address: '%s'"), QT_TRANSLATE_NOOP("bitcoin-core", "Invalid -proxy address: '%s'"), -QT_TRANSLATE_NOOP("bitcoin-core", "Invalid -tor address: '%s'"), QT_TRANSLATE_NOOP("bitcoin-core", "Invalid amount for -minrelaytxfee=: '%s'"), QT_TRANSLATE_NOOP("bitcoin-core", "Invalid amount for -mintxfee=: '%s'"), QT_TRANSLATE_NOOP("bitcoin-core", "Invalid amount for -paytxfee=: '%s'"), QT_TRANSLATE_NOOP("bitcoin-core", "Invalid amount"), +QT_TRANSLATE_NOOP("bitcoin-core", "Limit size of signature cache to entries (default: 50000)"), QT_TRANSLATE_NOOP("bitcoin-core", "List commands"), QT_TRANSLATE_NOOP("bitcoin-core", "Listen for connections on (default: 8333 or testnet: 18333)"), QT_TRANSLATE_NOOP("bitcoin-core", "Loading addresses..."), QT_TRANSLATE_NOOP("bitcoin-core", "Loading block index..."), QT_TRANSLATE_NOOP("bitcoin-core", "Loading wallet..."), +QT_TRANSLATE_NOOP("bitcoin-core", "Log transaction priority and fee per kB when mining blocks (default: 0)"), QT_TRANSLATE_NOOP("bitcoin-core", "Maintain a full transaction index (default: 0)"), QT_TRANSLATE_NOOP("bitcoin-core", "Maintain at most connections to peers (default: 125)"), QT_TRANSLATE_NOOP("bitcoin-core", "Maximum per-connection receive buffer, *1000 bytes (default: 5000)"), @@ -159,36 +207,48 @@ QT_TRANSLATE_NOOP("bitcoin-core", "Not enough file descriptors available."), QT_TRANSLATE_NOOP("bitcoin-core", "Only accept block chain matching built-in checkpoints (default: 1)"), QT_TRANSLATE_NOOP("bitcoin-core", "Only connect to nodes in network (IPv4, IPv6 or Tor)"), QT_TRANSLATE_NOOP("bitcoin-core", "Options:"), -QT_TRANSLATE_NOOP("bitcoin-core", "Output extra debugging information. Implies all other -debug* options"), -QT_TRANSLATE_NOOP("bitcoin-core", "Output extra network debugging information"), QT_TRANSLATE_NOOP("bitcoin-core", "Password for JSON-RPC connections"), -QT_TRANSLATE_NOOP("bitcoin-core", "Prepend debug output with timestamp"), +QT_TRANSLATE_NOOP("bitcoin-core", "Prepend debug output with timestamp (default: 1)"), +QT_TRANSLATE_NOOP("bitcoin-core", "Print block on startup, if found in block index"), +QT_TRANSLATE_NOOP("bitcoin-core", "Print block tree on startup (default: 0)"), +QT_TRANSLATE_NOOP("bitcoin-core", "RPC SSL options: (see the Bitcoin Wiki for SSL setup instructions)"), +QT_TRANSLATE_NOOP("bitcoin-core", "RPC client options:"), +QT_TRANSLATE_NOOP("bitcoin-core", "RPC server options:"), +QT_TRANSLATE_NOOP("bitcoin-core", "Randomly drop 1 of every network messages"), +QT_TRANSLATE_NOOP("bitcoin-core", "Randomly fuzz 1 of every network messages"), QT_TRANSLATE_NOOP("bitcoin-core", "Rebuild block chain index from current blk000??.dat files"), QT_TRANSLATE_NOOP("bitcoin-core", "Rescan the block chain for missing wallet transactions"), QT_TRANSLATE_NOOP("bitcoin-core", "Rescanning..."), +QT_TRANSLATE_NOOP("bitcoin-core", "Run a thread to flush wallet periodically (default: 1)"), QT_TRANSLATE_NOOP("bitcoin-core", "Run in the background as a daemon and accept commands"), QT_TRANSLATE_NOOP("bitcoin-core", "SSL options: (see the Bitcoin Wiki for SSL setup instructions)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Select the version of socks proxy to use (4-5, default: 5)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Send command to -server or myriadcoind"), +QT_TRANSLATE_NOOP("bitcoin-core", "Select SOCKS version for -proxy (4 or 5, default: 5)"), +QT_TRANSLATE_NOOP("bitcoin-core", "Send command to Myriadcoin Core"), QT_TRANSLATE_NOOP("bitcoin-core", "Send commands to node running on (default: 127.0.0.1)"), QT_TRANSLATE_NOOP("bitcoin-core", "Send trace/debug info to console instead of debug.log file"), -QT_TRANSLATE_NOOP("bitcoin-core", "Send trace/debug info to debugger"), QT_TRANSLATE_NOOP("bitcoin-core", "Server certificate file (default: server.cert)"), QT_TRANSLATE_NOOP("bitcoin-core", "Server private key (default: server.pem)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Set database cache size in megabytes (default: 25)"), +QT_TRANSLATE_NOOP("bitcoin-core", "Set database cache size in megabytes (%d to %d, default: %d)"), QT_TRANSLATE_NOOP("bitcoin-core", "Set key pool size to (default: 100)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Set maximum block size in bytes (default: 250000)"), +QT_TRANSLATE_NOOP("bitcoin-core", "Set maximum block size in bytes (default: %d)"), QT_TRANSLATE_NOOP("bitcoin-core", "Set minimum block size in bytes (default: 0)"), QT_TRANSLATE_NOOP("bitcoin-core", "Set the number of threads to service RPC calls (default: 4)"), +QT_TRANSLATE_NOOP("bitcoin-core", "Sets the DB_PRIVATE flag in the wallet db environment (default: 1)"), +QT_TRANSLATE_NOOP("bitcoin-core", "Show all debugging options (usage: --help -help-debug)"), +QT_TRANSLATE_NOOP("bitcoin-core", "Show benchmark information (default: 0)"), QT_TRANSLATE_NOOP("bitcoin-core", "Shrink debug.log file on client startup (default: 1 when no -debug)"), QT_TRANSLATE_NOOP("bitcoin-core", "Signing transaction failed"), -QT_TRANSLATE_NOOP("bitcoin-core", "Specify configuration file (default: myriadcoin.conf)"), +QT_TRANSLATE_NOOP("bitcoin-core", "Specify configuration file (default: bitcoin.conf)"), QT_TRANSLATE_NOOP("bitcoin-core", "Specify connection timeout in milliseconds (default: 5000)"), QT_TRANSLATE_NOOP("bitcoin-core", "Specify data directory"), QT_TRANSLATE_NOOP("bitcoin-core", "Specify pid file (default: myriadcoind.pid)"), +QT_TRANSLATE_NOOP("bitcoin-core", "Specify wallet file (within data directory)"), QT_TRANSLATE_NOOP("bitcoin-core", "Specify your own public address"), +QT_TRANSLATE_NOOP("bitcoin-core", "Spend unconfirmed change when sending transactions (default: 1)"), +QT_TRANSLATE_NOOP("bitcoin-core", "Start Myriadcoin Core Daemon"), QT_TRANSLATE_NOOP("bitcoin-core", "System error: "), QT_TRANSLATE_NOOP("bitcoin-core", "This help message"), +QT_TRANSLATE_NOOP("bitcoin-core", "This is intended for regression testing tools and app development."), QT_TRANSLATE_NOOP("bitcoin-core", "Threshold for disconnecting misbehaving peers (default: 100)"), QT_TRANSLATE_NOOP("bitcoin-core", "To use the %s option"), QT_TRANSLATE_NOOP("bitcoin-core", "Transaction amount too small"), @@ -198,18 +258,25 @@ QT_TRANSLATE_NOOP("bitcoin-core", "Unable to bind to %s on this computer (bind r QT_TRANSLATE_NOOP("bitcoin-core", "Unknown -socks proxy version requested: %i"), QT_TRANSLATE_NOOP("bitcoin-core", "Unknown network specified in -onlynet: '%s'"), QT_TRANSLATE_NOOP("bitcoin-core", "Upgrade wallet to latest format"), +QT_TRANSLATE_NOOP("bitcoin-core", "Usage (deprecated, use myriadcoin-cli):"), QT_TRANSLATE_NOOP("bitcoin-core", "Usage:"), QT_TRANSLATE_NOOP("bitcoin-core", "Use OpenSSL (https) for JSON-RPC connections"), QT_TRANSLATE_NOOP("bitcoin-core", "Use UPnP to map the listening port (default: 0)"), QT_TRANSLATE_NOOP("bitcoin-core", "Use UPnP to map the listening port (default: 1 when listening)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Use proxy to reach tor hidden services (default: same as -proxy)"), QT_TRANSLATE_NOOP("bitcoin-core", "Use the test network"), QT_TRANSLATE_NOOP("bitcoin-core", "Username for JSON-RPC connections"), QT_TRANSLATE_NOOP("bitcoin-core", "Verifying blocks..."), QT_TRANSLATE_NOOP("bitcoin-core", "Verifying wallet..."), +QT_TRANSLATE_NOOP("bitcoin-core", "Wait for RPC server to start"), +QT_TRANSLATE_NOOP("bitcoin-core", "Wallet %s resides outside data directory %s"), QT_TRANSLATE_NOOP("bitcoin-core", "Wallet needed to be rewritten: restart Myriadcoin to complete"), +QT_TRANSLATE_NOOP("bitcoin-core", "Wallet options:"), QT_TRANSLATE_NOOP("bitcoin-core", "Warning"), +QT_TRANSLATE_NOOP("bitcoin-core", "Warning: Deprecated argument -debugnet ignored, use -debug=net"), QT_TRANSLATE_NOOP("bitcoin-core", "Warning: This version is obsolete, upgrade required!"), QT_TRANSLATE_NOOP("bitcoin-core", "You need to rebuild the database using -reindex to change -txindex"), +QT_TRANSLATE_NOOP("bitcoin-core", "Zapping all transactions from wallet..."), +QT_TRANSLATE_NOOP("bitcoin-core", "on startup"), +QT_TRANSLATE_NOOP("bitcoin-core", "version"), QT_TRANSLATE_NOOP("bitcoin-core", "wallet.dat corrupt, salvage failed"), -}; \ No newline at end of file +}; diff --git a/src/qt/bitcoinunits.cpp b/src/qt/bitcoinunits.cpp index cb466d60..34943ee6 100644 --- a/src/qt/bitcoinunits.cpp +++ b/src/qt/bitcoinunits.cpp @@ -1,3 +1,7 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #include "bitcoinunits.h" #include diff --git a/src/qt/bitcoinunits.h b/src/qt/bitcoinunits.h index f6fdf6c7..46517fc0 100644 --- a/src/qt/bitcoinunits.h +++ b/src/qt/bitcoinunits.h @@ -1,8 +1,12 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef BITCOINUNITS_H #define BITCOINUNITS_H -#include #include +#include /** Bitcoin unit definitions. Encapsulates parsing and formatting and serves as list model for drop-down selection boxes. diff --git a/src/qt/clientmodel.cpp b/src/qt/clientmodel.cpp index 5cf4dd81..3c0564c2 100644 --- a/src/qt/clientmodel.cpp +++ b/src/qt/clientmodel.cpp @@ -1,20 +1,25 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #include "clientmodel.h" #include "guiconstants.h" -#include "optionsmodel.h" -#include "addresstablemodel.h" -#include "transactiontablemodel.h" -#include "chainparams.h" #include "alert.h" -#include "main.h" +#include "chainparams.h" #include "checkpoints.h" +#include "main.h" +#include "net.h" #include "ui_interface.h" +#include + #include +#include #include -static const int64 nClientStartupTime = GetTime(); +static const int64_t nClientStartupTime = GetTime(); ClientModel::ClientModel(OptionsModel *optionsModel, QObject *parent) : QObject(parent), optionsModel(optionsModel), @@ -23,9 +28,8 @@ ClientModel::ClientModel(OptionsModel *optionsModel, QObject *parent) : numBlocksAtStartup(-1), pollTimer(0) { pollTimer = new QTimer(this); - pollTimer->setInterval(MODEL_UPDATE_DELAY); - pollTimer->start(); connect(pollTimer, SIGNAL(timeout()), this, SLOT(updateTimer())); + pollTimer->start(MODEL_UPDATE_DELAY); subscribeToCoreSignals(); } @@ -35,14 +39,24 @@ ClientModel::~ClientModel() unsubscribeFromCoreSignals(); } -int ClientModel::getNumConnections() const +int ClientModel::getNumConnections(unsigned int flags) const { - return vNodes.size(); + LOCK(cs_vNodes); + if (flags == CONNECTIONS_ALL) // Shortcut if we want total + return vNodes.size(); + + int nNum = 0; + BOOST_FOREACH(CNode* pnode, vNodes) + if (flags & (pnode->fInbound ? CONNECTIONS_IN : CONNECTIONS_OUT)) + nNum++; + + return nNum; } int ClientModel::getNumBlocks() const { - return nBestHeight; + LOCK(cs_main); + return chainActive.Height(); } int ClientModel::getNumBlocksAtStartup() @@ -51,23 +65,39 @@ int ClientModel::getNumBlocksAtStartup() return numBlocksAtStartup; } +quint64 ClientModel::getTotalBytesRecv() const +{ + return CNode::GetTotalBytesRecv(); +} + +quint64 ClientModel::getTotalBytesSent() const +{ + return CNode::GetTotalBytesSent(); +} + QDateTime ClientModel::getLastBlockDate() const { - if (pindexBest) - return QDateTime::fromTime_t(pindexBest->GetBlockTime()); - else if(!isTestNet()) - return QDateTime::fromTime_t(1231006505); // Genesis block's time + LOCK(cs_main); + if (chainActive.Tip()) + return QDateTime::fromTime_t(chainActive.Tip()->GetBlockTime()); else - return QDateTime::fromTime_t(1296688602); // Genesis block's time (testnet) + return QDateTime::fromTime_t(Params().GenesisBlock().nTime); // Genesis block's time of current network } double ClientModel::getVerificationProgress() const { - return Checkpoints::GuessVerificationProgress(pindexBest); + LOCK(cs_main); + return Checkpoints::GuessVerificationProgress(chainActive.Tip()); } void ClientModel::updateTimer() { + // Get required lock upfront. This avoids the GUI from getting stuck on + // periodical polls if the core is holding the locks for a longer time - + // for example, during a wallet rescan. + TRY_LOCK(cs_main, lockMain); + if(!lockMain) + return; // Some quantities (such as number of blocks) change so fast that we don't want to be notified for each change. // Periodically check and update with a timer. int newNumBlocks = getNumBlocks(); @@ -85,6 +115,8 @@ void ClientModel::updateTimer() // ensure we return the maximum of newNumBlocksOfPeers and newNumBlocks to not create weird displays in the GUI emit numBlocksChanged(newNumBlocks, std::max(newNumBlocksOfPeers, newNumBlocks)); } + + emit bytesChanged(getTotalBytesRecv(), getTotalBytesSent()); } void ClientModel::updateNumConnections(int numConnections) @@ -109,9 +141,12 @@ void ClientModel::updateAlert(const QString &hash, int status) emit alertsChanged(getStatusBarWarnings()); } -bool ClientModel::isTestNet() const +QString ClientModel::getNetworkName() const { - return TestNet(); + QString netname(QString::fromStdString(Params().DataDir())); + if(netname.isEmpty()) + netname = "main"; + return netname; } bool ClientModel::inInitialBlockDownload() const @@ -180,14 +215,14 @@ static void NotifyBlocksChanged(ClientModel *clientmodel) static void NotifyNumConnectionsChanged(ClientModel *clientmodel, int newNumConnections) { - // Too noisy: OutputDebugStringF("NotifyNumConnectionsChanged %i\n", newNumConnections); + // Too noisy: qDebug() << "NotifyNumConnectionsChanged : " + QString::number(newNumConnections); QMetaObject::invokeMethod(clientmodel, "updateNumConnections", Qt::QueuedConnection, Q_ARG(int, newNumConnections)); } static void NotifyAlertChanged(ClientModel *clientmodel, const uint256 &hash, ChangeType status) { - OutputDebugStringF("NotifyAlertChanged %s status=%i\n", hash.GetHex().c_str(), status); + qDebug() << "NotifyAlertChanged : " + QString::fromStdString(hash.GetHex()) + " status=" + QString::number(status); QMetaObject::invokeMethod(clientmodel, "updateAlert", Qt::QueuedConnection, Q_ARG(QString, QString::fromStdString(hash.GetHex())), Q_ARG(int, status)); diff --git a/src/qt/clientmodel.h b/src/qt/clientmodel.h index f9d491aa..f29b695e 100644 --- a/src/qt/clientmodel.h +++ b/src/qt/clientmodel.h @@ -1,11 +1,16 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef CLIENTMODEL_H #define CLIENTMODEL_H #include -class OptionsModel; class AddressTableModel; +class OptionsModel; class TransactionTableModel; + class CWallet; QT_BEGIN_NAMESPACE @@ -20,6 +25,13 @@ enum BlockSource { BLOCK_SOURCE_NETWORK }; +enum NumConnections { + CONNECTIONS_NONE = 0, + CONNECTIONS_IN = (1U << 0), + CONNECTIONS_OUT = (1U << 1), + CONNECTIONS_ALL = (CONNECTIONS_IN | CONNECTIONS_OUT), +}; + /** Model for Bitcoin network client. */ class ClientModel : public QObject { @@ -31,15 +43,19 @@ public: OptionsModel *getOptionsModel(); - int getNumConnections() const; + //! Return number of connections, default is in- and outbound (total) + int getNumConnections(unsigned int flags = CONNECTIONS_ALL) const; int getNumBlocks() const; int getNumBlocksAtStartup(); + quint64 getTotalBytesRecv() const; + quint64 getTotalBytesSent() const; + double getVerificationProgress() const; QDateTime getLastBlockDate() const; - //! Return true if client connected to testnet - bool isTestNet() const; + //! Return network (main, testnet3, regtest) + QString getNetworkName() const; //! Return true if core is doing initial block download bool inInitialBlockDownload() const; //! Return true if core is importing blocks @@ -60,8 +76,8 @@ private: int cachedNumBlocks; int cachedNumBlocksOfPeers; - bool cachedReindexing; - bool cachedImporting; + bool cachedReindexing; + bool cachedImporting; int numBlocksAtStartup; @@ -74,8 +90,9 @@ signals: void numConnectionsChanged(int count); void numBlocksChanged(int count, int countOfPeers); void alertsChanged(const QString &warnings); + void bytesChanged(quint64 totalBytesIn, quint64 totalBytesOut); - //! Asynchronous message notification + //! Fired when a message should be reported to the user void message(const QString &title, const QString &message, unsigned int style); public slots: diff --git a/src/qt/coincontroldialog.cpp b/src/qt/coincontroldialog.cpp new file mode 100644 index 00000000..dc9d2afe --- /dev/null +++ b/src/qt/coincontroldialog.cpp @@ -0,0 +1,794 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "coincontroldialog.h" +#include "ui_coincontroldialog.h" + +#include "addresstablemodel.h" +#include "bitcoinunits.h" +#include "guiutil.h" +#include "init.h" +#include "optionsmodel.h" +#include "walletmodel.h" + +#include "coincontrol.h" +#include "main.h" +#include "wallet.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; +QList CoinControlDialog::payAmounts; +CCoinControl* CoinControlDialog::coinControl = new CCoinControl(); + +CoinControlDialog::CoinControlDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::CoinControlDialog), + model(0) +{ + ui->setupUi(this); + + // context menu actions + QAction *copyAddressAction = new QAction(tr("Copy address"), this); + QAction *copyLabelAction = new QAction(tr("Copy label"), this); + QAction *copyAmountAction = new QAction(tr("Copy amount"), this); + copyTransactionHashAction = new QAction(tr("Copy transaction ID"), this); // we need to enable/disable this + lockAction = new QAction(tr("Lock unspent"), this); // we need to enable/disable this + unlockAction = new QAction(tr("Unlock unspent"), this); // we need to enable/disable this + + // context menu + contextMenu = new QMenu(); + contextMenu->addAction(copyAddressAction); + contextMenu->addAction(copyLabelAction); + contextMenu->addAction(copyAmountAction); + contextMenu->addAction(copyTransactionHashAction); + contextMenu->addSeparator(); + contextMenu->addAction(lockAction); + contextMenu->addAction(unlockAction); + + // context menu signals + connect(ui->treeWidget, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(showMenu(QPoint))); + connect(copyAddressAction, SIGNAL(triggered()), this, SLOT(copyAddress())); + connect(copyLabelAction, SIGNAL(triggered()), this, SLOT(copyLabel())); + connect(copyAmountAction, SIGNAL(triggered()), this, SLOT(copyAmount())); + connect(copyTransactionHashAction, SIGNAL(triggered()), this, SLOT(copyTransactionHash())); + connect(lockAction, SIGNAL(triggered()), this, SLOT(lockCoin())); + connect(unlockAction, SIGNAL(triggered()), this, SLOT(unlockCoin())); + + // clipboard actions + QAction *clipboardQuantityAction = new QAction(tr("Copy quantity"), this); + QAction *clipboardAmountAction = new QAction(tr("Copy amount"), this); + QAction *clipboardFeeAction = new QAction(tr("Copy fee"), this); + QAction *clipboardAfterFeeAction = new QAction(tr("Copy after fee"), this); + QAction *clipboardBytesAction = new QAction(tr("Copy bytes"), this); + QAction *clipboardPriorityAction = new QAction(tr("Copy priority"), this); + QAction *clipboardLowOutputAction = new QAction(tr("Copy low output"), this); + QAction *clipboardChangeAction = new QAction(tr("Copy change"), this); + + connect(clipboardQuantityAction, SIGNAL(triggered()), this, SLOT(clipboardQuantity())); + connect(clipboardAmountAction, SIGNAL(triggered()), this, SLOT(clipboardAmount())); + connect(clipboardFeeAction, SIGNAL(triggered()), this, SLOT(clipboardFee())); + connect(clipboardAfterFeeAction, SIGNAL(triggered()), this, SLOT(clipboardAfterFee())); + connect(clipboardBytesAction, SIGNAL(triggered()), this, SLOT(clipboardBytes())); + connect(clipboardPriorityAction, SIGNAL(triggered()), this, SLOT(clipboardPriority())); + connect(clipboardLowOutputAction, SIGNAL(triggered()), this, SLOT(clipboardLowOutput())); + connect(clipboardChangeAction, SIGNAL(triggered()), this, SLOT(clipboardChange())); + + ui->labelCoinControlQuantity->addAction(clipboardQuantityAction); + ui->labelCoinControlAmount->addAction(clipboardAmountAction); + ui->labelCoinControlFee->addAction(clipboardFeeAction); + ui->labelCoinControlAfterFee->addAction(clipboardAfterFeeAction); + ui->labelCoinControlBytes->addAction(clipboardBytesAction); + ui->labelCoinControlPriority->addAction(clipboardPriorityAction); + ui->labelCoinControlLowOutput->addAction(clipboardLowOutputAction); + ui->labelCoinControlChange->addAction(clipboardChangeAction); + + // toggle tree/list mode + connect(ui->radioTreeMode, SIGNAL(toggled(bool)), this, SLOT(radioTreeMode(bool))); + connect(ui->radioListMode, SIGNAL(toggled(bool)), this, SLOT(radioListMode(bool))); + + // click on checkbox + connect(ui->treeWidget, SIGNAL(itemChanged(QTreeWidgetItem*, int)), this, SLOT(viewItemChanged(QTreeWidgetItem*, int))); + + // click on header +#if QT_VERSION < 0x050000 + ui->treeWidget->header()->setClickable(true); +#else + ui->treeWidget->header()->setSectionsClickable(true); +#endif + connect(ui->treeWidget->header(), SIGNAL(sectionClicked(int)), this, SLOT(headerSectionClicked(int))); + + // ok button + connect(ui->buttonBox, SIGNAL(clicked( QAbstractButton*)), this, SLOT(buttonBoxClicked(QAbstractButton*))); + + // (un)select all + connect(ui->pushButtonSelectAll, SIGNAL(clicked()), this, SLOT(buttonSelectAllClicked())); + + ui->treeWidget->setColumnWidth(COLUMN_CHECKBOX, 84); + ui->treeWidget->setColumnWidth(COLUMN_AMOUNT, 100); + ui->treeWidget->setColumnWidth(COLUMN_LABEL, 170); + ui->treeWidget->setColumnWidth(COLUMN_ADDRESS, 290); + ui->treeWidget->setColumnWidth(COLUMN_DATE, 110); + ui->treeWidget->setColumnWidth(COLUMN_CONFIRMATIONS, 100); + ui->treeWidget->setColumnWidth(COLUMN_PRIORITY, 100); + ui->treeWidget->setColumnHidden(COLUMN_TXHASH, true); // store transacton hash in this column, but dont show it + ui->treeWidget->setColumnHidden(COLUMN_VOUT_INDEX, true); // store vout index in this column, but dont show it + ui->treeWidget->setColumnHidden(COLUMN_AMOUNT_INT64, true); // store amount int64 in this column, but dont show it + ui->treeWidget->setColumnHidden(COLUMN_PRIORITY_INT64, true); // store priority int64 in this column, but dont show it + ui->treeWidget->setColumnHidden(COLUMN_DATE_INT64, true); // store date int64 in this column, but dont show it + + // default view is sorted by amount desc + sortView(COLUMN_AMOUNT_INT64, Qt::DescendingOrder); +} + +CoinControlDialog::~CoinControlDialog() +{ + delete ui; +} + +void CoinControlDialog::setModel(WalletModel *model) +{ + this->model = model; + + if(model && model->getOptionsModel() && model->getAddressTableModel()) + { + updateView(); + updateLabelLocked(); + CoinControlDialog::updateLabels(model, this); + } +} + +// helper function str_pad +QString CoinControlDialog::strPad(QString s, int nPadLength, QString sPadding) +{ + while (s.length() < nPadLength) + s = sPadding + s; + + return s; +} + +// ok button +void CoinControlDialog::buttonBoxClicked(QAbstractButton* button) +{ + if (ui->buttonBox->buttonRole(button) == QDialogButtonBox::AcceptRole) + done(QDialog::Accepted); // closes the dialog +} + +// (un)select all +void CoinControlDialog::buttonSelectAllClicked() +{ + Qt::CheckState state = Qt::Checked; + for (int i = 0; i < ui->treeWidget->topLevelItemCount(); i++) + { + if (ui->treeWidget->topLevelItem(i)->checkState(COLUMN_CHECKBOX) != Qt::Unchecked) + { + state = Qt::Unchecked; + break; + } + } + ui->treeWidget->setEnabled(false); + for (int i = 0; i < ui->treeWidget->topLevelItemCount(); i++) + if (ui->treeWidget->topLevelItem(i)->checkState(COLUMN_CHECKBOX) != state) + ui->treeWidget->topLevelItem(i)->setCheckState(COLUMN_CHECKBOX, state); + ui->treeWidget->setEnabled(true); + if (state == Qt::Unchecked) + coinControl->UnSelectAll(); // just to be sure + CoinControlDialog::updateLabels(model, this); +} + +// context menu +void CoinControlDialog::showMenu(const QPoint &point) +{ + QTreeWidgetItem *item = ui->treeWidget->itemAt(point); + if(item) + { + contextMenuItem = item; + + // disable some items (like Copy Transaction ID, lock, unlock) for tree roots in context menu + if (item->text(COLUMN_TXHASH).length() == 64) // transaction hash is 64 characters (this means its a child node, so its not a parent node in tree mode) + { + copyTransactionHashAction->setEnabled(true); + if (model->isLockedCoin(uint256(item->text(COLUMN_TXHASH).toStdString()), item->text(COLUMN_VOUT_INDEX).toUInt())) + { + lockAction->setEnabled(false); + unlockAction->setEnabled(true); + } + else + { + lockAction->setEnabled(true); + unlockAction->setEnabled(false); + } + } + else // this means click on parent node in tree mode -> disable all + { + copyTransactionHashAction->setEnabled(false); + lockAction->setEnabled(false); + unlockAction->setEnabled(false); + } + + // show context menu + contextMenu->exec(QCursor::pos()); + } +} + +// context menu action: copy amount +void CoinControlDialog::copyAmount() +{ + GUIUtil::setClipboard(contextMenuItem->text(COLUMN_AMOUNT)); +} + +// context menu action: copy label +void CoinControlDialog::copyLabel() +{ + if (ui->radioTreeMode->isChecked() && contextMenuItem->text(COLUMN_LABEL).length() == 0 && contextMenuItem->parent()) + GUIUtil::setClipboard(contextMenuItem->parent()->text(COLUMN_LABEL)); + else + GUIUtil::setClipboard(contextMenuItem->text(COLUMN_LABEL)); +} + +// context menu action: copy address +void CoinControlDialog::copyAddress() +{ + if (ui->radioTreeMode->isChecked() && contextMenuItem->text(COLUMN_ADDRESS).length() == 0 && contextMenuItem->parent()) + GUIUtil::setClipboard(contextMenuItem->parent()->text(COLUMN_ADDRESS)); + else + GUIUtil::setClipboard(contextMenuItem->text(COLUMN_ADDRESS)); +} + +// context menu action: copy transaction id +void CoinControlDialog::copyTransactionHash() +{ + GUIUtil::setClipboard(contextMenuItem->text(COLUMN_TXHASH)); +} + +// context menu action: lock coin +void CoinControlDialog::lockCoin() +{ + if (contextMenuItem->checkState(COLUMN_CHECKBOX) == Qt::Checked) + contextMenuItem->setCheckState(COLUMN_CHECKBOX, Qt::Unchecked); + + COutPoint outpt(uint256(contextMenuItem->text(COLUMN_TXHASH).toStdString()), contextMenuItem->text(COLUMN_VOUT_INDEX).toUInt()); + model->lockCoin(outpt); + contextMenuItem->setDisabled(true); + contextMenuItem->setIcon(COLUMN_CHECKBOX, QIcon(":/icons/lock_closed")); + updateLabelLocked(); +} + +// context menu action: unlock coin +void CoinControlDialog::unlockCoin() +{ + COutPoint outpt(uint256(contextMenuItem->text(COLUMN_TXHASH).toStdString()), contextMenuItem->text(COLUMN_VOUT_INDEX).toUInt()); + model->unlockCoin(outpt); + contextMenuItem->setDisabled(false); + contextMenuItem->setIcon(COLUMN_CHECKBOX, QIcon()); + updateLabelLocked(); +} + +// copy label "Quantity" to clipboard +void CoinControlDialog::clipboardQuantity() +{ + GUIUtil::setClipboard(ui->labelCoinControlQuantity->text()); +} + +// copy label "Amount" to clipboard +void CoinControlDialog::clipboardAmount() +{ + GUIUtil::setClipboard(ui->labelCoinControlAmount->text().left(ui->labelCoinControlAmount->text().indexOf(" "))); +} + +// copy label "Fee" to clipboard +void CoinControlDialog::clipboardFee() +{ + GUIUtil::setClipboard(ui->labelCoinControlFee->text().left(ui->labelCoinControlFee->text().indexOf(" "))); +} + +// copy label "After fee" to clipboard +void CoinControlDialog::clipboardAfterFee() +{ + GUIUtil::setClipboard(ui->labelCoinControlAfterFee->text().left(ui->labelCoinControlAfterFee->text().indexOf(" "))); +} + +// copy label "Bytes" to clipboard +void CoinControlDialog::clipboardBytes() +{ + GUIUtil::setClipboard(ui->labelCoinControlBytes->text()); +} + +// copy label "Priority" to clipboard +void CoinControlDialog::clipboardPriority() +{ + GUIUtil::setClipboard(ui->labelCoinControlPriority->text()); +} + +// copy label "Low output" to clipboard +void CoinControlDialog::clipboardLowOutput() +{ + GUIUtil::setClipboard(ui->labelCoinControlLowOutput->text()); +} + +// copy label "Change" to clipboard +void CoinControlDialog::clipboardChange() +{ + GUIUtil::setClipboard(ui->labelCoinControlChange->text().left(ui->labelCoinControlChange->text().indexOf(" "))); +} + +// treeview: sort +void CoinControlDialog::sortView(int column, Qt::SortOrder order) +{ + sortColumn = column; + sortOrder = order; + ui->treeWidget->sortItems(column, order); + ui->treeWidget->header()->setSortIndicator(getMappedColumn(sortColumn), sortOrder); +} + +// treeview: clicked on header +void CoinControlDialog::headerSectionClicked(int logicalIndex) +{ + if (logicalIndex == COLUMN_CHECKBOX) // click on most left column -> do nothing + { + ui->treeWidget->header()->setSortIndicator(getMappedColumn(sortColumn), sortOrder); + } + else + { + logicalIndex = getMappedColumn(logicalIndex, false); + + if (sortColumn == logicalIndex) + sortOrder = ((sortOrder == Qt::AscendingOrder) ? Qt::DescendingOrder : Qt::AscendingOrder); + else + { + sortColumn = logicalIndex; + sortOrder = ((sortColumn == COLUMN_LABEL || sortColumn == COLUMN_ADDRESS) ? Qt::AscendingOrder : Qt::DescendingOrder); // if label or address then default => asc, else default => desc + } + + sortView(sortColumn, sortOrder); + } +} + +// toggle tree mode +void CoinControlDialog::radioTreeMode(bool checked) +{ + if (checked && model) + updateView(); +} + +// toggle list mode +void CoinControlDialog::radioListMode(bool checked) +{ + if (checked && model) + updateView(); +} + +// checkbox clicked by user +void CoinControlDialog::viewItemChanged(QTreeWidgetItem* item, int column) +{ + if (column == COLUMN_CHECKBOX && item->text(COLUMN_TXHASH).length() == 64) // transaction hash is 64 characters (this means its a child node, so its not a parent node in tree mode) + { + COutPoint outpt(uint256(item->text(COLUMN_TXHASH).toStdString()), item->text(COLUMN_VOUT_INDEX).toUInt()); + + if (item->checkState(COLUMN_CHECKBOX) == Qt::Unchecked) + coinControl->UnSelect(outpt); + else if (item->isDisabled()) // locked (this happens if "check all" through parent node) + item->setCheckState(COLUMN_CHECKBOX, Qt::Unchecked); + else + coinControl->Select(outpt); + + // selection changed -> update labels + if (ui->treeWidget->isEnabled()) // do not update on every click for (un)select all + CoinControlDialog::updateLabels(model, this); + } + + // todo: this is a temporary qt5 fix: when clicking a parent node in tree mode, the parent node + // including all childs are partially selected. But the parent node should be fully selected + // as well as the childs. Childs should never be partially selected in the first place. + // Please remove this ugly fix, once the bug is solved upstream. +#if QT_VERSION >= 0x050000 + else if (column == COLUMN_CHECKBOX && item->childCount() > 0) + { + if (item->checkState(COLUMN_CHECKBOX) == Qt::PartiallyChecked && item->child(0)->checkState(COLUMN_CHECKBOX) == Qt::PartiallyChecked) + item->setCheckState(COLUMN_CHECKBOX, Qt::Checked); + } +#endif +} + +// return human readable label for priority number +QString CoinControlDialog::getPriorityLabel(double dPriority) +{ + if (AllowFree(dPriority)) // at least medium + { + if (AllowFree(dPriority / 1000000)) return tr("highest"); + else if (AllowFree(dPriority / 100000)) return tr("higher"); + else if (AllowFree(dPriority / 10000)) return tr("high"); + else if (AllowFree(dPriority / 1000)) return tr("medium-high"); + else return tr("medium"); + } + else + { + if (AllowFree(dPriority * 10)) return tr("low-medium"); + else if (AllowFree(dPriority * 100)) return tr("low"); + else if (AllowFree(dPriority * 1000)) return tr("lower"); + else return tr("lowest"); + } +} + +// shows count of locked unspent outputs +void CoinControlDialog::updateLabelLocked() +{ + vector vOutpts; + model->listLockedCoins(vOutpts); + if (vOutpts.size() > 0) + { + ui->labelLocked->setText(tr("(%1 locked)").arg(vOutpts.size())); + ui->labelLocked->setVisible(true); + } + else ui->labelLocked->setVisible(false); +} + +void CoinControlDialog::updateLabels(WalletModel *model, QDialog* dialog) +{ + if (!model) + return; + + // nPayAmount + qint64 nPayAmount = 0; + bool fLowOutput = false; + bool fDust = false; + CTransaction txDummy; + foreach(const qint64 &amount, CoinControlDialog::payAmounts) + { + nPayAmount += amount; + + if (amount > 0) + { + if (amount < CENT) + fLowOutput = true; + + CTxOut txout(amount, (CScript)vector(24, 0)); + txDummy.vout.push_back(txout); + if (txout.IsDust(CTransaction::nMinRelayTxFee)) + fDust = true; + } + } + + QString sPriorityLabel = tr("none"); + int64_t nAmount = 0; + int64_t nPayFee = 0; + int64_t nAfterFee = 0; + int64_t nChange = 0; + unsigned int nBytes = 0; + unsigned int nBytesInputs = 0; + double dPriority = 0; + double dPriorityInputs = 0; + unsigned int nQuantity = 0; + int nQuantityUncompressed = 0; + + vector vCoinControl; + vector vOutputs; + coinControl->ListSelected(vCoinControl); + model->getOutputs(vCoinControl, vOutputs); + + BOOST_FOREACH(const COutput& out, vOutputs) + { + // unselect already spent, very unlikely scenario, this could happen + // when selected are spent elsewhere, like rpc or another computer + uint256 txhash = out.tx->GetHash(); + COutPoint outpt(txhash, out.i); + if (model->isSpent(outpt)) + { + coinControl->UnSelect(outpt); + continue; + } + + // Quantity + nQuantity++; + + // Amount + nAmount += out.tx->vout[out.i].nValue; + + // Priority + dPriorityInputs += (double)out.tx->vout[out.i].nValue * (out.nDepth+1); + + // Bytes + CTxDestination address; + if(ExtractDestination(out.tx->vout[out.i].scriptPubKey, address)) + { + CPubKey pubkey; + CKeyID *keyid = boost::get(&address); + if (keyid && model->getPubKey(*keyid, pubkey)) + { + nBytesInputs += (pubkey.IsCompressed() ? 148 : 180); + if (!pubkey.IsCompressed()) + nQuantityUncompressed++; + } + else + nBytesInputs += 148; // in all error cases, simply assume 148 here + } + else nBytesInputs += 148; + } + + // calculation + if (nQuantity > 0) + { + // Bytes + nBytes = nBytesInputs + ((CoinControlDialog::payAmounts.size() > 0 ? CoinControlDialog::payAmounts.size() + 1 : 2) * 34) + 10; // always assume +1 output for change here + + // Priority + dPriority = dPriorityInputs / (nBytes - nBytesInputs + (nQuantityUncompressed * 29)); // 29 = 180 - 151 (uncompressed public keys are over the limit. max 151 bytes of the input are ignored for priority) + sPriorityLabel = CoinControlDialog::getPriorityLabel(dPriority); + + // Fee + int64_t nFee = nTransactionFee * (1 + (int64_t)nBytes / 1000); + + // Min Fee + int64_t nMinFee = GetMinFee(txDummy, nBytes, AllowFree(dPriority), GMF_SEND); + + nPayFee = max(nFee, nMinFee); + + if (nPayAmount > 0) + { + nChange = nAmount - nPayFee - nPayAmount; + + // if sub-cent change is required, the fee must be raised to at least CTransaction::nMinTxFee + if (nPayFee < CTransaction::nMinTxFee && nChange > 0 && nChange < CENT) + { + if (nChange < CTransaction::nMinTxFee) // change < 0.0001 => simply move all change to fees + { + nPayFee += nChange; + nChange = 0; + } + else + { + nChange = nChange + nPayFee - CTransaction::nMinTxFee; + nPayFee = CTransaction::nMinTxFee; + } + } + + // Never create dust outputs; if we would, just add the dust to the fee. + if (nChange > 0 && nChange < CENT) + { + CTxOut txout(nChange, (CScript)vector(24, 0)); + if (txout.IsDust(CTransaction::nMinRelayTxFee)) + { + nPayFee += nChange; + nChange = 0; + } + } + + if (nChange == 0) + nBytes -= 34; + } + + // after fee + nAfterFee = nAmount - nPayFee; + if (nAfterFee < 0) + nAfterFee = 0; + } + + // actually update labels + int nDisplayUnit = BitcoinUnits::BTC; + if (model && model->getOptionsModel()) + nDisplayUnit = model->getOptionsModel()->getDisplayUnit(); + + QLabel *l1 = dialog->findChild("labelCoinControlQuantity"); + QLabel *l2 = dialog->findChild("labelCoinControlAmount"); + QLabel *l3 = dialog->findChild("labelCoinControlFee"); + QLabel *l4 = dialog->findChild("labelCoinControlAfterFee"); + QLabel *l5 = dialog->findChild("labelCoinControlBytes"); + QLabel *l6 = dialog->findChild("labelCoinControlPriority"); + QLabel *l7 = dialog->findChild("labelCoinControlLowOutput"); + QLabel *l8 = dialog->findChild("labelCoinControlChange"); + + // enable/disable "low output" and "change" + dialog->findChild("labelCoinControlLowOutputText")->setEnabled(nPayAmount > 0); + dialog->findChild("labelCoinControlLowOutput") ->setEnabled(nPayAmount > 0); + dialog->findChild("labelCoinControlChangeText") ->setEnabled(nPayAmount > 0); + dialog->findChild("labelCoinControlChange") ->setEnabled(nPayAmount > 0); + + // stats + l1->setText(QString::number(nQuantity)); // Quantity + l2->setText(BitcoinUnits::formatWithUnit(nDisplayUnit, nAmount)); // Amount + l3->setText(BitcoinUnits::formatWithUnit(nDisplayUnit, nPayFee)); // Fee + l4->setText(BitcoinUnits::formatWithUnit(nDisplayUnit, nAfterFee)); // After Fee + l5->setText(((nBytes > 0) ? "~" : "") + QString::number(nBytes)); // Bytes + l6->setText(sPriorityLabel); // Priority + l7->setText((fLowOutput ? (fDust ? tr("Dust") : tr("yes")) : tr("no"))); // Low Output / Dust + l8->setText(BitcoinUnits::formatWithUnit(nDisplayUnit, nChange)); // Change + + // turn labels "red" + l5->setStyleSheet((nBytes >= 1000) ? "color:red;" : ""); // Bytes >= 1000 + l6->setStyleSheet((dPriority > 0 && !AllowFree(dPriority)) ? "color:red;" : ""); // Priority < "medium" + l7->setStyleSheet((fLowOutput) ? "color:red;" : ""); // Low Output = "yes" + l8->setStyleSheet((nChange > 0 && nChange < CENT) ? "color:red;" : ""); // Change < 0.01BTC + + // tool tips + QString toolTip1 = tr("This label turns red, if the transaction size is greater than 1000 bytes.") + "

"; + toolTip1 += tr("This means a fee of at least %1 per kB is required.").arg(BitcoinUnits::formatWithUnit(nDisplayUnit, CTransaction::nMinTxFee)) + "

"; + toolTip1 += tr("Can vary +/- 1 byte per input."); + + QString toolTip2 = tr("Transactions with higher priority are more likely to get included into a block.") + "

"; + toolTip2 += tr("This label turns red, if the priority is smaller than \"medium\".") + "

"; + toolTip2 += tr("This means a fee of at least %1 per kB is required.").arg(BitcoinUnits::formatWithUnit(nDisplayUnit, CTransaction::nMinTxFee)); + + QString toolTip3 = tr("This label turns red, if any recipient receives an amount smaller than %1.").arg(BitcoinUnits::formatWithUnit(nDisplayUnit, CENT)) + "

"; + toolTip3 += tr("This means a fee of at least %1 is required.").arg(BitcoinUnits::formatWithUnit(nDisplayUnit, CTransaction::nMinTxFee)) + "

"; + toolTip3 += tr("Amounts below 0.546 times the minimum relay fee are shown as dust."); + + QString toolTip4 = tr("This label turns red, if the change is smaller than %1.").arg(BitcoinUnits::formatWithUnit(nDisplayUnit, CENT)) + "

"; + toolTip4 += tr("This means a fee of at least %1 is required.").arg(BitcoinUnits::formatWithUnit(nDisplayUnit, CTransaction::nMinTxFee)); + + l5->setToolTip(toolTip1); + l6->setToolTip(toolTip2); + l7->setToolTip(toolTip3); + l8->setToolTip(toolTip4); + dialog->findChild("labelCoinControlBytesText") ->setToolTip(l5->toolTip()); + dialog->findChild("labelCoinControlPriorityText") ->setToolTip(l6->toolTip()); + dialog->findChild("labelCoinControlLowOutputText")->setToolTip(l7->toolTip()); + dialog->findChild("labelCoinControlChangeText") ->setToolTip(l8->toolTip()); + + // Insufficient funds + QLabel *label = dialog->findChild("labelCoinControlInsuffFunds"); + if (label) + label->setVisible(nChange < 0); +} + +void CoinControlDialog::updateView() +{ + if (!model || !model->getOptionsModel() || !model->getAddressTableModel()) + return; + + bool treeMode = ui->radioTreeMode->isChecked(); + + ui->treeWidget->clear(); + ui->treeWidget->setEnabled(false); // performance, otherwise updateLabels would be called for every checked checkbox + ui->treeWidget->setAlternatingRowColors(!treeMode); + QFlags flgCheckbox = Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsUserCheckable; + QFlags flgTristate = Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsUserCheckable | Qt::ItemIsTristate; + + int nDisplayUnit = model->getOptionsModel()->getDisplayUnit(); + + map > mapCoins; + model->listCoins(mapCoins); + + BOOST_FOREACH(PAIRTYPE(QString, vector) coins, mapCoins) + { + QTreeWidgetItem *itemWalletAddress = new QTreeWidgetItem(); + itemWalletAddress->setCheckState(COLUMN_CHECKBOX, Qt::Unchecked); + QString sWalletAddress = coins.first; + QString sWalletLabel = model->getAddressTableModel()->labelForAddress(sWalletAddress); + if (sWalletLabel.isEmpty()) + sWalletLabel = tr("(no label)"); + + if (treeMode) + { + // wallet address + ui->treeWidget->addTopLevelItem(itemWalletAddress); + + itemWalletAddress->setFlags(flgTristate); + itemWalletAddress->setCheckState(COLUMN_CHECKBOX, Qt::Unchecked); + + // label + itemWalletAddress->setText(COLUMN_LABEL, sWalletLabel); + + // address + itemWalletAddress->setText(COLUMN_ADDRESS, sWalletAddress); + } + + int64_t nSum = 0; + double dPrioritySum = 0; + int nChildren = 0; + int nInputSum = 0; + BOOST_FOREACH(const COutput& out, coins.second) + { + int nInputSize = 0; + nSum += out.tx->vout[out.i].nValue; + nChildren++; + + QTreeWidgetItem *itemOutput; + if (treeMode) itemOutput = new QTreeWidgetItem(itemWalletAddress); + else itemOutput = new QTreeWidgetItem(ui->treeWidget); + itemOutput->setFlags(flgCheckbox); + itemOutput->setCheckState(COLUMN_CHECKBOX,Qt::Unchecked); + + // address + CTxDestination outputAddress; + QString sAddress = ""; + if(ExtractDestination(out.tx->vout[out.i].scriptPubKey, outputAddress)) + { + sAddress = CBitcoinAddress(outputAddress).ToString().c_str(); + + // if listMode or change => show bitcoin address. In tree mode, address is not shown again for direct wallet address outputs + if (!treeMode || (!(sAddress == sWalletAddress))) + itemOutput->setText(COLUMN_ADDRESS, sAddress); + + CPubKey pubkey; + CKeyID *keyid = boost::get(&outputAddress); + if (keyid && model->getPubKey(*keyid, pubkey) && !pubkey.IsCompressed()) + nInputSize = 29; // 29 = 180 - 151 (public key is 180 bytes, priority free area is 151 bytes) + } + + // label + if (!(sAddress == sWalletAddress)) // change + { + // tooltip from where the change comes from + itemOutput->setToolTip(COLUMN_LABEL, tr("change from %1 (%2)").arg(sWalletLabel).arg(sWalletAddress)); + itemOutput->setText(COLUMN_LABEL, tr("(change)")); + } + else if (!treeMode) + { + QString sLabel = model->getAddressTableModel()->labelForAddress(sAddress); + if (sLabel.isEmpty()) + sLabel = tr("(no label)"); + itemOutput->setText(COLUMN_LABEL, sLabel); + } + + // amount + itemOutput->setText(COLUMN_AMOUNT, BitcoinUnits::format(nDisplayUnit, out.tx->vout[out.i].nValue)); + itemOutput->setText(COLUMN_AMOUNT_INT64, strPad(QString::number(out.tx->vout[out.i].nValue), 15, " ")); // padding so that sorting works correctly + + // date + itemOutput->setText(COLUMN_DATE, GUIUtil::dateTimeStr(out.tx->GetTxTime())); + itemOutput->setText(COLUMN_DATE_INT64, strPad(QString::number(out.tx->GetTxTime()), 20, " ")); + + // confirmations + itemOutput->setText(COLUMN_CONFIRMATIONS, strPad(QString::number(out.nDepth), 8, " ")); + + // priority + double dPriority = ((double)out.tx->vout[out.i].nValue / (nInputSize + 78)) * (out.nDepth+1); // 78 = 2 * 34 + 10 + itemOutput->setText(COLUMN_PRIORITY, CoinControlDialog::getPriorityLabel(dPriority)); + itemOutput->setText(COLUMN_PRIORITY_INT64, strPad(QString::number((int64_t)dPriority), 20, " ")); + dPrioritySum += (double)out.tx->vout[out.i].nValue * (out.nDepth+1); + nInputSum += nInputSize; + + // transaction hash + uint256 txhash = out.tx->GetHash(); + itemOutput->setText(COLUMN_TXHASH, txhash.GetHex().c_str()); + + // vout index + itemOutput->setText(COLUMN_VOUT_INDEX, QString::number(out.i)); + + // disable locked coins + if (model->isLockedCoin(txhash, out.i)) + { + COutPoint outpt(txhash, out.i); + coinControl->UnSelect(outpt); // just to be sure + itemOutput->setDisabled(true); + itemOutput->setIcon(COLUMN_CHECKBOX, QIcon(":/icons/lock_closed")); + } + + // set checkbox + if (coinControl->IsSelected(txhash, out.i)) + itemOutput->setCheckState(COLUMN_CHECKBOX, Qt::Checked); + } + + // amount + if (treeMode) + { + dPrioritySum = dPrioritySum / (nInputSum + 78); + itemWalletAddress->setText(COLUMN_CHECKBOX, "(" + QString::number(nChildren) + ")"); + itemWalletAddress->setText(COLUMN_AMOUNT, BitcoinUnits::format(nDisplayUnit, nSum)); + itemWalletAddress->setText(COLUMN_AMOUNT_INT64, strPad(QString::number(nSum), 15, " ")); + itemWalletAddress->setText(COLUMN_PRIORITY, CoinControlDialog::getPriorityLabel(dPrioritySum)); + itemWalletAddress->setText(COLUMN_PRIORITY_INT64, strPad(QString::number((int64_t)dPrioritySum), 20, " ")); + } + } + + // expand all partially selected + if (treeMode) + { + for (int i = 0; i < ui->treeWidget->topLevelItemCount(); i++) + if (ui->treeWidget->topLevelItem(i)->checkState(COLUMN_CHECKBOX) == Qt::PartiallyChecked) + ui->treeWidget->topLevelItem(i)->setExpanded(true); + } + + // sort view + sortView(sortColumn, sortOrder); + ui->treeWidget->setEnabled(true); +} diff --git a/src/qt/coincontroldialog.h b/src/qt/coincontroldialog.h new file mode 100644 index 00000000..465e2a00 --- /dev/null +++ b/src/qt/coincontroldialog.h @@ -0,0 +1,122 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef COINCONTROLDIALOG_H +#define COINCONTROLDIALOG_H + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace Ui { + class CoinControlDialog; +} +class WalletModel; +class CCoinControl; + +class CoinControlDialog : public QDialog +{ + Q_OBJECT + +public: + explicit CoinControlDialog(QWidget *parent = 0); + ~CoinControlDialog(); + + void setModel(WalletModel *model); + + // static because also called from sendcoinsdialog + static void updateLabels(WalletModel*, QDialog*); + static QString getPriorityLabel(double); + + static QList payAmounts; + static CCoinControl *coinControl; + +private: + Ui::CoinControlDialog *ui; + WalletModel *model; + int sortColumn; + Qt::SortOrder sortOrder; + + QMenu *contextMenu; + QTreeWidgetItem *contextMenuItem; + QAction *copyTransactionHashAction; + QAction *lockAction; + QAction *unlockAction; + + QString strPad(QString, int, QString); + void sortView(int, Qt::SortOrder); + void updateView(); + + enum + { + COLUMN_CHECKBOX, + COLUMN_AMOUNT, + COLUMN_LABEL, + COLUMN_ADDRESS, + COLUMN_DATE, + COLUMN_CONFIRMATIONS, + COLUMN_PRIORITY, + COLUMN_TXHASH, + COLUMN_VOUT_INDEX, + COLUMN_AMOUNT_INT64, + COLUMN_PRIORITY_INT64, + COLUMN_DATE_INT64 + }; + + // some columns have a hidden column containing the value used for sorting + int getMappedColumn(int column, bool fVisibleColumn = true) + { + if (fVisibleColumn) + { + if (column == COLUMN_AMOUNT_INT64) + return COLUMN_AMOUNT; + else if (column == COLUMN_PRIORITY_INT64) + return COLUMN_PRIORITY; + else if (column == COLUMN_DATE_INT64) + return COLUMN_DATE; + } + else + { + if (column == COLUMN_AMOUNT) + return COLUMN_AMOUNT_INT64; + else if (column == COLUMN_PRIORITY) + return COLUMN_PRIORITY_INT64; + else if (column == COLUMN_DATE) + return COLUMN_DATE_INT64; + } + + return column; + } + +private slots: + void showMenu(const QPoint &); + void copyAmount(); + void copyLabel(); + void copyAddress(); + void copyTransactionHash(); + void lockCoin(); + void unlockCoin(); + void clipboardQuantity(); + void clipboardAmount(); + void clipboardFee(); + void clipboardAfterFee(); + void clipboardBytes(); + void clipboardPriority(); + void clipboardLowOutput(); + void clipboardChange(); + void radioTreeMode(bool); + void radioListMode(bool); + void viewItemChanged(QTreeWidgetItem*, int); + void headerSectionClicked(int); + void buttonBoxClicked(QAbstractButton*); + void buttonSelectAllClicked(); + void updateLabelLocked(); +}; + +#endif // COINCONTROLDIALOG_H diff --git a/src/qt/coincontroltreewidget.cpp b/src/qt/coincontroltreewidget.cpp new file mode 100644 index 00000000..907b5caa --- /dev/null +++ b/src/qt/coincontroltreewidget.cpp @@ -0,0 +1,32 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "coincontroltreewidget.h" +#include "coincontroldialog.h" + +CoinControlTreeWidget::CoinControlTreeWidget(QWidget *parent) : + QTreeWidget(parent) +{ + +} + +void CoinControlTreeWidget::keyPressEvent(QKeyEvent *event) +{ + if (event->key() == Qt::Key_Space) // press spacebar -> select checkbox + { + event->ignore(); + int COLUMN_CHECKBOX = 0; + this->currentItem()->setCheckState(COLUMN_CHECKBOX, ((this->currentItem()->checkState(COLUMN_CHECKBOX) == Qt::Checked) ? Qt::Unchecked : Qt::Checked)); + } + else if (event->key() == Qt::Key_Escape) // press esc -> close dialog + { + event->ignore(); + CoinControlDialog *coinControlDialog = (CoinControlDialog*)this->parentWidget(); + coinControlDialog->done(QDialog::Accepted); + } + else + { + this->QTreeWidget::keyPressEvent(event); + } +} \ No newline at end of file diff --git a/src/qt/coincontroltreewidget.h b/src/qt/coincontroltreewidget.h new file mode 100644 index 00000000..a2cd34eb --- /dev/null +++ b/src/qt/coincontroltreewidget.h @@ -0,0 +1,22 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef COINCONTROLTREEWIDGET_H +#define COINCONTROLTREEWIDGET_H + +#include +#include + +class CoinControlTreeWidget : public QTreeWidget +{ + Q_OBJECT + +public: + explicit CoinControlTreeWidget(QWidget *parent = 0); + +protected: + virtual void keyPressEvent(QKeyEvent *event); +}; + +#endif // COINCONTROLTREEWIDGET_H \ No newline at end of file diff --git a/src/qt/csvmodelwriter.cpp b/src/qt/csvmodelwriter.cpp index 8a50bbab..ac8c6b41 100644 --- a/src/qt/csvmodelwriter.cpp +++ b/src/qt/csvmodelwriter.cpp @@ -1,3 +1,7 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #include "csvmodelwriter.h" #include @@ -85,4 +89,3 @@ bool CSVModelWriter::write() return file.error() == QFile::NoError; } - diff --git a/src/qt/csvmodelwriter.h b/src/qt/csvmodelwriter.h index c4504ee9..29de251e 100644 --- a/src/qt/csvmodelwriter.h +++ b/src/qt/csvmodelwriter.h @@ -1,8 +1,12 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef CSVMODELWRITER_H #define CSVMODELWRITER_H -#include #include +#include QT_BEGIN_NAMESPACE class QAbstractItemModel; diff --git a/src/qt/editaddressdialog.cpp b/src/qt/editaddressdialog.cpp index 9b6b2e46..de3702d8 100644 --- a/src/qt/editaddressdialog.cpp +++ b/src/qt/editaddressdialog.cpp @@ -1,3 +1,7 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #include "editaddressdialog.h" #include "ui_editaddressdialog.h" @@ -9,7 +13,10 @@ EditAddressDialog::EditAddressDialog(Mode mode, QWidget *parent) : QDialog(parent), - ui(new Ui::EditAddressDialog), mapper(0), mode(mode), model(0) + ui(new Ui::EditAddressDialog), + mapper(0), + mode(mode), + model(0) { ui->setupUi(this); diff --git a/src/qt/editaddressdialog.h b/src/qt/editaddressdialog.h index 44e5023d..6910c667 100644 --- a/src/qt/editaddressdialog.h +++ b/src/qt/editaddressdialog.h @@ -1,12 +1,17 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef EDITADDRESSDIALOG_H #define EDITADDRESSDIALOG_H #include +class AddressTableModel; + namespace Ui { class EditAddressDialog; } -class AddressTableModel; QT_BEGIN_NAMESPACE class QDataWidgetMapper; @@ -26,7 +31,7 @@ public: EditSendingAddress }; - explicit EditAddressDialog(Mode mode, QWidget *parent = 0); + explicit EditAddressDialog(Mode mode, QWidget *parent); ~EditAddressDialog(); void setModel(AddressTableModel *model); diff --git a/src/qt/forms/aboutdialog.ui b/src/qt/forms/aboutdialog.ui index 9a23393c..3ad05897 100644 --- a/src/qt/forms/aboutdialog.ui +++ b/src/qt/forms/aboutdialog.ui @@ -11,7 +11,7 @@ - About Myriadcoin + About Bitcoin Core @@ -50,7 +50,7 @@ IBeamCursor - <b>Myriadcoin</b> version + <b>Myriadcoin Core</b> version Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse @@ -91,23 +91,7 @@ IBeamCursor - Copyright &copy; 2009-YYYY The Bitcoin developers - - - Qt::RichText - - - Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse - - - - - - - IBeamCursor - - - Copyright &copy; 2013 The Myriadcoin developers + Copyright &copy; 2009-YYYY The Myriadcoin Core developers Qt::RichText @@ -176,12 +160,12 @@ This product includes software developed by the OpenSSL Project for use in the O accept() - 360 - 308 + 20 + 20 - 157 - 274 + 20 + 20 @@ -192,12 +176,12 @@ This product includes software developed by the OpenSSL Project for use in the O reject() - 428 - 308 + 20 + 20 - 286 - 274 + 20 + 20 diff --git a/src/qt/forms/addressbookpage.ui b/src/qt/forms/addressbookpage.ui index f21fd132..f40c4460 100644 --- a/src/qt/forms/addressbookpage.ui +++ b/src/qt/forms/addressbookpage.ui @@ -10,9 +10,6 @@ 380 - - Address Book - @@ -60,7 +57,7 @@ Create a new address - &New Address + &New @@ -74,7 +71,7 @@ Copy the currently selected address to the system clipboard - &Copy Address + &Copy @@ -82,45 +79,6 @@ - - - - Show &QR Code - - - - :/icons/qrcode:/icons/qrcode - - - - - - - Sign a message to prove you own a Myriadcoin address - - - Sign &Message - - - - :/icons/edit:/icons/edit - - - - - - - Verify a message to ensure it was signed with a specified Myriadcoin address - - - &Verify Message - - - - :/icons/transaction_0:/icons/transaction_0 - - - @@ -163,15 +121,15 @@ - + - + 0 0 - - QDialogButtonBox::Ok + + C&lose diff --git a/src/qt/forms/askpassphrasedialog.ui b/src/qt/forms/askpassphrasedialog.ui index 25169042..bc492145 100644 --- a/src/qt/forms/askpassphrasedialog.ui +++ b/src/qt/forms/askpassphrasedialog.ui @@ -122,12 +122,12 @@ accept() - 248 - 254 + 20 + 20 - 157 - 274 + 20 + 20 @@ -138,12 +138,12 @@ reject() - 316 - 260 + 20 + 20 - 286 - 274 + 20 + 20 diff --git a/src/qt/forms/coincontroldialog.ui b/src/qt/forms/coincontroldialog.ui new file mode 100644 index 00000000..cd1c0ffa --- /dev/null +++ b/src/qt/forms/coincontroldialog.ui @@ -0,0 +1,531 @@ + + + CoinControlDialog + + + + 0 + 0 + 1000 + 500 + + + + Coin Control Address Selection + + + + + + 0 + + + 10 + + + + + 10 + + + 10 + + + 6 + + + 6 + + + + + + 75 + true + + + + Quantity: + + + + + + + IBeamCursor + + + Qt::ActionsContextMenu + + + 0 + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + + 75 + true + + + + Bytes: + + + + + + + IBeamCursor + + + Qt::ActionsContextMenu + + + 0 + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + + + 10 + + + 10 + + + 6 + + + 6 + + + + + + 75 + true + + + + Amount: + + + + + + + IBeamCursor + + + Qt::ActionsContextMenu + + + 0.00 BTC + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + + 75 + true + + + + Priority: + + + + + + + IBeamCursor + + + Qt::ActionsContextMenu + + + medium + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + + + 10 + + + 10 + + + 6 + + + 6 + + + + + + 75 + true + + + + Fee: + + + + + + + IBeamCursor + + + Qt::ActionsContextMenu + + + 0.00 BTC + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + false + + + + 75 + true + + + + Low Output: + + + + + + + false + + + IBeamCursor + + + Qt::ActionsContextMenu + + + no + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + + + 10 + + + 10 + + + 6 + + + 6 + + + + + + 75 + true + + + + After Fee: + + + + + + + IBeamCursor + + + Qt::ActionsContextMenu + + + 0.00 BTC + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + false + + + + 75 + true + + + + Change: + + + + + + + false + + + IBeamCursor + + + Qt::ActionsContextMenu + + + 0.00 BTC + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + + + + + + 0 + 40 + + + + QFrame::StyledPanel + + + QFrame::Sunken + + + + + + 14 + + + + + + 0 + 0 + + + + (un)select all + + + + + + + + 0 + 0 + + + + Tree mode + + + true + + + + + + + + 0 + 0 + + + + List mode + + + + + + + (1 locked) + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + Qt::CustomContextMenu + + + false + + + 12 + + + true + + + false + + + + + + + + + Amount + + + + + Label + + + + + Address + + + + + Date + + + + + Confirmations + + + Confirmed + + + + + Priority + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 0 + + + + Qt::Horizontal + + + QDialogButtonBox::Ok + + + + + + + + CoinControlTreeWidget + QTreeWidget +
coincontroltreewidget.h
+
+
+ + +
diff --git a/src/qt/forms/editaddressdialog.ui b/src/qt/forms/editaddressdialog.ui index b4a4c1b1..c1aea363 100644 --- a/src/qt/forms/editaddressdialog.ui +++ b/src/qt/forms/editaddressdialog.ui @@ -32,7 +32,7 @@ - The label associated with this address book entry + The label associated with this address list entry @@ -47,9 +47,9 @@
- + - The address associated with this address book entry. This can only be modified for sending addresses. + The address associated with this address list entry. This can only be modified for sending addresses. @@ -67,6 +67,13 @@
+ + + QValidatedLineEdit + QLineEdit +
qvalidatedlineedit.h
+
+
@@ -76,12 +83,12 @@ accept() - 248 - 254 + 20 + 20 - 157 - 274 + 20 + 20 @@ -92,12 +99,12 @@ reject() - 316 - 260 + 20 + 20 - 286 - 274 + 20 + 20 diff --git a/src/qt/forms/helpmessagedialog.ui b/src/qt/forms/helpmessagedialog.ui new file mode 100644 index 00000000..3dcc08f1 --- /dev/null +++ b/src/qt/forms/helpmessagedialog.ui @@ -0,0 +1,128 @@ + + + HelpMessageDialog + + + + 0 + 0 + 800 + 400 + + + + + 10 + + + + Myriadcoin Core - Command-line options + + + + + + + 0 + 0 + + + + :/images/about + + + + + + + + + Qt::ScrollBarAlwaysOn + + + true + + + + + 0 + 0 + 659 + 348 + + + + + + + + Terminal + + + + IBeamCursor + + + Qt::PlainText + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Ok + + + + + + + + + + + + + okButton + accepted() + HelpMessageDialog + accept() + + + 20 + 20 + + + 20 + 20 + + + + + okButton + rejected() + HelpMessageDialog + reject() + + + 20 + 20 + + + 20 + 20 + + + + + diff --git a/src/qt/forms/intro.ui b/src/qt/forms/intro.ui index c613f909..9f04d09d 100644 --- a/src/qt/forms/intro.ui +++ b/src/qt/forms/intro.ui @@ -20,7 +20,7 @@ QLabel { font-style:italic; } - Welcome to Myriadcoin-Qt. + Welcome to Myriadcoin Core. true @@ -46,7 +46,7 @@ - As this is the first time the program is launched, you can choose where Myriadcoin-Qt will store its data. + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. true @@ -56,7 +56,7 @@ - Myriadcoin-Qt will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. true @@ -237,12 +237,12 @@ accept() - 248 - 254 + 20 + 20 - 157 - 274 + 20 + 20 @@ -253,12 +253,12 @@ reject() - 316 - 260 + 20 + 20 - 286 - 274 + 20 + 20 diff --git a/src/qt/forms/openuridialog.ui b/src/qt/forms/openuridialog.ui new file mode 100644 index 00000000..cd09ed02 --- /dev/null +++ b/src/qt/forms/openuridialog.ui @@ -0,0 +1,116 @@ + + + OpenURIDialog + + + + 0 + 0 + 564 + 109 + + + + Open URI + + + + + + Open payment request from URI or file + + + + + + + + + URI: + + + + + + + + + + + Select payment request file + + + … + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + QValidatedLineEdit + QLineEdit +
qvalidatedlineedit.h
+
+
+ + + + buttonBox + accepted() + OpenURIDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + OpenURIDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + +
diff --git a/src/qt/forms/optionsdialog.ui b/src/qt/forms/optionsdialog.ui index 133e0db7..b47b91d5 100644 --- a/src/qt/forms/optionsdialog.ui +++ b/src/qt/forms/optionsdialog.ui @@ -6,8 +6,8 @@ 0 0 - 540 - 380 + 560 + 400
@@ -19,9 +19,6 @@ - - QTabWidget::North - 0 @@ -30,6 +27,116 @@ &Main + + + + Automatically start Myriadcoin after logging in to the system. + + + &Start Myriadcoin on system login + + + + + + + + + Size of &database cache + + + Qt::PlainText + + + databaseCache + + + + + + + + + + MB + + + Qt::PlainText + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Number of script &verification threads + + + Qt::PlainText + + + threadsScriptVerif + + + + + + + (0 = auto, <0 = leave that many cores free) + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + W&allet + + @@ -44,7 +151,7 @@ - + @@ -62,7 +169,7 @@ - + Qt::Horizontal @@ -77,17 +184,7 @@ - - - Automatically start Myriadcoin after logging in to the system. - - - &Start Myriadcoin on system login - - - - - + Qt::Vertical @@ -100,34 +197,33 @@ - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Reset all client options to default. - - - &Reset Options - - - false - - - - + + + Expert + + + + + + Whether to show coin control features or not. + + + Enable coin &control features + + + + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + &Spend unconfirmed change + + + + + @@ -149,15 +245,15 @@ - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the Myriadcoin network through a SOCKS proxy. - &Connect through SOCKS proxy: + &Connect through SOCKS proxy (default proxy): - + @@ -173,6 +269,12 @@ + + + 140 + 0 + + 140 @@ -180,7 +282,7 @@ - IP address of the proxy (e.g. 127.0.0.1) + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) @@ -199,6 +301,12 @@ + + + 55 + 0 + + 55 @@ -231,7 +339,7 @@ - + Qt::Horizontal @@ -363,6 +471,30 @@
+ + + + + + 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 |. + + + Third party transaction URLs + + + thirdPartyTxUrls + + + + + + + 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 |. + + + + + @@ -380,8 +512,67 @@
+ + + + + + + + + Active command-line options that override above options: + + + Qt::PlainText + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + Qt::PlainText + + + true + + + + + + + + + + Reset all client options to default. + + + &Reset Options + + + false + + + @@ -397,6 +588,12 @@ + + + 200 + 0 + + 75 @@ -444,16 +641,6 @@ - - - - &Apply - - - false - - - @@ -461,19 +648,20 @@ BitcoinAmountField - QSpinBox + QLineEdit
bitcoinamountfield.h
-
- - QValueComboBox - QComboBox -
qvaluecombobox.h
+ 1
QValidatedLineEdit QLineEdit
qvalidatedlineedit.h
+ + QValueComboBox + QComboBox +
qvaluecombobox.h
+
diff --git a/src/qt/forms/overviewpage.ui b/src/qt/forms/overviewpage.ui index fa5428cb..8490c650 100644 --- a/src/qt/forms/overviewpage.ui +++ b/src/qt/forms/overviewpage.ui @@ -90,6 +90,8 @@ + + QFormLayout::AllNonFixedFieldsGrow @@ -103,7 +105,7 @@ - Confirmed: + Available: @@ -124,6 +126,9 @@ 0 BTC + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse @@ -132,7 +137,7 @@ - Unconfirmed: + Pending: @@ -153,6 +158,9 @@ 0 BTC + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse @@ -179,6 +187,9 @@ 0 BTC + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse @@ -208,6 +219,9 @@ 0 BTC + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse @@ -221,6 +235,21 @@ + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + diff --git a/src/qt/forms/qrcodedialog.ui b/src/qt/forms/qrcodedialog.ui deleted file mode 100644 index 52e9db37..00000000 --- a/src/qt/forms/qrcodedialog.ui +++ /dev/null @@ -1,212 +0,0 @@ - - - QRCodeDialog - - - - 0 - 0 - 340 - 530 - - - - QR Code Dialog - - - - - - - 0 - 0 - - - - - 300 - 300 - - - - Qt::PlainText - - - Qt::AlignCenter - - - true - - - - - - - - 0 - 0 - - - - - 0 - 50 - - - - true - - - Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse - - - - - - - - - - true - - - Request Payment - - - - - - - QFormLayout::AllNonFixedFieldsGrow - - - - - Label: - - - Qt::PlainText - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - lnLabel - - - - - - - - - - Message: - - - Qt::PlainText - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - lnMessage - - - - - - - - - - - 0 - 0 - - - - Amount: - - - Qt::PlainText - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - lnReqAmount - - - - - - - false - - - - 80 - 0 - - - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - &Save As... - - - - - - - - - - - - - BitcoinAmountField - QSpinBox -
bitcoinamountfield.h
-
-
- - - - chkReqPayment - clicked(bool) - lnReqAmount - setEnabled(bool) - - - 92 - 285 - - - 98 - 311 - - - - -
diff --git a/src/qt/forms/receivecoinsdialog.ui b/src/qt/forms/receivecoinsdialog.ui new file mode 100644 index 00000000..122309d3 --- /dev/null +++ b/src/qt/forms/receivecoinsdialog.ui @@ -0,0 +1,334 @@ + + + ReceiveCoinsDialog + + + + 0 + 0 + 776 + 364 + + + + + + + + 0 + 0 + + + + QFrame::StyledPanel + + + QFrame::Sunken + + + + + + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + R&euse an existing receiving address (not recommended) + + + + + + + + + + + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + &Message: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + reqMessage + + + + + + + An optional label to associate with the new receiving address. + + + + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + + + + An optional label to associate with the new receiving address. + + + &Label: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + reqLabel + + + + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + &Amount: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + reqAmount + + + + + + + + 80 + 0 + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + + + + + + + 150 + 0 + + + + &Request payment + + + + :/icons/receiving_addresses:/icons/receiving_addresses + + + + + + + + 0 + 0 + + + + Clear all fields of the form. + + + Clear + + + + :/icons/remove:/icons/remove + + + 300 + + + false + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 10 + + + + + + + + + 0 + 0 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + 75 + true + + + + Requested payments history + + + + + + + Qt::CustomContextMenu + + + false + + + true + + + + + + + + + Show the selected request (does the same as double clicking an entry) + + + Show + + + false + + + + :/icons/edit:/icons/edit + + + + + + + Remove the selected entries from the list + + + Remove + + + false + + + + :/icons/remove:/icons/remove + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + BitcoinAmountField + QLineEdit +
bitcoinamountfield.h
+
+
+ + reqLabel + reqAmount + reqMessage + reuseAddress + receiveButton + clearButton + recentRequestsView + showRequestButton + removeRequestButton + + + + + +
diff --git a/src/qt/forms/receiverequestdialog.ui b/src/qt/forms/receiverequestdialog.ui new file mode 100644 index 00000000..85928c9b --- /dev/null +++ b/src/qt/forms/receiverequestdialog.ui @@ -0,0 +1,159 @@ + + + ReceiveRequestDialog + + + + 0 + 0 + 487 + 597 + + + + + + + + 0 + 0 + + + + + 300 + 300 + + + + QR Code + + + Qt::PlainText + + + Qt::AlignCenter + + + true + + + + + + + + 0 + 0 + + + + + 0 + 50 + + + + QFrame::NoFrame + + + QFrame::Plain + + + true + + + Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + + + Copy &URI + + + + + + + Copy &Address + + + + + + + &Save Image... + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + QDialogButtonBox::Close + + + + + + + + + + QRImageWidget + QLabel +
receiverequestdialog.h
+
+
+ + + + buttonBox + rejected() + ReceiveRequestDialog + reject() + + + 452 + 573 + + + 243 + 298 + + + + + buttonBox + accepted() + ReceiveRequestDialog + accept() + + + 452 + 573 + + + 243 + 298 + + + + +
diff --git a/src/qt/forms/rpcconsole.ui b/src/qt/forms/rpcconsole.ui index 0759b1f3..0c19fb96 100644 --- a/src/qt/forms/rpcconsole.ui +++ b/src/qt/forms/rpcconsole.ui @@ -11,7 +11,7 @@
- Myriadcoin - Debug window + Debug window @@ -36,7 +36,7 @@ - Myriadcoin Core + General @@ -172,14 +172,14 @@ - + - Number of connections + Name - + IBeamCursor @@ -195,19 +195,25 @@ - + - On testnet + Number of connections - - - false + + + IBeamCursor - + N/A + + + Qt::PlainText + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse @@ -333,32 +339,6 @@ - - - - 75 - true - - - - Command-line options - - - - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - - - &Show - - - false - - - - Qt::Vertical @@ -445,10 +425,271 @@ + + + &Network Traffic + + + + + + + + + 0 + 0 + + + + + + + + + + 1 + + + 288 + + + 12 + + + 6 + + + Qt::Horizontal + + + + + + + + 100 + 0 + + + + Qt::AlignCenter + + + + + + + &Clear + + + + + + + + + + + + + Totals + + + + + + + + + 0 + 0 + + + + + 10 + 0 + + + + + + + + + 0 + 255 + 0 + + + + + + + + + 0 + 255 + 0 + + + + + + + + + 0 + 255 + 0 + + + + + + + + Qt::Horizontal + + + + + + + In: + + + + + + + + 50 + 0 + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + + + 0 + 0 + + + + + 10 + 0 + + + + + + + + + 255 + 0 + 0 + + + + + + + + + 255 + 0 + 0 + + + + + + + + + 255 + 0 + 0 + + + + + + + + Qt::Horizontal + + + + + + + Out: + + + + + + + + 50 + 0 + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + Qt::Vertical + + + + 20 + 407 + + + + + + + + + + + + + + TrafficGraphWidget + QWidget +
trafficgraphwidget.h
+ 1 + + clear() + +
+
diff --git a/src/qt/forms/sendcoinsdialog.ui b/src/qt/forms/sendcoinsdialog.ui index 6e17565a..4cb1670c 100644 --- a/src/qt/forms/sendcoinsdialog.ui +++ b/src/qt/forms/sendcoinsdialog.ui @@ -6,14 +6,603 @@ 0 0 - 686 - 217 + 850 + 400 Send Coins - + + + 8 + + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + QFrame::StyledPanel + + + QFrame::Sunken + + + + 0 + + + 0 + + + 0 + + + 0 + + + 6 + + + + + 0 + + + 10 + + + 10 + + + + + 15 + + + + + + 0 + 0 + + + + + 75 + true + + + + font-weight:bold; + + + Coin Control Features + + + + + + + + + 8 + + + 10 + + + + + + + + Inputs... + + + + + + + automatically selected + + + 5 + + + + + + + + 75 + true + + + + color:red;font-weight:bold; + + + Insufficient funds! + + + 5 + + + + + + + Qt::Horizontal + + + + 40 + 1 + + + + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 20 + + + 0 + + + 10 + + + + + 10 + + + 14 + + + 10 + + + 4 + + + 6 + + + + + + 75 + true + + + + Quantity: + + + 0 + + + + + + + IBeamCursor + + + Qt::ActionsContextMenu + + + 0 + + + 0 + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + + 75 + true + + + + Bytes: + + + + + + + IBeamCursor + + + Qt::ActionsContextMenu + + + 0 + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + + + 10 + + + 14 + + + 6 + + + 4 + + + 6 + + + + + + 75 + true + + + + Amount: + + + 0 + + + + + + + IBeamCursor + + + Qt::ActionsContextMenu + + + 0.00 BTC + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + + 75 + true + + + + Priority: + + + + + + + IBeamCursor + + + Qt::ActionsContextMenu + + + medium + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + + + 10 + + + 14 + + + 6 + + + 4 + + + 6 + + + + + + 75 + true + + + + Fee: + + + 0 + + + + + + + IBeamCursor + + + Qt::ActionsContextMenu + + + 0.00 BTC + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + + 75 + true + + + + Low Output: + + + + + + + IBeamCursor + + + Qt::ActionsContextMenu + + + no + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + + + 10 + + + 14 + + + 6 + + + 4 + + + 6 + + + + + + 75 + true + + + + After Fee: + + + 0 + + + + + + + IBeamCursor + + + Qt::ActionsContextMenu + + + 0.00 BTC + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + + 75 + true + + + + Change: + + + + + + + IBeamCursor + + + Qt::ActionsContextMenu + + + 0.00 BTC + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + + + + + + + + 12 + + + QLayout::SetDefaultConstraint + + + 5 + + + 5 + + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + Custom change address + + + + + + + false + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + + + 3 + + + + + + + + + Qt::Vertical + + + + 800 + 1 + + + + + + + + + @@ -24,12 +613,21 @@ 0 0 - 666 - 165 + 830 + 178 - - + + + 0 + + + 0 + + + 0 + + 0 @@ -58,89 +656,6 @@ - - - - Send to multiple recipients at once - - - Add &Recipient - - - - :/icons/add:/icons/add - - - false - - - - - - - - 0 - 0 - - - - Remove all transaction fields - - - Clear &All - - - - :/icons/remove:/icons/remove - - - 300 - - - false - - - - - - - 3 - - - - - Balance: - - - - - - - IBeamCursor - - - 123.456 BTC - - - Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - @@ -164,10 +679,112 @@ + + + + + 0 + 0 + + + + Clear all fields of the form. + + + Clear &All + + + + :/icons/remove:/icons/remove + + + 300 + + + false + + + + + + + Send to multiple recipients at once + + + Add &Recipient + + + + :/icons/add:/icons/add + + + false + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + 3 + + + + + + 0 + 0 + + + + Balance: + + + + + + + + 0 + 0 + + + + IBeamCursor + + + 123.456 BTC + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + + QValidatedLineEdit + QLineEdit +
qvalidatedlineedit.h
+
+
diff --git a/src/qt/forms/sendcoinsentry.ui b/src/qt/forms/sendcoinsentry.ui index 28553c55..395e33f4 100644 --- a/src/qt/forms/sendcoinsentry.ui +++ b/src/qt/forms/sendcoinsentry.ui @@ -1,157 +1,1234 @@ SendCoinsEntry - + 0 0 729 - 136 + 150 - - Form + + Qt::TabFocus - - QFrame::StyledPanel + + false - - QFrame::Sunken - - - - 12 + + + This is a normal payment. - - - - A&mount: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - payAmount - - - - - - - Pay &To: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - payTo - - - - - - - - - - &Label: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - addAsLabel - - - - - - - 0 - - - - - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - 34 - - - - - - - Choose address from address book - - - - - - - :/icons/address-book:/icons/address-book - - - Alt+A - - - - - - - Paste address from clipboard - - - - - - - :/icons/editpaste:/icons/editpaste - - - Alt+P - - - - - - - Remove this recipient - - - - - - - :/icons/remove:/icons/remove - - - - - - - - - Enter a label for this address to add it to your address book - - - - + + QFrame::StyledPanel + + + QFrame::Sunken + + + + 12 + + + + + Pay &To: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + payTo + + + + + + + 0 + + + + + The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + + + + Choose previously used address + + + + + + + :/icons/address-book:/icons/address-book + + + Alt+A + + + + + + + Paste address from clipboard + + + + + + + :/icons/editpaste:/icons/editpaste + + + Alt+P + + + + + + + Remove this entry + + + + + + + :/icons/remove:/icons/remove + + + + + + + + + &Label: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + addAsLabel + + + + + + + Enter a label for this address to add it to the list of used addresses + + + + + + + A&mount: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + payAmount + + + + + + + + + + Message: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + Qt::PlainText + + + + + + + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 127 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 191 + + + + + + + 127 + 127 + 63 + + + + + + + 170 + 170 + 84 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 191 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 127 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 191 + + + + + + + 127 + 127 + 63 + + + + + + + 170 + 170 + 84 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 191 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 127 + 127 + 63 + + + + + + + 255 + 255 + 127 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 191 + + + + + + + 127 + 127 + 63 + + + + + + + 170 + 170 + 84 + + + + + + + 127 + 127 + 63 + + + + + + + 255 + 255 + 255 + + + + + + + 127 + 127 + 63 + + + + + + + 255 + 255 + 127 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 127 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + This is an unverified payment request. + + + true + + + QFrame::StyledPanel + + + QFrame::Sunken + + + + 12 + + + + + Pay To: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 0 + + + + + + + + Remove this entry + + + + + + + :/icons/remove:/icons/remove + + + + + + + + + Memo: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Qt::PlainText + + + + + + + A&mount: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + payAmount_is + + + + + + + false + + + + + + + + + + + + + 0 + 0 + 0 + + + + + + + 140 + 232 + 119 + + + + + + + 230 + 255 + 224 + + + + + + + 185 + 243 + 171 + + + + + + + 70 + 116 + 59 + + + + + + + 93 + 155 + 79 + + + + + + + 0 + 0 + 0 + + + + + + + 155 + 255 + 147 + + + + + + + 0 + 0 + 0 + + + + + + + 119 + 255 + 233 + + + + + + + 140 + 232 + 119 + + + + + + + 0 + 0 + 0 + + + + + + + 197 + 243 + 187 + + + + + + + 125 + 194 + 122 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + 140 + 232 + 119 + + + + + + + 230 + 255 + 224 + + + + + + + 185 + 243 + 171 + + + + + + + 70 + 116 + 59 + + + + + + + 93 + 155 + 79 + + + + + + + 0 + 0 + 0 + + + + + + + 155 + 255 + 147 + + + + + + + 0 + 0 + 0 + + + + + + + 119 + 255 + 233 + + + + + + + 140 + 232 + 119 + + + + + + + 0 + 0 + 0 + + + + + + + 197 + 243 + 187 + + + + + + + 125 + 194 + 122 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 70 + 116 + 59 + + + + + + + 140 + 232 + 119 + + + + + + + 230 + 255 + 224 + + + + + + + 185 + 243 + 171 + + + + + + + 70 + 116 + 59 + + + + + + + 93 + 155 + 79 + + + + + + + 70 + 116 + 59 + + + + + + + 155 + 255 + 147 + + + + + + + 70 + 116 + 59 + + + + + + + 140 + 232 + 119 + + + + + + + 140 + 232 + 119 + + + + + + + 0 + 0 + 0 + + + + + + + 140 + 232 + 119 + + + + + + + 125 + 194 + 122 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + This is a verified payment request. + + + true + + + QFrame::StyledPanel + + + QFrame::Sunken + + + + 12 + + + + + Pay To: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 0 + + + + + Qt::PlainText + + + + + + + Remove this entry + + + + + + + :/icons/remove:/icons/remove + + + + + + + + + Memo: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Qt::PlainText + + + + + + + A&mount: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + payAmount_s + + + + + + + false + + + + + - - BitcoinAmountField - QLineEdit -
bitcoinamountfield.h
- 1 -
QValidatedLineEdit QLineEdit
qvalidatedlineedit.h
+ + BitcoinAmountField + QLineEdit +
bitcoinamountfield.h
+
+ + payTo + addressBookButton + pasteButton + deleteButton + addAsLabel + payAmount + payAmount_is + deleteButton_is + payAmount_s + deleteButton_s + diff --git a/src/qt/forms/signverifymessagedialog.ui b/src/qt/forms/signverifymessagedialog.ui index a55fc561..489b3533 100644 --- a/src/qt/forms/signverifymessagedialog.ui +++ b/src/qt/forms/signverifymessagedialog.ui @@ -19,9 +19,6 @@ - - 0 - &Sign Message @@ -50,15 +47,12 @@ The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - 34 - - Choose an address from the address book + Choose previously used address @@ -263,15 +257,12 @@ The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - 34 - - Choose an address from the address book + Choose previously used address diff --git a/src/qt/forms/transactiondescdialog.ui b/src/qt/forms/transactiondescdialog.ui index b38dffcc..5ae1e128 100644 --- a/src/qt/forms/transactiondescdialog.ui +++ b/src/qt/forms/transactiondescdialog.ui @@ -45,12 +45,12 @@ accept() - 248 - 254 + 20 + 20 - 157 - 274 + 20 + 20 @@ -61,12 +61,12 @@ reject() - 316 - 260 + 20 + 20 - 286 - 274 + 20 + 20 diff --git a/src/qt/guiconstants.h b/src/qt/guiconstants.h index 92417834..52ee4193 100644 --- a/src/qt/guiconstants.h +++ b/src/qt/guiconstants.h @@ -1,3 +1,7 @@ +// Copyright (c) 2011-2014 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef GUICONSTANTS_H #define GUICONSTANTS_H @@ -28,7 +32,18 @@ static const int TOOLTIP_WRAP_THRESHOLD = 80; /* Maximum allowed URI length */ static const int MAX_URI_LENGTH = 255; +/* Maximum somewhat-sane size of a payment request file */ +static const int MAX_PAYMENT_REQUEST_SIZE = 50000; // bytes + /* QRCodeDialog -- size of exported QR Code image */ #define EXPORT_IMAGE_SIZE 256 +/* Number of frames in spinner animation */ +#define SPINNER_FRAMES 35 + +#define QAPP_ORG_NAME "Myriadcoin" +#define QAPP_ORG_DOMAIN "myriadcoin.org" +#define QAPP_APP_NAME_DEFAULT "Myriadcoin-Qt" +#define QAPP_APP_NAME_TESTNET "Myriadcoin-Qt-testnet" + #endif // GUICONSTANTS_H diff --git a/src/qt/guiutil.cpp b/src/qt/guiutil.cpp index 14e9fc77..99cd6d06 100644 --- a/src/qt/guiutil.cpp +++ b/src/qt/guiutil.cpp @@ -1,32 +1,17 @@ -#include +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "guiutil.h" #include "bitcoinaddressvalidator.h" -#include "walletmodel.h" #include "bitcoinunits.h" +#include "qvalidatedlineedit.h" +#include "walletmodel.h" -#include "util.h" +#include "core.h" #include "init.h" - -#include -#include -#include -#include -#if QT_VERSION >= 0x050000 -#include -#else -#include -#endif -#include // for Qt::mightBeRichText -#include -#include -#include -#include -#include - -#include -#include +#include "util.h" #ifdef WIN32 #ifdef _WIN32_WINNT @@ -41,9 +26,39 @@ #ifndef NOMINMAX #define NOMINMAX #endif -#include "shlwapi.h" -#include "shlobj.h" #include "shellapi.h" +#include "shlobj.h" +#include "shlwapi.h" +#endif + +#include +#include +#if BOOST_FILESYSTEM_VERSION >= 3 +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // for Qt::mightBeRichText +#include + +#if QT_VERSION < 0x050000 +#include +#else +#include +#endif + +#if BOOST_FILESYSTEM_VERSION >= 3 +static boost::filesystem::detail::utf8_codecvt_facet utf8; #endif namespace GUIUtil { @@ -61,15 +76,24 @@ QString dateTimeStr(qint64 nTime) QFont bitcoinAddressFont() { QFont font("Monospace"); +#if QT_VERSION >= 0x040800 + font.setStyleHint(QFont::Monospace); +#else font.setStyleHint(QFont::TypeWriter); +#endif return font; } -void setupAddressWidget(QLineEdit *widget, QWidget *parent) +void setupAddressWidget(QValidatedLineEdit *widget, QWidget *parent) { - widget->setMaxLength(BitcoinAddressValidator::MaxAddressLength); - widget->setValidator(new BitcoinAddressValidator(parent)); + parent->setFocusProxy(widget); + widget->setFont(bitcoinAddressFont()); +#if QT_VERSION >= 0x040700 + widget->setPlaceholderText(QObject::tr("Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)")); +#endif + widget->setValidator(new BitcoinAddressEntryValidator(parent)); + widget->setCheckValidator(new BitcoinAddressCheckValidator(parent)); } void setupAmountWidget(QLineEdit *widget, QWidget *parent) @@ -83,7 +107,7 @@ void setupAmountWidget(QLineEdit *widget, QWidget *parent) bool parseBitcoinURI(const QUrl &uri, SendCoinsRecipient *out) { - // return if URI is not valid or is no myriadcoin URI + // return if URI is not valid or is no bitcoin: URI if(!uri.isValid() || uri.scheme() != QString("myriadcoin")) return false; @@ -111,6 +135,11 @@ bool parseBitcoinURI(const QUrl &uri, SendCoinsRecipient *out) rv.label = i->second; fShouldReturnFalse = false; } + if (i->first == "message") + { + rv.message = i->second; + fShouldReturnFalse = false; + } else if (i->first == "amount") { if(!i->second.isEmpty()) @@ -135,11 +164,11 @@ bool parseBitcoinURI(const QUrl &uri, SendCoinsRecipient *out) bool parseBitcoinURI(QString uri, SendCoinsRecipient *out) { - // Convert myriadcoin:// to myriadcoin: + // Convert bitcoin:// to bitcoin: // - // Cannot handle this later, because myriadcoin:// will cause Qt to see the part after // as host, + // Cannot handle this later, because bitcoin:// will cause Qt to see the part after // as host, // which will lower-case it (and thus invalidate the address). - if(uri.startsWith("myriadcoin://")) + if(uri.startsWith("myriadcoin://", Qt::CaseInsensitive)) { uri.replace(0, 13, "myriadcoin:"); } @@ -147,6 +176,42 @@ bool parseBitcoinURI(QString uri, SendCoinsRecipient *out) return parseBitcoinURI(uriInstance, out); } +QString formatBitcoinURI(const SendCoinsRecipient &info) +{ + QString ret = QString("myriadcoin:%1").arg(info.address); + int paramCount = 0; + + if (info.amount) + { + ret += QString("?amount=%1").arg(BitcoinUnits::format(BitcoinUnits::BTC, info.amount)); + paramCount++; + } + + if (!info.label.isEmpty()) + { + QString lbl(QUrl::toPercentEncoding(info.label)); + ret += QString("%1label=%2").arg(paramCount == 0 ? "?" : "&").arg(lbl); + paramCount++; + } + + if (!info.message.isEmpty()) + { + QString msg(QUrl::toPercentEncoding(info.message));; + ret += QString("%1message=%2").arg(paramCount == 0 ? "?" : "&").arg(msg); + paramCount++; + } + + return ret; +} + +bool isDust(const QString& address, qint64 amount) +{ + CTxDestination dest = CBitcoinAddress(address.toStdString()).Get(); + CScript script; script.SetDestination(dest); + CTxOut txOut(amount, script); + return txOut.IsDust(CTransaction::nMinRelayTxFee); +} + QString HtmlEscape(const QString& str, bool fMultiLine) { #if QT_VERSION < 0x050000 @@ -174,17 +239,14 @@ void copyEntryData(QAbstractItemView *view, int column, int role) if(!selection.isEmpty()) { - // Copy first item (global clipboard) - QApplication::clipboard()->setText(selection.at(0).data(role).toString(), QClipboard::Clipboard); - // Copy first item (global mouse selection for e.g. X11 - NOP on Windows) - QApplication::clipboard()->setText(selection.at(0).data(role).toString(), QClipboard::Selection); + // Copy first item + setClipboard(selection.at(0).data(role).toString()); } } -QString getSaveFileName(QWidget *parent, const QString &caption, - const QString &dir, - const QString &filter, - QString *selectedSuffixOut) +QString getSaveFileName(QWidget *parent, const QString &caption, const QString &dir, + const QString &filter, + QString *selectedSuffixOut) { QString selectedFilter; QString myDir; @@ -200,7 +262,8 @@ QString getSaveFileName(QWidget *parent, const QString &caption, { myDir = dir; } - QString result = QFileDialog::getSaveFileName(parent, caption, myDir, filter, &selectedFilter); + /* Directly convert path to native OS path separators */ + QString result = QDir::toNativeSeparators(QFileDialog::getSaveFileName(parent, caption, myDir, filter, &selectedFilter)); /* Extract first suffix from filter pattern "Description (*.foo)" or "Description (*.foo *.bar ...) */ QRegExp filter_re(".* \\(\\*\\.(.*)[ \\)]"); @@ -231,6 +294,41 @@ QString getSaveFileName(QWidget *parent, const QString &caption, return result; } +QString getOpenFileName(QWidget *parent, const QString &caption, const QString &dir, + const QString &filter, + QString *selectedSuffixOut) +{ + QString selectedFilter; + QString myDir; + if(dir.isEmpty()) // Default to user documents location + { +#if QT_VERSION < 0x050000 + myDir = QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation); +#else + myDir = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation); +#endif + } + else + { + myDir = dir; + } + /* Directly convert path to native OS path separators */ + QString result = QDir::toNativeSeparators(QFileDialog::getOpenFileName(parent, caption, myDir, filter, &selectedFilter)); + + if(selectedSuffixOut) + { + /* Extract first suffix from filter pattern "Description (*.foo)" or "Description (*.foo *.bar ...) */ + QRegExp filter_re(".* \\(\\*\\.(.*)[ \\)]"); + QString selectedSuffix; + if(filter_re.exactMatch(selectedFilter)) + { + selectedSuffix = filter_re.cap(1); + } + *selectedSuffixOut = selectedSuffix; + } + return result; +} + Qt::ConnectionType blockingGUIThreadConnection() { if(QThread::currentThread() != qApp->thread()) @@ -265,7 +363,7 @@ void openDebugLogfile() /* Open debug.log with the associated application */ if (boost::filesystem::exists(pathDebug)) - QDesktopServices::openUrl(QUrl::fromLocalFile(QString::fromStdString(pathDebug.string()))); + QDesktopServices::openUrl(QUrl::fromLocalFile(boostPathToQString(pathDebug))); } ToolTipToRichTextFilter::ToolTipToRichTextFilter(int size_threshold, QObject *parent) : @@ -280,11 +378,11 @@ bool ToolTipToRichTextFilter::eventFilter(QObject *obj, QEvent *evt) { QWidget *widget = static_cast(obj); QString tooltip = widget->toolTip(); - if(tooltip.size() > size_threshold && !tooltip.startsWith("") && !Qt::mightBeRichText(tooltip)) + if(tooltip.size() > size_threshold && !tooltip.startsWith(" to make sure Qt detects this as rich text + // Envelop with to make sure Qt detects this as rich text // Escape the current message as HTML and replace \n by
- tooltip = "" + HtmlEscape(tooltip, true); + tooltip = "" + HtmlEscape(tooltip, true) + ""; widget->setToolTip(tooltip); return true; } @@ -292,6 +390,123 @@ bool ToolTipToRichTextFilter::eventFilter(QObject *obj, QEvent *evt) return QObject::eventFilter(obj, evt); } +void TableViewLastColumnResizingFixer::connectViewHeadersSignals() +{ + connect(tableView->horizontalHeader(), SIGNAL(sectionResized(int,int,int)), this, SLOT(on_sectionResized(int,int,int))); + connect(tableView->horizontalHeader(), SIGNAL(geometriesChanged()), this, SLOT(on_geometriesChanged())); +} + +// We need to disconnect these while handling the resize events, otherwise we can enter infinite loops. +void TableViewLastColumnResizingFixer::disconnectViewHeadersSignals() +{ + disconnect(tableView->horizontalHeader(), SIGNAL(sectionResized(int,int,int)), this, SLOT(on_sectionResized(int,int,int))); + disconnect(tableView->horizontalHeader(), SIGNAL(geometriesChanged()), this, SLOT(on_geometriesChanged())); +} + +// Setup the resize mode, handles compatibility for Qt5 and below as the method signatures changed. +// Refactored here for readability. +void TableViewLastColumnResizingFixer::setViewHeaderResizeMode(int logicalIndex, QHeaderView::ResizeMode resizeMode) +{ +#if QT_VERSION < 0x050000 + tableView->horizontalHeader()->setResizeMode(logicalIndex, resizeMode); +#else + tableView->horizontalHeader()->setSectionResizeMode(logicalIndex, resizeMode); +#endif +} + +void TableViewLastColumnResizingFixer::resizeColumn(int nColumnIndex, int width) +{ + tableView->setColumnWidth(nColumnIndex, width); + tableView->horizontalHeader()->resizeSection(nColumnIndex, width); +} + +int TableViewLastColumnResizingFixer::getColumnsWidth() +{ + int nColumnsWidthSum = 0; + for (int i = 0; i < columnCount; i++) + { + nColumnsWidthSum += tableView->horizontalHeader()->sectionSize(i); + } + return nColumnsWidthSum; +} + +int TableViewLastColumnResizingFixer::getAvailableWidthForColumn(int column) +{ + int nResult = lastColumnMinimumWidth; + int nTableWidth = tableView->horizontalHeader()->width(); + + if (nTableWidth > 0) + { + int nOtherColsWidth = getColumnsWidth() - tableView->horizontalHeader()->sectionSize(column); + nResult = std::max(nResult, nTableWidth - nOtherColsWidth); + } + + return nResult; +} + +// Make sure we don't make the columns wider than the tables viewport width. +void TableViewLastColumnResizingFixer::adjustTableColumnsWidth() +{ + disconnectViewHeadersSignals(); + resizeColumn(lastColumnIndex, getAvailableWidthForColumn(lastColumnIndex)); + connectViewHeadersSignals(); + + int nTableWidth = tableView->horizontalHeader()->width(); + int nColsWidth = getColumnsWidth(); + if (nColsWidth > nTableWidth) + { + resizeColumn(secondToLastColumnIndex,getAvailableWidthForColumn(secondToLastColumnIndex)); + } +} + +// Make column use all the space available, useful during window resizing. +void TableViewLastColumnResizingFixer::stretchColumnWidth(int column) +{ + disconnectViewHeadersSignals(); + resizeColumn(column, getAvailableWidthForColumn(column)); + connectViewHeadersSignals(); +} + +// When a section is resized this is a slot-proxy for ajustAmountColumnWidth(). +void TableViewLastColumnResizingFixer::on_sectionResized(int logicalIndex, int oldSize, int newSize) +{ + adjustTableColumnsWidth(); + int remainingWidth = getAvailableWidthForColumn(logicalIndex); + if (newSize > remainingWidth) + { + resizeColumn(logicalIndex, remainingWidth); + } +} + +// When the tabless geometry is ready, we manually perform the stretch of the "Message" column, +// as the "Stretch" resize mode does not allow for interactive resizing. +void TableViewLastColumnResizingFixer::on_geometriesChanged() +{ + if ((getColumnsWidth() - this->tableView->horizontalHeader()->width()) != 0) + { + disconnectViewHeadersSignals(); + resizeColumn(secondToLastColumnIndex, getAvailableWidthForColumn(secondToLastColumnIndex)); + connectViewHeadersSignals(); + } +} + +/** + * Initializes all internal variables and prepares the + * the resize modes of the last 2 columns of the table and + */ +TableViewLastColumnResizingFixer::TableViewLastColumnResizingFixer(QTableView* table, int lastColMinimumWidth, int allColsMinimumWidth) : + tableView(table), + lastColumnMinimumWidth(lastColMinimumWidth), + allColumnsMinimumWidth(allColsMinimumWidth) +{ + columnCount = tableView->horizontalHeader()->count(); + lastColumnIndex = columnCount - 1; + secondToLastColumnIndex = columnCount - 2; + tableView->horizontalHeader()->setMinimumSectionSize(allColumnsMinimumWidth); + setViewHeaderResizeMode(secondToLastColumnIndex, QHeaderView::Interactive); + setViewHeaderResizeMode(lastColumnIndex, QHeaderView::Interactive); +} + #ifdef WIN32 boost::filesystem::path static StartupShortcutPath() { @@ -300,7 +515,7 @@ boost::filesystem::path static StartupShortcutPath() bool GetStartOnSystemStartup() { - // check for Myriadcoin.lnk + // check for Bitcoin.lnk return boost::filesystem::exists(StartupShortcutPath()); } @@ -359,7 +574,7 @@ bool SetStartOnSystemStartup(bool fAutoStart) return true; } -#elif defined(LINUX) +#elif defined(Q_OS_LINUX) // Follow the Desktop Application Autostart Spec: // http://standards.freedesktop.org/autostart-spec/autostart-spec-latest.html @@ -415,7 +630,7 @@ bool SetStartOnSystemStartup(bool fAutoStart) boost::filesystem::ofstream optionFile(GetAutostartFilePath(), std::ios_base::out|std::ios_base::trunc); if (!optionFile.good()) return false; - // Write a myriadcoin.desktop file to the autostart directory: + // Write a bitcoin.desktop file to the autostart directory: optionFile << "[Desktop Entry]\n"; optionFile << "Type=Application\n"; optionFile << "Name=Myriadcoin\n"; @@ -437,7 +652,7 @@ bool SetStartOnSystemStartup(bool fAutoStart) LSSharedFileListItemRef findStartupItemInList(LSSharedFileListRef list, CFURLRef findUrl); LSSharedFileListItemRef findStartupItemInList(LSSharedFileListRef list, CFURLRef findUrl) { - // loop through the list of startup items and try to find the myriadcoin app + // loop through the list of startup items and try to find the bitcoin app CFArrayRef listSnapshot = LSSharedFileListCopySnapshot(list, NULL); for(int i = 0; i < CFArrayGetCount(listSnapshot); i++) { LSSharedFileListItemRef item = (LSSharedFileListItemRef)CFArrayGetValueAtIndex(listSnapshot, i); @@ -471,7 +686,7 @@ bool SetStartOnSystemStartup(bool fAutoStart) LSSharedFileListItemRef foundItem = findStartupItemInList(loginItems, bitcoinAppUrl); if(fAutoStart && !foundItem) { - // add myriadcoin app to startup item list + // add bitcoin app to startup item list LSSharedFileListInsertItemURL(loginItems, kLSSharedFileListItemBeforeFirst, NULL, NULL, bitcoinAppUrl, NULL, NULL); } else if(!fAutoStart && foundItem) { @@ -487,45 +702,56 @@ bool SetStartOnSystemStartup(bool fAutoStart) { return false; } #endif -HelpMessageBox::HelpMessageBox(QWidget *parent) : - QMessageBox(parent) +void saveWindowGeometry(const QString& strSetting, QWidget *parent) { - header = tr("Myriadcoin-Qt") + " " + tr("version") + " " + - QString::fromStdString(FormatFullVersion()) + "\n\n" + - tr("Usage:") + "\n" + - " myriadcoin-qt [" + tr("command-line options") + "] " + "\n"; - - coreOptions = QString::fromStdString(HelpMessage()); - - uiOptions = tr("UI options") + ":\n" + - " -lang= " + tr("Set language, for example \"de_DE\" (default: system locale)") + "\n" + - " -min " + tr("Start minimized") + "\n" + - " -splash " + tr("Show splash screen on startup (default: 1)") + "\n" + - " -choosedatadir " + tr("Choose data directory on startup (default: 0)") + "\n"; - - setWindowTitle(tr("Myriadcoin-Qt")); - setTextFormat(Qt::PlainText); - // setMinimumWidth is ignored for QMessageBox so put in non-breaking spaces to make it wider. - setText(header + QString(QChar(0x2003)).repeated(50)); - setDetailedText(coreOptions + "\n" + uiOptions); + QSettings settings; + settings.setValue(strSetting + "Pos", parent->pos()); + settings.setValue(strSetting + "Size", parent->size()); } -void HelpMessageBox::printToConsole() +void restoreWindowGeometry(const QString& strSetting, const QSize& defaultSize, QWidget *parent) { - // On other operating systems, the expected action is to print the message to the console. - QString strUsage = header + "\n" + coreOptions + "\n" + uiOptions; - fprintf(stdout, "%s", strUsage.toStdString().c_str()); + QSettings settings; + QPoint pos = settings.value(strSetting + "Pos").toPoint(); + QSize size = settings.value(strSetting + "Size", defaultSize).toSize(); + + if (!pos.x() && !pos.y()) { + QRect screen = QApplication::desktop()->screenGeometry(); + pos.setX((screen.width() - size.width()) / 2); + pos.setY((screen.height() - size.height()) / 2); + } + + parent->resize(size); + parent->move(pos); } -void HelpMessageBox::showOrPrint() +void setClipboard(const QString& str) { -#if defined(WIN32) - // On Windows, show a message box, as there is no stderr/stdout in windowed applications - exec(); + QApplication::clipboard()->setText(str, QClipboard::Clipboard); + QApplication::clipboard()->setText(str, QClipboard::Selection); +} + +#if BOOST_FILESYSTEM_VERSION >= 3 +boost::filesystem::path qstringToBoostPath(const QString &path) +{ + return boost::filesystem::path(path.toStdString(), utf8); +} + +QString boostPathToQString(const boost::filesystem::path &path) +{ + return QString::fromStdString(path.string(utf8)); +} #else - // On other operating systems, print help text to console - printToConsole(); -#endif +#warning Conversion between boost path and QString can use invalid character encoding with boost_filesystem v2 and older +boost::filesystem::path qstringToBoostPath(const QString &path) +{ + return boost::filesystem::path(path.toStdString()); } +QString boostPathToQString(const boost::filesystem::path &path) +{ + return QString::fromStdString(path.string()); +} +#endif + } // namespace GUIUtil diff --git a/src/qt/guiutil.h b/src/qt/guiutil.h index e2c7d18a..4f9416d1 100644 --- a/src/qt/guiutil.h +++ b/src/qt/guiutil.h @@ -1,19 +1,28 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef GUIUTIL_H #define GUIUTIL_H -#include -#include +#include #include +#include +#include +#include +#include + +class QValidatedLineEdit; class SendCoinsRecipient; QT_BEGIN_NAMESPACE +class QAbstractItemView; +class QDateTime; class QFont; class QLineEdit; -class QWidget; -class QDateTime; class QUrl; -class QAbstractItemView; +class QWidget; QT_END_NAMESPACE /** Utility functions used by the Bitcoin Qt UI. @@ -28,13 +37,16 @@ namespace GUIUtil QFont bitcoinAddressFont(); // Set up widgets for address and amounts - void setupAddressWidget(QLineEdit *widget, QWidget *parent); + void setupAddressWidget(QValidatedLineEdit *widget, QWidget *parent); void setupAmountWidget(QLineEdit *widget, QWidget *parent); // Parse "bitcoin:" URI into recipient object, return true on successful parsing - // See Bitcoin URI definition discussion here: https://bitcointalk.org/index.php?topic=33490.0 bool parseBitcoinURI(const QUrl &uri, SendCoinsRecipient *out); bool parseBitcoinURI(QString uri, SendCoinsRecipient *out); + QString formatBitcoinURI(const SendCoinsRecipient &info); + + // Returns true if given address+amount meets "dust" definition + bool isDust(const QString& address, qint64 amount); // HTML escaping for rich text controls QString HtmlEscape(const QString& str, bool fMultiLine=false); @@ -48,6 +60,8 @@ namespace GUIUtil */ void copyEntryData(QAbstractItemView *view, int column, int role=Qt::EditRole); + void setClipboard(const QString& str); + /** Get save filename, mimics QFileDialog::getSaveFileName, except that it appends a default suffix when no suffix is provided by the user. @@ -58,9 +72,22 @@ namespace GUIUtil @param[out] selectedSuffixOut Pointer to return the suffix (file type) that was selected (or 0). Can be useful when choosing the save file format based on suffix. */ - QString getSaveFileName(QWidget *parent=0, const QString &caption=QString(), - const QString &dir=QString(), const QString &filter=QString(), - QString *selectedSuffixOut=0); + QString getSaveFileName(QWidget *parent, const QString &caption, const QString &dir, + const QString &filter, + QString *selectedSuffixOut); + + /** Get open filename, convenience wrapper for QFileDialog::getOpenFileName. + + @param[in] parent Parent window (or 0) + @param[in] caption Window caption (or empty, for default) + @param[in] dir Starting directory (or empty, to default to documents directory) + @param[in] filter Filter specification such as "Comma Separated Files (*.csv)" + @param[out] selectedSuffixOut Pointer to return the suffix (file type) that was selected (or 0). + Can be useful when choosing the save file format based on suffix. + */ + QString getOpenFileName(QWidget *parent, const QString &caption, const QString &dir, + const QString &filter, + QString *selectedSuffixOut); /** Get connection type to call object slot in GUI thread with invokeMethod. The call will be blocking. @@ -93,29 +120,59 @@ namespace GUIUtil int size_threshold; }; - bool GetStartOnSystemStartup(); - bool SetStartOnSystemStartup(bool fAutoStart); - - /** Help message for Bitcoin-Qt, shown with --help. */ - class HelpMessageBox : public QMessageBox + /** + * Makes a QTableView last column feel as if it was being resized from its left border. + * Also makes sure the column widths are never larger than the table's viewport. + * In Qt, all columns are resizable from the right, but it's not intuitive resizing the last column from the right. + * Usually our second to last columns behave as if stretched, and when on strech mode, columns aren't resizable + * interactively or programatically. + * + * This helper object takes care of this issue. + * + */ + class TableViewLastColumnResizingFixer: public QObject { Q_OBJECT - public: - HelpMessageBox(QWidget *parent = 0); + public: + TableViewLastColumnResizingFixer(QTableView* table, int lastColMinimumWidth, int allColsMinimumWidth); + void stretchColumnWidth(int column); - /** Show message box or print help message to standard output, based on operating system. */ - void showOrPrint(); + private: + QTableView* tableView; + int lastColumnMinimumWidth; + int allColumnsMinimumWidth; + int lastColumnIndex; + int columnCount; + int secondToLastColumnIndex; - /** Print help message to console */ - void printToConsole(); + void adjustTableColumnsWidth(); + int getAvailableWidthForColumn(int column); + int getColumnsWidth(); + void connectViewHeadersSignals(); + void disconnectViewHeadersSignals(); + void setViewHeaderResizeMode(int logicalIndex, QHeaderView::ResizeMode resizeMode); + void resizeColumn(int nColumnIndex, int width); - private: - QString header; - QString coreOptions; - QString uiOptions; + private slots: + void on_sectionResized(int logicalIndex, int oldSize, int newSize); + void on_geometriesChanged(); }; + bool GetStartOnSystemStartup(); + bool SetStartOnSystemStartup(bool fAutoStart); + + /** Save window size and position */ + void saveWindowGeometry(const QString& strSetting, QWidget *parent); + /** Restore window size and position */ + void restoreWindowGeometry(const QString& strSetting, const QSize &defaultSizeIn, QWidget *parent); + + /* Convert QString to OS specific boost path through UTF-8 */ + boost::filesystem::path qstringToBoostPath(const QString &path); + + /* Convert OS specific boost path to QString through UTF-8 */ + QString boostPathToQString(const boost::filesystem::path &path); + } // namespace GUIUtil #endif // GUIUTIL_H diff --git a/src/qt/intro.cpp b/src/qt/intro.cpp index 69b93bd9..79ae0733 100644 --- a/src/qt/intro.cpp +++ b/src/qt/intro.cpp @@ -1,16 +1,23 @@ +// Copyright (c) 2011-2014 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #include "intro.h" #include "ui_intro.h" + +#include "guiutil.h" + #include "util.h" +#include + #include #include #include -#include - /* Minimum free space (in bytes) needed for data directory */ -static const uint64 GB_BYTES = 1000000000LL; -static const uint64 BLOCK_CHAIN_SIZE = 10LL * GB_BYTES; +static const uint64_t GB_BYTES = 1000000000LL; +static const uint64_t BLOCK_CHAIN_SIZE = 20LL * GB_BYTES; /* Check free space asynchronously to prevent hanging the UI thread. @@ -25,6 +32,7 @@ static const uint64 BLOCK_CHAIN_SIZE = 10LL * GB_BYTES; class FreespaceChecker : public QObject { Q_OBJECT + public: FreespaceChecker(Intro *intro); @@ -54,16 +62,23 @@ void FreespaceChecker::check() { namespace fs = boost::filesystem; QString dataDirStr = intro->getPathToCheck(); - fs::path dataDir = fs::path(dataDirStr.toStdString()); - uint64 freeBytesAvailable = 0; + fs::path dataDir = GUIUtil::qstringToBoostPath(dataDirStr); + uint64_t freeBytesAvailable = 0; int replyStatus = ST_OK; QString replyMessage = tr("A new data directory will be created."); /* Find first parent that exists, so that fs::space does not fail */ fs::path parentDir = dataDir; + fs::path parentDirOld = fs::path(); while(parentDir.has_parent_path() && !fs::exists(parentDir)) { parentDir = parentDir.parent_path(); + + /* Check if we make any progress, break if not to prevent an infinite loop here */ + if (parentDirOld == parentDir) + break; + + parentDirOld = parentDir; } try { @@ -72,9 +87,9 @@ void FreespaceChecker::check() { if(fs::is_directory(dataDir)) { - QString separator = QDir::toNativeSeparators("/"); + QString separator = "" + QDir::toNativeSeparators("/") + tr("name") + ""; replyStatus = ST_OK; - replyMessage = tr("Directory already exists. Add %1name if you intend to create a new directory here.").arg(separator); + replyMessage = tr("Directory already exists. Add %1 if you intend to create a new directory here.").arg(separator); } else { replyStatus = ST_ERROR; replyMessage = tr("Path already exists, and is not a directory."); @@ -131,12 +146,12 @@ void Intro::setDataDirectory(const QString &dataDir) QString Intro::getDefaultDataDirectory() { - return QString::fromStdString(GetDefaultDataDir().string()); + return GUIUtil::boostPathToQString(GetDefaultDataDir()); } void Intro::pickDataDirectory() { - namespace fs = boost::filesystem;; + namespace fs = boost::filesystem; QSettings settings; /* If data directory provided on command line, no need to look at settings or show a picking dialog */ @@ -147,11 +162,13 @@ void Intro::pickDataDirectory() /* 2) Allow QSettings to override default dir */ dataDir = settings.value("strDataDir", dataDir).toString(); - if(!fs::exists(dataDir.toStdString()) || GetBoolArg("-choosedatadir", false)) + if(!fs::exists(GUIUtil::qstringToBoostPath(dataDir)) || GetBoolArg("-choosedatadir", false)) { /* If current default data directory does not exist, let the user choose one */ Intro intro; intro.setDataDirectory(dataDir); + intro.setWindowIcon(QIcon(":icons/bitcoin")); + while(true) { if(!intro.exec()) @@ -161,18 +178,23 @@ void Intro::pickDataDirectory() } dataDir = intro.getDataDirectory(); try { - fs::create_directory(dataDir.toStdString()); + TryCreateDirectory(GUIUtil::qstringToBoostPath(dataDir)); break; } catch(fs::filesystem_error &e) { - QMessageBox::critical(0, QObject::tr("Myriadcoin"), - QObject::tr("Error: Specified data directory \"%1\" can not be created.").arg(dataDir)); + QMessageBox::critical(0, tr("Myriadcoin"), + tr("Error: Specified data directory \"%1\" can not be created.").arg(dataDir)); /* fall through, back to choosing screen */ } } settings.setValue("strDataDir", dataDir); } - SoftSetArg("-datadir", dataDir.toStdString()); + /* Only override -datadir if different from the default, to make it possible to + * override -datadir in the bitcoin.conf file in the default data directory + * (to be consistent with bitcoind behavior) + */ + if(dataDir != getDefaultDataDirectory()) + SoftSetArg("-datadir", GUIUtil::qstringToBoostPath(dataDir).string()); // use OS locale for path setting } void Intro::setStatus(int status, const QString &message, quint64 bytesAvailable) @@ -201,7 +223,7 @@ void Intro::setStatus(int status, const QString &message, quint64 bytesAvailable } else { ui->freeSpace->setStyleSheet(""); } - ui->freeSpace->setText(freeString+"."); + ui->freeSpace->setText(freeString + "."); } /* Don't allow confirm in ERROR state */ ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(status != FreespaceChecker::ST_ERROR); @@ -216,7 +238,7 @@ void Intro::on_dataDirectory_textChanged(const QString &dataDirStr) void Intro::on_ellipsisButton_clicked() { - QString dir = QFileDialog::getExistingDirectory(0, "Choose data directory", ui->dataDirectory->text()); + QString dir = QDir::toNativeSeparators(QFileDialog::getExistingDirectory(0, "Choose data directory", ui->dataDirectory->text())); if(!dir.isEmpty()) ui->dataDirectory->setText(dir); } diff --git a/src/qt/intro.h b/src/qt/intro.h index b246c65a..295a7556 100644 --- a/src/qt/intro.h +++ b/src/qt/intro.h @@ -1,14 +1,19 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef INTRO_H #define INTRO_H #include -#include #include +#include + +class FreespaceChecker; namespace Ui { class Intro; } -class FreespaceChecker; /** Introduction screen (pre-GUI startup). Allows the user to choose a data directory, @@ -37,6 +42,7 @@ public: * Determine default data directory for operating system. */ static QString getDefaultDataDirectory(); + signals: void requestCheck(); void stopThread(); diff --git a/src/qt/locale/bitcoin_ach.ts b/src/qt/locale/bitcoin_ach.ts new file mode 100644 index 00000000..6fff416c --- /dev/null +++ b/src/qt/locale/bitcoin_ach.ts @@ -0,0 +1,3368 @@ + + + AboutDialog + + About Myriadcoin Core + + + + <b>Myriadcoin Core</b> version + + + + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. + + + + Copyright + + + + The Myriadcoin Core developers + + + + (%1-bit) + + + + + AddressBookPage + + Double-click to edit address or label + + + + Create a new address + + + + &New + + + + Copy the currently selected address to the system clipboard + + + + &Copy + + + + C&lose + + + + &Copy Address + + + + Delete the currently selected address from the list + + + + Export the data in the current tab to a file + + + + &Export + + + + &Delete + + + + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + + Copy &Label + + + + &Edit + + + + Export Address List + + + + Comma separated file (*.csv) + + + + Exporting Failed + + + + There was an error trying to save the address list to %1. + + + + + AddressTableModel + + Label + + + + Address + + + + (no label) + + + + + AskPassphraseDialog + + Passphrase Dialog + + + + Enter passphrase + + + + New passphrase + + + + Repeat new passphrase + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + + + + Encrypt wallet + + + + This operation needs your wallet passphrase to unlock the wallet. + + + + Unlock wallet + + + + This operation needs your wallet passphrase to decrypt the wallet. + + + + Decrypt wallet + + + + Change passphrase + + + + Enter the old and new passphrase to the wallet. + + + + Confirm wallet encryption + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! + + + + Are you sure you wish to encrypt your wallet? + + + + 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. + + + + Warning: The Caps Lock key is on! + + + + Wallet encrypted + + + + Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. + + + + Wallet encryption failed + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + + + + The supplied passphrases do not match. + + + + Wallet unlock failed + + + + The passphrase entered for the wallet decryption was incorrect. + + + + Wallet decryption failed + + + + Wallet passphrase was successfully changed. + + + + + BitcoinGUI + + Sign &message... + + + + Synchronizing with network... + + + + &Overview + + + + Node + + + + Show general overview of wallet + + + + &Transactions + + + + Browse transaction history + + + + E&xit + + + + Quit application + + + + Show information about Myriadcoin + + + + About &Qt + + + + Show information about Qt + + + + &Options... + + + + &Encrypt Wallet... + + + + &Backup Wallet... + + + + &Change Passphrase... + + + + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + + Importing blocks from disk... + + + + Reindexing blocks on disk... + + + + Send coins to a Myriadcoin address + + + + Modify configuration options for Myriadcoin + + + + Backup wallet to another location + + + + Change the passphrase used for wallet encryption + + + + &Debug window + + + + Open debugging and diagnostic console + + + + &Verify message... + + + + Myriadcoin + + + + Wallet + + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your Myriadcoin addresses to prove you own them + + + + Verify messages to ensure they were signed with specified Myriadcoin addresses + + + + &File + + + + &Settings + + + + &Help + + + + Tabs toolbar + + + + [testnet] + + + + Myriadcoin Core + + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + + Myriadcoin client + + + + %n active connection(s) to Myriadcoin network + + + + No block source available... + + + + Processed %1 of %2 (estimated) blocks of transaction history. + + + + Processed %1 blocks of transaction history. + + + + %n hour(s) + + + + %n day(s) + + + + %n week(s) + + + + %1 and %2 + + + + %n year(s) + + + + %1 behind + + + + Last received block was generated %1 ago. + + + + Transactions after this will not yet be visible. + + + + Error + + + + Warning + + + + Information + + + + Up to date + + + + Catching up... + + + + Sent transaction + + + + Incoming transaction + + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + A fatal error occurred. Myriadcoin can no longer continue safely and will quit. + + + + + ClientModel + + Network Alert + + + + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + + + + Address + + + + Date + + + + Confirmations + + + + Confirmed + + + + Priority + + + + Copy address + + + + Copy label + + + + Copy amount + + + + Copy transaction ID + + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + + + + Dust + + + + yes + + + + no + + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + + + + change from %1 (%2) + + + + (change) + + + + + EditAddressDialog + + Edit Address + + + + &Label + + + + The label associated with this address list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + + + + &Address + + + + New receiving address + + + + New sending address + + + + Edit receiving address + + + + Edit sending address + + + + The entered address "%1" is already in the address book. + + + + The entered address "%1" is not a valid Myriadcoin address. + + + + Could not unlock wallet. + + + + New key generation failed. + + + + + FreespaceChecker + + A new data directory will be created. + + + + name + + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core + + + + version + + + + Usage: + + + + command-line options + + + + UI options + + + + Set language, for example "de_DE" (default: system locale) + + + + Start minimized + + + + Set SSL root certificates for payment request (default: -system-) + + + + Show splash screen on startup (default: 1) + + + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + + + + Error: Specified data directory "%1" can not be created. + + + + Error + + + + GB of free space available + + + + (of %1GB needed) + + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open + + + + + OptionsDialog + + Options + + + + &Main + + + + Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. + + + + Pay transaction &fee + + + + Automatically start Myriadcoin after logging in to the system. + + + + &Start Myriadcoin on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + + Reset all client options to default. + + + + &Reset Options + + + + &Network + + + + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. + + + + Map port using &UPnP + + + + Proxy &IP: + + + + &Port: + + + + Port of the proxy (e.g. 9050) + + + + SOCKS &Version: + + + + SOCKS version of the proxy (e.g. 5) + + + + &Window + + + + Show only a tray icon after minimizing the window. + + + + &Minimize to the tray instead of the taskbar + + + + Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. + + + + M&inimize on close + + + + &Display + + + + User Interface &language: + + + + The user interface language can be set here. This setting will take effect after restarting Myriadcoin. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show Myriadcoin addresses in the transaction list or not. + + + + &Display addresses in transaction list + + + + Whether to show coin control features or not. + + + + &OK + + + + &Cancel + + + + default + + + + none + + + + Confirm options reset + + + + Client restart required to activate changes. + + + + Client will be shutdown, do you want to proceed? + + + + This change would require a client restart. + + + + The supplied proxy address is invalid. + + + + + OverviewPage + + Form + + + + The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. + + + + Wallet + + + + Available: + + + + Your current spendable balance + + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + + + + Immature: + + + + Mined balance that has not yet matured + + + + Total: + + + + Your current total balance + + + + <b>Recent transactions</b> + + + + out of sync + + + + + PaymentServer + + URI handling + + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start myriadcoin: click-to-pay handler + + + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + + + + Network request error + + + + + QObject + + Myriadcoin + + + + Error: Specified data directory "%1" does not exist. + + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + + + + Error: Invalid combination of -regtest and -testnet. + + + + Myriadcoin Core didn't yet exit safely... + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + + QRImageWidget + + &Save Image... + + + + &Copy Image + + + + Save QR Code + + + + PNG Image (*.png) + + + + + RPCConsole + + Client name + + + + N/A + + + + Client version + + + + &Information + + + + Debug window + + + + General + + + + Using OpenSSL version + + + + Startup time + + + + Network + + + + Name + + + + Number of connections + + + + Block chain + + + + Current number of blocks + + + + Estimated total blocks + + + + Last block time + + + + &Open + + + + &Console + + + + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + + Build date + + + + Debug log file + + + + Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the Myriadcoin RPC console. + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + Type <b>help</b> for an overview of available commands. + + + + %1 B + + + + %1 KB + + + + %1 MB + + + + %1 GB + + + + %1 m + + + + %1 h + + + + %1 h %2 m + + + + + ReceiveCoinsDialog + + &Amount: + + + + &Label: + + + + &Message: + + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + + + + Clear + + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + + + + Remove the selected entries from the list + + + + Remove + + + + Copy label + + + + Copy message + + + + Copy amount + + + + + ReceiveRequestDialog + + QR Code + + + + Copy &URI + + + + Copy &Address + + + + &Save Image... + + + + Request payment to %1 + + + + Payment information + + + + URI + + + + Address + + + + Amount + + + + Label + + + + Message + + + + Resulting URI too long, try to reduce the text for label / message. + + + + Error encoding URI into QR Code. + + + + + RecentRequestsTableModel + + Date + + + + Label + + + + Message + + + + Amount + + + + (no label) + + + + (no message) + + + + (no amount) + + + + + SendCoinsDialog + + Send Coins + + + + Coin Control Features + + + + Inputs... + + + + automatically selected + + + + Insufficient funds! + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + + Send to multiple recipients at once + + + + Add &Recipient + + + + Clear all fields of the form. + + + + Clear &All + + + + Balance: + + + + Confirm the send action + + + + S&end + + + + Confirm send coins + + + + %1 to %2 + + + + Copy quantity + + + + Copy amount + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + + + + or + + + + The recipient address is not valid, please recheck. + + + + The amount to pay must be larger than 0. + + + + The amount exceeds your balance. + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + Duplicate address found, can only send to each address once per send operation. + + + + Transaction creation failed! + + + + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + + + + (no label) + + + + Warning: Unknown change address + + + + Are you sure you want to send? + + + + added as transaction fee + + + + Payment request expired + + + + Invalid payment address %1 + + + + + SendCoinsEntry + + A&mount: + + + + Pay &To: + + + + The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Enter a label for this address to add it to your address book + + + + &Label: + + + + Choose previously used address + + + + This is a normal payment. + + + + Alt+A + + + + Paste address from clipboard + + + + Alt+P + + + + Remove this entry + + + + Message: + + + + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. + + + + + SignVerifyMessageDialog + + Signatures - Sign / Verify a Message + + + + &Sign Message + + + + You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. + + + + The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Choose previously used address + + + + Alt+A + + + + Paste address from clipboard + + + + Alt+P + + + + Enter the message you want to sign here + + + + Signature + + + + Copy the current signature to the system clipboard + + + + Sign the message to prove you own this Myriadcoin address + + + + Sign &Message + + + + Reset all sign message fields + + + + Clear &All + + + + &Verify Message + + + + Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. + + + + The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Verify the message to ensure it was signed with the specified Myriadcoin address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Click "Sign Message" to generate signature + + + + The entered address is invalid. + + + + Please check the address and try again. + + + + The entered address does not refer to a key. + + + + Wallet unlock was cancelled. + + + + Private key for the entered address is not available. + + + + Message signing failed. + + + + Message signed. + + + + The signature could not be decoded. + + + + Please check the signature and try again. + + + + The signature did not match the message digest. + + + + Message verification failed. + + + + Message verified. + + + + + SplashScreen + + Myriadcoin Core + + + + The Myriadcoin Core developers + + + + [testnet] + + + + + TrafficGraphWidget + + KB/s + + + + + TransactionDesc + + Open until %1 + + + + conflicted + + + + %1/offline + + + + %1/unconfirmed + + + + %1 confirmations + + + + Status + + + + , broadcast through %n node(s) + + + + Date + + + + Source + + + + Generated + + + + From + + + + To + + + + own address + + + + label + + + + Credit + + + + matures in %n more block(s) + + + + not accepted + + + + Debit + + + + Transaction fee + + + + Net amount + + + + Message + + + + Comment + + + + Transaction ID + + + + Merchant + + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + Debug information + + + + Transaction + + + + Inputs + + + + Amount + + + + true + + + + false + + + + , has not been successfully broadcast yet + + + + Open for %n more block(s) + + + + unknown + + + + + TransactionDescDialog + + Transaction details + + + + This pane shows a detailed description of the transaction + + + + + TransactionTableModel + + Date + + + + Type + + + + Address + + + + Amount + + + + Immature (%1 confirmations, will be available after %2) + + + + Open for %n more block(s) + + + + Open until %1 + + + + Confirmed (%1 confirmations) + + + + This block was not received by any other nodes and will probably not be accepted! + + + + Generated but not accepted + + + + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + + Received with + + + + Received from + + + + Sent to + + + + Payment to yourself + + + + Mined + + + + (n/a) + + + + Transaction status. Hover over this field to show number of confirmations. + + + + Date and time that the transaction was received. + + + + Type of transaction. + + + + Destination address of transaction. + + + + Amount removed from or added to balance. + + + + + TransactionView + + All + + + + Today + + + + This week + + + + This month + + + + Last month + + + + This year + + + + Range... + + + + Received with + + + + Sent to + + + + To yourself + + + + Mined + + + + Other + + + + Enter address or label to search + + + + Min amount + + + + Copy address + + + + Copy label + + + + Copy amount + + + + Copy transaction ID + + + + Edit label + + + + Show transaction details + + + + Export Transaction History + + + + Exporting Failed + + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + + + + The transaction history was successfully saved to %1. + + + + Comma separated file (*.csv) + + + + Confirmed + + + + Date + + + + Type + + + + Label + + + + Address + + + + Amount + + + + ID + + + + Range: + + + + to + + + + + WalletFrame + + No wallet has been loaded. + + + + + WalletModel + + Send Coins + + + + + WalletView + + &Export + + + + Export the data in the current tab to a file + + + + Backup Wallet + + + + Wallet Data (*.dat) + + + + Backup Failed + + + + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. + + + + Backup Successful + + + + + bitcoin-core + + Usage: + + + + List commands + + + + Get help for a command + + + + Options: + + + + Specify configuration file (default: myriadcoin.conf) + + + + Specify pid file (default: myriadcoind.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 8333 or testnet: 18333) + + + + Maintain at most <n> connections to peers (default: 125) + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + Specify your own public address + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) + + + + Accept command line and JSON-RPC commands + + + + Myriadcoin Core RPC client version + + + + Run in the background as a daemon and accept commands + + + + Use the test network + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=myriadcoinrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + Bind to given address and always listen on it. Use [host]:port notation for IPv6 + + + + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) + + + + Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + + + + This is a pre-release test build - use at your own risk - do not use for mining or merchant applications + + + + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. + + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + Myriadcoin Core Daemon + + + + Block creation options: + + + + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + + Connect only to the specified node(s) + + + + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + + Corrupted block database detected + + + + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + Do not load the wallet and disable wallet RPC calls + + + + Do you want to rebuild the block database now? + + + + Error initializing block database + + + + Error initializing wallet database environment %s! + + + + Error loading block database + + + + Error opening block database + + + + Error: Disk space is low! + + + + Error: Wallet locked, unable to create transaction! + + + + Error: system error: + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + Failed to read block info + + + + Failed to read block + + + + Failed to sync block index + + + + Failed to write block index + + + + Failed to write block info + + + + Failed to write block + + + + Failed to write file info + + + + Failed to write to coin database + + + + Failed to write transaction index + + + + Failed to write undo data + + + + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + + Find peers using DNS lookup (default: 1 unless -connect) + + + + Force safe mode (default: 0) + + + + Generate coins (default: 0) + + + + How many blocks to check at startup (default: 288, 0 = all) + + + + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' + + + + Not enough file descriptors available. + + + + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + + Rebuild block chain index from current blk000??.dat files + + + + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + + Set the number of threads to service RPC calls (default: 4) + + + + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + + Verifying blocks... + + + + Verifying wallet... + + + + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + + + + Imports blocks from external blk000??.dat file + + + + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + + + + Information + + + + Invalid amount for -minrelaytxfee=<amount>: '%s' + + + + Invalid amount for -mintxfee=<amount>: '%s' + + + + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + + Maintain a full transaction index (default: 0) + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + Only accept block chain matching built-in checkpoints (default: 1) + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + Print block on startup, if found in block index + + + + Print block tree on startup (default: 0) + + + + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + + + + SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + Send command to Myriadcoin Core + + + + Send trace/debug info to console instead of debug.log file + + + + Set minimum block size in bytes (default: 0) + + + + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + Signing transaction failed + + + + Specify connection timeout in milliseconds (default: 5000) + + + + Start Myriadcoin Core Daemon + + + + System error: + + + + Transaction amount too small + + + + Transaction amounts must be positive + + + + Transaction too large + + + + Use UPnP to map the listening port (default: 0) + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + Username for JSON-RPC connections + + + + Warning + + + + Warning: This version is obsolete, upgrade required! + + + + Zapping all transactions from wallet... + + + + on startup + + + + version + + + + wallet.dat corrupt, salvage failed + + + + Password for JSON-RPC connections + + + + Allow JSON-RPC connections from specified IP address + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + Upgrade wallet to latest format + + + + Set key pool size to <n> (default: 100) + + + + Rescan the block chain for missing wallet transactions + + + + Use OpenSSL (https) for JSON-RPC connections + + + + Server certificate file (default: server.cert) + + + + Server private key (default: server.pem) + + + + This help message + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + Loading addresses... + + + + Error loading wallet.dat: Wallet corrupted + + + + Error loading wallet.dat: Wallet requires newer version of Myriadcoin + + + + Wallet needed to be rewritten: restart Myriadcoin to complete + + + + Error loading wallet.dat + + + + Invalid -proxy address: '%s' + + + + Unknown network specified in -onlynet: '%s' + + + + Unknown -socks proxy version requested: %i + + + + Cannot resolve -bind address: '%s' + + + + Cannot resolve -externalip address: '%s' + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + Invalid amount + + + + Insufficient funds + + + + Loading block index... + + + + Add a node to connect to and attempt to keep the connection open + + + + Loading wallet... + + + + Cannot downgrade wallet + + + + Cannot write default address + + + + Rescanning... + + + + Done loading + + + + To use the %s option + + + + Error + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + \ No newline at end of file diff --git a/src/qt/locale/bitcoin_af_ZA.ts b/src/qt/locale/bitcoin_af_ZA.ts index a318ad84..644ced16 100644 --- a/src/qt/locale/bitcoin_af_ZA.ts +++ b/src/qt/locale/bitcoin_af_ZA.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin + About Myriadcoin Core - - <b>Myriadcoin</b> version - <b>Myriadcoin</b> weergawe + <b>Myriadcoin Core</b> version + - This is experimental software. @@ -23,153 +19,128 @@ This product includes software developed by the OpenSSL Project for use in the O - Copyright - - The Myriadcoin developers + The Myriadcoin Core developers + + + + (%1-bit) AddressBookPage - - Address Book - Adres Boek - - - Double-click to edit address or label Dubbel-klik om die adres of etiket te wysig - Create a new address Skep 'n nuwe adres - + &New + + + Copy the currently selected address to the system clipboard Maak 'n kopie van die huidige adres na die stelsel klipbord - - &New Address + &Copy - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + C&lose - &Copy Address - - Show &QR Code - - - - - Sign a message to prove you own a Myriadcoin address - - - - - Sign &Message - Teken &Boodskap - - - Delete the currently selected address from the list - Export the data in the current tab to a file - &Export - - Verify a message to ensure it was signed with a specified Myriadcoin address - - - - - &Verify Message - - - - &Delete &Verwyder - + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + Copy &Label - &Edit - - Send &Coins - Stuur &Muntstukke + Export Address List + - - Export Address Book Data - Voer die Adresboek Data Uit - - - Comma separated file (*.csv) - - Error exporting - Fout uitvoering + Exporting Failed + - - Could not write to file %1. - Kon nie na die %1 lêer skryf nie + There was an error trying to save the address list to %1. + AddressTableModel - Label Etiket - Address Adres - (no label) (geen etiket) @@ -177,140 +148,106 @@ This product includes software developed by the OpenSSL Project for use in the O AskPassphraseDialog - Passphrase Dialog - Enter passphrase Tik Wagwoord in - New passphrase Nuwe wagwoord - Repeat new passphrase Herhaal nuwe wagwoord - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. Tik die nuwe wagwoord vir die beursie in.<br/>Gebruik asseblief 'n wagwoord van <b>ten minste 10 ewekansige karakters</b>, of <b>agt (8) of meer woorde.</b> - Encrypt wallet Enkripteer beursie - This operation needs your wallet passphrase to unlock the wallet. Hierdie operasie benodig 'n wagwoord om die beursie oop te sluit. - Unlock wallet Sluit beursie oop - This operation needs your wallet passphrase to decrypt the wallet. Hierdie operasie benodig 'n wagwoord om die beursie oop te sluit. - Decrypt wallet Sluit beursie oop - Change passphrase Verander wagwoord - Enter the old and new passphrase to the wallet. Tik asseblief die ou en nuwe wagwoord vir die beursie in. - Confirm wallet encryption Bevestig beursie enkripsie. - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! - Are you sure you wish to encrypt your wallet? - 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. - - Warning: The Caps Lock key is on! - - Wallet encrypted Die beursie is nou bewaak - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. - - - - Wallet encryption failed Die beursie kon nie bewaak word nie - Wallet encryption failed due to an internal error. Your wallet was not encrypted. Beursie bewaaking het misluk as gevolg van 'n interne fout. Die beursie is nie bewaak nie! - - The supplied passphrases do not match. Die wagwoord stem nie ooreen nie - Wallet unlock failed Beursie oopsluiting het misluk - - - The passphrase entered for the wallet decryption was incorrect. Die wagwoord wat ingetik was om die beursie oop te sluit, was verkeerd. - Wallet decryption failed Beursie dekripsie het misluk - Wallet passphrase was successfully changed. @@ -318,319 +255,286 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - Sign &message... - Synchronizing with network... Sinchroniseer met die netwerk ... - &Overview &Oorsig - + Node + + + Show general overview of wallet Wys algemene oorsig van die beursie - &Transactions &Transaksies - Browse transaction history Besoek transaksie geskiedenis - - Edit the list of stored addresses and labels - Wysig die lys van gestoorde adresse en etikette - - - - Show the list of addresses for receiving payments - Wys die lys van adresse vir die ontvangs van betalings - - - E&xit S&luit af - Quit application Sluit af - Show information about Myriadcoin Wys inligting oor Myriadcoin - About &Qt - Show information about Qt - + Wys inligting oor Qt - &Options... &Opsies - &Encrypt Wallet... - &Backup Wallet... - &Change Passphrase... - + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + Importing blocks from disk... - Reindexing blocks on disk... - Send coins to a Myriadcoin address - Modify configuration options for Myriadcoin - Backup wallet to another location - Change the passphrase used for wallet encryption - &Debug window - Open debugging and diagnostic console - &Verify message... - - Myriadcoin Myriadcoin - Wallet Beursie - &Send - &Receive - - &Addresses - - - - - &About Myriadcoin - - - - &Show / Hide - Show or hide the main Window - Encrypt the private keys that belong to your wallet - Sign messages with your Myriadcoin addresses to prove you own them - Verify messages to ensure they were signed with specified Myriadcoin addresses - &File &Lêer - &Settings &Instellings - &Help &Hulp - Tabs toolbar Blad nutsbalk - - [testnet] - - Myriadcoin client + Myriadcoin Core + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + + Myriadcoin client + Myriadcoin klient + - %n active connection(s) to Myriadcoin network - No block source available... - Processed %1 of %2 (estimated) blocks of transaction history. - Processed %1 blocks of transaction history. - %n hour(s) - %n day(s) - %n week(s) - + %1 and %2 + + + + %n year(s) + + + %1 behind %1 agter - Last received block was generated %1 ago. Ontvangs van laaste blok is %1 terug. - Transactions after this will not yet be visible. - Error Fout - Warning - Information Informasie - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - Up to date - Catching up... - - Confirm transaction fee - - - - Sent transaction - Incoming transaction - Date: %1 Amount: %2 Type: %3 @@ -639,29 +543,14 @@ Address: %4 - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. @@ -669,329 +558,647 @@ Address: %4 ClientModel - Network Alert + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + + + + Bytes: + + + + Amount: + Bedrag: + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + Bedrag + + + Address + Adres + + + Date + Datum + + + Confirmations + + + + Confirmed + + + + Priority + + + + Copy address + Maak kopie van adres + + + Copy label + + + + Copy amount + Kopieer bedrag + + + Copy transaction ID + + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + + + + Dust + + + + yes + + + + no + + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + (geen etiket) + + + change from %1 (%2) + + + + (change) + + + EditAddressDialog - Edit Address - &Label - - The label associated with this address book entry + The label associated with this address list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. - &Address - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - New receiving address - + Nuwe ontvangende adres - New sending address - + Nuwe stuurende adres - Edit receiving address - + Wysig ontvangende adres - Edit sending address - + Wysig stuurende adres - The entered address "%1" is already in the address book. - The entered address "%1" is not a valid Myriadcoin address. - Could not unlock wallet. - + Kon nie die beursie oopsluit nie. - New key generation failed. - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt + A new data directory will be created. + + + + name + + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core - version - Usage: Gebruik: - command-line options - UI options - Set language, for example "de_DE" (default: system locale) - Start minimized - + Set SSL root certificates for payment request (default: -system-) + + + Show splash screen on startup (default: 1) + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" can not be created. + + + + Error + + + + GB of free space available + + + + (of %1GB needed) + + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open + + OptionsDialog - Options - + Opsies - &Main - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. - Pay transaction &fee - Automatically start Myriadcoin after logging in to the system. - &Start Myriadcoin on system login - + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + Reset all client options to default. - &Reset Options - &Network - + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. - Map port using &UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - - - - - &Connect through SOCKS proxy: - - - - Proxy &IP: - - IP address of the proxy (e.g. 127.0.0.1) - - - - &Port: - Port of the proxy (e.g. 9050) - SOCKS &Version: - SOCKS version of the proxy (e.g. 5) - &Window - Show only a tray icon after minimizing the window. - &Minimize to the tray instead of the taskbar - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. - M&inimize on close - &Display - User Interface &language: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. - &Unit to show amounts in: - Choose the default subdivision unit to show in the interface and when sending coins. - Whether to show Myriadcoin addresses in the transaction list or not. - &Display addresses in transaction list - + Whether to show coin control features or not. + + + &OK - &Cancel - - &Apply - - - - default - + none + + + Confirm options reset - - Some settings may require a client restart to take effect. + Client restart required to activate changes. - - Do you want to proceed? + Client will be shutdown, do you want to proceed? - - - Warning + This change would require a client restart. - - - This setting will take effect after restarting Myriadcoin. - - - - The supplied proxy address is invalid. @@ -999,59 +1206,54 @@ Address: %4 OverviewPage - Form - + Vorm - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. - - Balance: - - - - - Unconfirmed: - - - - Wallet Beursie - + Available: + + + + Your current spendable balance + + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + + + Immature: - Mined balance that has not yet matured - + Total: + + + + Your current total balance + + + <b>Recent transactions</b> - + <b>Onlangse transaksies</b> - - Your current balance - - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - - - - - out of sync @@ -1059,579 +1261,856 @@ Address: %4 PaymentServer - + URI handling + + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + Cannot start myriadcoin: click-to-pay handler + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + + + + Network request error + + - QRCodeDialog + QObject - - QR Code Dialog + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" does not exist. - - Request Payment + Error: Cannot parse configuration file: %1. Only use key=value syntax. - - Amount: + Error: Invalid combination of -regtest and -testnet. - - Label: + Myriadcoin Core didn't yet exit safely... - - Message: + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Die adres waarheen die betaling gestuur moet word (b.v. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... - - &Save As... + &Copy Image - - Error encoding URI into QR Code. - - - - - The entered amount is invalid, please check. - - - - - Resulting URI too long, try to reduce the text for label / message. - - - - Save QR Code - - PNG Images (*.png) + PNG Image (*.png) RPCConsole - Client name - - - - - - - - - - N/A - Client version - &Information - + Debug window + + + + General + + + Using OpenSSL version - Startup time - Network - + Name + + + Number of connections - - On testnet - - - - Block chain - Current number of blocks - Estimated total blocks - Last block time - &Open - - Command-line options - - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - - - - - &Show - - - - &Console - + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + Build date - - Myriadcoin - Debug window - - - - - Myriadcoin Core - - - - Debug log file - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. - Clear console - Welcome to the Myriadcoin RPC console. - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Type <b>help</b> for an overview of available commands. + + %1 B + + + + %1 KB + + + + %1 MB + + + + %1 GB + + + + %1 m + + + + %1 h + + + + %1 h %2 m + + + + + ReceiveCoinsDialog + + &Amount: + + + + &Label: + + + + &Message: + + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + + + + Clear + + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + + + + Remove the selected entries from the list + + + + Remove + + + + Copy label + + + + Copy message + + + + Copy amount + Kopieer bedrag + + + + ReceiveRequestDialog + + QR Code + + + + Copy &URI + + + + Copy &Address + + + + &Save Image... + + + + Request payment to %1 + + + + Payment information + + + + URI + + + + Address + Adres + + + Amount + Bedrag + + + Label + Etiket + + + Message + Boodskap + + + Resulting URI too long, try to reduce the text for label / message. + + + + Error encoding URI into QR Code. + + + + + RecentRequestsTableModel + + Date + Datum + + + Label + Etiket + + + Message + Boodskap + + + Amount + Bedrag + + + (no label) + (geen etiket) + + + (no message) + + + + (no amount) + + SendCoinsDialog - - - - - - - - Send Coins + Stuur Munstukke + + + Coin Control Features + + + + Inputs... + + + + automatically selected + + + + Insufficient funds! + + + + Quantity: + + + + Bytes: + + + + Amount: + Bedrag: + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address - Send to multiple recipients at once - + Stuur aan vele ontvangers op eens - Add &Recipient - - Remove all transaction fields + Clear all fields of the form. - Clear &All - Balance: - + Balans: - - 123.456 BTC - - - - Confirm the send action - S&end S&tuur - - <b>%1</b> to %2 (%3) - - - - Confirm send coins - - Are you sure you want to send %1? + %1 to %2 - - and + Copy quantity + + + + Copy amount + Kopieer bedrag + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + + + + or - The recipient address is not valid, please recheck. - The amount to pay must be larger than 0. - The amount exceeds your balance. - The total exceeds your balance when the %1 transaction fee is included. - Duplicate address found, can only send to each address once per send operation. - - Error: Transaction creation failed! + Transaction creation failed! - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + + + + (no label) + (geen etiket) + + + Warning: Unknown change address + + + + Are you sure you want to send? + + + + added as transaction fee + + + + Payment request expired + + + + Invalid payment address %1 SendCoinsEntry - - Form - - - - A&mount: - Pay &To: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Die adres waarheen die betaling gestuur moet word (b.v. 1H7wyVL5HCNoVFyyBJSDojwyxcCChU7TPA) + Die adres waarheen die betaling gestuur moet word (b.v. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book - &Label: - - Choose address from address book + Choose previously used address + + + + This is a normal payment. - Alt+A - Paste address from clipboard - Alt+P - - Remove this recipient + Remove this entry - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + Boodskap: + + + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. SignVerifyMessageDialog - Signatures - Sign / Verify a Message - &Sign Message &Teken boodskap - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book + Choose previously used address - - Alt+A - Paste address from clipboard - Alt+P - Enter the message you want to sign here - Signature Handtekening - Copy the current signature to the system clipboard - Sign the message to prove you own this Myriadcoin address - Sign &Message Teken &Boodskap - Reset all sign message fields - - Clear &All - &Verify Message - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address - Verify &Message - Reset all verify message fields - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - + Die adres waarheen die betaling gestuur moet word (b.v. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature - - Enter Myriadcoin signature - - - - - The entered address is invalid. - - - - Please check the address and try again. - - The entered address does not refer to a key. - Wallet unlock was cancelled. - Private key for the entered address is not available. - Message signing failed. - Message signed. - The signature could not be decoded. - - Please check the signature and try again. - The signature did not match the message digest. - Message verification failed. - Message verified. @@ -1639,199 +2118,171 @@ Address: %4 SplashScreen - - The Myriadcoin developers + Myriadcoin Core + + + + The Myriadcoin Core developers - [testnet] + + TrafficGraphWidget + + KB/s + + + TransactionDesc - Open until %1 - + conflicted + + + %1/offline - %1/unconfirmed - %1 confirmations - Status - , broadcast through %n node(s) - Date Datum - Source - Generated - - From Van - - - To Na - - own address eie adres - label etiket - - - - - Credit Krediet - matures in %n more block(s) - not accepted nie aanvaar nie - - - - Debit Debiet - Transaction fee Transaksie fooi - Net amount Netto bedrag - Message Boodskap - Comment - Transaction ID Transaksie ID - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Merchant + + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Debug information - Transaction - Inputs - Amount Bedrag - true waar - false onwaar - , has not been successfully broadcast yet - Open for %n more block(s) - unknown - + onbekend TransactionDescDialog - Transaction details - This pane shows a detailed description of the transaction @@ -1839,117 +2290,102 @@ Address: %4 TransactionTableModel - Date Datum - Type Tipe - Address Adres - Amount Bedrag + + Immature (%1 confirmations, will be available after %2) + + - Open for %n more block(s) - Open until %1 - - Offline (%1 confirmations) - - - - - Unconfirmed (%1 of %2 confirmations) - - - - Confirmed (%1 confirmations) - - - Mined balance will be available when it matures in %n more block(s) - - - This block was not received by any other nodes and will probably not be accepted! - Generated but not accepted - + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + Received with Ontvang met - Received from - + Ontvang van - Sent to Gestuur na - Payment to yourself - + Betalings Aan/na jouself - Mined Gemyn - (n/a) (n.v.t) - Transaction status. Hover over this field to show number of confirmations. - Date and time that the transaction was received. Datum en tyd wat die transaksie ontvang was. - Type of transaction. Tipe transaksie. - Destination address of transaction. - Amount removed from or added to balance. @@ -1957,337 +2393,278 @@ Address: %4 TransactionView - - All Alles - Today Vandag - This week Hierdie week - This month Hierdie maand - Last month Verlede maand - This year Hierdie jaar - Range... - + Reeks... - Received with Ontvang met - Sent to Gestuur na - To yourself Aan/na jouself - Mined Gemyn - Other Ander - Enter address or label to search - Min amount Min bedrag - Copy address Maak kopie van adres - Copy label - Copy amount - + Kopieer bedrag - Copy transaction ID - Edit label - Show transaction details - - Export Transaction Data + Export Transaction History + + + + Exporting Failed + + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + + + + The transaction history was successfully saved to %1. - Comma separated file (*.csv) - Confirmed - Date Datum - Type Tipe - Label Etiket - Address Adres - Amount Bedrag - ID ID - - Error exporting - Fout uitvoering - - - - Could not write to file %1. - Kon nie na die %1 lêer skryf nie - - - Range: - + Reeks: - to + aan + + + + WalletFrame + + No wallet has been loaded. WalletModel - Send Coins - + Stuur Munstukke WalletView - &Export - Export the data in the current tab to a file - Backup Wallet - Wallet Data (*.dat) - Backup Failed - - There was an error trying to save the wallet data to the new location. + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. - Backup Successful - - - The wallet data was successfully saved to the new location. - - bitcoin-core - - Myriadcoin version - Myriadcoin weergawe - - - Usage: Gebruik: - - Send command to -server or myriadcoind - - - - List commands - Get help for a command - Options: - + Opsies: - Specify configuration file (default: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) - Specify data directory - - Set database cache size in megabytes (default: 25) - - - - Listen for connections on <port> (default: 8333 or testnet: 18333) - + Luister vir konneksies op <port> (standaard: 8333 of testnet: 18333) - Maintain at most <n> connections to peers (default: 125) - + Onderhou op die meeste <n> konneksies na eweknieë (standaard: 125) - Connect to a node to retrieve peer addresses, and disconnect - Specify your own public address - Threshold for disconnecting misbehaving peers (default: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) - Accept command line and JSON-RPC commands - + Myriadcoin Core RPC client version + + + Run in the background as a daemon and accept commands - Use the test network - + Gebruik die toets netwerk - Accept connections from outside (default: 1 if no -proxy or -connect) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2302,612 +2679,686 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications - + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. - + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + Attempt to recover private keys from a corrupt wallet.dat - + Myriadcoin Core Daemon + + + Block creation options: - + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + Connect only to the specified node(s) - + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + Corrupted block database detected - + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + Discover own IP address (default: 1 when listening and no -externalip) - + Do not load the wallet and disable wallet RPC calls + + + Do you want to rebuild the block database now? - Error initializing block database - Error initializing wallet database environment %s! - Error loading block database - Error opening block database - Error: Disk space is low! Fout: Hardeskyf spasie is baie laag! - Error: Wallet locked, unable to create transaction! - Error: system error: - Failed to listen on any port. Use -listen=0 if you want this. - Failed to read block info - Failed to read block - Failed to sync block index - Failed to write block index - Failed to write block info - Failed to write block - Failed to write file info - Failed to write to coin database - Failed to write transaction index - Failed to write undo data - + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + Find peers using DNS lookup (default: 1 unless -connect) - + Force safe mode (default: 0) + + + Generate coins (default: 0) - How many blocks to check at startup (default: 288, 0 = all) - - How thorough the block verification is (0-4, default: 3) + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' - Not enough file descriptors available. - + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + Rebuild block chain index from current blk000??.dat files - + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + Set the number of threads to service RPC calls (default: 4) - + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + Verifying blocks... - Verifying wallet... - + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + + + Imports blocks from external blk000??.dat file - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) - Information Informasie - - Invalid -tor address: '%s' - - - - Invalid amount for -minrelaytxfee=<amount>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' - + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + Maintain a full transaction index (default: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Only accept block chain matching built-in checkpoints (default: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - Output extra debugging information. Implies all other -debug* options + Print block on startup, if found in block index - - Output extra network debugging information + Print block tree on startup (default: 0) - - Prepend debug output with timestamp + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) - - Select the version of socks proxy to use (4-5, default: 5) + Send command to Myriadcoin Core - Send trace/debug info to console instead of debug.log file - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - Set minimum block size in bytes (default: 0) - + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + Shrink debug.log file on client startup (default: 1 when no -debug) - Signing transaction failed - Specify connection timeout in milliseconds (default: 5000) - + Start Myriadcoin Core Daemon + + + System error: Sisteem fout: - Transaction amount too small - Transaction amounts must be positive - Transaction too large - Use UPnP to map the listening port (default: 0) - Use UPnP to map the listening port (default: 1 when listening) - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - Username for JSON-RPC connections - Warning - Warning: This version is obsolete, upgrade required! - - You need to rebuild the databases using -reindex to change -txindex + Zapping all transactions from wallet... + + + + on startup + + + + version - wallet.dat corrupt, salvage failed - Password for JSON-RPC connections - Allow JSON-RPC connections from specified IP address - Send commands to node running on <ip> (default: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) - Upgrade wallet to latest format - Set key pool size to <n> (default: 100) - Rescan the block chain for missing wallet transactions - Use OpenSSL (https) for JSON-RPC connections - Server certificate file (default: server.cert) - Server private key (default: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - This help message - + Hierdie help boodskap - Unable to bind to %s on this computer (bind returned error %d, %s) - - Connect through socks proxy - - - - Allow DNS lookups for -addnode, -seednode and -connect - Loading addresses... Laai adresse... - Error loading wallet.dat: Wallet corrupted - Error loading wallet.dat: Wallet requires newer version of Myriadcoin - Wallet needed to be rewritten: restart Myriadcoin to complete - Error loading wallet.dat - Invalid -proxy address: '%s' - Unknown network specified in -onlynet: '%s' - Unknown -socks proxy version requested: %i - Cannot resolve -bind address: '%s' - Cannot resolve -externalip address: '%s' - Invalid amount for -paytxfee=<amount>: '%s' - Invalid amount - + Ongeldige bedrag - Insufficient funds - + Onvoldoende fondse - Loading block index... Laai blok indeks... - Add a node to connect to and attempt to keep the connection open - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - Loading wallet... Laai beursie... - Cannot downgrade wallet - Cannot write default address - Rescanning... - Done loading Klaar gelaai - To use the %s option - Error Fout - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_ar.ts b/src/qt/locale/bitcoin_ar.ts index 810df23c..2384c0e8 100644 --- a/src/qt/locale/bitcoin_ar.ts +++ b/src/qt/locale/bitcoin_ar.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - عن Myriadcoin + About Myriadcoin Core + - - <b>Myriadcoin</b> version - نسخة <b>Myriadcoin</b> + <b>Myriadcoin Core</b> version + - This is experimental software. @@ -23,294 +19,235 @@ This product includes software developed by the OpenSSL Project for use in the O - Copyright + الحقوق محفوظة + + + The Myriadcoin Core developers - - The Myriadcoin developers + (%1-bit) AddressBookPage - - Address Book - دفتر العناوين - - - Double-click to edit address or label - أنقر على الماوس مرتين لتعديل عنوان + أنقر بالماوس مرتين لتعديل العنوان او الوصف - Create a new address - قم بعمل عنوان جديد + انشأ عنوان جديد + + + &New + &جديد - Copy the currently selected address to the system clipboard قم بنسخ القوانين المختارة لحافظة النظام - - &New Address - + &Copy + &نسخ - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - + C&lose + &اغلاق - &Copy Address - + انسخ العنوان - - Show &QR Code - - - - - Sign a message to prove you own a Myriadcoin address - - - - - Sign &Message - - - - Delete the currently selected address from the list - + حذف العنوان المحدد من القائمة - Export the data in the current tab to a file - &Export - + &تصدير - - Verify a message to ensure it was signed with a specified Myriadcoin address - - - - - &Verify Message - - - - &Delete &أمسح - + Choose the address to send coins to + اختر العنوان الذي سترسل له العملات + + + Choose the address to receive coins with + اختر العنوان الذي تستقبل عليه العملات + + + C&hoose + &اختر + + + Sending addresses + ارسال العناوين + + + Receiving addresses + استقبال العناوين + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + Copy &Label - + نسخ &الوصف - &Edit - + تعديل - - Send &Coins - + Export Address List + تصدير قائمة العناوين - - Export Address Book Data - - - - Comma separated file (*.csv) - - Error exporting - + Exporting Failed + فشل التصدير - - Could not write to file %1. + There was an error trying to save the address list to %1. AddressTableModel - Label - + وصف - Address - + عنوان - (no label) - + (لا وصف) AskPassphraseDialog - Passphrase Dialog - Enter passphrase - + ادخل كلمة المرور - New passphrase - + كلمة مرور جديدة - Repeat new passphrase - + ادخل كلمة المرور الجديدة مرة أخرى - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - + أدخل كلمة مرور جديدة للمحفظة. <br/>الرجاء استخدام كلمة مرور تتكون <b>من 10 حروف عشوائية على الاقل</b>, أو <b>أكثر من 7 كلمات</b>. - Encrypt wallet - + تشفير المحفظة - This operation needs your wallet passphrase to unlock the wallet. - + هذه العملية تحتاج كلمة مرور محفظتك لفتحها - Unlock wallet - + إفتح المحفظة - This operation needs your wallet passphrase to decrypt the wallet. - + هذه العملية تحتاج كلمة مرور محفظتك لفك تشفيرها - Decrypt wallet - + فك تشفير المحفظة - Change passphrase - + تغيير كلمة المرور - Enter the old and new passphrase to the wallet. - + أدخل كلمة المرور القديمة والجديدة للمحفظة. - Confirm wallet encryption - + تأكيد تشفير المحفظة - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! - Are you sure you wish to encrypt your wallet? - 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. - - Warning: The Caps Lock key is on! - + تحذير: مفتاح الحروف الكبيرة مفعل - - Wallet encrypted - + محفظة مشفرة - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. - + بتكوين سوف يغلق الآن لإنهاء عملية التشفير. تذكر أن التشفير لا يستطيع حماية محفظتك تمامًا من السرقة من خلال البرمجيات الخبيثة التي تصيب جهازك - - - - Wallet encryption failed - + فشل تشفير المحفظة - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - + فشل تشفير المحفظة بسبب خطأ داخلي. لم يتم تشفير محفظتك. - - The supplied passphrases do not match. - + كلمتي المرور ليستا متطابقتان - Wallet unlock failed - + فشل فتح المحفظة - - - The passphrase entered for the wallet decryption was incorrect. - + كلمة المرور التي تم إدخالها لفك تشفير المحفظة غير صحيحة. - Wallet decryption failed - + فشل فك التشفير المحفظة - Wallet passphrase was successfully changed. @@ -318,350 +255,306 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - Sign &message... - + التوقيع و الرسائل - Synchronizing with network... - + مزامنة مع الشبكة ... - &Overview + &نظرة عامة + + + Node - Show general overview of wallet - + إظهار نظرة عامة على المحفظة - &Transactions - + &المعاملات - Browse transaction history - + تصفح سجل المعاملات - - Edit the list of stored addresses and labels - - - - - Show the list of addresses for receiving payments - - - - E&xit - + خروج - Quit application - + الخروج من التطبيق - Show information about Myriadcoin - + إظهار معلومات حول بت كوين - About &Qt - + عن - Show information about Qt - + اظهر المعلومات - &Options... - + &خيارات ... - &Encrypt Wallet... - + &تشفير المحفظة - &Backup Wallet... - + &نسخ احتياط للمحفظة - &Change Passphrase... + &تغيير كلمة المرور + + + &Sending addresses... - + &Receiving addresses... + + + + Open &URI... + افتح &URI... + + Importing blocks from disk... - Reindexing blocks on disk... - Send coins to a Myriadcoin address - + ارسل عملات الى عنوان بيتكوين - Modify configuration options for Myriadcoin - Backup wallet to another location - + احفظ نسخة احتياطية للمحفظة في مكان آخر - Change the passphrase used for wallet encryption - + تغيير كلمة المرور المستخدمة لتشفير المحفظة - &Debug window - + &نافذة المعالجة - Open debugging and diagnostic console - &Verify message... - + &التحقق من الرسالة... - - Myriadcoin - + بت كوين - Wallet - + محفظة - &Send - + %ارسل - &Receive - + &استقبل - - &Addresses - - - - - &About Myriadcoin - - - - &Show / Hide - + &عرض / اخفاء - Show or hide the main Window - + عرض او اخفاء النافذة الرئيسية - Encrypt the private keys that belong to your wallet - Sign messages with your Myriadcoin addresses to prove you own them - Verify messages to ensure they were signed with specified Myriadcoin addresses - &File - + &ملف - &Settings - + &الاعدادات - &Help - + &مساعدة - Tabs toolbar - + شريط أدوات علامات التبويب - - [testnet] + [testnet] + + + Myriadcoin Core - - Myriadcoin client + Request payments (generates QR codes and myriadcoin: URIs) + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + + Myriadcoin client + عميل بت كوين + - %n active connection(s) to Myriadcoin network - No block source available... - Processed %1 of %2 (estimated) blocks of transaction history. - Processed %1 blocks of transaction history. - %n hour(s) - + %n ساعة%n ساعة%n ساعة%n ساعات%n ساعات%n ساعات - %n day(s) - + %n يوم%n يوم%n يوم%n أيام%n أيام%n ايام - %n week(s) + %n اسبوع%n اسبوع%n اسبوع%n اسابيع%n اسابيع%n اسابيع + + + %1 and %2 + + + + %n year(s) - %1 behind - Last received block was generated %1 ago. - Transactions after this will not yet be visible. - Error - + خطأ - Warning - + تحذير - Information - + معلومات - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - Up to date - + محدث - Catching up... - + اللحاق بالركب ... - - Confirm transaction fee - - - - Sent transaction - + المعاملات المرسلة - Incoming transaction - + المعاملات الواردة - Date: %1 Amount: %2 Type: %3 Address: %4 - + التاريخ : 1% +القيمة: 2% +النوع: 3% +العنوان: 4% + - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - + المحفظة <b>مشفرة</b> و <b>مفتوحة</b> حاليا - Wallet is <b>encrypted</b> and currently <b>locked</b> - + المحفظة <b>مشفرة</b> و <b>مقفلة</b> حاليا - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. @@ -669,1625 +562,2113 @@ Address: %4 ClientModel - Network Alert + تنبيه من الشبكة + + + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + الكمية: + + + Bytes: + + + + Amount: + القيمة + + + Priority: + + + + Fee: + رسوم : + + + Low Output: + + + + After Fee: + + + + Change: + + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + المبلغ + + + Address + عنوان + + + Date + التاريخ + + + Confirmations + تأكيد + + + Confirmed + تأكيد + + + Priority + أفضلية + + + Copy address + انسخ العنوان + + + Copy label + انسخ التسمية + + + Copy amount + نسخ القيمة + + + Copy transaction ID + نسخ رقم المعاملة + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + نسخ الكمية + + + Copy fee + نسخ الرسوم + + + Copy after fee + نسخ بعد الرسوم + + + Copy bytes + + + + Copy priority + نسخ الافضلية + + + Copy low output + + + + Copy change + نسخ التغييرات + + + highest + الاعلى + + + higher + اعلى + + + high + عالي + + + medium-high + + + + medium + + + + low-medium + + + + low + منخفض + + + lower + + + + lowest + + + + (%1 locked) + + + + none + لا شيء + + + Dust + + + + yes + نعم + + + no + لا + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + (لا وصف) + + + change from %1 (%2) + + + + (change) EditAddressDialog - Edit Address - + عدل العنوان - &Label + &وصف + + + The label associated with this address list entry - - The label associated with this address book entry + The address associated with this address list entry. This can only be modified for sending addresses. - &Address - + &العنوان - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - New receiving address - + عنوان أستلام جديد - New sending address - + عنوان إرسال جديد - Edit receiving address - + تعديل عنوان الأستلام - Edit sending address - + تعديل عنوان الارسال - The entered address "%1" is already in the address book. - + هدا العنوان "%1" موجود مسبقا في دفتر العناوين - The entered address "%1" is not a valid Myriadcoin address. - Could not unlock wallet. - + يمكن فتح المحفظة. - New key generation failed. - + فشل توليد مفتاح جديد. - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt + A new data directory will be created. + سيتم انشاء دليل بيانات جديد + + + name + الاسم + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + لا يمكن انشاء دليل بيانات هنا . + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core - version - + النسخة - Usage: - + المستخدم - command-line options - UI options - + خيارات UI - Set language, for example "de_DE" (default: system locale) - Start minimized - + Set SSL root certificates for payment request (default: -system-) + + + Show splash screen on startup (default: 1) + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + أهلا + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + استخدام دليل البانات الافتراضي + + + Use a custom data directory: + استخدام دليل بيانات مخصص: + + + Myriadcoin + بت كوين + + + Error: Specified data directory "%1" can not be created. + + + + Error + خطأ + + + GB of free space available + قيقا بايت مساحة متاحة + + + (of %1GB needed) + ( بحاجة الى 1%قيقا بايت ) + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + حدد ملف طلب الدفع + + + Select payment request file to open + حدد ملف طلب الدفع لفتحه + OptionsDialog - Options - + خيارات ... - &Main - + &الرئيسي - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. - Pay transaction &fee - + ادفع &رسوم المعاملة - Automatically start Myriadcoin after logging in to the system. - &Start Myriadcoin on system login - + Size of &database cache + + + + MB + م ب + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + عنوان النطاق للطرف الثالث + + + Active command-line options that override above options: + + + Reset all client options to default. - &Reset Options - + &استعادة الخيارات - &Network + &الشبكة + + + (0 = auto, <0 = leave that many cores free) + + + + W&allet + &محفظة + + + Expert + تصدير + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change - Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. - Map port using &UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - - - - - &Connect through SOCKS proxy: - - - - Proxy &IP: - + بروكسي &اي بي: - - IP address of the proxy (e.g. 127.0.0.1) - - - - &Port: - + &المنفذ: - Port of the proxy (e.g. 9050) - + منفذ البروكسي (مثلا 9050) - SOCKS &Version: - SOCKS version of the proxy (e.g. 5) - &Window - + نافذه - Show only a tray icon after minimizing the window. - &Minimize to the tray instead of the taskbar - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. - M&inimize on close - &Display - + &عرض - User Interface &language: - + واجهة المستخدم &اللغة: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. - &Unit to show amounts in: - Choose the default subdivision unit to show in the interface and when sending coins. - Whether to show Myriadcoin addresses in the transaction list or not. - &Display addresses in transaction list + عرض العناوين في قائمة الصفقة + + + Whether to show coin control features or not. - &OK - + تم - &Cancel - + الغاء - - &Apply - - - - default - + الافتراضي + + + none + لا شيء - Confirm options reset + تأكيد استعادة الخيارات + + + Client restart required to activate changes. - - Some settings may require a client restart to take effect. + Client will be shutdown, do you want to proceed? - - Do you want to proceed? + This change would require a client restart. - - - Warning - - - - - - This setting will take effect after restarting Myriadcoin. - - - - The supplied proxy address is invalid. - + عنوان الوكيل توفيره غير صالح. OverviewPage - Form - + نمودج - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. - - Balance: - - - - - Unconfirmed: - - - - Wallet + محفظة + + + Available: + متوفر + + + Your current spendable balance + + + + Pending: + معلق: + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance - Immature: - + غير ناضجة - Mined balance that has not yet matured - + Total: + المجموع: + + + Your current total balance + رصيدك الكلي الحالي + + <b>Recent transactions</b> - + اخر المعملات - - Your current balance - - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - - - - - out of sync - + خارج المزامنه PaymentServer - + URI handling + + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + Cannot start myriadcoin: click-to-pay handler + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + استجابة سيئة من الملقم٪ 1 + + + Payment acknowledged + + + + Network request error + + - QRCodeDialog + QObject - - QR Code Dialog + Myriadcoin + بت كوين + + + Error: Specified data directory "%1" does not exist. - - Request Payment + Error: Cannot parse configuration file: %1. Only use key=value syntax. - - Amount: + Error: Invalid combination of -regtest and -testnet. - - Label: + Myriadcoin Core didn't yet exit safely... - - Message: - + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + إدخال عنوانBitcoin (مثال :1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + &حفظ الصورة - - &Save As... - + &Copy Image + &نسخ الصورة - - Error encoding URI into QR Code. - - - - - The entered amount is invalid, please check. - - - - - Resulting URI too long, try to reduce the text for label / message. - - - - Save QR Code - + حفظ رمز الاستجابة السريعة QR - - PNG Images (*.png) + PNG Image (*.png) RPCConsole - Client name - + اسم العميل - - - - - - - - - - N/A - + غير معروف - Client version - + نسخه العميل - &Information + المعلومات + + + Debug window - + General + عام + + Using OpenSSL version - Startup time - + وقت البدء - Network - + الشبكه + + + Name + الاسم - Number of connections - + عدد الاتصالات - - On testnet - - - - Block chain - Current number of blocks - Estimated total blocks - Last block time - &Open - + الفتح - - Command-line options - - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - - - - - &Show - - - - &Console - + &Network Traffic + &حركة مرور الشبكة + + + &Clear + &مسح + + + Totals + المجاميع + + + In: + داخل: + + + Out: + خارج: + + Build date - + وقت البناء - - Myriadcoin - Debug window - - - - - Myriadcoin Core - - - - Debug log file - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. - Clear console - Welcome to the Myriadcoin RPC console. - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + استخدم اسهم الاعلى و الاسفل للتنقل بين السجلات و <b>Ctrl-L</b> لمسح الشاشة + + + Type <b>help</b> for an overview of available commands. - - Type <b>help</b> for an overview of available commands. + %1 B + 1% بايت + + + %1 KB + 1% كيلو بايت + + + %1 MB + 1% ميقا بايت + + + %1 GB + 1% قيقا بايت + + + %1 m + 1% دقيقة + + + %1 h + 1% ساعة + + + %1 h %2 m + 1% ساعة 2% دقيقة + + + + ReceiveCoinsDialog + + &Amount: + &القيمة + + + &Label: + &الوصف: + + + &Message: + &رسالة: + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + مسح كل حقول النموذج المطلوبة + + + Clear + مسح + + + Requested payments history + سجل طلبات الدفع + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + عرض + + + Remove the selected entries from the list + + + + Remove + ازل + + + Copy label + انسخ التسمية + + + Copy message + انسخ الرسالة + + + Copy amount + نسخ القيمة + + + + ReceiveRequestDialog + + QR Code + رمز كيو ار + + + Copy &URI + نسخ &URI + + + Copy &Address + نسخ &العنوان + + + &Save Image... + &حفظ الصورة + + + Request payment to %1 + + + + Payment information + + + + URI + URI + + + Address + عنوان + + + Amount + المبلغ + + + Label + وصف + + + Message + رسالة + + + Resulting URI too long, try to reduce the text for label / message. + + + + Error encoding URI into QR Code. + + + + + RecentRequestsTableModel + + Date + التاريخ + + + Label + وصف + + + Message + رسالة + + + Amount + المبلغ + + + (no label) + (لا وصف) + + + (no message) + ( لا رسائل ) + + + (no amount) SendCoinsDialog - - - - - - - - Send Coins + إرسال Coins + + + Coin Control Features + + + + Inputs... + + + + automatically selected + اختيار تلقائيا + + + Insufficient funds! + + + + Quantity: + الكمية : + + + Bytes: + + + + Amount: + القيمة : + + + Priority: + افضلية : + + + Fee: + رسوم : + + + Low Output: + + + + After Fee: + بعد الرسوم : + + + Change: + تعديل : + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address - Send to multiple recipients at once - + إرسال إلى عدة مستلمين في وقت واحد - Add &Recipient + أضافة &مستلم + + + Clear all fields of the form. - - Remove all transaction fields - - - - Clear &All - + مسح الكل - Balance: - + الرصيد: - - 123.456 BTC - - - - Confirm the send action - + تأكيد الإرسال - S&end - + &ارسال - - <b>%1</b> to %2 (%3) - - - - Confirm send coins + تأكيد الإرسال Coins + + + %1 to %2 + 1% الى 2% + + + Copy quantity + نسخ الكمية + + + Copy amount + نسخ القيمة + + + Copy fee + نسخ الرسوم + + + Copy after fee + نسخ بعد الرسوم + + + Copy bytes - - Are you sure you want to send %1? + Copy priority + نسخ الافضلية + + + Copy low output - - and - + Copy change + نسخ التعديل + + + Total Amount %1 (= %2) + مجموع المبلغ %1 (= %2) + + + or + أو - The recipient address is not valid, please recheck. - The amount to pay must be larger than 0. - + المبلغ المدفوع يجب ان يكون اكبر من 0 - The amount exceeds your balance. - + القيمة تتجاوز رصيدك - The total exceeds your balance when the %1 transaction fee is included. - + المجموع يتجاوز رصيدك عندما يتم اضافة 1% رسوم العملية - Duplicate address found, can only send to each address once per send operation. - - Error: Transaction creation failed! + Transaction creation failed! - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + + + + (no label) + (لا وصف) + + + Warning: Unknown change address + + + + Are you sure you want to send? + + + + added as transaction fee + + + + Payment request expired + + + + Invalid payment address %1 SendCoinsEntry - - Form - - - - A&mount: - Pay &To: - + ادفع &الى : - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book - + إدخال تسمية لهذا العنوان لإضافته إلى دفتر العناوين الخاص بك - &Label: + &وصف : + + + Choose previously used address - - Choose address from address book + This is a normal payment. - Alt+A - + Alt+A - Paste address from clipboard - + الصق العنوان من لوحة المفاتيح - Alt+P + Alt+P + + + Remove this entry - - Remove this recipient + Message: + الرسائل + + + This is a verified payment request. - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Enter a label for this address to add it to the list of used addresses + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. + لا توقف عمل الكمبيوتر حتى تختفي هذه النافذة + SignVerifyMessageDialog - Signatures - Sign / Verify a Message - &Sign Message - + &توقيع الرسالة - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book + Choose previously used address - - Alt+A - + Alt+A - Paste address from clipboard - + انسخ العنوان من لوحة المفاتيح - Alt+P - + Alt+P - Enter the message you want to sign here - + ادخل الرسالة التي تريد توقيعها هنا - Signature - + التوقيع - Copy the current signature to the system clipboard - Sign the message to prove you own this Myriadcoin address - + وقع الرسالة لتثبت انك تمتلك عنوان البت كوين هذا - Sign &Message - + توقيع $الرسالة - Reset all sign message fields - - Clear &All - + مسح الكل - &Verify Message - + &تحقق رسالة - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address - Verify &Message - + تحقق &الرسالة - Reset all verify message fields - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - + إدخال عنوانBitcoin (مثال :1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature - + اضغط "توقيع الرسالة" لتوليد التوقيع - - Enter Myriadcoin signature - - - - - The entered address is invalid. - + العنوان المدخل غير صالح - - - - Please check the address and try again. - + الرجاء التأكد من العنوان والمحاولة مرة اخرى - - The entered address does not refer to a key. - + العنوان المدخل لا يشير الى مفتاح - Wallet unlock was cancelled. - + تم الغاء عملية فتح المحفظة - Private key for the entered address is not available. - + المفتاح الخاص للعنوان المدخل غير موجود. - Message signing failed. - + فشل توقيع الرسالة. - Message signed. - + الرسالة موقعة. - The signature could not be decoded. - - Please check the signature and try again. - + فضلا تاكد من التوقيع وحاول مرة اخرى - The signature did not match the message digest. - Message verification failed. - + فشلت عملية التأكد من الرسالة. - Message verified. - + تم تأكيد الرسالة. SplashScreen - - The Myriadcoin developers + Myriadcoin Core + + + + The Myriadcoin Core developers - [testnet] + [testnet] + + + + TrafficGraphWidget + + KB/s TransactionDesc - Open until %1 - + مفتوح حتى 1٪ + + + conflicted + يتعارض - %1/offline - + 1% غير متواجد - %1/unconfirmed - + غير مؤكدة/1% - %1 confirmations - + تأكيد %1 - Status - + الحالة. - , broadcast through %n node(s) - Date - + التاريخ - Source - + المصدر - Generated - + تم اصداره. - - From - + من - - - To - + الى - - own address - + عنوانه - label - + علامة - - - - - Credit - matures in %n more block(s) - not accepted - + غير مقبولة - - - - Debit - + دين - Transaction fee - + رسوم المعاملة - Net amount - Message - + رسالة - Comment - + تعليق - Transaction ID + رقم المعاملة + + + Merchant + تاجر + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - Debug information - Transaction - + معاملة - Inputs - Amount - + المبلغ - true - + صحيح - false - + خاطئ - , has not been successfully broadcast yet - + , لم يتم حتى الآن البث بنجاح - Open for %n more block(s) - unknown - + غير معروف TransactionDescDialog - Transaction details - + تفاصيل المعاملة - This pane shows a detailed description of the transaction - + يبين هذا الجزء وصفا مفصلا لهده المعاملة TransactionTableModel - Date - + التاريخ - Type - + النوع - Address - + عنوان - Amount + المبلغ + + + Immature (%1 confirmations, will be available after %2) - Open for %n more block(s) - Open until %1 - + مفتوح حتى 1٪ - - Offline (%1 confirmations) - - - - - Unconfirmed (%1 of %2 confirmations) - - - - Confirmed (%1 confirmations) - - - - - Mined balance will be available when it matures in %n more block(s) - + تأكيد الإرسال Coins - This block was not received by any other nodes and will probably not be accepted! - + لم يتم تلقى هذه الكتلة (Block) من قبل أي العقد الأخرى وربما لن تكون مقبولة! - Generated but not accepted + ولدت ولكن لم تقبل + + + Offline + غير متصل + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted - Received with - + استقبل مع - Received from - + استقبل من - Sent to - + أرسل إلى - Payment to yourself - + دفع لنفسك - Mined - + Mined - (n/a) - + غير متوفر - Transaction status. Hover over this field to show number of confirmations. - + حالة المعاملة. تحوم حول هذا الحقل لعرض عدد التأكيدات. - Date and time that the transaction was received. - + التاريخ والوقت الذي تم فيه تلقي المعاملة. - Type of transaction. - + نوع المعاملات - Destination address of transaction. - + عنوان وجهة المعاملة - Amount removed from or added to balance. - + المبلغ الذي أزيل أو أضيف الى الرصيد TransactionView - - All - + الكل - Today - + اليوم - This week - + هدا الاسبوع - This month - + هدا الشهر - Last month - + الشهر الماضي - This year - + هدا العام - Range... - + المدى... - Received with - + استقبل مع - Sent to - + أرسل إلى - To yourself - + إليك - Mined - + Mined - Other - + اخرى - Enter address or label to search - + ادخل عنوان أووصف للبحث - Min amount - + الحد الأدنى - Copy address - + انسخ عنوان - Copy label - + انسخ التسمية - Copy amount - + نسخ الكمية - Copy transaction ID - + نسخ رقم العملية - Edit label - + عدل الوصف - Show transaction details + عرض تفاصيل المعاملة + + + Export Transaction History - - Export Transaction Data + Exporting Failed + فشل التصدير + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + نجح التصدير + + + The transaction history was successfully saved to %1. - Comma separated file (*.csv) - Confirmed - + تأكيد - Date - + التاريخ - Type - + النوع - Label - + وصف - Address - + عنوان - Amount - + المبلغ - ID - + العنوان - - Error exporting - - - - - Could not write to file %1. - - - - Range: - + المدى: - to + الى + + + + WalletFrame + + No wallet has been loaded. WalletModel - Send Coins - + إرسال Coins WalletView - &Export - + &تصدير - Export the data in the current tab to a file - Backup Wallet - + نسخ احتياط للمحفظة - Wallet Data (*.dat) - Backup Failed + فشل النسخ الاحتياطي + + + There was an error trying to save the wallet data to %1. - - There was an error trying to save the wallet data to the new location. + The wallet data was successfully saved to %1. - Backup Successful - - - - - The wallet data was successfully saved to the new location. - + نجاح النسخ الاحتياطي bitcoin-core - - Myriadcoin version - - - - Usage: - + المستخدم - - Send command to -server or myriadcoind - - - - List commands - + اعرض الأوامر - Get help for a command - + مساعدة في كتابة الاوامر - Options: - + خيارات: - Specify configuration file (default: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) - Specify data directory - + حدد مجلد المعلومات - - Set database cache size in megabytes (default: 25) - - - - Listen for connections on <port> (default: 8333 or testnet: 18333) - Maintain at most <n> connections to peers (default: 125) - Connect to a node to retrieve peer addresses, and disconnect - Specify your own public address - Threshold for disconnecting misbehaving peers (default: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) - Accept command line and JSON-RPC commands - + Myriadcoin Core RPC client version + + + Run in the background as a daemon and accept commands - Use the test network - + استخدم التحقق من الشبكه - Accept connections from outside (default: 1 if no -proxy or -connect) - + قبول الاتصالات من خارج - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2302,612 +2683,686 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications - + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. - + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + Attempt to recover private keys from a corrupt wallet.dat - + Myriadcoin Core Daemon + + + Block creation options: - + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + Connect only to the specified node(s) - + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + Corrupted block database detected - + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + Discover own IP address (default: 1 when listening and no -externalip) - + Do not load the wallet and disable wallet RPC calls + + + Do you want to rebuild the block database now? - Error initializing block database - Error initializing wallet database environment %s! - Error loading block database - Error opening block database - Error: Disk space is low! - + تحذير: مساحة القرص منخفضة - Error: Wallet locked, unable to create transaction! - + تحذير: المحفظة مغلقة , لا تستطيع تنفيذ المعاملة - Error: system error: - + خطأ: خطأ في النظام: - Failed to listen on any port. Use -listen=0 if you want this. - + فشل في الاستماع على أي منفذ. استخدام الاستماع = 0 إذا كنت تريد هذا. - Failed to read block info - Failed to read block - Failed to sync block index - Failed to write block index - Failed to write block info - Failed to write block - Failed to write file info - Failed to write to coin database - Failed to write transaction index - Failed to write undo data - + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + Find peers using DNS lookup (default: 1 unless -connect) - + Force safe mode (default: 0) + + + Generate coins (default: 0) - How many blocks to check at startup (default: 288, 0 = all) - - How thorough the block verification is (0-4, default: 3) + If <category> is not supplied, output all debugging information. - + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' + عنوان اونيون غير صحيح : '%s' + + Not enough file descriptors available. - + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + Rebuild block chain index from current blk000??.dat files - + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + Set the number of threads to service RPC calls (default: 4) - + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + Verifying blocks... - Verifying wallet... + التحقق من المحفظة ... + + + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + خيارات المحفظة : + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex - Imports blocks from external blk000??.dat file - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) - Information - + معلومات - - Invalid -tor address: '%s' - - - - Invalid amount for -minrelaytxfee=<amount>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' - + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + Maintain a full transaction index (default: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Only accept block chain matching built-in checkpoints (default: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - Output extra debugging information. Implies all other -debug* options + Print block on startup, if found in block index - - Output extra network debugging information + Print block tree on startup (default: 0) - - Prepend debug output with timestamp + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) - - Select the version of socks proxy to use (4-5, default: 5) + Send command to Myriadcoin Core - Send trace/debug info to console instead of debug.log file - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - Set minimum block size in bytes (default: 0) - + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + Shrink debug.log file on client startup (default: 1 when no -debug) - Signing transaction failed - + فشل توقيع المعاملة - Specify connection timeout in milliseconds (default: 5000) - + Start Myriadcoin Core Daemon + + + System error: - + خطأ في النظام : - Transaction amount too small - + قيمة العملية صغيره جدا - Transaction amounts must be positive - + يجب ان يكون قيمة العملية بالموجب - Transaction too large - + المعاملة طويلة جدا - Use UPnP to map the listening port (default: 0) - Use UPnP to map the listening port (default: 1 when listening) - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - Username for JSON-RPC connections - Warning - + تحذير - Warning: This version is obsolete, upgrade required! + تحذير : هذا الاصدار قديم , يتطلب التحديث + + + Zapping all transactions from wallet... - - You need to rebuild the databases using -reindex to change -txindex + on startup - + version + النسخة + + wallet.dat corrupt, salvage failed - Password for JSON-RPC connections - Allow JSON-RPC connections from specified IP address - Send commands to node running on <ip> (default: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) - Upgrade wallet to latest format - + تحديث المحفظة للنسخة الاخيرة - Set key pool size to <n> (default: 100) - Rescan the block chain for missing wallet transactions - Use OpenSSL (https) for JSON-RPC connections - Server certificate file (default: server.cert) - Server private key (default: server.pem) - + المفتاح الخاص بالسيرفر (default: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - This help message - + رسالة المساعدة هذه - Unable to bind to %s on this computer (bind returned error %d, %s) - - Connect through socks proxy - - - - Allow DNS lookups for -addnode, -seednode and -connect - Loading addresses... - + تحميل العنوان - Error loading wallet.dat: Wallet corrupted - + خطأ عند تنزيل wallet.dat: المحفظة تالفة - Error loading wallet.dat: Wallet requires newer version of Myriadcoin - + خطأ عند تنزيل wallet.dat: المحفظة تتطلب نسخة أحدث من بتكوين - Wallet needed to be rewritten: restart Myriadcoin to complete - + المحفظة تحتاج لإعادة إنشاء: أعد تشغيل بتكوين للإتمام - Error loading wallet.dat - + خطأ عند تنزيل wallet.dat - Invalid -proxy address: '%s' - + عنوان البروكسي غير صحيح : '%s' - Unknown network specified in -onlynet: '%s' - Unknown -socks proxy version requested: %i - Cannot resolve -bind address: '%s' - Cannot resolve -externalip address: '%s' - Invalid amount for -paytxfee=<amount>: '%s' - Invalid amount - + قيمة غير صحيحة - Insufficient funds - + اموال غير كافية - Loading block index... - Add a node to connect to and attempt to keep the connection open - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - Loading wallet... - + تحميل المحفظه - Cannot downgrade wallet - Cannot write default address - + لايمكن كتابة العنوان الافتراضي - Rescanning... - + إعادة مسح - Done loading - + انتهاء التحميل - To use the %s option - + لاستخدام %s الخيار - Error - + خطأ - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_be_BY.ts b/src/qt/locale/bitcoin_be_BY.ts new file mode 100644 index 00000000..73a1e730 --- /dev/null +++ b/src/qt/locale/bitcoin_be_BY.ts @@ -0,0 +1,3372 @@ + + + AboutDialog + + About Myriadcoin Core + + + + <b>Myriadcoin Core</b> version + + + + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. + + + + Copyright + + + + The Myriadcoin Core developers + + + + (%1-bit) + + + + + AddressBookPage + + Double-click to edit address or label + Двайны клік для рэдагавання адрасу ці пазнакі + + + Create a new address + Стварыць новы адрас + + + &New + + + + Copy the currently selected address to the system clipboard + Капіяваць пазначаны адрас у сістэмны буфер абмену + + + &Copy + + + + C&lose + + + + &Copy Address + + + + Delete the currently selected address from the list + + + + Export the data in the current tab to a file + + + + &Export + Экспарт + + + &Delete + Выдаліць + + + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + + Copy &Label + + + + &Edit + + + + Export Address List + + + + Comma separated file (*.csv) + Коскамі падзелены файл (*.csv) + + + Exporting Failed + + + + There was an error trying to save the address list to %1. + + + + + AddressTableModel + + Label + Пазнака + + + Address + Адрас + + + (no label) + непазначаны + + + + AskPassphraseDialog + + Passphrase Dialog + + + + Enter passphrase + Увядзіце кодавую фразу + + + New passphrase + Новая кодавая фраза + + + Repeat new passphrase + Паўтарыце новую кодавую фразу + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Увядзіце новую кодавую фразу для гаманца. <br/>Калі ласка, ўжывайце пароль <b>не меньша за 10 адвольных сімвалаў</b>, ці <b>болей васьмі слоў</b>. + + + Encrypt wallet + Зашыфраваць гаманец. + + + This operation needs your wallet passphrase to unlock the wallet. + Гэтая аперацыя патрабуе кодавую фразу, каб рзблакаваць гаманец. + + + Unlock wallet + Разблакаваць гаманец + + + This operation needs your wallet passphrase to decrypt the wallet. + Гэтая аперацыя патрабуе пароль каб расшыфраваць гаманец. + + + Decrypt wallet + Рачшыфраваць гаманец + + + Change passphrase + Змяніць пароль + + + Enter the old and new passphrase to the wallet. + Увядзіце стары і новы пароль да гаманца. + + + Confirm wallet encryption + Пацвердзіце шыфраванне гаманца + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! + + + + Are you sure you wish to encrypt your wallet? + + + + 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. + + + + Warning: The Caps Lock key is on! + + + + Wallet encrypted + Гаманец зашыфраваны + + + Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. + Myriadcoin зачыняецца дзеля завяршэння працэсса шыфравання. Памятайце, што шыфраванне гаманца цалкам абараняе вашыя сродкі ад скрадання шкоднымі праграмамі якія могуць пранікнуць у ваш камп'ютар. + + + Wallet encryption failed + Шыфраванне гаманца няўдалае + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Шыфраванне гаманца не адбылося з-за ўнутранай памылкі. Гаманец незашыфраваны. + + + The supplied passphrases do not match. + Уведдзеныя паролі не супадаюць + + + Wallet unlock failed + Разблакаванне гаманца няўдалае + + + The passphrase entered for the wallet decryption was incorrect. + Уведзена пароль дзеля расшыфравання гаманца памылковы + + + Wallet decryption failed + Расшыфраванне гаманца няўдалае + + + Wallet passphrase was successfully changed. + + + + + BitcoinGUI + + Sign &message... + + + + Synchronizing with network... + Сінхранізацыя з сецівам... + + + &Overview + Агляд + + + Node + + + + Show general overview of wallet + Паказвае агульныя звесткі аб гаманцы + + + &Transactions + Транзакцыі + + + Browse transaction history + Праглядзець гісторыю транзакцый + + + E&xit + Выйсці + + + Quit application + Выйсці з праграмы + + + Show information about Myriadcoin + Паказаць звесткі пра Біткойн + + + About &Qt + Аб Qt + + + Show information about Qt + Паказаць інфармацыю аб Qt + + + &Options... + Опцыі... + + + &Encrypt Wallet... + + + + &Backup Wallet... + + + + &Change Passphrase... + + + + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + + Importing blocks from disk... + + + + Reindexing blocks on disk... + + + + Send coins to a Myriadcoin address + + + + Modify configuration options for Myriadcoin + + + + Backup wallet to another location + Зрабіце копію гаманца ў іншае месца + + + Change the passphrase used for wallet encryption + Змяніць пароль шыфравання гаманца + + + &Debug window + + + + Open debugging and diagnostic console + + + + &Verify message... + + + + Myriadcoin + + + + Wallet + + + + &Send + Даслаць + + + &Receive + Атрымаць + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your Myriadcoin addresses to prove you own them + + + + Verify messages to ensure they were signed with specified Myriadcoin addresses + + + + &File + Ф&айл + + + &Settings + Наладкі + + + &Help + Дапамога + + + Tabs toolbar + + + + [testnet] + [testnet] + + + Myriadcoin Core + + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + + Myriadcoin client + Myriadcoin кліент + + + %n active connection(s) to Myriadcoin network + %n актыўнае злучэнне з Bitcoin-сецівам%n актыўных злучэнняў з Bitcoin-сецівам + + + No block source available... + + + + Processed %1 of %2 (estimated) blocks of transaction history. + + + + Processed %1 blocks of transaction history. + + + + %n hour(s) + + + + %n day(s) + + + + %n week(s) + + + + %1 and %2 + + + + %n year(s) + + + + %1 behind + + + + Last received block was generated %1 ago. + + + + Transactions after this will not yet be visible. + + + + Error + Памылка + + + Warning + + + + Information + + + + Up to date + Сінхранізавана + + + Catching up... + Наганяем... + + + Sent transaction + Дасланыя транзакцыі + + + Incoming transaction + Прынятыя транзакцыі + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + Дата: %1 +Колькасць: %2 +Тып: %3 +Адрас: %4 + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + Гаманец <b>зашыфраваны</b> і зараз <b>разблакаваны</b> + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + Гаманец <b>зашыфраваны</b> і зараз <b>заблакаваны</b> + + + A fatal error occurred. Myriadcoin can no longer continue safely and will quit. + + + + + ClientModel + + Network Alert + + + + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + Колькасць + + + Address + Адрас + + + Date + Дата + + + Confirmations + + + + Confirmed + Пацверджана + + + Priority + + + + Copy address + Капіяваць адрас + + + Copy label + Капіяваць пазнаку + + + Copy amount + Капіяваць колькасць + + + Copy transaction ID + Капіяваць ID транзакцыі + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + + + + Dust + + + + yes + + + + no + + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + непазначаны + + + change from %1 (%2) + + + + (change) + + + + + EditAddressDialog + + Edit Address + Рэдагаваць Адрас + + + &Label + Пазнака + + + The label associated with this address list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + + + + &Address + Адрас + + + New receiving address + Новы адрас для атрымання + + + New sending address + Новы адрас для дасылання + + + Edit receiving address + Рэдагаваць адрас прымання + + + Edit sending address + Рэдагаваць адрас дасылання + + + The entered address "%1" is already in the address book. + Уведзены адрас "%1" ужо ў кніге адрасоў + + + The entered address "%1" is not a valid Myriadcoin address. + + + + Could not unlock wallet. + Немагчыма разблакаваць гаманец + + + New key generation failed. + Генерацыя новага ключа няўдалая + + + + FreespaceChecker + + A new data directory will be created. + + + + name + + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core + + + + version + + + + Usage: + Ужыванне: + + + command-line options + + + + UI options + + + + Set language, for example "de_DE" (default: system locale) + + + + Start minimized + + + + Set SSL root certificates for payment request (default: -system-) + + + + Show splash screen on startup (default: 1) + + + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + + + + Error: Specified data directory "%1" can not be created. + + + + Error + Памылка + + + GB of free space available + + + + (of %1GB needed) + + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open + + + + + OptionsDialog + + Options + Опцыі + + + &Main + + + + Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. + + + + Pay transaction &fee + + + + Automatically start Myriadcoin after logging in to the system. + + + + &Start Myriadcoin on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + + Reset all client options to default. + + + + &Reset Options + + + + &Network + + + + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. + + + + Map port using &UPnP + + + + Proxy &IP: + + + + &Port: + + + + Port of the proxy (e.g. 9050) + + + + SOCKS &Version: + + + + SOCKS version of the proxy (e.g. 5) + + + + &Window + + + + Show only a tray icon after minimizing the window. + + + + &Minimize to the tray instead of the taskbar + + + + Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. + + + + M&inimize on close + + + + &Display + + + + User Interface &language: + + + + The user interface language can be set here. This setting will take effect after restarting Myriadcoin. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show Myriadcoin addresses in the transaction list or not. + + + + &Display addresses in transaction list + + + + Whether to show coin control features or not. + + + + &OK + + + + &Cancel + + + + default + + + + none + + + + Confirm options reset + + + + Client restart required to activate changes. + + + + Client will be shutdown, do you want to proceed? + + + + This change would require a client restart. + + + + The supplied proxy address is invalid. + + + + + OverviewPage + + Form + Форма + + + The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. + + + + Wallet + + + + Available: + + + + Your current spendable balance + + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + + + + Immature: + + + + Mined balance that has not yet matured + + + + Total: + + + + Your current total balance + + + + <b>Recent transactions</b> + <b>Нядаўнія транзаццыі</b> + + + out of sync + + + + + PaymentServer + + URI handling + + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start myriadcoin: click-to-pay handler + + + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + + + + Network request error + + + + + QObject + + Myriadcoin + + + + Error: Specified data directory "%1" does not exist. + + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + + + + Error: Invalid combination of -regtest and -testnet. + + + + Myriadcoin Core didn't yet exit safely... + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Увядзіце Біткойн-адрас (ўзор 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + + + + &Copy Image + + + + Save QR Code + + + + PNG Image (*.png) + + + + + RPCConsole + + Client name + + + + N/A + + + + Client version + + + + &Information + + + + Debug window + + + + General + + + + Using OpenSSL version + + + + Startup time + + + + Network + + + + Name + + + + Number of connections + + + + Block chain + + + + Current number of blocks + + + + Estimated total blocks + + + + Last block time + + + + &Open + + + + &Console + + + + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + + Build date + + + + Debug log file + + + + Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the Myriadcoin RPC console. + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + Type <b>help</b> for an overview of available commands. + + + + %1 B + + + + %1 KB + + + + %1 MB + + + + %1 GB + + + + %1 m + + + + %1 h + + + + %1 h %2 m + + + + + ReceiveCoinsDialog + + &Amount: + + + + &Label: + Пазнака: + + + &Message: + + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + + + + Clear + + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + + + + Remove the selected entries from the list + + + + Remove + + + + Copy label + Капіяваць пазнаку + + + Copy message + + + + Copy amount + Капіяваць колькасць + + + + ReceiveRequestDialog + + QR Code + + + + Copy &URI + + + + Copy &Address + + + + &Save Image... + + + + Request payment to %1 + + + + Payment information + + + + URI + + + + Address + Адрас + + + Amount + Колькасць + + + Label + Пазнака + + + Message + + + + Resulting URI too long, try to reduce the text for label / message. + + + + Error encoding URI into QR Code. + + + + + RecentRequestsTableModel + + Date + Дата + + + Label + Пазнака + + + Message + + + + Amount + Колькасць + + + (no label) + непазначаны + + + (no message) + + + + (no amount) + + + + + SendCoinsDialog + + Send Coins + Даслаць Манеты + + + Coin Control Features + + + + Inputs... + + + + automatically selected + + + + Insufficient funds! + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + + Send to multiple recipients at once + Даслаць адразу некалькім атрымальнікам + + + Add &Recipient + + + + Clear all fields of the form. + + + + Clear &All + + + + Balance: + Баланс: + + + Confirm the send action + Пацвердзіць дасыланне + + + S&end + + + + Confirm send coins + Пацвердзіць дасыланне манет + + + %1 to %2 + + + + Copy quantity + + + + Copy amount + Капіяваць колькасць + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + + + + or + + + + The recipient address is not valid, please recheck. + + + + The amount to pay must be larger than 0. + Велічыня плацяжу мае быць больш за 0. + + + The amount exceeds your balance. + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + Duplicate address found, can only send to each address once per send operation. + + + + Transaction creation failed! + + + + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + + + + (no label) + непазначаны + + + Warning: Unknown change address + + + + Are you sure you want to send? + + + + added as transaction fee + + + + Payment request expired + + + + Invalid payment address %1 + + + + + SendCoinsEntry + + A&mount: + Колькасць: + + + Pay &To: + Заплаціць да: + + + The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Enter a label for this address to add it to your address book + Увядзіце пазнаку гэтаму адрасу, каб дадаць яго ў адрасную кнігу + + + &Label: + Пазнака: + + + Choose previously used address + + + + This is a normal payment. + + + + Alt+A + Alt+A + + + Paste address from clipboard + Уставіць адрас з буферу абмена + + + Alt+P + Alt+P + + + Remove this entry + + + + Message: + + + + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. + + + + + SignVerifyMessageDialog + + Signatures - Sign / Verify a Message + + + + &Sign Message + + + + You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. + + + + The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Choose previously used address + + + + Alt+A + Alt+A + + + Paste address from clipboard + Уставіць адрас з буферу абмена + + + Alt+P + Alt+P + + + Enter the message you want to sign here + + + + Signature + + + + Copy the current signature to the system clipboard + + + + Sign the message to prove you own this Myriadcoin address + + + + Sign &Message + + + + Reset all sign message fields + + + + Clear &All + + + + &Verify Message + + + + Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. + + + + The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Verify the message to ensure it was signed with the specified Myriadcoin address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Увядзіце Біткойн-адрас (ўзор 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + Click "Sign Message" to generate signature + + + + The entered address is invalid. + + + + Please check the address and try again. + + + + The entered address does not refer to a key. + + + + Wallet unlock was cancelled. + + + + Private key for the entered address is not available. + + + + Message signing failed. + + + + Message signed. + + + + The signature could not be decoded. + + + + Please check the signature and try again. + + + + The signature did not match the message digest. + + + + Message verification failed. + + + + Message verified. + + + + + SplashScreen + + Myriadcoin Core + + + + The Myriadcoin Core developers + + + + [testnet] + [testnet] + + + + TrafficGraphWidget + + KB/s + + + + + TransactionDesc + + Open until %1 + + + + conflicted + + + + %1/offline + + + + %1/unconfirmed + %1/непацверджана + + + %1 confirmations + %1 пацверджанняў + + + Status + + + + , broadcast through %n node(s) + + + + Date + Дата + + + Source + + + + Generated + + + + From + + + + To + + + + own address + + + + label + + + + Credit + + + + matures in %n more block(s) + + + + not accepted + + + + Debit + + + + Transaction fee + + + + Net amount + + + + Message + + + + Comment + + + + Transaction ID + + + + Merchant + + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + Debug information + + + + Transaction + + + + Inputs + + + + Amount + Колькасць + + + true + + + + false + + + + , has not been successfully broadcast yet + , пакуль не было паспяхова транслявана + + + Open for %n more block(s) + + + + unknown + невядома + + + + TransactionDescDialog + + Transaction details + Дэталі транзакцыі + + + This pane shows a detailed description of the transaction + Гэтая панэль паказвае дэтальнае апісанне транзакцыі + + + + TransactionTableModel + + Date + Дата + + + Type + Тып + + + Address + Адрас + + + Amount + Колькасць + + + Immature (%1 confirmations, will be available after %2) + + + + Open for %n more block(s) + + + + Open until %1 + + + + Confirmed (%1 confirmations) + Пацверджана (%1 пацверджанняў) + + + This block was not received by any other nodes and will probably not be accepted! + Гэты блок не быў прыняты іншымі вузламі і магчыма не будзе ўхвалены! + + + Generated but not accepted + Згенеравана, але не прынята + + + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + + Received with + Прынята з + + + Received from + Прынята ад + + + Sent to + Даслана да + + + Payment to yourself + Плацёж самому сабе + + + Mined + Здабыта + + + (n/a) + (n/a) + + + Transaction status. Hover over this field to show number of confirmations. + Статус транзакцыі. Навядзіце курсар на гэтае поле, каб паказаць колькасць пацверджанняў. + + + Date and time that the transaction was received. + Дата і час, калі транзакцыя была прынята. + + + Type of transaction. + Тып транзакцыі + + + Destination address of transaction. + Адрас прызначэння транзакцыі. + + + Amount removed from or added to balance. + Колькасць аднятая ці даданая да балансу. + + + + TransactionView + + All + Усё + + + Today + Сёння + + + This week + Гэты тыдзень + + + This month + Гэты месяц + + + Last month + Мінулы месяц + + + This year + Гэты год + + + Range... + Прамежак... + + + Received with + Прынята з + + + Sent to + Даслана да + + + To yourself + Да сябе + + + Mined + Здабыта + + + Other + Іншыя + + + Enter address or label to search + Увядзіце адрас ці пазнаку для пошуку + + + Min amount + Мін. колькасць + + + Copy address + Капіяваць адрас + + + Copy label + Капіяваць пазнаку + + + Copy amount + Капіяваць колькасць + + + Copy transaction ID + Капіяваць ID транзакцыі + + + Edit label + Рэдагаваць пазнаку + + + Show transaction details + + + + Export Transaction History + + + + Exporting Failed + + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + + + + The transaction history was successfully saved to %1. + + + + Comma separated file (*.csv) + Коскамі падзелены файл (*.csv) + + + Confirmed + Пацверджана + + + Date + Дата + + + Type + Тып + + + Label + Пазнака + + + Address + Адрас + + + Amount + Колькасць + + + ID + ID + + + Range: + Прамежак: + + + to + да + + + + WalletFrame + + No wallet has been loaded. + + + + + WalletModel + + Send Coins + Даслаць Манеты + + + + WalletView + + &Export + Экспарт + + + Export the data in the current tab to a file + + + + Backup Wallet + + + + Wallet Data (*.dat) + + + + Backup Failed + + + + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. + + + + Backup Successful + + + + + bitcoin-core + + Usage: + Ужыванне: + + + List commands + Спіс каманд + + + Get help for a command + Атрымаць дапамогу для каманды + + + Options: + Опцыі: + + + Specify configuration file (default: myriadcoin.conf) + Вызначыць канфігурацыйны файл (зыходна: myriadcoin.conf) + + + Specify pid file (default: myriadcoind.pid) + Вызначыць pid-файл (зыходна: myriadcoind.pid) + + + Specify data directory + Вызначыць каталог даных + + + Listen for connections on <port> (default: 8333 or testnet: 18333) + Слухаць злучэнні на <port> (зыходна: 8333 ці testnet: 18333) + + + Maintain at most <n> connections to peers (default: 125) + Трымаць не больш за <n> злучэнняў на асобу (зыходна: 125) + + + Connect to a node to retrieve peer addresses, and disconnect + + + + Specify your own public address + + + + Threshold for disconnecting misbehaving peers (default: 100) + Парог для адлучэння злаўмысных карыстальнікаў (тыпова: 100) + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + Колькасць секунд для ўстрымання асобаў да перадалучэння (заходна: 86400) + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) + + + + Accept command line and JSON-RPC commands + Прымаць камандны радок і JSON-RPC каманды + + + Myriadcoin Core RPC client version + + + + Run in the background as a daemon and accept commands + Запусціць у фоне як дэман і прымаць каманды + + + Use the test network + Ужываць тэставае сеціва + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=myriadcoinrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + Bind to given address and always listen on it. Use [host]:port notation for IPv6 + + + + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) + + + + Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + + + + This is a pre-release test build - use at your own risk - do not use for mining or merchant applications + + + + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. + + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + Myriadcoin Core Daemon + + + + Block creation options: + + + + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + + Connect only to the specified node(s) + + + + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + + Corrupted block database detected + + + + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + Do not load the wallet and disable wallet RPC calls + + + + Do you want to rebuild the block database now? + + + + Error initializing block database + + + + Error initializing wallet database environment %s! + + + + Error loading block database + + + + Error opening block database + + + + Error: Disk space is low! + + + + Error: Wallet locked, unable to create transaction! + + + + Error: system error: + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + Failed to read block info + + + + Failed to read block + + + + Failed to sync block index + + + + Failed to write block index + + + + Failed to write block info + + + + Failed to write block + + + + Failed to write file info + + + + Failed to write to coin database + + + + Failed to write transaction index + + + + Failed to write undo data + + + + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + + Find peers using DNS lookup (default: 1 unless -connect) + + + + Force safe mode (default: 0) + + + + Generate coins (default: 0) + + + + How many blocks to check at startup (default: 288, 0 = all) + + + + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' + + + + Not enough file descriptors available. + + + + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + + Rebuild block chain index from current blk000??.dat files + + + + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + + Set the number of threads to service RPC calls (default: 4) + + + + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + + Verifying blocks... + + + + Verifying wallet... + + + + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + + + + Imports blocks from external blk000??.dat file + + + + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + + + + Information + + + + Invalid amount for -minrelaytxfee=<amount>: '%s' + + + + Invalid amount for -mintxfee=<amount>: '%s' + + + + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + + Maintain a full transaction index (default: 0) + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + Only accept block chain matching built-in checkpoints (default: 1) + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + Print block on startup, if found in block index + + + + Print block tree on startup (default: 0) + + + + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + + + + SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + Send command to Myriadcoin Core + + + + Send trace/debug info to console instead of debug.log file + Слаць trace/debug звесткі ў кансоль замест файла debug.log + + + Set minimum block size in bytes (default: 0) + + + + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + Signing transaction failed + + + + Specify connection timeout in milliseconds (default: 5000) + + + + Start Myriadcoin Core Daemon + + + + System error: + + + + Transaction amount too small + + + + Transaction amounts must be positive + + + + Transaction too large + + + + Use UPnP to map the listening port (default: 0) + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + Username for JSON-RPC connections + Імя карыстальника для JSON-RPC злучэнняў + + + Warning + + + + Warning: This version is obsolete, upgrade required! + + + + Zapping all transactions from wallet... + + + + on startup + + + + version + + + + wallet.dat corrupt, salvage failed + + + + Password for JSON-RPC connections + Пароль для JSON-RPC злучэнняў + + + Allow JSON-RPC connections from specified IP address + Дазволіць JSON-RPC злучэнні з пэўнага IP адрасу + + + Send commands to node running on <ip> (default: 127.0.0.1) + Адпраўляць каманды вузлу на <ip> (зыходна: 127.0.0.1) + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + Выканаць каманду калі лепшы блок зменіцца (%s замяняецца на хэш блока) + + + Upgrade wallet to latest format + Абнавіць гаманец на новы фармат + + + Set key pool size to <n> (default: 100) + Устанавіць памер фонда ключоў у <n> (тыпова: 100) + + + Rescan the block chain for missing wallet transactions + Перасканаваць ланцуг блокаў дзеля пошуку адсутных транзакцый + + + Use OpenSSL (https) for JSON-RPC connections + Ужываць OpenSSL (https) для JSON-RPC злучэнняў + + + Server certificate file (default: server.cert) + Файл-сертыфікат сервера (зыходна: server.cert) + + + Server private key (default: server.pem) + Прыватны ключ сервера (зыходна: server.pem) + + + This help message + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + Loading addresses... + Загружаем адрасы... + + + Error loading wallet.dat: Wallet corrupted + Памылка загрузкі wallet.dat: гаманец пашкоджаны + + + Error loading wallet.dat: Wallet requires newer version of Myriadcoin + Памылка загрузкі wallet.dat: гаманец патрабуе новую версію Myriadcoin + + + Wallet needed to be rewritten: restart Myriadcoin to complete + Гаманец мае быць перазапісаны: патрэбны перазапуск Myriadcoin для выканання + + + Error loading wallet.dat + Памылка загрузкі wallet.dat + + + Invalid -proxy address: '%s' + + + + Unknown network specified in -onlynet: '%s' + + + + Unknown -socks proxy version requested: %i + + + + Cannot resolve -bind address: '%s' + + + + Cannot resolve -externalip address: '%s' + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + Invalid amount + Памылковая колькасць + + + Insufficient funds + Недастаткова сродкаў + + + Loading block index... + Загружаем індэкс блокаў... + + + Add a node to connect to and attempt to keep the connection open + + + + Loading wallet... + Загружаем гаманец... + + + Cannot downgrade wallet + + + + Cannot write default address + + + + Rescanning... + Перасканаванне... + + + Done loading + Загрузка выканана + + + To use the %s option + + + + Error + Памылка + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + \ No newline at end of file diff --git a/src/qt/locale/bitcoin_bg.ts b/src/qt/locale/bitcoin_bg.ts index caa04da6..e5624b98 100644 --- a/src/qt/locale/bitcoin_bg.ts +++ b/src/qt/locale/bitcoin_bg.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - За Биткоин + About Myriadcoin Core + - - <b>Myriadcoin</b> version - <b>Биткоин</b> версия + <b>Myriadcoin Core</b> version + - This is experimental software. @@ -28,153 +24,128 @@ This product includes software developed by the OpenSSL Project for use in the O Използван е софтуер, разработен от OpenSSL Project за употреба в OpenSSL Toolkit (http://www.openssl.org/), криптографски софтуер разработен от Eric Young (eay@cryptsoft.com) и UPnP софтуер разработен от Thomas Bernard. - Copyright + Авторски права + + + The Myriadcoin Core developers - - The Myriadcoin developers + (%1-bit) AddressBookPage - - Address Book - Адреси - - - Double-click to edit address or label Двоен клик за редакция на адрес или име - Create a new address - Създава нов адрес + Създаване на нов адрес + + + &New + - Copy the currently selected address to the system clipboard - Копира избрания адрес + Копиране на избрания адрес - - &New Address - &Нов адрес + &Copy + - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Това са вашите Биткоин адреси за получаване на плащания. За по-лесно проследяване на плащанията и повишена анонимност можете да използвате нов адрес за всяко плащане. + C&lose + - &Copy Address &Копирай - - Show &QR Code - Покажи &QR код - - - - Sign a message to prove you own a Myriadcoin address - Подпишете съобщение като доказателство, че притежавате определен адрес - - - - Sign &Message - Подпиши &съобщение - - - Delete the currently selected address from the list Изтрий избрания адрес от списъка - Export the data in the current tab to a file Запишете данните от текущия раздел във файл - &Export - - Verify a message to ensure it was signed with a specified Myriadcoin address - Проверете съобщение, за да сте сигурни че е подписано с определен Биткоин адрес - - - - &Verify Message - &Провери съобщение - - - &Delete - &Изтрий + &Изтриване + + + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + Адреси за изпращане + + + Receiving addresses + Адреси за получаване - These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + Copy &Label Копирай &име - &Edit &Редактирай - - Send &Coins - + Export Address List + Изнасяне на списъка с адреси - - Export Address Book Data - Запазване на адреси - - - Comma separated file (*.csv) CSV файл (*.csv) - - Error exporting - Грешка при записа + Exporting Failed + Грешка при изнасянето - - Could not write to file %1. - Неуспешен запис в %1. + There was an error trying to save the address list to %1. + AddressTableModel - Label Име - Address Адрес - (no label) (без име) @@ -182,140 +153,106 @@ This product includes software developed by the OpenSSL Project for use in the O AskPassphraseDialog - Passphrase Dialog - Enter passphrase - Парола + Въведи парола - New passphrase Нова парола - Repeat new passphrase Още веднъж - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. Въведете нова парола за портфейла.<br/>Моля използвайте <b>поне 10 случайни символа</b> или <b>8 или повече думи</b>. - Encrypt wallet Криптиране на портфейла - This operation needs your wallet passphrase to unlock the wallet. Тази операция изисква Вашата парола за отключване на портфейла. - Unlock wallet Отключване на портфейла - This operation needs your wallet passphrase to decrypt the wallet. Тази операция изисква Вашата парола за декриптиране на портфейла. - Decrypt wallet Декриптиране на портфейла - Change passphrase Смяна на паролата - Enter the old and new passphrase to the wallet. Въведете текущата и новата парола за портфейла. - Confirm wallet encryption Потвърждаване на криптирането - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! - Are you sure you wish to encrypt your wallet? - + Наистина ли искате да шифрирате портфейла? - 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. - - Warning: The Caps Lock key is on! - + Внимание: Caps Lock (главни букви) е включен. - - Wallet encrypted Портфейлът е криптиран - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. - + Биткоин ще се затоври сега за да завърши процеса на криптиране. Запомнете, че криптирането на вашия портефейл не може напълно да предпази вашите Бит-монети от кражба чрез зловреден софтуер, инфектирал вашия компютър - - - - Wallet encryption failed Криптирането беше неуспешно - Wallet encryption failed due to an internal error. Your wallet was not encrypted. Криптирането на портфейла беше неуспешно поради неизвестен проблем. Портфейлът не е криптиран. - - The supplied passphrases do not match. Паролите не съвпадат - Wallet unlock failed Отключването беше неуспешно - - - The passphrase entered for the wallet decryption was incorrect. Паролата въведена за декриптиране на портфейла е грешна. - Wallet decryption failed Декриптирането беше неуспешно - Wallet passphrase was successfully changed. Паролата на портфейла беше променена успешно. @@ -323,319 +260,286 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - Sign &message... Подписване на &съобщение... - Synchronizing with network... Синхронизиране с мрежата... - &Overview &Баланс - + Node + + + Show general overview of wallet Обобщена информация за портфейла - &Transactions - &Транзакции + &Трансакции - Browse transaction history - История на входящите и изходящи транзакции + История на трансакциите - - Edit the list of stored addresses and labels - Редактиране на адреси - - - - Show the list of addresses for receiving payments - Списък на адресите за получаване - - - E&xit Из&ход - Quit application - Затваря приложението + Изход от приложението - Show information about Myriadcoin - Показва информация за Биткоин + Информация за Биткоин - About &Qt За &Qt - Show information about Qt - + Покажи информация за Qt - &Options... &Опции... - &Encrypt Wallet... &Криптиране на портфейла... - &Backup Wallet... &Запазване на портфейла... - &Change Passphrase... &Смяна на паролата... - + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + Importing blocks from disk... - Reindexing blocks on disk... - Send coins to a Myriadcoin address Изпращане към Биткоин адрес - Modify configuration options for Myriadcoin - Backup wallet to another location - Change the passphrase used for wallet encryption Променя паролата за портфейла - &Debug window - Open debugging and diagnostic console - &Verify message... &Проверка на съобщение... - - Myriadcoin Биткоин - Wallet Портфейл - &Send - &Receive - - &Addresses - - - - - &About Myriadcoin - &За Биткоин - - - &Show / Hide - Show or hide the main Window - + Показване и скриване на основния прозорец - Encrypt the private keys that belong to your wallet - Sign messages with your Myriadcoin addresses to prove you own them - Verify messages to ensure they were signed with specified Myriadcoin addresses - &File &Файл - &Settings &Настройки - &Help &Помощ - Tabs toolbar Раздели - - [testnet] [testnet] - + Myriadcoin Core + + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + Myriadcoin client - %n active connection(s) to Myriadcoin network %n връзка към Биткоин мрежата%n връзки към Биткоин мрежата - No block source available... - Processed %1 of %2 (estimated) blocks of transaction history. - Processed %1 blocks of transaction history. - %n hour(s) - + %n час%n часа - %n day(s) - + %n ден%n дни - %n week(s) - + %n седмица%n седмици + + + %1 and %2 + %1 и %2 + + + %n year(s) + %n година%n години - %1 behind - Last received block was generated %1 ago. - Transactions after this will not yet be visible. - Error - + Грешка - Warning - + Предупреждение - Information - + Данни - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - Up to date Синхронизиран - Catching up... Зарежда блокове... - - Confirm transaction fee - Потвърждение за такса - - - Sent transaction - Изходяща транзакция + Изходяща трансакция - Incoming transaction - Входяща транзакция + Входяща трансакция - Date: %1 Amount: %2 Type: %3 @@ -644,29 +548,14 @@ Address: %4 - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> Портфейлът е <b>криптиран</b> и <b>отключен</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> Портфейлът е <b>криптиран</b> и <b>заключен</b> - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. @@ -674,329 +563,647 @@ Address: %4 ClientModel - Network Alert + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + + + + Bytes: + Байтове: + + + Amount: + Сума: + + + Priority: + Приоритет: + + + Fee: + Такса: + + + Low Output: + + + + After Fee: + + + + Change: + + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + Сума + + + Address + Адрес + + + Date + Дата + + + Confirmations + Потвърждения + + + Confirmed + Потвърдени + + + Priority + Приоритет + + + Copy address + Копирай адрес + + + Copy label + Копирай име + + + Copy amount + Копирай сума + + + Copy transaction ID + + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + + + + Dust + Прах + + + yes + да + + + no + не + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + (без име) + + + change from %1 (%2) + + + + (change) + + + EditAddressDialog - Edit Address Редактиране на адрес - &Label &Име - - The label associated with this address book entry - Името свързано с този запис в списъка с адреси + The label associated with this address list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + - &Address &Адрес - - The address associated with this address book entry. This can only be modified for sending addresses. - Адресът свързан с този запис в списъка с адреси. Може да се променя само за изходящи адреси. - - - New receiving address Нов адрес за получаване - New sending address Нов адрес за изпращане - Edit receiving address Редактиране на входящ адрес - Edit sending address Редактиране на изходящ адрес - The entered address "%1" is already in the address book. Вече има адрес "%1" в списъка с адреси. - The entered address "%1" is not a valid Myriadcoin address. "%1" не е валиден Биткоин адрес. - Could not unlock wallet. Отключването на портфейла беше неуспешно. - New key generation failed. Създаването на ключ беше неуспешно. - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt + A new data directory will be created. + Ще се създаде нова папка за данни. + + + name + име + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + Пътят вече съществува и не е папка. + + + Cannot create data directory here. + + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core - version - + версия - Usage: - + Използване: - command-line options - UI options UI Опции - Set language, for example "de_DE" (default: system locale) - Start minimized - + Set SSL root certificates for payment request (default: -system-) + + + Show splash screen on startup (default: 1) + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + Добре дошли + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + Биткоин + + + Error: Specified data directory "%1" can not be created. + + + + Error + Грешка + + + GB of free space available + + + + (of %1GB needed) + + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open + + OptionsDialog - Options Опции - &Main &Основни - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. - Pay transaction &fee - &Такса за изходяща транзакция + &Такса за изходяща трансакция - Automatically start Myriadcoin after logging in to the system. - &Start Myriadcoin on system login &Пускане на Биткоин при вход в системата - + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + Reset all client options to default. - &Reset Options - &Network &Мрежа - + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. Автоматично отваряне на входящия Myriadcoin порт. Работи само с рутери поддържащи UPnP. - Map port using &UPnP Отваряне на входящия порт чрез &UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - - - - - &Connect through SOCKS proxy: - - - - Proxy &IP: - - IP address of the proxy (e.g. 127.0.0.1) - IP адрес на прокси сървъра (например 127.0.0.1) - - - &Port: - + &Порт: - Port of the proxy (e.g. 9050) - SOCKS &Version: - SOCKS version of the proxy (e.g. 5) - &Window &Прозорец - Show only a tray icon after minimizing the window. След минимизиране ще е видима само иконата в системния трей. - &Minimize to the tray instead of the taskbar &Минимизиране в системния трей - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. При затваряне на прозореца приложението остава минимизирано. Ако изберете тази опция, приложението може да се затвори само чрез Изход в менюто. - M&inimize on close М&инимизиране при затваряне - &Display &Интерфейс - User Interface &language: Език: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. Промяната на езика ще влезе в сила след рестартиране на Биткоин. - &Unit to show amounts in: Мерни единици: - Choose the default subdivision unit to show in the interface and when sending coins. Изберете единиците, показвани по подразбиране в интерфейса. - Whether to show Myriadcoin addresses in the transaction list or not. - Ще се показват адресите в списъка с транзакции независимо от наличието на кратко име. + Ще се показват адресите в списъка с трансакции независимо от наличието на кратко име. - &Display addresses in transaction list - Показвай и адресите в списъка с транзакции + &Адреси в списъка с трансакции + + + Whether to show coin control features or not. + - &OK - &Cancel - - &Apply - - - - default + подразбиране + + + none - Confirm options reset - - Some settings may require a client restart to take effect. + Client restart required to activate changes. - - Do you want to proceed? + Client will be shutdown, do you want to proceed? - - - Warning + This change would require a client restart. - - - This setting will take effect after restarting Myriadcoin. - - - - The supplied proxy address is invalid. Прокси адресът е невалиден. @@ -1004,59 +1211,54 @@ Address: %4 OverviewPage - Form Форма - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. - - Balance: - Баланс: - - - - Unconfirmed: - Непотвърдени: - - - Wallet Портфейл - + Available: + Налично: + + + Your current spendable balance + + + + Pending: + Изчакващо: + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + + + Immature: - Mined balance that has not yet matured - + Total: + Общо: + + + Your current total balance + Текущият ви общ баланс + + <b>Recent transactions</b> - <b>Последни транзакции</b> + <b>Последни трансакции</b> - - Your current balance - Вашият текущ баланс - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - Сборът на все още непотвърдените транзакции, които не са част от текущия баланс - - - - out of sync несинхронизиран @@ -1064,579 +1266,856 @@ Address: %4 PaymentServer - + URI handling + + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + Cannot start myriadcoin: click-to-pay handler + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + Плащането е приета + + + Network request error + + - QRCodeDialog + QObject - - QR Code Dialog + Myriadcoin + Биткоин + + + Error: Specified data directory "%1" does not exist. - - Request Payment - Изискай плащане - - - - Amount: - Сума: - - - - Label: - Име: - - - - Message: - Съобщение: - - - - &Save As... - &Запази като... - - - - Error encoding URI into QR Code. - Грешка при създаването на QR Code от URI. - - - - The entered amount is invalid, please check. - Въведената сума е невалидна, моля проверете. - - - - Resulting URI too long, try to reduce the text for label / message. + Error: Cannot parse configuration file: %1. Only use key=value syntax. + + + + Error: Invalid combination of -regtest and -testnet. + + + + Myriadcoin Core didn't yet exit safely... + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Въведете Биткоин адрес (например 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + + + + &Copy Image - Save QR Code - - PNG Images (*.png) + PNG Image (*.png) RPCConsole - Client name - + Име на клиента - - - - - - - - - - N/A N/A - Client version - + Версия на клиента - &Information - + Debug window + + + + General + + + Using OpenSSL version - Startup time - Network Мрежа - + Name + Име + + Number of connections - + Брой връзки - - On testnet - - - - Block chain - Current number of blocks - + Текущ брой блокове - Estimated total blocks - + Предвидени общо блокове - Last block time - + Време на последния блок - &Open - - Command-line options - - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - - - - - &Show - - - - &Console - + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + Build date - - Myriadcoin - Debug window - - - - - Myriadcoin Core - - - - Debug log file - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. - Clear console Изчисти конзолата - Welcome to the Myriadcoin RPC console. - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. Използвайте стрелки надолу и нагореза разглеждане на историятаот команди и <b>Ctrl-L</b> за изчистване на конзолата. - Type <b>help</b> for an overview of available commands. + + %1 B + + + + %1 KB + + + + %1 MB + + + + %1 GB + + + + %1 m + + + + %1 h + + + + %1 h %2 m + + + + + ReceiveCoinsDialog + + &Amount: + + + + &Label: + &Име: + + + &Message: + + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + + + + Clear + Изчистване + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + Показване + + + Remove the selected entries from the list + + + + Remove + Премахване + + + Copy label + Копирай име + + + Copy message + Копиране на съобщението + + + Copy amount + Копирай сума + + + + ReceiveRequestDialog + + QR Code + + + + Copy &URI + + + + Copy &Address + + + + &Save Image... + + + + Request payment to %1 + + + + Payment information + Данни за плащането + + + URI + + + + Address + Адрес + + + Amount + Сума + + + Label + Име + + + Message + Съобщение + + + Resulting URI too long, try to reduce the text for label / message. + + + + Error encoding URI into QR Code. + Грешка при създаването на QR Code от URI. + + + + RecentRequestsTableModel + + Date + Дата + + + Label + Име + + + Message + Съобщение + + + Amount + Сума + + + (no label) + (без име) + + + (no message) + + + + (no amount) + + SendCoinsDialog - - - - - - - - Send Coins Изпращане - + Coin Control Features + + + + Inputs... + + + + automatically selected + + + + Insufficient funds! + + + + Quantity: + + + + Bytes: + Байтове: + + + Amount: + Сума: + + + Priority: + Приоритет: + + + Fee: + Такса: + + + Low Output: + + + + After Fee: + + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + Send to multiple recipients at once Изпращане към повече от един получател - Add &Recipient Добави &получател - - Remove all transaction fields - Изчистване на всички полета + Clear all fields of the form. + - Clear &All &Изчисти - Balance: Баланс: - - 123.456 BTC - 123.456 BTC - - - Confirm the send action Потвърдете изпращането - S&end И&зпрати - - <b>%1</b> to %2 (%3) - <b>%1</b> на %2 (%3) - - - Confirm send coins Потвърждаване - - Are you sure you want to send %1? - Сигурни ли сте, че искате да изпратите %1? + %1 to %2 + - - and - и + Copy quantity + + + + Copy amount + Копирай сума + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + + + + or + или - The recipient address is not valid, please recheck. Невалиден адрес на получателя. - The amount to pay must be larger than 0. Сумата трябва да е по-голяма от 0. - The amount exceeds your balance. - + Сумата надвишава текущия баланс - The total exceeds your balance when the %1 transaction fee is included. - Duplicate address found, can only send to each address once per send operation. - - Error: Transaction creation failed! + Transaction creation failed! + Грешка при създаването на трансакция! + + + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Грешка: транзакцията беше отхвърлена. Това е възможно ако част от парите в портфейла са вече похарчени, например при паралелно използване на копие на wallet.dat + Warning: Invalid Myriadcoin address + + + + (no label) + (без име) + + + Warning: Unknown change address + + + + Are you sure you want to send? + Наистина ли искате да изпратите? + + + added as transaction fee + добавено като такса за трансакция + + + Payment request expired + + + + Invalid payment address %1 + SendCoinsEntry - - Form - Форма - - - A&mount: С&ума: - Pay &To: Плати &На: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book Въведете име за този адрес, за да го добавите в списъка с адреси - &Label: &Име: - - Choose address from address book - Изберете от списъка с адреси + Choose previously used address + + + + This is a normal payment. + Това е нормално плащане. - Alt+A Alt+A - Paste address from clipboard Вмъкни от клипборда - Alt+P Alt+P - - Remove this recipient - Махни този получател + Remove this entry + Премахване на този запис - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Въведете Биткоин адрес (например 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + Съобщение: + + + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + Плащане на: + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. + SignVerifyMessageDialog - Signatures - Sign / Verify a Message Подпиши / Провери съобщение - &Sign Message &Подпиши - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. Можете да подпишете съобщение като доказателство, че притежавате определен адрес. Бъдете внимателни и не подписвайте съобщения, които биха разкрили лична информация без вашето съгласие. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Адресът, с който ще подпишете съобщението (например 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book - Изберете от списъка с адреси + Choose previously used address + - - Alt+A Alt+A - Paste address from clipboard Вмъкни от клипборда - Alt+P Alt+P - Enter the message you want to sign here Въведете съобщението тук - Signature - + Подпис - Copy the current signature to the system clipboard Копиране на текущия подпис - Sign the message to prove you own this Myriadcoin address Подпишете съобщение като доказателство, че притежавате определен адрес - Sign &Message - Reset all sign message fields - - Clear &All &Изчисти - &Verify Message &Провери - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Адресът, с който е подписано съобщението (например 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address Проверете съобщение, за да сте сигурни че е подписано с определен Биткоин адрес - Verify &Message - Reset all verify message fields - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Въведете Биткоин адрес (например 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature Натиснете "Подписване на съобщение" за да създадете подпис - - Enter Myriadcoin signature - Биткоин подпис - - - - The entered address is invalid. Въведеният адрес е невалиден. - - - - Please check the address and try again. Моля проверете адреса и опитайте отново. - - The entered address does not refer to a key. - Wallet unlock was cancelled. - Private key for the entered address is not available. Не е наличен частният ключ за въведеният адрес. - Message signing failed. Подписването на съобщение бе неуспешно. - Message signed. Съобщението е подписано. - The signature could not be decoded. Подписът не може да бъде декодиран. - - Please check the signature and try again. Проверете подписа и опитайте отново. - The signature did not match the message digest. Подписът не отговаря на комбинацията от съобщение и адрес. - Message verification failed. Проверката на съобщението беше неуспешна. - Message verified. Съобщението е потвърдено. @@ -1644,186 +2123,160 @@ Address: %4 SplashScreen - - The Myriadcoin developers + Myriadcoin Core + + + + The Myriadcoin Core developers - [testnet] [testnet] + + TrafficGraphWidget + + KB/s + + + TransactionDesc - Open until %1 Подлежи на промяна до %1 - + conflicted + + + %1/offline %1/офлайн - %1/unconfirmed %1/непотвърдени - %1 confirmations включена в %1 блока - Status Статус - , broadcast through %n node(s) - Date Дата - Source Източник - Generated Издадени - - From От - - - To За - - own address собствен адрес - label име - - - - - Credit Кредит - matures in %n more block(s) - not accepted - - - - Debit Дебит - Transaction fee Такса - Net amount Сума нето - Message Съобщение - Comment Коментар - Transaction ID ID - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Merchant + Търговец + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Debug information - Transaction - Транзакция + Трансакция - Inputs - Amount Сума - true true - false false - , has not been successfully broadcast yet , все още не е изпратено - Open for %n more block(s) - unknown неизвестен @@ -1831,130 +2284,113 @@ Address: %4 TransactionDescDialog - Transaction details - Транзакция + Трансакция - This pane shows a detailed description of the transaction - Описание на транзакцията + Описание на трансакцията TransactionTableModel - Date Дата - Type Тип - Address Адрес - Amount Сума + + Immature (%1 confirmations, will be available after %2) + + - Open for %n more block(s) - Open until %1 Подлежи на промяна до %1 - - Offline (%1 confirmations) - Офлайн (%1 потвърждения) - - - - Unconfirmed (%1 of %2 confirmations) - Непотвърдени (%1 от %2 потвърждения) - - - Confirmed (%1 confirmations) Потвърдени (%1 потвърждения) - - - Mined balance will be available when it matures in %n more block(s) - - - This block was not received by any other nodes and will probably not be accepted! Блокът не е получен от останалите участници и най-вероятно няма да бъде одобрен. - Generated but not accepted + Генерирана, но отхвърлена от мрежата + + + Offline - + Unconfirmed + Непотвърдено + + + Confirming (%1 of %2 recommended confirmations) + Потвърждаване (%1 от %2 препоръчвани потвърждения) + + + Conflicted + Конфликтно + + Received with Получени с - Received from - + Получен от - Sent to Изпратени на - Payment to yourself - + Плащане към себе си - Mined Емитирани - (n/a) (n/a) - Transaction status. Hover over this field to show number of confirmations. - Състояние на транзакцията. Задръжте върху това поле за брой потвърждения. + Състояние на трансакцията. Задръжте върху това поле за брой потвърждения. - Date and time that the transaction was received. Дата и час на получаване. - Type of transaction. - Тип на транзакцията. + Вид трансакция. - Destination address of transaction. - Получател на транзакцията. + Получател на трансакцията. - Amount removed from or added to balance. Сума извадена или добавена към баланса. @@ -1962,176 +2398,156 @@ Address: %4 TransactionView - - All Всички - Today Днес - This week Тази седмица - This month Този месец - Last month Предния месец - This year Тази година - Range... От - до... - Received with Получени - Sent to Изпратени на - To yourself Собствени - Mined Емитирани - Other Други - Enter address or label to search Търсене по адрес или име - Min amount Минимална сума - Copy address Копирай адрес - Copy label Копирай име - Copy amount - + Копирай сума - Copy transaction ID - Edit label Редактирай име - Show transaction details + Подробности за трансакцията + + + Export Transaction History + Изнасяне историята на трансакциите + + + Exporting Failed + Грешка при изнасянето + + + There was an error trying to save the transaction history to %1. - - Export Transaction Data + Exporting Successful + Изнасянето е успешна + + + The transaction history was successfully saved to %1. - Comma separated file (*.csv) CSV файл (*.csv) - Confirmed Потвърдени - Date Дата - Type Тип - Label Име - Address Адрес - Amount Сума - ID - + ИД - - Error exporting - Грешка при записа - - - - Could not write to file %1. - Неуспешен запис в %1. - - - Range: От: - to до + + WalletFrame + + No wallet has been loaded. + Няма зареден портфейл. + + WalletModel - Send Coins Изпращане @@ -2139,160 +2555,121 @@ Address: %4 WalletView - &Export - Export the data in the current tab to a file Запишете данните от текущия раздел във файл - Backup Wallet - Wallet Data (*.dat) - Backup Failed - - There was an error trying to save the wallet data to the new location. + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. - Backup Successful - - - The wallet data was successfully saved to the new location. - - bitcoin-core - - Myriadcoin version - Биткоин версия - - - Usage: - + Използване: - - Send command to -server or myriadcoind - - - - List commands - + Вписване на команди - Get help for a command - + Получете помощ за команда - Options: Опции: - Specify configuration file (default: myriadcoin.conf) - + Задаване на файл с настройки (по подразбиране myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) - Specify data directory - + Определете директория за данните - - Set database cache size in megabytes (default: 25) - - - - Listen for connections on <port> (default: 8333 or testnet: 18333) - Maintain at most <n> connections to peers (default: 125) - Connect to a node to retrieve peer addresses, and disconnect - Specify your own public address - Threshold for disconnecting misbehaving peers (default: 100) - + Праг на прекъсване на връзката при непорядъчно държащи се пиъри (по подразбиране:100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - + Брой секунди до възтановяване на връзката за зле държащите се пиъри (по подразбиране:86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) - Accept command line and JSON-RPC commands - + Myriadcoin Core RPC client version + + + Run in the background as a daemon and accept commands - Use the test network - + Използвайте тестовата мрежа - Accept connections from outside (default: 1 if no -proxy or -connect) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2307,612 +2684,686 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications - + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. - + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - + (default: 1) + (по подразбиране 1) + + + (default: wallet.dat) + (по подразбиране wallet.dat) + + + <category> can be: + + + Attempt to recover private keys from a corrupt wallet.dat - + Myriadcoin Core Daemon + + + Block creation options: - + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + Connect only to the specified node(s) - + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + Настройки на връзката: + + Corrupted block database detected - + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + Discover own IP address (default: 1 when listening and no -externalip) - + Do not load the wallet and disable wallet RPC calls + + + Do you want to rebuild the block database now? - Error initializing block database - Error initializing wallet database environment %s! - Error loading block database - Error opening block database - Error: Disk space is low! - + Грешка: мястото на диска е малко! - Error: Wallet locked, unable to create transaction! - Error: system error: - + Грешка: системна грешка: - Failed to listen on any port. Use -listen=0 if you want this. - Failed to read block info - + Грешка при четене данни на блок - Failed to read block - + Грешка при четене на блок - Failed to sync block index - Failed to write block index - Failed to write block info - + Грешка при запис данни на блок - Failed to write block - + Грешка при запис на блок - Failed to write file info - Failed to write to coin database - Failed to write transaction index - Failed to write undo data - + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + Find peers using DNS lookup (default: 1 unless -connect) - + Force safe mode (default: 0) + + + Generate coins (default: 0) - How many blocks to check at startup (default: 288, 0 = all) - - How thorough the block verification is (0-4, default: 3) + If <category> is not supplied, output all debugging information. + + + + Importing... + Внасяне... + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' - Not enough file descriptors available. - + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + Rebuild block chain index from current blk000??.dat files - + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + Set the number of threads to service RPC calls (default: 4) - + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + Verifying blocks... - + Проверка на блоковете... - Verifying wallet... + Проверка на портфейла... + + + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + Настройки на портфейла: + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex - Imports blocks from external blk000??.dat file - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) - Information - + Данни - - Invalid -tor address: '%s' - Невалиден -tor адрес: '%s' - - - Invalid amount for -minrelaytxfee=<amount>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' - + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + Maintain a full transaction index (default: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Only accept block chain matching built-in checkpoints (default: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - Output extra debugging information. Implies all other -debug* options + Print block on startup, if found in block index - - Output extra network debugging information + Print block tree on startup (default: 0) - - Prepend debug output with timestamp + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) - - Select the version of socks proxy to use (4-5, default: 5) + Send command to Myriadcoin Core - Send trace/debug info to console instead of debug.log file - + Изпрати локализиращата или дебъг информацията към конзолата, вместо файлът debug.log - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - Set minimum block size in bytes (default: 0) - + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + Shrink debug.log file on client startup (default: 1 when no -debug) - Signing transaction failed - Specify connection timeout in milliseconds (default: 5000) - + Start Myriadcoin Core Daemon + + + System error: - + Системна грешка: - Transaction amount too small - + Сумата на трансакцията е твърде малка - Transaction amounts must be positive - + Сумите на трансакциите трябва да са положителни - Transaction too large - + Трансакцията е твърде голяма - Use UPnP to map the listening port (default: 0) - Use UPnP to map the listening port (default: 1 when listening) - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - Username for JSON-RPC connections - + Потребителско име за JSON-RPC връзките - Warning - + Предупреждение - Warning: This version is obsolete, upgrade required! - - You need to rebuild the databases using -reindex to change -txindex + Zapping all transactions from wallet... - + on startup + + + + version + версия + + wallet.dat corrupt, salvage failed - Password for JSON-RPC connections - + Парола за JSON-RPC връзките - Allow JSON-RPC connections from specified IP address - + Разреши JSON-RPC връзките от отучнен IP адрес - Send commands to node running on <ip> (default: 127.0.0.1) - + Изпрати команди до възел функциониращ на <ip> (По подразбиране: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) - Upgrade wallet to latest format - + Обновяване на портфейла до най-новия формат - Set key pool size to <n> (default: 100) - Rescan the block chain for missing wallet transactions - + Повторно сканиране на блок-връзка за липсващи портфейлни трансакции - Use OpenSSL (https) for JSON-RPC connections - + Използвайте OpenSSL (https) за JSON-RPC връзките - Server certificate file (default: server.cert) - + Сертификатен файл на сървъра (По подразбиране:server.cert) - Server private key (default: server.pem) - + Поверителен ключ за сървъра (default: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - This help message - + Това помощно съобщение - Unable to bind to %s on this computer (bind returned error %d, %s) - - Connect through socks proxy - - - - Allow DNS lookups for -addnode, -seednode and -connect - Loading addresses... Зареждане на адресите... - Error loading wallet.dat: Wallet corrupted - + Грешка при зареждане на wallet.dat: портфейлът е повреден - Error loading wallet.dat: Wallet requires newer version of Myriadcoin - + Грешка при зареждане на wallet.dat: портфейлът изисква по-нова версия на Myriadcoin - Wallet needed to be rewritten: restart Myriadcoin to complete - Error loading wallet.dat - + Грешка при зареждане на wallet.dat - Invalid -proxy address: '%s' Невалиден -proxy address: '%s' - Unknown network specified in -onlynet: '%s' - Unknown -socks proxy version requested: %i - Cannot resolve -bind address: '%s' - Cannot resolve -externalip address: '%s' - Invalid amount for -paytxfee=<amount>: '%s' - Invalid amount - Insufficient funds - + Недостатъчно средства - Loading block index... Зареждане на блок индекса... - Add a node to connect to and attempt to keep the connection open - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - Loading wallet... Зареждане на портфейла... - Cannot downgrade wallet - Cannot write default address - Rescanning... Преразглеждане на последовтелността от блокове... - Done loading Зареждането е завършено - To use the %s option - Error Грешка - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_bs.ts b/src/qt/locale/bitcoin_bs.ts index b2584367..da4ff4be 100644 --- a/src/qt/locale/bitcoin_bs.ts +++ b/src/qt/locale/bitcoin_bs.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - O Myriadcoinu + About Myriadcoin Core + - - <b>Myriadcoin</b> version - <b>Myriadcoin</b> verzija + <b>Myriadcoin Core</b> version + - This is experimental software. @@ -23,153 +19,128 @@ This product includes software developed by the OpenSSL Project for use in the O - Copyright - - The Myriadcoin developers + The Myriadcoin Core developers + + + + (%1-bit) AddressBookPage - - Address Book - Adresar - - - Double-click to edit address or label - Create a new address - + &New + + + Copy the currently selected address to the system clipboard - - &New Address + &Copy - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + C&lose - &Copy Address - - Show &QR Code - - - - - Sign a message to prove you own a Myriadcoin address - - - - - Sign &Message - - - - Delete the currently selected address from the list - Export the data in the current tab to a file - &Export - - Verify a message to ensure it was signed with a specified Myriadcoin address - - - - - &Verify Message - - - - &Delete - + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + Copy &Label - &Edit - - Send &Coins + Export Address List - - Export Address Book Data - - - - Comma separated file (*.csv) - - Error exporting + Exporting Failed - - Could not write to file %1. + There was an error trying to save the address list to %1. AddressTableModel - Label - Address - (no label) @@ -177,140 +148,106 @@ This product includes software developed by the OpenSSL Project for use in the O AskPassphraseDialog - Passphrase Dialog - Enter passphrase - New passphrase - Repeat new passphrase - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Encrypt wallet - This operation needs your wallet passphrase to unlock the wallet. - Unlock wallet - This operation needs your wallet passphrase to decrypt the wallet. - Decrypt wallet - Change passphrase - Enter the old and new passphrase to the wallet. - Confirm wallet encryption - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! - Are you sure you wish to encrypt your wallet? - 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. - - Warning: The Caps Lock key is on! - - Wallet encrypted - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. - - - - Wallet encryption failed - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - - The supplied passphrases do not match. - Wallet unlock failed - - - The passphrase entered for the wallet decryption was incorrect. - Wallet decryption failed - Wallet passphrase was successfully changed. @@ -318,319 +255,286 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - Sign &message... - Synchronizing with network... - &Overview - + Node + + + Show general overview of wallet - &Transactions - Browse transaction history - - Edit the list of stored addresses and labels - - - - - Show the list of addresses for receiving payments - - - - E&xit - Quit application - Show information about Myriadcoin - About &Qt - Show information about Qt - &Options... - &Encrypt Wallet... - &Backup Wallet... - &Change Passphrase... - + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + Importing blocks from disk... - Reindexing blocks on disk... - Send coins to a Myriadcoin address - Modify configuration options for Myriadcoin - Backup wallet to another location - Change the passphrase used for wallet encryption - &Debug window - Open debugging and diagnostic console - &Verify message... - - Myriadcoin - + Myriadcoin - Wallet - &Send - &Receive - - &Addresses - - - - - &About Myriadcoin - - - - &Show / Hide - Show or hide the main Window - Encrypt the private keys that belong to your wallet - Sign messages with your Myriadcoin addresses to prove you own them - Verify messages to ensure they were signed with specified Myriadcoin addresses - &File - &Settings - &Help - Tabs toolbar - - [testnet] - + Myriadcoin Core + Myriadcoin Jezrga + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + Myriadcoin client - %n active connection(s) to Myriadcoin network - No block source available... - Processed %1 of %2 (estimated) blocks of transaction history. - Processed %1 blocks of transaction history. - %n hour(s) - %n day(s) - %n week(s) - + %1 and %2 + + + + %n year(s) + + + %1 behind - Last received block was generated %1 ago. - Transactions after this will not yet be visible. - Error - Warning - Information - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - Up to date - Catching up... - - Confirm transaction fee - - - - Sent transaction - Incoming transaction - Date: %1 Amount: %2 Type: %3 @@ -639,29 +543,14 @@ Address: %4 - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. @@ -669,329 +558,647 @@ Address: %4 ClientModel - Network Alert + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + + + + Address + + + + Date + + + + Confirmations + + + + Confirmed + + + + Priority + + + + Copy address + + + + Copy label + + + + Copy amount + + + + Copy transaction ID + + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + + + + Dust + + + + yes + + + + no + + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + + + + change from %1 (%2) + + + + (change) + + + EditAddressDialog - Edit Address - &Label - - The label associated with this address book entry + The label associated with this address list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. - &Address - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - New receiving address - New sending address - Edit receiving address - Edit sending address - The entered address "%1" is already in the address book. - The entered address "%1" is not a valid Myriadcoin address. - Could not unlock wallet. - New key generation failed. - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt + A new data directory will be created. - + name + + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core + Myriadcoin Jezrga + + version - Usage: - command-line options - UI options - Set language, for example "de_DE" (default: system locale) - Start minimized - + Set SSL root certificates for payment request (default: -system-) + + + Show splash screen on startup (default: 1) + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" can not be created. + + + + Error + + + + GB of free space available + + + + (of %1GB needed) + + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open + + OptionsDialog - Options - &Main - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. - Pay transaction &fee - Automatically start Myriadcoin after logging in to the system. - &Start Myriadcoin on system login - + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + Reset all client options to default. - &Reset Options - &Network - + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. - Map port using &UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - - - - - &Connect through SOCKS proxy: - - - - Proxy &IP: - - IP address of the proxy (e.g. 127.0.0.1) - - - - &Port: - Port of the proxy (e.g. 9050) - SOCKS &Version: - SOCKS version of the proxy (e.g. 5) - &Window - Show only a tray icon after minimizing the window. - &Minimize to the tray instead of the taskbar - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. - M&inimize on close - &Display - User Interface &language: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. - &Unit to show amounts in: - Choose the default subdivision unit to show in the interface and when sending coins. - Whether to show Myriadcoin addresses in the transaction list or not. - &Display addresses in transaction list - + Whether to show coin control features or not. + + + &OK - &Cancel - - &Apply - - - - default - + none + + + Confirm options reset - - Some settings may require a client restart to take effect. + Client restart required to activate changes. - - Do you want to proceed? + Client will be shutdown, do you want to proceed? - - - Warning + This change would require a client restart. - - - This setting will take effect after restarting Myriadcoin. - - - - The supplied proxy address is invalid. @@ -999,59 +1206,54 @@ Address: %4 OverviewPage - Form - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. - - Balance: - - - - - Unconfirmed: - - - - Wallet - + Available: + + + + Your current spendable balance + + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + + + Immature: - Mined balance that has not yet matured - + Total: + + + + Your current total balance + + + <b>Recent transactions</b> - - Your current balance - - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - - - - - out of sync @@ -1059,579 +1261,856 @@ Address: %4 PaymentServer - + URI handling + + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + Cannot start myriadcoin: click-to-pay handler + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + + + + Network request error + + - QRCodeDialog + QObject - - QR Code Dialog + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" does not exist. - - Request Payment + Error: Cannot parse configuration file: %1. Only use key=value syntax. - - Amount: + Error: Invalid combination of -regtest and -testnet. - - Label: + Myriadcoin Core didn't yet exit safely... - - Message: + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + + QRImageWidget + + &Save Image... - - &Save As... + &Copy Image - - Error encoding URI into QR Code. - - - - - The entered amount is invalid, please check. - - - - - Resulting URI too long, try to reduce the text for label / message. - - - - Save QR Code - - PNG Images (*.png) + PNG Image (*.png) RPCConsole - Client name - - - - - - - - - - N/A - Client version - &Information - + Debug window + + + + General + + + Using OpenSSL version - Startup time - Network - + Name + + + Number of connections - - On testnet - - - - Block chain - Current number of blocks - Estimated total blocks - Last block time - &Open - - Command-line options - - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - - - - - &Show - - - - &Console - + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + Build date - - Myriadcoin - Debug window - - - - - Myriadcoin Core - - - - Debug log file - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. - Clear console - Welcome to the Myriadcoin RPC console. - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Type <b>help</b> for an overview of available commands. + + %1 B + + + + %1 KB + + + + %1 MB + + + + %1 GB + + + + %1 m + + + + %1 h + + + + %1 h %2 m + + + + + ReceiveCoinsDialog + + &Amount: + + + + &Label: + + + + &Message: + + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + + + + Clear + + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + + + + Remove the selected entries from the list + + + + Remove + + + + Copy label + + + + Copy message + + + + Copy amount + + + + + ReceiveRequestDialog + + QR Code + + + + Copy &URI + + + + Copy &Address + + + + &Save Image... + + + + Request payment to %1 + + + + Payment information + + + + URI + + + + Address + + + + Amount + + + + Label + + + + Message + + + + Resulting URI too long, try to reduce the text for label / message. + + + + Error encoding URI into QR Code. + + + + + RecentRequestsTableModel + + Date + + + + Label + + + + Message + + + + Amount + + + + (no label) + + + + (no message) + + + + (no amount) + + SendCoinsDialog - - - - - - - - Send Coins - + Coin Control Features + + + + Inputs... + + + + automatically selected + + + + Insufficient funds! + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + Send to multiple recipients at once - Add &Recipient - - Remove all transaction fields + Clear all fields of the form. - Clear &All - Balance: - - 123.456 BTC - - - - Confirm the send action - S&end - - <b>%1</b> to %2 (%3) - - - - Confirm send coins - - Are you sure you want to send %1? + %1 to %2 - - and + Copy quantity + + + + Copy amount + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + + + + or - The recipient address is not valid, please recheck. - The amount to pay must be larger than 0. - The amount exceeds your balance. - The total exceeds your balance when the %1 transaction fee is included. - Duplicate address found, can only send to each address once per send operation. - - Error: Transaction creation failed! + Transaction creation failed! - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + + + + (no label) + + + + Warning: Unknown change address + + + + Are you sure you want to send? + + + + added as transaction fee + + + + Payment request expired + + + + Invalid payment address %1 SendCoinsEntry - - Form - - - - A&mount: - Pay &To: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book - &Label: - - Choose address from address book + Choose previously used address + + + + This is a normal payment. - Alt+A - + Alt+A - Paste address from clipboard - Alt+P + Alt+P + + + Remove this entry - - Remove this recipient + Message: - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. SignVerifyMessageDialog - Signatures - Sign / Verify a Message - &Sign Message - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book + Choose previously used address - - Alt+A - + Alt+A - Paste address from clipboard - Alt+P - + Alt+P - Enter the message you want to sign here - Signature - Copy the current signature to the system clipboard - Sign the message to prove you own this Myriadcoin address - Sign &Message - Reset all sign message fields - - Clear &All - &Verify Message - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address - Verify &Message - Reset all verify message fields - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature - - Enter Myriadcoin signature - - - - - The entered address is invalid. - - - - Please check the address and try again. - - The entered address does not refer to a key. - Wallet unlock was cancelled. - Private key for the entered address is not available. - Message signing failed. - Message signed. - The signature could not be decoded. - - Please check the signature and try again. - The signature did not match the message digest. - Message verification failed. - Message verified. @@ -1639,186 +2118,160 @@ Address: %4 SplashScreen - - The Myriadcoin developers + Myriadcoin Core + Myriadcoin Jezrga + + + The Myriadcoin Core developers - [testnet] + + TrafficGraphWidget + + KB/s + + + TransactionDesc - Open until %1 - + conflicted + + + %1/offline - %1/unconfirmed - %1 confirmations - Status - , broadcast through %n node(s) - Date - Source - Generated - - From - - - To - - own address - label - - - - - Credit - matures in %n more block(s) - not accepted - - - - Debit - Transaction fee - Net amount - Message - Comment - Transaction ID - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Merchant + + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Debug information - Transaction - Inputs - Amount - true - false - , has not been successfully broadcast yet - Open for %n more block(s) - unknown @@ -1826,12 +2279,10 @@ Address: %4 TransactionDescDialog - Transaction details - This pane shows a detailed description of the transaction @@ -1839,117 +2290,102 @@ Address: %4 TransactionTableModel - Date - Type - Address - Amount + + Immature (%1 confirmations, will be available after %2) + + - Open for %n more block(s) - Open until %1 - - Offline (%1 confirmations) - - - - - Unconfirmed (%1 of %2 confirmations) - - - - Confirmed (%1 confirmations) - - - Mined balance will be available when it matures in %n more block(s) - - - This block was not received by any other nodes and will probably not be accepted! - Generated but not accepted - + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + Received with - Received from - Sent to - Payment to yourself - Mined - (n/a) - Transaction status. Hover over this field to show number of confirmations. - Date and time that the transaction was received. - Type of transaction. - Destination address of transaction. - Amount removed from or added to balance. @@ -1957,176 +2393,156 @@ Address: %4 TransactionView - - All - + Sve - Today - + Danas - This week - This month - + Ovaj mjesec - Last month - + Prošli mjesec - This year - + Ove godine - Range... - Received with - Sent to - To yourself - Mined - Other - Enter address or label to search - Min amount - Copy address - Copy label - Copy amount - Copy transaction ID - Edit label - Show transaction details - - Export Transaction Data + Export Transaction History + + + + Exporting Failed + + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + + + + The transaction history was successfully saved to %1. - Comma separated file (*.csv) - Confirmed - Date - Type - Label - Address - Amount - ID - - Error exporting - - - - - Could not write to file %1. - - - - Range: - to + + WalletFrame + + No wallet has been loaded. + + + WalletModel - Send Coins @@ -2134,160 +2550,121 @@ Address: %4 WalletView - &Export - Export the data in the current tab to a file - Backup Wallet - Wallet Data (*.dat) - Backup Failed - - There was an error trying to save the wallet data to the new location. + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. - Backup Successful - - - The wallet data was successfully saved to the new location. - - bitcoin-core - - Myriadcoin version - - - - Usage: - - Send command to -server or myriadcoind - - - - List commands - Get help for a command - Options: - Specify configuration file (default: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) - Specify data directory - - Set database cache size in megabytes (default: 25) - - - - Listen for connections on <port> (default: 8333 or testnet: 18333) - Maintain at most <n> connections to peers (default: 125) - Connect to a node to retrieve peer addresses, and disconnect - Specify your own public address - Threshold for disconnecting misbehaving peers (default: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) - Accept command line and JSON-RPC commands - + Myriadcoin Core RPC client version + + + Run in the background as a daemon and accept commands - Use the test network - Accept connections from outside (default: 1 if no -proxy or -connect) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2302,612 +2679,686 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications - + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. - + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + Attempt to recover private keys from a corrupt wallet.dat - + Myriadcoin Core Daemon + + + Block creation options: - + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + Connect only to the specified node(s) - + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + Corrupted block database detected - + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + Discover own IP address (default: 1 when listening and no -externalip) - + Do not load the wallet and disable wallet RPC calls + + + Do you want to rebuild the block database now? - Error initializing block database - Error initializing wallet database environment %s! - Error loading block database - Error opening block database - Error: Disk space is low! - Error: Wallet locked, unable to create transaction! - Error: system error: - Failed to listen on any port. Use -listen=0 if you want this. - Failed to read block info - Failed to read block - Failed to sync block index - Failed to write block index - Failed to write block info - Failed to write block - Failed to write file info - Failed to write to coin database - Failed to write transaction index - Failed to write undo data - + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + Find peers using DNS lookup (default: 1 unless -connect) - + Force safe mode (default: 0) + + + Generate coins (default: 0) - How many blocks to check at startup (default: 288, 0 = all) - - How thorough the block verification is (0-4, default: 3) + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' - Not enough file descriptors available. - + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + Rebuild block chain index from current blk000??.dat files - + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + Set the number of threads to service RPC calls (default: 4) - + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + Verifying blocks... - Verifying wallet... - + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + + + Imports blocks from external blk000??.dat file - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) - Information - - Invalid -tor address: '%s' - - - - Invalid amount for -minrelaytxfee=<amount>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' - + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + Maintain a full transaction index (default: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Only accept block chain matching built-in checkpoints (default: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - Output extra debugging information. Implies all other -debug* options + Print block on startup, if found in block index - - Output extra network debugging information + Print block tree on startup (default: 0) - - Prepend debug output with timestamp + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) - - Select the version of socks proxy to use (4-5, default: 5) + Send command to Myriadcoin Core - Send trace/debug info to console instead of debug.log file - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - Set minimum block size in bytes (default: 0) - + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + Shrink debug.log file on client startup (default: 1 when no -debug) - Signing transaction failed - Specify connection timeout in milliseconds (default: 5000) - + Start Myriadcoin Core Daemon + + + System error: - Transaction amount too small - Transaction amounts must be positive - Transaction too large - Use UPnP to map the listening port (default: 0) - Use UPnP to map the listening port (default: 1 when listening) - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - Username for JSON-RPC connections - Warning - Warning: This version is obsolete, upgrade required! - - You need to rebuild the databases using -reindex to change -txindex + Zapping all transactions from wallet... + + + + on startup + + + + version - wallet.dat corrupt, salvage failed - Password for JSON-RPC connections - Allow JSON-RPC connections from specified IP address - Send commands to node running on <ip> (default: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) - Upgrade wallet to latest format - Set key pool size to <n> (default: 100) - Rescan the block chain for missing wallet transactions - Use OpenSSL (https) for JSON-RPC connections - Server certificate file (default: server.cert) - Server private key (default: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - This help message - Unable to bind to %s on this computer (bind returned error %d, %s) - - Connect through socks proxy - - - - Allow DNS lookups for -addnode, -seednode and -connect - Loading addresses... - Error loading wallet.dat: Wallet corrupted - Error loading wallet.dat: Wallet requires newer version of Myriadcoin - Wallet needed to be rewritten: restart Myriadcoin to complete - Error loading wallet.dat - Invalid -proxy address: '%s' - Unknown network specified in -onlynet: '%s' - Unknown -socks proxy version requested: %i - Cannot resolve -bind address: '%s' - Cannot resolve -externalip address: '%s' - Invalid amount for -paytxfee=<amount>: '%s' - Invalid amount - Insufficient funds - Loading block index... - Add a node to connect to and attempt to keep the connection open - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - Loading wallet... - Cannot downgrade wallet - Cannot write default address - Rescanning... - Done loading - To use the %s option - Error - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_ca.ts b/src/qt/locale/bitcoin_ca.ts index 3912b58e..f9b5720a 100644 --- a/src/qt/locale/bitcoin_ca.ts +++ b/src/qt/locale/bitcoin_ca.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - A prop de Myriadcoin - - - - <b>Myriadcoin</b> version + About Myriadcoin Core + + + + <b>Myriadcoin Core</b> version - This is experimental software. @@ -23,294 +19,235 @@ This product includes software developed by the OpenSSL Project for use in the O - Copyright - - The Myriadcoin developers + The Myriadcoin Core developers + + + + (%1-bit) AddressBookPage - - Address Book - Llibreta d'adreçes - - - Double-click to edit address or label - + Doble click per editar l'adreça o l'etiqueta - Create a new address + Crear una nova adrça + + + &New - Copy the currently selected address to the system clipboard Copia la selecció actual al porta-retalls del sistema - - &New Address + &Copy - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + C&lose - &Copy Address - - Show &QR Code - - - - - Sign a message to prove you own a Myriadcoin address - - - - - Sign &Message - - - - Delete the currently selected address from the list - Export the data in the current tab to a file - &Export - - Verify a message to ensure it was signed with a specified Myriadcoin address - - - - - &Verify Message - - - - &Delete + &Eliminar + + + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses - These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + Copy &Label - &Edit - - Send &Coins + Export Address List - - Export Address Book Data - - - - Comma separated file (*.csv) + Fitxer separat per comes (*.csv) + + + Exporting Failed - - Error exporting - - - - - Could not write to file %1. + There was an error trying to save the address list to %1. AddressTableModel - Label - + Etiqueta - Address - + Adreça - (no label) - + (sense etiqueta) AskPassphraseDialog - Passphrase Dialog - Enter passphrase - + Introduïu la frase-contrasenya - New passphrase - + Nova frase-contrasenya - Repeat new passphrase - + Repetiu la nova frase-contrasenya - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - + Introduïu la nova frase-contrasenya per a la cartera.<br/>Empreu una frase-contrasenya de <b>10 o més caràcters aleatoris<b/>, o <b>vuit o més paraules<b/>. - Encrypt wallet - + Encriptar cartera - This operation needs your wallet passphrase to unlock the wallet. - + Cal que introduïu la frase-contrasenya de la cartera per a desbloquejar-la. - Unlock wallet - + Desbloquejar cartera - This operation needs your wallet passphrase to decrypt the wallet. - + Cal que introduïu la frase-contrasenya de la cartera per a desencriptar-la. - Decrypt wallet - + Desencriptar cartera - Change passphrase - + Canviar frase-contrasenya - Enter the old and new passphrase to the wallet. - + Introduïu l'antiga i la nova frase-contrasenya per a la cartera. - Confirm wallet encryption - + Confirmeu l'encriptació de cartera - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! - Are you sure you wish to encrypt your wallet? - 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. - - Warning: The Caps Lock key is on! - - Wallet encrypted - + Cartera encriptada - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. - - - - Wallet encryption failed - + L'encriptació de cartera ha fallat - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - + L'encriptació de cartera ha fallat degut a un error intern. La vostra cartera no ha estat encriptada. - - The supplied passphrases do not match. - + Les frases-contrasenya no concorden. - Wallet unlock failed - + El desbloqueig de cartera ha fallat - - - The passphrase entered for the wallet decryption was incorrect. - + La frase-contrasenya per a la desencriptació de cartera és incorrecta. - Wallet decryption failed - + La desencriptació de cartera ha fallat - Wallet passphrase was successfully changed. @@ -318,319 +255,286 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - Sign &message... - Synchronizing with network... - + Sincronitzant amb la xarxa... - &Overview + &Visió general + + + Node - Show general overview of wallet - + Mostrar visió general de la cartera - &Transactions - + &Transaccions - Browse transaction history - + Exploreu l'historial de transaccions - - Edit the list of stored addresses and labels - - - - - Show the list of addresses for receiving payments - - - - E&xit - Quit application - + Sortir de l'aplicació - Show information about Myriadcoin - + Informació sobre Myriadcoin - About &Qt - Show information about Qt - &Options... - + &Opcions... - &Encrypt Wallet... - &Backup Wallet... - &Change Passphrase... - + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + Importing blocks from disk... - Reindexing blocks on disk... - Send coins to a Myriadcoin address - Modify configuration options for Myriadcoin - Backup wallet to another location - Change the passphrase used for wallet encryption - + Canviar frase-contrasenya per a l'escriptació de la cartera - &Debug window - Open debugging and diagnostic console - &Verify message... - - Myriadcoin - Wallet - &Send - &Receive - - &Addresses - - - - - &About Myriadcoin - - - - &Show / Hide - Show or hide the main Window - Encrypt the private keys that belong to your wallet - Sign messages with your Myriadcoin addresses to prove you own them - Verify messages to ensure they were signed with specified Myriadcoin addresses - &File - + &Fitxer - &Settings - + &Configuració - &Help - + &Ajuda - Tabs toolbar - + Barra d'eines - - [testnet] + [testnet] + + + Myriadcoin Core + + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options - Myriadcoin client - %n active connection(s) to Myriadcoin network - No block source available... - Processed %1 of %2 (estimated) blocks of transaction history. - Processed %1 blocks of transaction history. - %n hour(s) - %n day(s) - %n week(s) - + %1 and %2 + + + + %n year(s) + + + %1 behind - Last received block was generated %1 ago. - Transactions after this will not yet be visible. - Error - Warning - Information - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - Up to date - Catching up... - + Actualitzant... - - Confirm transaction fee - - - - Sent transaction - + Transacció enviada - Incoming transaction - + Transacció entrant - Date: %1 Amount: %2 Type: %3 @@ -639,29 +543,14 @@ Address: %4 - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - + La cartera està <b>encriptada<b/> i <b>desbloquejada<b/> - Wallet is <b>encrypted</b> and currently <b>locked</b> - + La cartera està <b>encriptada<b/> i <b>bloquejada<b/> - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. @@ -669,329 +558,647 @@ Address: %4 ClientModel - Network Alert + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + + + + Address + Adreça + + + Date + + + + Confirmations + + + + Confirmed + + + + Priority + + + + Copy address + + + + Copy label + + + + Copy amount + + + + Copy transaction ID + + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + + + + Dust + + + + yes + + + + no + + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + (sense etiqueta) + + + change from %1 (%2) + + + + (change) + + + EditAddressDialog - Edit Address - + Editar adreça - &Label + &Etiqueta + + + The label associated with this address list entry - - The label associated with this address book entry + The address associated with this address list entry. This can only be modified for sending addresses. - &Address - + &Adreça - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - New receiving address - New sending address - Edit receiving address - Edit sending address - The entered address "%1" is already in the address book. - The entered address "%1" is not a valid Myriadcoin address. - Could not unlock wallet. - New key generation failed. - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt + A new data directory will be created. + + + + name + + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core - version - Usage: - command-line options - UI options - Set language, for example "de_DE" (default: system locale) - Start minimized - + Set SSL root certificates for payment request (default: -system-) + + + Show splash screen on startup (default: 1) + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + + + + Error: Specified data directory "%1" can not be created. + + + + Error + + + + GB of free space available + + + + (of %1GB needed) + + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open + + OptionsDialog - Options - &Main - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. - Pay transaction &fee - Automatically start Myriadcoin after logging in to the system. - &Start Myriadcoin on system login - + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + Reset all client options to default. - &Reset Options - &Network - + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. - Map port using &UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - - - - - &Connect through SOCKS proxy: - - - - Proxy &IP: - - IP address of the proxy (e.g. 127.0.0.1) - - - - &Port: - Port of the proxy (e.g. 9050) - SOCKS &Version: - SOCKS version of the proxy (e.g. 5) - &Window - Show only a tray icon after minimizing the window. - &Minimize to the tray instead of the taskbar - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. - M&inimize on close - &Display - User Interface &language: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. - &Unit to show amounts in: - Choose the default subdivision unit to show in the interface and when sending coins. - Whether to show Myriadcoin addresses in the transaction list or not. - &Display addresses in transaction list - + Whether to show coin control features or not. + + + &OK - &Cancel - - &Apply - - - - default - + none + + + Confirm options reset - - Some settings may require a client restart to take effect. + Client restart required to activate changes. - - Do you want to proceed? + Client will be shutdown, do you want to proceed? - - - Warning + This change would require a client restart. - - - This setting will take effect after restarting Myriadcoin. - - - - The supplied proxy address is invalid. @@ -999,59 +1206,54 @@ Address: %4 OverviewPage - Form - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. - - Balance: - - - - - Unconfirmed: - - - - Wallet - + Available: + + + + Your current spendable balance + + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + + + Immature: - Mined balance that has not yet matured - + Total: + + + + Your current total balance + + + <b>Recent transactions</b> - - Your current balance - - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - - - - - out of sync @@ -1059,579 +1261,856 @@ Address: %4 PaymentServer - + URI handling + + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + Cannot start myriadcoin: click-to-pay handler + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + + + + Network request error + + - QRCodeDialog + QObject - - QR Code Dialog + Myriadcoin - - Request Payment + Error: Specified data directory "%1" does not exist. - - Amount: + Error: Cannot parse configuration file: %1. Only use key=value syntax. - - Label: + Error: Invalid combination of -regtest and -testnet. - - Message: + Myriadcoin Core didn't yet exit safely... - - &Save As... + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + + QRImageWidget + + &Save Image... - - Error encoding URI into QR Code. + &Copy Image - - The entered amount is invalid, please check. - - - - - Resulting URI too long, try to reduce the text for label / message. - - - - Save QR Code - - PNG Images (*.png) + PNG Image (*.png) RPCConsole - Client name - - - - - - - - - - N/A - Client version - &Information - + Debug window + + + + General + + + Using OpenSSL version - Startup time - Network - + Name + + + Number of connections - - On testnet - - - - Block chain - Current number of blocks - Estimated total blocks - Last block time - &Open - - Command-line options - - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - - - - - &Show - - - - &Console - + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + Build date - - Myriadcoin - Debug window - - - - - Myriadcoin Core - - - - Debug log file - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. - Clear console - Welcome to the Myriadcoin RPC console. - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Type <b>help</b> for an overview of available commands. + + %1 B + + + + %1 KB + + + + %1 MB + + + + %1 GB + + + + %1 m + + + + %1 h + + + + %1 h %2 m + + + + + ReceiveCoinsDialog + + &Amount: + + + + &Label: + + + + &Message: + + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + + + + Clear + + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + + + + Remove the selected entries from the list + + + + Remove + + + + Copy label + + + + Copy message + + + + Copy amount + + + + + ReceiveRequestDialog + + QR Code + + + + Copy &URI + + + + Copy &Address + + + + &Save Image... + + + + Request payment to %1 + + + + Payment information + + + + URI + + + + Address + Adreça + + + Amount + + + + Label + Etiqueta + + + Message + + + + Resulting URI too long, try to reduce the text for label / message. + + + + Error encoding URI into QR Code. + + + + + RecentRequestsTableModel + + Date + + + + Label + Etiqueta + + + Message + + + + Amount + + + + (no label) + (sense etiqueta) + + + (no message) + + + + (no amount) + + SendCoinsDialog - - - - - - - - Send Coins - + Coin Control Features + + + + Inputs... + + + + automatically selected + + + + Insufficient funds! + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + Send to multiple recipients at once - Add &Recipient - - Remove all transaction fields + Clear all fields of the form. - Clear &All - Balance: - - 123.456 BTC - - - - Confirm the send action - S&end - - <b>%1</b> to %2 (%3) - - - - Confirm send coins - - Are you sure you want to send %1? + %1 to %2 - - and + Copy quantity + + + + Copy amount + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + + + + or - The recipient address is not valid, please recheck. - The amount to pay must be larger than 0. - The amount exceeds your balance. - The total exceeds your balance when the %1 transaction fee is included. - Duplicate address found, can only send to each address once per send operation. - - Error: Transaction creation failed! + Transaction creation failed! - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + + + + (no label) + (sense etiqueta) + + + Warning: Unknown change address + + + + Are you sure you want to send? + + + + added as transaction fee + + + + Payment request expired + + + + Invalid payment address %1 SendCoinsEntry - - Form - - - - A&mount: - Pay &To: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book - &Label: - - Choose address from address book + Choose previously used address + + + + This is a normal payment. - Alt+A - Paste address from clipboard - Alt+P - - Remove this recipient + Remove this entry - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + + + + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. SignVerifyMessageDialog - Signatures - Sign / Verify a Message - &Sign Message - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book + Choose previously used address - - Alt+A - Paste address from clipboard - Alt+P - Enter the message you want to sign here - Signature - Copy the current signature to the system clipboard - Sign the message to prove you own this Myriadcoin address - Sign &Message - Reset all sign message fields - - Clear &All - &Verify Message - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address - Verify &Message - Reset all verify message fields - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature - - Enter Myriadcoin signature - - - - - The entered address is invalid. - - - - Please check the address and try again. - - The entered address does not refer to a key. - Wallet unlock was cancelled. - Private key for the entered address is not available. - Message signing failed. - Message signed. - The signature could not be decoded. - - Please check the signature and try again. - The signature did not match the message digest. - Message verification failed. - Message verified. @@ -1639,186 +2118,160 @@ Address: %4 SplashScreen - - The Myriadcoin developers + Myriadcoin Core + + + + The Myriadcoin Core developers - [testnet] + [testnet] + + + + TrafficGraphWidget + + KB/s TransactionDesc - Open until %1 - + conflicted + + + %1/offline - %1/unconfirmed - %1 confirmations - Status - , broadcast through %n node(s) - Date - Source - Generated - - From - - - To - - own address - label - - - - - Credit - matures in %n more block(s) - not accepted - - - - Debit - Transaction fee - Net amount - Message - Comment - Transaction ID - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Merchant + + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Debug information - Transaction - Inputs - Amount - true - false - , has not been successfully broadcast yet - Open for %n more block(s) - unknown @@ -1826,12 +2279,10 @@ Address: %4 TransactionDescDialog - Transaction details - This pane shows a detailed description of the transaction @@ -1839,117 +2290,102 @@ Address: %4 TransactionTableModel - Date - Type - Address - + Adreça - Amount + + Immature (%1 confirmations, will be available after %2) + + - Open for %n more block(s) - Open until %1 - - Offline (%1 confirmations) - - - - - Unconfirmed (%1 of %2 confirmations) - - - - Confirmed (%1 confirmations) - - - Mined balance will be available when it matures in %n more block(s) - - - This block was not received by any other nodes and will probably not be accepted! - Generated but not accepted - + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + Received with - Received from - Sent to - Payment to yourself - Mined - (n/a) - Transaction status. Hover over this field to show number of confirmations. - Date and time that the transaction was received. - Type of transaction. - Destination address of transaction. - Amount removed from or added to balance. @@ -1957,176 +2393,156 @@ Address: %4 TransactionView - - All - Today - This week - This month - Last month - This year - Range... - Received with - Sent to - To yourself - Mined - Other - Enter address or label to search - Min amount - Copy address - Copy label - Copy amount - Copy transaction ID - Edit label - Show transaction details - - Export Transaction Data + Export Transaction History + + + + Exporting Failed + + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + + + + The transaction history was successfully saved to %1. - Comma separated file (*.csv) - + Fitxer separat per comes (*.csv) - Confirmed - Date - Type - Label - + Etiqueta - Address - + Adreça - Amount - ID - - Error exporting - - - - - Could not write to file %1. - - - - Range: - to + + WalletFrame + + No wallet has been loaded. + + + WalletModel - Send Coins @@ -2134,160 +2550,121 @@ Address: %4 WalletView - &Export - Export the data in the current tab to a file - Backup Wallet - Wallet Data (*.dat) - Backup Failed - - There was an error trying to save the wallet data to the new location. + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. - Backup Successful - - - The wallet data was successfully saved to the new location. - - bitcoin-core - - Myriadcoin version - - - - Usage: - - Send command to -server or myriadcoind - - - - List commands - Get help for a command - Options: - Specify configuration file (default: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) - Specify data directory - - Set database cache size in megabytes (default: 25) - - - - Listen for connections on <port> (default: 8333 or testnet: 18333) - Maintain at most <n> connections to peers (default: 125) - Connect to a node to retrieve peer addresses, and disconnect - Specify your own public address - Threshold for disconnecting misbehaving peers (default: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) - Accept command line and JSON-RPC commands - + Myriadcoin Core RPC client version + + + Run in the background as a daemon and accept commands - Use the test network - Accept connections from outside (default: 1 if no -proxy or -connect) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2302,612 +2679,686 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications - + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. - + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + Attempt to recover private keys from a corrupt wallet.dat - + Myriadcoin Core Daemon + + + Block creation options: - + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + Connect only to the specified node(s) - + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + Corrupted block database detected - + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + Discover own IP address (default: 1 when listening and no -externalip) - + Do not load the wallet and disable wallet RPC calls + + + Do you want to rebuild the block database now? - Error initializing block database - Error initializing wallet database environment %s! - Error loading block database - Error opening block database - Error: Disk space is low! - Error: Wallet locked, unable to create transaction! - Error: system error: - Failed to listen on any port. Use -listen=0 if you want this. - Failed to read block info - Failed to read block - Failed to sync block index - Failed to write block index - Failed to write block info - Failed to write block - Failed to write file info - Failed to write to coin database - Failed to write transaction index - Failed to write undo data - + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + Find peers using DNS lookup (default: 1 unless -connect) - + Force safe mode (default: 0) + + + Generate coins (default: 0) - How many blocks to check at startup (default: 288, 0 = all) - - How thorough the block verification is (0-4, default: 3) + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' - Not enough file descriptors available. - + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + Rebuild block chain index from current blk000??.dat files - + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + Set the number of threads to service RPC calls (default: 4) - + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + Verifying blocks... - Verifying wallet... - + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + + + Imports blocks from external blk000??.dat file - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) - Information - - Invalid -tor address: '%s' - - - - Invalid amount for -minrelaytxfee=<amount>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' - + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + Maintain a full transaction index (default: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Only accept block chain matching built-in checkpoints (default: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - Output extra debugging information. Implies all other -debug* options + Print block on startup, if found in block index - - Output extra network debugging information + Print block tree on startup (default: 0) - - Prepend debug output with timestamp + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) - - Select the version of socks proxy to use (4-5, default: 5) + Send command to Myriadcoin Core - Send trace/debug info to console instead of debug.log file - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - Set minimum block size in bytes (default: 0) - + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + Shrink debug.log file on client startup (default: 1 when no -debug) - Signing transaction failed - Specify connection timeout in milliseconds (default: 5000) - + Start Myriadcoin Core Daemon + + + System error: - Transaction amount too small - Transaction amounts must be positive - Transaction too large - Use UPnP to map the listening port (default: 0) - Use UPnP to map the listening port (default: 1 when listening) - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - Username for JSON-RPC connections - Warning - Warning: This version is obsolete, upgrade required! - - You need to rebuild the databases using -reindex to change -txindex + Zapping all transactions from wallet... + + + + on startup + + + + version - wallet.dat corrupt, salvage failed - Password for JSON-RPC connections - Allow JSON-RPC connections from specified IP address - Send commands to node running on <ip> (default: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) - Upgrade wallet to latest format - Set key pool size to <n> (default: 100) - Rescan the block chain for missing wallet transactions - Use OpenSSL (https) for JSON-RPC connections - Server certificate file (default: server.cert) - Server private key (default: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - This help message - Unable to bind to %s on this computer (bind returned error %d, %s) - - Connect through socks proxy - - - - Allow DNS lookups for -addnode, -seednode and -connect - Loading addresses... - Error loading wallet.dat: Wallet corrupted - Error loading wallet.dat: Wallet requires newer version of Myriadcoin - Wallet needed to be rewritten: restart Myriadcoin to complete - Error loading wallet.dat - Invalid -proxy address: '%s' - Unknown network specified in -onlynet: '%s' - Unknown -socks proxy version requested: %i - Cannot resolve -bind address: '%s' - Cannot resolve -externalip address: '%s' - Invalid amount for -paytxfee=<amount>: '%s' - Invalid amount - Insufficient funds - Loading block index... - Add a node to connect to and attempt to keep the connection open - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - Loading wallet... - Cannot downgrade wallet - Cannot write default address - Rescanning... - Done loading - To use the %s option - Error - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_ca@valencia.ts b/src/qt/locale/bitcoin_ca@valencia.ts new file mode 100644 index 00000000..5f6cd671 --- /dev/null +++ b/src/qt/locale/bitcoin_ca@valencia.ts @@ -0,0 +1,3368 @@ + + + AboutDialog + + About Myriadcoin Core + + + + <b>Myriadcoin Core</b> version + + + + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. + + + + Copyright + + + + The Myriadcoin Core developers + + + + (%1-bit) + + + + + AddressBookPage + + Double-click to edit address or label + Doble click per editar la direccio o la etiqueta + + + Create a new address + Crear nova direccio + + + &New + + + + Copy the currently selected address to the system clipboard + Copieu l'adreça seleccionada al porta-retalls del sistema + + + &Copy + + + + C&lose + + + + &Copy Address + + + + Delete the currently selected address from the list + + + + Export the data in the current tab to a file + + + + &Export + + + + &Delete + Eliminar + + + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + + Copy &Label + + + + &Edit + + + + Export Address List + + + + Comma separated file (*.csv) + + + + Exporting Failed + + + + There was an error trying to save the address list to %1. + + + + + AddressTableModel + + Label + + + + Address + + + + (no label) + + + + + AskPassphraseDialog + + Passphrase Dialog + + + + Enter passphrase + + + + New passphrase + + + + Repeat new passphrase + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + + + + Encrypt wallet + + + + This operation needs your wallet passphrase to unlock the wallet. + + + + Unlock wallet + + + + This operation needs your wallet passphrase to decrypt the wallet. + + + + Decrypt wallet + + + + Change passphrase + + + + Enter the old and new passphrase to the wallet. + + + + Confirm wallet encryption + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! + + + + Are you sure you wish to encrypt your wallet? + + + + 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. + + + + Warning: The Caps Lock key is on! + + + + Wallet encrypted + + + + Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. + + + + Wallet encryption failed + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + + + + The supplied passphrases do not match. + + + + Wallet unlock failed + + + + The passphrase entered for the wallet decryption was incorrect. + + + + Wallet decryption failed + + + + Wallet passphrase was successfully changed. + + + + + BitcoinGUI + + Sign &message... + + + + Synchronizing with network... + + + + &Overview + + + + Node + + + + Show general overview of wallet + + + + &Transactions + + + + Browse transaction history + + + + E&xit + + + + Quit application + + + + Show information about Myriadcoin + + + + About &Qt + + + + Show information about Qt + + + + &Options... + + + + &Encrypt Wallet... + + + + &Backup Wallet... + + + + &Change Passphrase... + + + + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + + Importing blocks from disk... + + + + Reindexing blocks on disk... + + + + Send coins to a Myriadcoin address + + + + Modify configuration options for Myriadcoin + + + + Backup wallet to another location + + + + Change the passphrase used for wallet encryption + + + + &Debug window + + + + Open debugging and diagnostic console + + + + &Verify message... + + + + Myriadcoin + + + + Wallet + + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your Myriadcoin addresses to prove you own them + + + + Verify messages to ensure they were signed with specified Myriadcoin addresses + + + + &File + + + + &Settings + + + + &Help + + + + Tabs toolbar + + + + [testnet] + + + + Myriadcoin Core + + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + + Myriadcoin client + + + + %n active connection(s) to Myriadcoin network + + + + No block source available... + + + + Processed %1 of %2 (estimated) blocks of transaction history. + + + + Processed %1 blocks of transaction history. + + + + %n hour(s) + + + + %n day(s) + + + + %n week(s) + + + + %1 and %2 + + + + %n year(s) + + + + %1 behind + + + + Last received block was generated %1 ago. + + + + Transactions after this will not yet be visible. + + + + Error + + + + Warning + + + + Information + + + + Up to date + + + + Catching up... + + + + Sent transaction + + + + Incoming transaction + + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + A fatal error occurred. Myriadcoin can no longer continue safely and will quit. + + + + + ClientModel + + Network Alert + + + + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + + + + Address + + + + Date + + + + Confirmations + + + + Confirmed + + + + Priority + + + + Copy address + + + + Copy label + + + + Copy amount + + + + Copy transaction ID + + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + + + + Dust + + + + yes + + + + no + + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + + + + change from %1 (%2) + + + + (change) + + + + + EditAddressDialog + + Edit Address + + + + &Label + + + + The label associated with this address list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + + + + &Address + + + + New receiving address + + + + New sending address + + + + Edit receiving address + + + + Edit sending address + + + + The entered address "%1" is already in the address book. + + + + The entered address "%1" is not a valid Myriadcoin address. + + + + Could not unlock wallet. + + + + New key generation failed. + + + + + FreespaceChecker + + A new data directory will be created. + + + + name + + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core + + + + version + + + + Usage: + + + + command-line options + + + + UI options + + + + Set language, for example "de_DE" (default: system locale) + + + + Start minimized + + + + Set SSL root certificates for payment request (default: -system-) + + + + Show splash screen on startup (default: 1) + + + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + + + + Error: Specified data directory "%1" can not be created. + + + + Error + + + + GB of free space available + + + + (of %1GB needed) + + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open + + + + + OptionsDialog + + Options + + + + &Main + + + + Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. + + + + Pay transaction &fee + + + + Automatically start Myriadcoin after logging in to the system. + + + + &Start Myriadcoin on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + + Reset all client options to default. + + + + &Reset Options + + + + &Network + + + + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. + + + + Map port using &UPnP + + + + Proxy &IP: + + + + &Port: + + + + Port of the proxy (e.g. 9050) + + + + SOCKS &Version: + + + + SOCKS version of the proxy (e.g. 5) + + + + &Window + + + + Show only a tray icon after minimizing the window. + + + + &Minimize to the tray instead of the taskbar + + + + Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. + + + + M&inimize on close + + + + &Display + + + + User Interface &language: + + + + The user interface language can be set here. This setting will take effect after restarting Myriadcoin. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show Myriadcoin addresses in the transaction list or not. + + + + &Display addresses in transaction list + + + + Whether to show coin control features or not. + + + + &OK + + + + &Cancel + + + + default + + + + none + + + + Confirm options reset + + + + Client restart required to activate changes. + + + + Client will be shutdown, do you want to proceed? + + + + This change would require a client restart. + + + + The supplied proxy address is invalid. + + + + + OverviewPage + + Form + + + + The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. + + + + Wallet + + + + Available: + + + + Your current spendable balance + + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + + + + Immature: + + + + Mined balance that has not yet matured + + + + Total: + + + + Your current total balance + + + + <b>Recent transactions</b> + + + + out of sync + + + + + PaymentServer + + URI handling + + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start myriadcoin: click-to-pay handler + + + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + + + + Network request error + + + + + QObject + + Myriadcoin + + + + Error: Specified data directory "%1" does not exist. + + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + + + + Error: Invalid combination of -regtest and -testnet. + + + + Myriadcoin Core didn't yet exit safely... + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + + QRImageWidget + + &Save Image... + + + + &Copy Image + + + + Save QR Code + + + + PNG Image (*.png) + + + + + RPCConsole + + Client name + + + + N/A + + + + Client version + + + + &Information + + + + Debug window + + + + General + + + + Using OpenSSL version + + + + Startup time + + + + Network + + + + Name + + + + Number of connections + + + + Block chain + + + + Current number of blocks + + + + Estimated total blocks + + + + Last block time + + + + &Open + + + + &Console + + + + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + + Build date + + + + Debug log file + + + + Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the Myriadcoin RPC console. + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + Type <b>help</b> for an overview of available commands. + + + + %1 B + + + + %1 KB + + + + %1 MB + + + + %1 GB + + + + %1 m + + + + %1 h + + + + %1 h %2 m + + + + + ReceiveCoinsDialog + + &Amount: + + + + &Label: + + + + &Message: + + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + + + + Clear + + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + + + + Remove the selected entries from the list + + + + Remove + + + + Copy label + + + + Copy message + + + + Copy amount + + + + + ReceiveRequestDialog + + QR Code + + + + Copy &URI + + + + Copy &Address + + + + &Save Image... + + + + Request payment to %1 + + + + Payment information + + + + URI + + + + Address + + + + Amount + + + + Label + + + + Message + + + + Resulting URI too long, try to reduce the text for label / message. + + + + Error encoding URI into QR Code. + + + + + RecentRequestsTableModel + + Date + + + + Label + + + + Message + + + + Amount + + + + (no label) + + + + (no message) + + + + (no amount) + + + + + SendCoinsDialog + + Send Coins + + + + Coin Control Features + + + + Inputs... + + + + automatically selected + + + + Insufficient funds! + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + + Send to multiple recipients at once + + + + Add &Recipient + + + + Clear all fields of the form. + + + + Clear &All + + + + Balance: + + + + Confirm the send action + + + + S&end + + + + Confirm send coins + + + + %1 to %2 + + + + Copy quantity + + + + Copy amount + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + + + + or + + + + The recipient address is not valid, please recheck. + + + + The amount to pay must be larger than 0. + + + + The amount exceeds your balance. + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + Duplicate address found, can only send to each address once per send operation. + + + + Transaction creation failed! + + + + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + + + + (no label) + + + + Warning: Unknown change address + + + + Are you sure you want to send? + + + + added as transaction fee + + + + Payment request expired + + + + Invalid payment address %1 + + + + + SendCoinsEntry + + A&mount: + + + + Pay &To: + + + + The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Enter a label for this address to add it to your address book + + + + &Label: + + + + Choose previously used address + + + + This is a normal payment. + + + + Alt+A + + + + Paste address from clipboard + + + + Alt+P + + + + Remove this entry + + + + Message: + + + + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. + + + + + SignVerifyMessageDialog + + Signatures - Sign / Verify a Message + + + + &Sign Message + + + + You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. + + + + The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Choose previously used address + + + + Alt+A + + + + Paste address from clipboard + + + + Alt+P + + + + Enter the message you want to sign here + + + + Signature + + + + Copy the current signature to the system clipboard + + + + Sign the message to prove you own this Myriadcoin address + + + + Sign &Message + + + + Reset all sign message fields + + + + Clear &All + + + + &Verify Message + + + + Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. + + + + The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Verify the message to ensure it was signed with the specified Myriadcoin address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Click "Sign Message" to generate signature + + + + The entered address is invalid. + + + + Please check the address and try again. + + + + The entered address does not refer to a key. + + + + Wallet unlock was cancelled. + + + + Private key for the entered address is not available. + + + + Message signing failed. + + + + Message signed. + + + + The signature could not be decoded. + + + + Please check the signature and try again. + + + + The signature did not match the message digest. + + + + Message verification failed. + + + + Message verified. + + + + + SplashScreen + + Myriadcoin Core + + + + The Myriadcoin Core developers + + + + [testnet] + + + + + TrafficGraphWidget + + KB/s + + + + + TransactionDesc + + Open until %1 + + + + conflicted + + + + %1/offline + + + + %1/unconfirmed + + + + %1 confirmations + + + + Status + + + + , broadcast through %n node(s) + + + + Date + + + + Source + + + + Generated + + + + From + + + + To + + + + own address + + + + label + + + + Credit + + + + matures in %n more block(s) + + + + not accepted + + + + Debit + + + + Transaction fee + + + + Net amount + + + + Message + + + + Comment + + + + Transaction ID + + + + Merchant + + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + Debug information + + + + Transaction + + + + Inputs + + + + Amount + + + + true + + + + false + + + + , has not been successfully broadcast yet + + + + Open for %n more block(s) + + + + unknown + + + + + TransactionDescDialog + + Transaction details + + + + This pane shows a detailed description of the transaction + + + + + TransactionTableModel + + Date + + + + Type + + + + Address + + + + Amount + + + + Immature (%1 confirmations, will be available after %2) + + + + Open for %n more block(s) + + + + Open until %1 + + + + Confirmed (%1 confirmations) + + + + This block was not received by any other nodes and will probably not be accepted! + + + + Generated but not accepted + + + + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + + Received with + + + + Received from + + + + Sent to + + + + Payment to yourself + + + + Mined + + + + (n/a) + + + + Transaction status. Hover over this field to show number of confirmations. + + + + Date and time that the transaction was received. + + + + Type of transaction. + + + + Destination address of transaction. + + + + Amount removed from or added to balance. + + + + + TransactionView + + All + + + + Today + + + + This week + + + + This month + + + + Last month + + + + This year + + + + Range... + + + + Received with + + + + Sent to + + + + To yourself + + + + Mined + + + + Other + + + + Enter address or label to search + + + + Min amount + + + + Copy address + + + + Copy label + + + + Copy amount + + + + Copy transaction ID + + + + Edit label + + + + Show transaction details + + + + Export Transaction History + + + + Exporting Failed + + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + + + + The transaction history was successfully saved to %1. + + + + Comma separated file (*.csv) + + + + Confirmed + + + + Date + + + + Type + + + + Label + + + + Address + + + + Amount + + + + ID + + + + Range: + + + + to + + + + + WalletFrame + + No wallet has been loaded. + + + + + WalletModel + + Send Coins + + + + + WalletView + + &Export + + + + Export the data in the current tab to a file + + + + Backup Wallet + + + + Wallet Data (*.dat) + + + + Backup Failed + + + + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. + + + + Backup Successful + + + + + bitcoin-core + + Usage: + + + + List commands + + + + Get help for a command + + + + Options: + + + + Specify configuration file (default: myriadcoin.conf) + + + + Specify pid file (default: myriadcoind.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 8333 or testnet: 18333) + + + + Maintain at most <n> connections to peers (default: 125) + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + Specify your own public address + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) + + + + Accept command line and JSON-RPC commands + + + + Myriadcoin Core RPC client version + + + + Run in the background as a daemon and accept commands + + + + Use the test network + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=myriadcoinrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + Bind to given address and always listen on it. Use [host]:port notation for IPv6 + + + + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) + + + + Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + + + + This is a pre-release test build - use at your own risk - do not use for mining or merchant applications + + + + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. + + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + Myriadcoin Core Daemon + + + + Block creation options: + + + + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + + Connect only to the specified node(s) + + + + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + + Corrupted block database detected + + + + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + Do not load the wallet and disable wallet RPC calls + + + + Do you want to rebuild the block database now? + + + + Error initializing block database + + + + Error initializing wallet database environment %s! + + + + Error loading block database + + + + Error opening block database + + + + Error: Disk space is low! + + + + Error: Wallet locked, unable to create transaction! + + + + Error: system error: + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + Failed to read block info + + + + Failed to read block + + + + Failed to sync block index + + + + Failed to write block index + + + + Failed to write block info + + + + Failed to write block + + + + Failed to write file info + + + + Failed to write to coin database + + + + Failed to write transaction index + + + + Failed to write undo data + + + + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + + Find peers using DNS lookup (default: 1 unless -connect) + + + + Force safe mode (default: 0) + + + + Generate coins (default: 0) + + + + How many blocks to check at startup (default: 288, 0 = all) + + + + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' + + + + Not enough file descriptors available. + + + + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + + Rebuild block chain index from current blk000??.dat files + + + + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + + Set the number of threads to service RPC calls (default: 4) + + + + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + + Verifying blocks... + + + + Verifying wallet... + + + + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + + + + Imports blocks from external blk000??.dat file + + + + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + + + + Information + + + + Invalid amount for -minrelaytxfee=<amount>: '%s' + + + + Invalid amount for -mintxfee=<amount>: '%s' + + + + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + + Maintain a full transaction index (default: 0) + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + Only accept block chain matching built-in checkpoints (default: 1) + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + Print block on startup, if found in block index + + + + Print block tree on startup (default: 0) + + + + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + + + + SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + Send command to Myriadcoin Core + + + + Send trace/debug info to console instead of debug.log file + + + + Set minimum block size in bytes (default: 0) + + + + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + Signing transaction failed + + + + Specify connection timeout in milliseconds (default: 5000) + + + + Start Myriadcoin Core Daemon + + + + System error: + + + + Transaction amount too small + + + + Transaction amounts must be positive + + + + Transaction too large + + + + Use UPnP to map the listening port (default: 0) + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + Username for JSON-RPC connections + + + + Warning + + + + Warning: This version is obsolete, upgrade required! + + + + Zapping all transactions from wallet... + + + + on startup + + + + version + + + + wallet.dat corrupt, salvage failed + + + + Password for JSON-RPC connections + + + + Allow JSON-RPC connections from specified IP address + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + Upgrade wallet to latest format + + + + Set key pool size to <n> (default: 100) + + + + Rescan the block chain for missing wallet transactions + + + + Use OpenSSL (https) for JSON-RPC connections + + + + Server certificate file (default: server.cert) + + + + Server private key (default: server.pem) + + + + This help message + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + Loading addresses... + + + + Error loading wallet.dat: Wallet corrupted + + + + Error loading wallet.dat: Wallet requires newer version of Myriadcoin + + + + Wallet needed to be rewritten: restart Myriadcoin to complete + + + + Error loading wallet.dat + + + + Invalid -proxy address: '%s' + + + + Unknown network specified in -onlynet: '%s' + + + + Unknown -socks proxy version requested: %i + + + + Cannot resolve -bind address: '%s' + + + + Cannot resolve -externalip address: '%s' + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + Invalid amount + + + + Insufficient funds + + + + Loading block index... + + + + Add a node to connect to and attempt to keep the connection open + + + + Loading wallet... + + + + Cannot downgrade wallet + + + + Cannot write default address + + + + Rescanning... + + + + Done loading + + + + To use the %s option + + + + Error + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + \ No newline at end of file diff --git a/src/qt/locale/bitcoin_ca_ES.ts b/src/qt/locale/bitcoin_ca_ES.ts index 9a0046e0..9b275662 100644 --- a/src/qt/locale/bitcoin_ca_ES.ts +++ b/src/qt/locale/bitcoin_ca_ES.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - Sobre Myriadcoin + About Myriadcoin Core + Sobre el Nucli de Myriadcoin - - <b>Myriadcoin</b> version - <b>Myriadcoin</b> versió + <b>Myriadcoin Core</b> version + - This is experimental software. @@ -23,153 +19,128 @@ This product includes software developed by the OpenSSL Project for use in the O \n Aquest és software experimental.\n\n Distribuït sota llicència de software MIT/11, veure l'arxiu COPYING o http://www.opensource.org/licenses/mit-license.php.\n\nAquest producte inclou software desarrollat pel projecte OpenSSL per a l'ús de OppenSSL Toolkit (http://www.openssl.org/) i de softwqre criptogràfic escrit per l'Eric Young (eay@cryptsoft.com) i software UPnP escrit per en Thomas Bernard. - Copyright Copyright - - The Myriadcoin developers + The Myriadcoin Core developers + + + + (%1-bit) AddressBookPage - - Address Book - Llibreta d'adreces - - - Double-click to edit address or label Feu doble clic per editar l'adreça o l'etiqueta - Create a new address Crear una nova adreça - + &New + &Nou + + Copy the currently selected address to the system clipboard Copiar l'adreça seleccionada al porta-retalls del sistema - - &New Address - &Nova adreça + &Copy + &Copiar - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Aquestes són les teves adreces Myriadcoin per a rebre pagaments. Pot interesar-te proveïr diferents adreces a cadascun dels enviadors així pots identificar qui et va pagant. + C&lose + - &Copy Address &Copiar adreça - - Show &QR Code - Mostrar codi &QR - - - - Sign a message to prove you own a Myriadcoin address - Signa el missatge per provar que ets propietari de l'adreça Myriadcoin - - - - Sign &Message - Signar &Missatge - - - Delete the currently selected address from the list Esborrar l'adreça sel·leccionada - Export the data in the current tab to a file - + Exportar les dades de la pestanya actual a un arxiu - &Export - + &Exportar - - Verify a message to ensure it was signed with a specified Myriadcoin address - Verificar un missatge per asegurar-se que ha estat signat amb una adreça Myriadcoin específica - - - - &Verify Message - &Verificar el missatge - - - &Delete &Esborrar - + Choose the address to send coins to + Escull una adreça a la qual enviar coins + + + Choose the address to receive coins with + Escull l'adreça a la quals vols rebre coins + + + C&hoose + + + + Sending addresses + Enviant adreces + + + Receiving addresses + Rebent adreces + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. Aquestes són la seva adreça de Myriadcoin per enviar els pagaments. Sempre revisi la quantitat i l'adreça del destinatari abans transferència de monedes. - + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + Copy &Label Copiar &Etiqueta - &Edit &Editar - - Send &Coins - Enviar &Monedes + Export Address List + Exportar la llista d'adre - - Export Address Book Data - Exporta llibreta d'adreces - - - Comma separated file (*.csv) Arxiu de separació per comes (*.csv) - - Error exporting - Error en l'exportació + Exporting Failed + - - Could not write to file %1. - No s'ha pogut escriure a l'arxiu %1. + There was an error trying to save the address list to %1. + AddressTableModel - Label Etiqueta - Address Adreça - (no label) (sense etiqueta) @@ -177,140 +148,106 @@ This product includes software developed by the OpenSSL Project for use in the O AskPassphraseDialog - Passphrase Dialog Dialeg de contrasenya - Enter passphrase Introdueix contrasenya - New passphrase Nova contrasenya - Repeat new passphrase Repeteix la nova contrasenya - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. Introdueixi la nova contrasenya al moneder<br/>Si us plau useu una contrasenya de <b>10 o més caracters aleatoris</b>, o <b>vuit o més paraules</b>. - Encrypt wallet Xifrar la cartera - This operation needs your wallet passphrase to unlock the wallet. Aquesta operació requereix la seva contrasenya del moneder per a desbloquejar-lo. - Unlock wallet Desbloqueja el moneder - This operation needs your wallet passphrase to decrypt the wallet. Aquesta operació requereix la seva contrasenya del moneder per a desencriptar-lo. - Decrypt wallet Desencripta el moneder - Change passphrase Canviar la contrasenya - Enter the old and new passphrase to the wallet. Introdueixi tant l'antiga com la nova contrasenya de moneder. - Confirm wallet encryption Confirmar l'encriptació del moneder - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! Advertència: Si encripteu el vostre moneder i perdeu la constrasenya, <b>PERDREU TOTS ELS VOSTRES MYRIADCOINS</b>! - Are you sure you wish to encrypt your wallet? Esteu segur que voleu encriptar el vostre moneder? - 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. IMPORTANT: Tota copia de seguretat que hagis realitzat hauria de ser reemplaçada pel, recentment generat, arxiu encriptat del moneder. - - Warning: The Caps Lock key is on! Advertència: Les lletres majúscules estàn activades! - - Wallet encrypted Moneder encriptat - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. Myriadcoin es tancarà ara per acabar el procés d'encriptació. Recorda que encriptar el teu moneder no protegeix completament els teus myriadcoins de ser robades per programari maliciós instal·lat al teu ordinador. - - - - Wallet encryption failed L'encriptació del moneder ha fallat - Wallet encryption failed due to an internal error. Your wallet was not encrypted. L'encriptació del moneder ha fallat per un error intern. El seu moneder no ha estat encriptat. - - The supplied passphrases do not match. La contrasenya introduïda no coincideix. - Wallet unlock failed El desbloqueig del moneder ha fallat - - - The passphrase entered for the wallet decryption was incorrect. La contrasenya introduïda per a desencriptar el moneder és incorrecte. - Wallet decryption failed La desencriptació del moneder ha fallat - Wallet passphrase was successfully changed. La contrasenya del moneder ha estat modificada correctament. @@ -318,319 +255,286 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - Sign &message... Signar &missatge... - Synchronizing with network... Sincronitzant amb la xarxa ... - &Overview &Panorama general - + Node + Node + + Show general overview of wallet Mostra panorama general del moneder - &Transactions &Transaccions - Browse transaction history Cerca a l'historial de transaccions - - Edit the list of stored addresses and labels - Edita la llista d'adreces emmagatzemada i etiquetes - - - - Show the list of addresses for receiving payments - Mostra el llistat d'adreces per rebre pagaments - - - E&xit S&ortir - Quit application Sortir de l'aplicació - Show information about Myriadcoin Mostra informació sobre Myriadcoin - About &Qt Sobre &Qt - Show information about Qt Mostra informació sobre Qt - &Options... &Opcions... - &Encrypt Wallet... &Xifrar moneder - &Backup Wallet... &Realitzant copia de seguretat del moneder... - &Change Passphrase... &Canviar contrasenya... - + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + Importing blocks from disk... Important blocs del disc.. - Reindexing blocks on disk... Re-indexant blocs al disc... - Send coins to a Myriadcoin address Enviar monedes a una adreça Myriadcoin - Modify configuration options for Myriadcoin - Modificar les opcions de configuració per myriadcoin + Modificar les opcions de configuració per bitcoin - Backup wallet to another location Realitzar còpia de seguretat del moneder a un altre directori - Change the passphrase used for wallet encryption Canviar la constrasenya d'encriptació del moneder - &Debug window &Finestra de debug - Open debugging and diagnostic console Obrir la consola de diagnòstic i debugging - &Verify message... &Verifica el missatge.. - - Myriadcoin Myriadcoin - Wallet Moneder - &Send &Enviar - &Receive &Rebre - - &Addresses - &Adreces - - - - &About Myriadcoin - &Sobre Myriadcoin - - - &Show / Hide &Mostrar / Amagar - Show or hide the main Window Mostrar o amagar la finestra principal - Encrypt the private keys that belong to your wallet Xifrar les claus privades pertanyents al seu moneder - Sign messages with your Myriadcoin addresses to prove you own them Signa el missatges amb la seva adreça de Myriadcoin per provar que les poseeixes - Verify messages to ensure they were signed with specified Myriadcoin addresses Verificar els missatges per assegurar-te que han estat signades amb una adreça Myriadcoin específica. - &File &Arxiu - &Settings &Configuració - &Help &Ajuda - Tabs toolbar Barra d'eines de seccions - - [testnet] [testnet] - + Myriadcoin Core + Nucli de Myriadcoin + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + Myriadcoin client Client Myriadcoin - %n active connection(s) to Myriadcoin network %n connexió activa a la xarxa Myriadcoin%n connexions actives a la xarxa Myriadcoin - No block source available... - Processed %1 of %2 (estimated) blocks of transaction history. Processat el %1 de %2 (estimat) dels blocs del històric de transaccions. - Processed %1 blocks of transaction history. Proccessats %1 blocs del històric de transaccions. - %n hour(s) %n hora%n hores - %n day(s) %n dia%n dies - %n week(s) %n setmana%n setmanes - + %1 and %2 + + + + %n year(s) + + + %1 behind %1 radera - Last received block was generated %1 ago. Lúltim bloc rebut ha estat generat fa %1. - Transactions after this will not yet be visible. Les transaccions a partir d'això no seràn visibles. - Error Error - Warning Avís - Information Informació - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - Aquesta transacció supera el límit de tamany. Tot i així pots enviar-la amb una comissió de %1, que es destinen als nodes que processen la seva transacció i ajuda a donar suport a la xarxa. Vols pagar la comissió? - - - Up to date Al dia - Catching up... Posar-se al dia ... - - Confirm transaction fee - Confirmar comisió de transacció - - - Sent transaction Transacció enviada - Incoming transaction Transacció entrant - Date: %1 Amount: %2 Type: %3 @@ -639,29 +543,14 @@ Address: %4 Data: %1\nQuantitat %2\n Tipus: %3\n Adreça: %4\n - - - URI handling - Manejant URI - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - la URI no pot ser processada! Això es pot ser causat per una adreça Myriadcoin invalida o paràmetres URI malformats. - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> El moneder està <b>encriptat</b> i actualment <b>desbloquejat</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> El moneder està <b>encriptat</b> i actualment <b>bloquejat</b> - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. Ha tingut lloc un error fatal. Myriadcoin no pot continuar executant-se de manera segura i es tancará. @@ -669,329 +558,647 @@ Address: %4 ClientModel - Network Alert Alerta de xarxa + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + Quantitat: + + + Bytes: + Bytes: + + + Amount: + Quantitat: + + + Priority: + Prioritat: + + + Fee: + Quota: + + + Low Output: + + + + After Fee: + Quota posterior: + + + Change: + Canvi: + + + (un)select all + + + + Tree mode + Mode arbre + + + List mode + Mode llista + + + Amount + Quantitat + + + Address + Adreça + + + Date + Data + + + Confirmations + Confirmacions + + + Confirmed + Confirmat + + + Priority + Prioritat + + + Copy address + Copiar adreça + + + Copy label + Copiar etiqueta + + + Copy amount + Copiar quantitat + + + Copy transaction ID + Copiar ID de transacció + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + highest + El més alt + + + higher + Més alt + + + high + Alt + + + medium-high + mig-alt + + + medium + mig + + + low-medium + baix-mig + + + low + baix + + + lower + més baix + + + lowest + el més baix + + + (%1 locked) + + + + none + + + + Dust + Pols + + + yes + si + + + no + no + + + This label turns red, if the transaction size is greater than 1000 bytes. + Aquesta etiqueta es posa de color vermell si la mida de la transacció és més gran de 1000 bytes. + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + (sense etiqueta) + + + change from %1 (%2) + + + + (change) + (canviar) + + EditAddressDialog - Edit Address Editar Adreça - &Label &Etiqueta - - The label associated with this address book entry - Etiqueta associada amb aquesta entrada de la llibreta d'adreces + The label associated with this address list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + - &Address &Direcció - - The address associated with this address book entry. This can only be modified for sending addresses. - Adreça associada amb aquesta entrada de la llibreta d'adreces. Només pot ser modificat per a enviar adreces. - - - New receiving address Nova adreça de recepció. - New sending address Nova adreça d'enviament - Edit receiving address Editar adreces de recepció - Edit sending address Editar adreces d'enviament - The entered address "%1" is already in the address book. L'adreça introduïda "%1" ja és present a la llibreta d'adreces. - The entered address "%1" is not a valid Myriadcoin address. L'adreça introduida "%1" no és una adreça Myriadcoin valida. - Could not unlock wallet. No s'ha pogut desbloquejar el moneder. - New key generation failed. Ha fallat la generació d'una nova clau. - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt - Myriadcoin-Qt + A new data directory will be created. + + + + name + nom + + + Directory already exists. Add %1 if you intend to create a new directory here. + El directori ja existeix. Afegeix %1 si vols crear un nou directori en aquesta ubicació. + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core + Nucli de Myriadcoin - version versió - Usage: Ús: - command-line options Opcions de la línia d'ordres - UI options Opcions de IU - Set language, for example "de_DE" (default: system locale) Definir llenguatge, per exemple "de_DE" (per defecte: Preferències locals de sistema) - Start minimized Iniciar minimitzat - + Set SSL root certificates for payment request (default: -system-) + + + Show splash screen on startup (default: 1) Mostrar finestra de benvinguda a l'inici (per defecte: 1) + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + Benvingut + + + Welcome to Myriadcoin Core. + Benvingut a Myriadcoin Core. + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" can not be created. + + + + Error + Error + + + GB of free space available + GB d'espai lliure disponible + + + (of %1GB needed) + (d' %1GB necessari) + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + URI: + + + Select payment request file + + + + Select payment request file to open + + OptionsDialog - Options Opcions - &Main &Principal - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. - Pay transaction &fee Pagar &comisió de transacció - Automatically start Myriadcoin after logging in to the system. Iniciar automàticament Myriadcoin després de l'inici de sessió del sistema. - &Start Myriadcoin on system login &Iniciar Myriadcoin al inici de sessió del sistema. - + Size of &database cache + + + + MB + MB + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + Reset all client options to default. Reestablir totes les opcions del client. - &Reset Options &Reestablir Opcions - &Network &Xarxa - + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. Obrir el port del client de Myriadcoin al router de forma automàtica. Això només funciona quan el teu router implementa UPnP i l'opció està activada. - Map port using &UPnP Port obert amb &UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - Connectar a la xarxa Myriadcoin a través de un SOCKS proxy (per exemple connectant a través de Tor). - - - - &Connect through SOCKS proxy: - &Connecta a través de un proxy SOCKS: - - - Proxy &IP: &IP del proxy: - - IP address of the proxy (e.g. 127.0.0.1) - Adreça IP del proxy (per exemple 127.0.0.1) - - - &Port: &Port: - Port of the proxy (e.g. 9050) Port del proxy (per exemple 9050) - SOCKS &Version: &Versió de SOCKS: - SOCKS version of the proxy (e.g. 5) Versió SOCKS del proxy (per exemple 5) - &Window &Finestra - Show only a tray icon after minimizing the window. Mostrar només l'icona de la barra al minimitzar l'aplicació. - &Minimize to the tray instead of the taskbar &Minimitzar a la barra d'aplicacions - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. Minimitza en comptes de sortir de la aplicació al tancar la finestra. Quan aquesta opció està activa, la aplicació només es tancarà al seleccionar Sortir al menú. - M&inimize on close M&inimitzar al tancar - &Display &Pantalla - User Interface &language: Llenguatge de la Interfície d'Usuari: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. Aquí pots definir el llenguatge de l'aplicatiu. Aquesta configuració tindrà efecte un cop es reiniciï Myriadcoin. - &Unit to show amounts in: &Unitats per mostrar les quantitats en: - Choose the default subdivision unit to show in the interface and when sending coins. Sel·lecciona la unitat de subdivisió per defecte per mostrar en la interficie quan s'envien monedes. - Whether to show Myriadcoin addresses in the transaction list or not. Mostrar adreces Myriadcoin als llistats de transaccions o no. - &Display addresses in transaction list &Mostrar adreces al llistat de transaccions - + Whether to show coin control features or not. + + + &OK &OK - &Cancel &Cancel·la - - &Apply - &Aplicar - - - default Per defecte - + none + + + Confirm options reset Confirmi el reestabliment de les opcions - - Some settings may require a client restart to take effect. - Algunes configuracions poden requerir reiniciar el client per a que tinguin efecte. + Client restart required to activate changes. + - - Do you want to proceed? - Vols procedir? + Client will be shutdown, do you want to proceed? + - - - Warning - Avís + This change would require a client restart. + - - - This setting will take effect after restarting Myriadcoin. - Aquesta configuració tindrà efecte un cop es reiniciï Myriadcoin. - - - The supplied proxy address is invalid. L'adreça proxy introduïda és invalida. @@ -999,59 +1206,54 @@ Address: %4 OverviewPage - Form Formulari - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. La informació mostrada pot no estar al día. El teu moneder es sincronitza automàticament amb la xarxa Myriadcoin un cop s'ha establert connexió, però aquest proces no s'ha completat encara. - - Balance: - Balanç: - - - - Unconfirmed: - Sense confirmar: - - - Wallet Moneder - + Available: + + + + Your current spendable balance + + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + + + Immature: Immatur: - Mined balance that has not yet matured Balanç minat que encara no ha madurat - + Total: + Total: + + + Your current total balance + + + <b>Recent transactions</b> <b>Transaccions recents</b> - - Your current balance - El seu balanç actual - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - Total de transaccions encara sense confirmar, que encara no es content en el balanç actual - - - - out of sync Fora de sincronia @@ -1059,579 +1261,856 @@ Address: %4 PaymentServer - + URI handling + Manejant URI + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + la URI no pot ser processada! Això es pot ser causat per una adreça Myriadcoin invalida o paràmetres URI malformats. + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + Error en la sol·licitud de pagament + + Cannot start myriadcoin: click-to-pay handler No es pot iniciar myriadcoin: manejador clicla-per-pagar + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + Reemborsament de %1 + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + Pagament notificat + + + Network request error + Error en la sol·licitud de xarxa + - QRCodeDialog + QObject - - QR Code Dialog - Dialeg del codi QR + Myriadcoin + Myriadcoin - - Request Payment - Reclamar pagament + Error: Specified data directory "%1" does not exist. + Error: El directori de dades específiques "%1! no existeix. - - Amount: - Quantitat: + Error: Cannot parse configuration file: %1. Only use key=value syntax. + - - Label: - Etiqueta: + Error: Invalid combination of -regtest and -testnet. + - - Message: - Missatge: + Myriadcoin Core didn't yet exit safely... + - - &Save As... - &Desar com... + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Introdueixi una adreça de Myriadcoin (per exemple 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + - - Error encoding URI into QR Code. - Error codificant la URI en un codi QR. + &Copy Image + - - The entered amount is invalid, please check. - La quantitat introduïda és invalida, si us plau comprovi-la. - - - - Resulting URI too long, try to reduce the text for label / message. - URI resultant massa llarga, intenta reduir el text per a la etiqueta / missatge - - - Save QR Code Desar codi QR - - PNG Images (*.png) - Imatges PNG (*.png) + PNG Image (*.png) + Imatge PNG (*.png) RPCConsole - Client name Nom del client - - - - - - - - - - N/A N/A - Client version Versió del client - &Information &Informació - + Debug window + Depura finestra + + + General + General + + Using OpenSSL version Utilitzant OpenSSL versió - Startup time &Temps d'inici - Network Xarxa - + Name + Nom + + Number of connections Nombre de connexions - - On testnet - A testnet - - - Block chain Bloquejar cadena - Current number of blocks Nombre de blocs actuals - Estimated total blocks Total estimat de blocs - Last block time Últim temps de bloc - &Open &Obrir - - Command-line options - Opcions de línia d'ordres - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - Mostrar el missatge d'ajuda de Myriadcoin-Qt per a obtenir un llistat de possibles ordres per a la línia d'ordres de Myriadcoin. - - - - &Show - &Mostrar - - - &Console &Consola - + &Network Traffic + + + + &Clear + + + + Totals + Totals + + + In: + Dins: + + + Out: + Fora: + + Build date Data de compilació - - Myriadcoin - Debug window - Myriadcoin -Finestra de debug - - - - Myriadcoin Core - Nucli de Myriadcoin - - - Debug log file Dietàri de debug - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. Obrir el dietari de debug de Myriadcoin del directori de dades actual. Aixó pot trigar uns quants segons per a dietàris grossos. - Clear console Netejar consola - Welcome to the Myriadcoin RPC console. Benvingut a la consola RPC de Myriadcoin - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. Utilitza les fletxes d'amunt i avall per navegar per l'històric, i <b>Ctrl-L<\b> per netejar la pantalla. - Type <b>help</b> for an overview of available commands. Escriu <b>help<\b> per a obtenir una llistat de les ordres disponibles. + + %1 B + %1 B + + + %1 KB + %1 KB + + + %1 MB + %1 MB + + + %1 GB + %1 GB + + + %1 m + %1 m + + + %1 h + + + + %1 h %2 m + %1 h %2 m + + + + ReceiveCoinsDialog + + &Amount: + &Quantitat: + + + &Label: + &Etiqueta: + + + &Message: + &Missatge: + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + Esborra tots els camps del formuari. + + + Clear + Esborra + + + Requested payments history + + + + &Request payment + &Sol·licitud de pagament + + + Show the selected request (does the same as double clicking an entry) + + + + Show + Mostra + + + Remove the selected entries from the list + Esborra les entrades seleccionades de la llista + + + Remove + Esborra + + + Copy label + Copiar etiqueta + + + Copy message + + + + Copy amount + Copiar quantitat + + + + ReceiveRequestDialog + + QR Code + Codi QR + + + Copy &URI + Copiar &URI + + + Copy &Address + Copiar &Adress + + + &Save Image... + + + + Request payment to %1 + + + + Payment information + Informació de pagament + + + URI + URI + + + Address + Adreça + + + Amount + Quantitat + + + Label + Etiqueta + + + Message + Missatge + + + Resulting URI too long, try to reduce the text for label / message. + URI resultant massa llarga, intenta reduir el text per a la etiqueta / missatge + + + Error encoding URI into QR Code. + Error codificant la URI en un codi QR. + + + + RecentRequestsTableModel + + Date + Data + + + Label + Etiqueta + + + Message + Missatge + + + Amount + Quantitat + + + (no label) + (sense etiqueta) + + + (no message) + (sense missatge) + + + (no amount) + + SendCoinsDialog - - - - - - - - Send Coins Enviar monedes - + Coin Control Features + (Opcions del control del Coin) + + + Inputs... + Entrades + + + automatically selected + Seleccionat automàticament + + + Insufficient funds! + Fons insuficient + + + Quantity: + Quantitat: + + + Bytes: + Bytes: + + + Amount: + Quantitat: + + + Priority: + Prioritat: + + + Fee: + Quota: + + + Low Output: + + + + After Fee: + Quota posterior: + + + Change: + Canvi: + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + Send to multiple recipients at once Enviar a multiples destinataris al mateix temps - Add &Recipient Affegir &Destinatari - - Remove all transaction fields - Netejar tots els camps de la transacció + Clear all fields of the form. + Netejar tots els camps del formulari. - Clear &All Esborrar &Tot - Balance: Balanç: - - 123.456 BTC - 123.456 BTC - - - Confirm the send action Confirmi l'acció d'enviament - S&end E&nviar - - <b>%1</b> to %2 (%3) - <b>%1</b> to %2 (%3) - - - Confirm send coins Confirmar l'enviament de monedes - - Are you sure you want to send %1? - Estas segur que vols enviar %1? + %1 to %2 + - - and - i + Copy quantity + + + + Copy amount + Copiar quantitat + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + + + + or + o - The recipient address is not valid, please recheck. L'adreça remetent no és vàlida, si us plau comprovi-la. - The amount to pay must be larger than 0. La quantitat a pagar ha de ser major que 0. - The amount exceeds your balance. Import superi el saldo de la seva compte. - The total exceeds your balance when the %1 transaction fee is included. El total excedeix el teu balanç quan s'afegeix la comisió a la transacció %1. - Duplicate address found, can only send to each address once per send operation. S'ha trobat una adreça duplicada, tan sols es pot enviar a cada adreça un cop per ordre de enviament. - - Error: Transaction creation failed! - Error: La ceació de la transacció ha fallat! + Transaction creation failed! + - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Error: La transacció ha estat rebutjada. Això pot passar si alguna de les monedes del teu moneder ja s'han gastat, com si haguesis usat una copia de l'arxiu wallet.dat i s'haguessin gastat monedes de la copia però sense marcar com gastades en aquest. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + + + + (no label) + (sense etiqueta) + + + Warning: Unknown change address + + + + Are you sure you want to send? + Estàs segur que ho vols enviar? + + + added as transaction fee + S'ha afegit una taxa de transacció + + + Payment request expired + La sol·licitud de pagament ha caducat + + + Invalid payment address %1 + SendCoinsEntry - - Form - Formulari - - - A&mount: Q&uantitat: - Pay &To: Pagar &A: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) La adreça a on envia el pagament (per exemple: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book Introdueixi una etiquera per a aquesta adreça per afegir-la a la llibreta d'adreces - &Label: &Etiqueta: - - Choose address from address book - Escollir adreça del llibre d'adreces + Choose previously used address + Escull una adreça feta servir anteriorment + + + This is a normal payment. + - Alt+A Alta+A - Paste address from clipboard Enganxar adreça del porta-retalls - Alt+P Alt+P - - Remove this recipient - Eliminar aquest destinatari + Remove this entry + - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Introdueixi una adreça de Myriadcoin (per exemple 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + Missatge: + + + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + Paga a: + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. + SignVerifyMessageDialog - Signatures - Sign / Verify a Message Signatures .Signar/Verificar un Missatge - &Sign Message &Signar Missatge - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. Pots signar missatges amb la teva adreça per provar que són teus. Sigues cautelòs al signar qualsevol cosa, ja que els atacs phising poden intentar confondre't per a que els hi signis amb la teva identitat. Tan sols signa als documents completament detallats amb els que hi estàs d'acord. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) La adreça amb la que signat els missatges (per exemple 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book - Escollir una adreça de la llibreta de direccions + Choose previously used address + Escull adreces fetes servir amb anterioritat - - Alt+A Alta+A - Paste address from clipboard Enganxar adreça del porta-retalls - Alt+P Alt+P - Enter the message you want to sign here Introdueix aqui el missatge que vols signar - Signature Signatura - Copy the current signature to the system clipboard Copiar la signatura actual al porta-retalls del sistema - Sign the message to prove you own this Myriadcoin address Signa el missatge per provar que ets propietari d'aquesta adreça Myriadcoin - Sign &Message Signar &Missatge - Reset all sign message fields Neteja tots els camps de clau - - Clear &All Esborrar &Tot - &Verify Message &Verificar el missatge - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Introdueixi l'adreça signant, missatge (assegura't que copies salts de línia, espais, tabuladors, etc excactament tot el text) i la signatura a sota per verificar el missatge. Per evitar ser enganyat per un atac home-entre-mig, vés amb compte de no llegir més en la signatura del que hi ha al missatge signat mateix. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) La adreça amb el que el missatge va ser signat (per exemple 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address Verificar el missatge per assegurar-se que ha estat signat amb una adreça Myriadcoin específica - Verify &Message Verificar &Missatge - Reset all verify message fields Neteja tots els camps de verificació de missatge - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Introdueixi una adreça de Myriadcoin (per exemple 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature Clica "Signar Missatge" per a generar una signatura - - Enter Myriadcoin signature - Introduïr una clau Myriadcoin - - - - The entered address is invalid. L'adreça intoduïda és invàlida. - - - - Please check the address and try again. Siu us plau, comprovi l'adreça i provi de nou. - - The entered address does not refer to a key. L'adreça introduïda no referencia a cap clau. - Wallet unlock was cancelled. El desbloqueig del moneder ha estat cancelat. - Private key for the entered address is not available. La clau privada per a la adreça introduïda no està disponible. - Message signing failed. El signat del missatge ha fallat. - Message signed. Missatge signat. - The signature could not be decoded. La signatura no s'ha pogut decodificar . - - Please check the signature and try again. Su us plau, comprovi la signatura i provi de nou. - The signature did not match the message digest. La signatura no coincideix amb el resum del missatge. - Message verification failed. Ha fallat la verificació del missatge. - Message verified. Missatge verificat. @@ -1639,186 +2118,160 @@ Address: %4 SplashScreen - - The Myriadcoin developers + Myriadcoin Core + Nucli de Myriadcoin + + + The Myriadcoin Core developers - [testnet] + + TrafficGraphWidget + + KB/s + KB/s + + TransactionDesc - Open until %1 Obert fins %1 - + conflicted + + + %1/offline %1/offline - %1/unconfirmed %1/sense confirmar - %1 confirmations %1 confrimacions - Status Estat - , broadcast through %n node(s) , difusió a través de %n node, difusió a través de %n nodes - Date Data - Source Font - Generated Generat - - From Des de - - - To A - - own address Adreça pròpia - label etiqueta - - - - - Credit Crèdit - matures in %n more block(s) disponible en %n bloc mésdisponibles en %n blocs més - not accepted no acceptat - - - - Debit Dèbit - Transaction fee Comissió de transacció - Net amount Quantitat neta - Message Missatge - Comment Comentar - Transaction ID ID de transacció - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Les monedes generades han de madurar 120 blocs abans de poder ser gastades. Quan has generat aquest bloc, aquest ha estat transmés a la xarxa per a ser afegit a la cadena de blocs. Si no arriba a ser acceptat a la cadena, el seu estat passará a "no acceptat" i no podrá ser gastat. Això pot ocòrrer ocasionalment si un altre node genera un bloc a pocs segons del teu. + Merchant + Mercader + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + - Debug information Informació de debug - Transaction Transacció - Inputs Entrades - Amount Quantitat - true cert - false fals - , has not been successfully broadcast yet , encara no ha estat emès correctement - Open for %n more block(s) Obre per %n bloc mésObre per %n blocs més - unknown desconegut @@ -1826,12 +2279,10 @@ Address: %4 TransactionDescDialog - Transaction details Detall de la transacció - This pane shows a detailed description of the transaction Aquest panell mostra una descripció detallada de la transacció @@ -1839,117 +2290,102 @@ Address: %4 TransactionTableModel - Date Data - Type Tipus - Address Direcció - Amount Quantitat + + Immature (%1 confirmations, will be available after %2) + + - Open for %n more block(s) Obre per %n bloc mésObre per %n blocs més - Open until %1 Obert fins %1 - - Offline (%1 confirmations) - Sense connexió (%1 confirmacions) - - - - Unconfirmed (%1 of %2 confirmations) - Sense confirmar (%1 de %2 confirmacions) - - - Confirmed (%1 confirmations) Confirmat (%1 confirmacions) - - - Mined balance will be available when it matures in %n more block(s) - El saldo recent minat estarà disponible quan venci el termini en %n bloc mésEl saldo recent minat estarà disponible quan venci el termini en %n blocs més - - This block was not received by any other nodes and will probably not be accepted! Aquest bloc no ha estat rebut per cap altre node i probablement no serà acceptat! - Generated but not accepted Generat però no acceptat - + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + Received with Rebut amb - Received from Rebut de - Sent to Enviat a - Payment to yourself Pagament a un mateix - Mined Minat - (n/a) (n/a) - Transaction status. Hover over this field to show number of confirmations. Estat de la transacció. Desplaça't per aquí sobre per mostrar el nombre de confirmacions. - Date and time that the transaction was received. Data i hora en que la transacció va ser rebuda. - Type of transaction. Tipus de transacció. - Destination address of transaction. Adreça del destinatari de la transacció. - Amount removed from or added to balance. Quantitat extreta o afegida del balanç. @@ -1957,176 +2393,156 @@ Address: %4 TransactionView - - All Tot - Today Avui - This week Aquesta setmana - This month Aquest mes - Last month El mes passat - This year Enguany - Range... Rang... - Received with Rebut amb - Sent to Enviat a - To yourself A tu mateix - Mined Minat - Other Altres - Enter address or label to search Introdueix una adreça o una etiqueta per cercar - Min amount Quantitat mínima - Copy address Copiar adreça - Copy label Copiar etiqueta - Copy amount Copiar quantitat - Copy transaction ID Copiar ID de transacció - Edit label Editar etiqueta - Show transaction details Mostra detalls de la transacció - - Export Transaction Data - Exportar detalls de la transacció + Export Transaction History + + + + Exporting Failed + + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + + + + The transaction history was successfully saved to %1. + - Comma separated file (*.csv) Arxiu de separació per comes (*.csv) - Confirmed Confirmat - Date Data - Type Tipus - Label Etiqueta - Address Direcció - Amount Quantitat - ID ID - - Error exporting - Error en l'exportació - - - - Could not write to file %1. - No s'ha pogut escriure a l'arxiu %1. - - - Range: Rang: - to a + + WalletFrame + + No wallet has been loaded. + + + WalletModel - Send Coins Enviar monedes @@ -2134,160 +2550,121 @@ Address: %4 WalletView - &Export - + &Exportar - Export the data in the current tab to a file - + Exportar les dades de la pestanya actual a un arxiu - Backup Wallet Realitzar còpia de seguretat del moneder - Wallet Data (*.dat) Dades del moneder (*.dat) - Backup Failed Còpia de seguretat faillida - - There was an error trying to save the wallet data to the new location. - Hi ha hagut un error intentant desar les dades del moneder al nou directori + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. + - Backup Successful Copia de seguretat realitzada correctament - - - The wallet data was successfully saved to the new location. - Les dades del moneder han estat desades cirrectament al nou emplaçament. - bitcoin-core - - Myriadcoin version - Versió de Myriadcoin - - - Usage: Ús: - - Send command to -server or myriadcoind - Enviar comanda a -servidor o myriadcoind - - - List commands Llista d'ordres - Get help for a command Obtenir ajuda per a un ordre. - Options: Opcions: - Specify configuration file (default: myriadcoin.conf) Especificat arxiu de configuració (per defecte: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) Especificar arxiu pid (per defecte: myriadcoind.pid) - Specify data directory Especificar directori de dades - - Set database cache size in megabytes (default: 25) - Establir tamany de la memoria cau en megabytes (per defecte: 25) - - - Listen for connections on <port> (default: 8333 or testnet: 18333) Escoltar connexions a <port> (per defecte: 8333 o testnet: 18333) - Maintain at most <n> connections to peers (default: 125) Mantenir com a molt <n> connexions a peers (per defecte: 125) - Connect to a node to retrieve peer addresses, and disconnect Connectar al node per obtenir les adreces de les connexions, i desconectar - Specify your own public address Especificar la teva adreça pública - Threshold for disconnecting misbehaving peers (default: 100) Límit per a desconectar connexions errònies (per defecte: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Nombre de segons abans de reconectar amb connexions errònies (per defecte: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s Ha sorgit un error al configurar el port RPC %u escoltant a IPv4: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) Escoltar connexions JSON-RPC al port <port> (per defecte: 8332 o testnet:18332) - Accept command line and JSON-RPC commands Acceptar línia d'ordres i ordres JSON-RPC - + Myriadcoin Core RPC client version + + + Run in the background as a daemon and accept commands Executar en segon pla com a programa dimoni i acceptar ordres - Use the test network Usar la xarxa de prova - Accept connections from outside (default: 1 if no -proxy or -connect) Aceptar connexions d'afora (per defecte: 1 si no -proxy o -connect) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2302,612 +2679,686 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f %s has de establir una contrasenya RPC a l'arxiu de configuració:\n%s\nEs recomana que useu la següent constrasenya aleatòria:\nrpcuser=myriadcoinrpc\nrpcpassword=%s\n(no necesiteu recordar aquesta contrsenya)\nEl nom d'usuari i contrasenya NO HAN de ser els mateixos.\nSi l'arxiu no existeix, crea'l amb els permisos d'arxiu de només lectura per al propietari.\nTambé es recomana establir la notificació d'alertes i així seràs notificat de les incidències;\nper exemple: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s Ha sorgit un error al configurar el port RPC %u escoltant a IPv6, retrocedint a IPv4: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 Vincular a una adreça específica i sempre escoltar-hi. Utilitza la notació [host]:port per IPv6 - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. - No es pot bloquejar el directori de dades %s. Probablement Myriadcoin ja estigui en execució. + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) + - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. Error: La transacció ha estat rebutjada. Això pot passar si alguna de les monedes del teu moneder ja s'han gastat, com si haguesis usat una copia de l'arxiu wallet.dat i s'haguessin gastat monedes de la copia però sense marcar com gastades en aquest. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! Error: Aquesta transacció requereix una comissió d'almenys %s degut al seu import, complexitat o per l'ús de fons recentment rebuts! - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - Executar ordre al rebre una alerta rellevant (%s al cmd es reemplaça per message) - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Executar una ordre quan una transacció del moneder canviï (%s in cmd es canvia per TxID) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - Establir una mida màxima de transaccions d'alta prioritat/baixa comisió en bytes (per defecte: 27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications Aquesta és una versió de pre-llançament - utilitza-la sota la teva responsabilitat - No usar per a minería o aplicacions de compra-venda - + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Advertència: el -paytxfee és molt elevat! Aquesta és la comissió de transacció que pagaràs quan enviis una transacció. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - Advertència: Les transaccions mostrades poden no ser correctes! Pot esser que necessitis actualitzar, o bé que altres nodes ho necessitin. - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. Advertència: Si us plau comprovi que la data i hora del seu computador siguin correctes! Si el seu rellotge està mal configurat, Myriadcoin no funcionará de manera apropiada. - + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Advertència: Error llegint l'arxiu wallet.dat!! Totes les claus es llegeixen correctament, però hi ha dades de transaccions o entrades del llibre d'adreces absents o bé son incorrectes. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. Advertència: L'arxiu wallet.dat és corrupte, dades rescatades! L'arxiu wallet.dat original ha estat desat com wallet.{estampa_temporal}.bak al directori %s; si el teu balanç o transaccions son incorrectes hauries de restaurar-lo de un backup. - + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + Attempt to recover private keys from a corrupt wallet.dat Intentar recuperar les claus privades d'un arxiu wallet.dat corrupte - + Myriadcoin Core Daemon + + + Block creation options: Opcions de la creació de blocs: - + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + Connect only to the specified node(s) Connectar només al(s) node(s) especificats - + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + Corrupted block database detected S'ha detectat una base de dades de blocs corrupta - + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + Discover own IP address (default: 1 when listening and no -externalip) Descobrir la pròpia adreça IP (per defecte: 1 quan escoltant i no -externalip) - + Do not load the wallet and disable wallet RPC calls + + + Do you want to rebuild the block database now? Vols reconstruir la base de dades de blocs ara? - Error initializing block database Error carregant la base de dades de blocs - Error initializing wallet database environment %s! Error inicialitzant l'entorn de la base de dades del moneder %s! - Error loading block database Error carregant la base de dades del bloc - Error opening block database Error obrint la base de dades de blocs - Error: Disk space is low! Error: Espai al disc baix! - Error: Wallet locked, unable to create transaction! Error: El moneder està blocat, no és possible crear la transacció! - Error: system error: Error: error de sistema: - Failed to listen on any port. Use -listen=0 if you want this. Error al escoltar a qualsevol port. Utilitza -listen=0 si vols això. - Failed to read block info Ha fallat la lectura de la informació del bloc - Failed to read block Ha fallat la lectura del bloc - Failed to sync block index Ha fallat la sincronització de l'índex de bloc - Failed to write block index Ha fallat la escriptura de l'índex de blocs - Failed to write block info Ha fallat la escriptura de la informació de bloc - Failed to write block Ha fallat l'escriptura del bloc - Failed to write file info Ha fallat l'escriptura de l'arxiu info - Failed to write to coin database Ha fallat l'escriptura de la basse de dades de monedes - Failed to write transaction index Ha fallat l'escriptura de l'índex de transaccions - Failed to write undo data Ha fallat el desfer de dades - + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + Find peers using DNS lookup (default: 1 unless -connect) Cerca punts de connexió usant rastreig de DNS (per defecte: 1 tret d'usar -connect) - - Generate coins (default: 0) + Force safe mode (default: 0) - + Generate coins (default: 0) + Generar monedes (estàndard: 0) + + How many blocks to check at startup (default: 288, 0 = all) Quants blocs s'han de confirmar a l'inici (per defecte: 288, 0 = tots) - - How thorough the block verification is (0-4, default: 3) - Com verificar el bloc (0-4, per defecte 3) + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' + - Not enough file descriptors available. - + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + Rebuild block chain index from current blk000??.dat files Reconstruir l'índex de la cadena de blocs dels arxius actuals blk000??.dat - + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + Set the number of threads to service RPC calls (default: 4) Estableix el nombre de fils per atendre trucades RPC (per defecte: 4) - + Specify wallet file (within data directory) + Especifica un arxiu de moneder (dintre del directori de les dades) + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + Verifying blocks... Verificant blocs... - Verifying wallet... Verificant moneder... - + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + + + Imports blocks from external blk000??.dat file Importa blocs de un fitxer blk000??.dat extern - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) - Information &Informació - - Invalid -tor address: '%s' - Adreça -tor invàlida: '%s' - - - Invalid amount for -minrelaytxfee=<amount>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' - + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + Maintain a full transaction index (default: 0) Mantenir tot l'índex de transaccions (per defecte: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) Mida màxima del buffer de recepció per a cada connexió, <n>*1000 bytes (default: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) Mida màxima del buffer d'enviament per a cada connexió, <n>*1000 bytes (default: 5000) - Only accept block chain matching built-in checkpoints (default: 1) Tan sols acceptar cadenes de blocs que coincideixin amb els punts de prova (per defecte: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Només connectar als nodes de la xarxa <net> (IPv4, IPv6 o Tor) - - Output extra debugging information. Implies all other -debug* options - Sortida de la informació extra de debugging. Implica totes les demés opcions -debug* + Print block on startup, if found in block index + - - Output extra network debugging information - Sortida de la informació extra de debugging de xarxa. + Print block tree on startup (default: 0) + - - Prepend debug output with timestamp - Anteposar estampa temporal a les dades de debug + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) Opcions SSL: (veure la Wiki de Myriadcoin per a instruccions de configuració SSL) - - Select the version of socks proxy to use (4-5, default: 5) - Selecciona la versió de socks proxy a utilitzar (4-5, per defecte: 5) + Send command to Myriadcoin Core + - Send trace/debug info to console instead of debug.log file Enviar informació de traça/debug a la consola en comptes del arxiu debug.log - - Send trace/debug info to debugger - Enviar informació de traça/debug a un debugger - - - - Set maximum block size in bytes (default: 250000) - Establir una mida màxima de bloc en bytes (per defecte: 250000) - - - Set minimum block size in bytes (default: 0) Establir una mida mínima de bloc en bytes (per defecte: 0) - + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + Shrink debug.log file on client startup (default: 1 when no -debug) Reduir l'arxiu debug.log al iniciar el client (per defecte 1 quan no -debug) - Signing transaction failed - Specify connection timeout in milliseconds (default: 5000) Especificar el temps limit per a un intent de connexió en milisegons (per defecte: 5000) - + Start Myriadcoin Core Daemon + + + System error: Error de sistema: - Transaction amount too small - Transaction amounts must be positive - Transaction too large - Use UPnP to map the listening port (default: 0) Utilitza UPnP per a mapejar els ports d'escolta (per defecte: 0) - Use UPnP to map the listening port (default: 1 when listening) Utilitza UPnP per a mapejar els ports d'escolta (per defecte: 1 quan s'escolta) - - Use proxy to reach tor hidden services (default: same as -proxy) - Utilitzar proxy per arribar als serveis tor amagats (per defecte: el mateix que -proxy) - - - Username for JSON-RPC connections Nom d'usuari per a connexions JSON-RPC - Warning Avís - Warning: This version is obsolete, upgrade required! Advertència: Aquetsa versió està obsoleta, és necessari actualitzar! - - You need to rebuild the databases using -reindex to change -txindex - Necessiteu reconstruir les bases de dades usant -reindex per canviar -txindex + Zapping all transactions from wallet... + + + + on startup + + + + version + versió - wallet.dat corrupt, salvage failed L'arxiu wallet.data és corrupte, el rescat de les dades ha fallat - Password for JSON-RPC connections Contrasenya per a connexions JSON-RPC - Allow JSON-RPC connections from specified IP address Permetre connexions JSON-RPC d'adreces IP específiques - Send commands to node running on <ip> (default: 127.0.0.1) Enviar ordre al node en execució a <ip> (per defecte: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) Executar orde quan el millor bloc canviï (%s al cmd es reemplaça per un bloc de hash) - Upgrade wallet to latest format Actualitzar moneder a l'últim format - Set key pool size to <n> (default: 100) Establir límit de nombre de claus a <n> (per defecte: 100) - Rescan the block chain for missing wallet transactions Re-escanejar cadena de blocs en cerca de transaccions de moneder perdudes - Use OpenSSL (https) for JSON-RPC connections Utilitzar OpenSSL (https) per a connexions JSON-RPC - Server certificate file (default: server.cert) Arxiu del certificat de servidor (per defecte: server.cert) - Server private key (default: server.pem) Clau privada del servidor (per defecte: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Xifrats acceptats (per defecte: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - This help message Aquest misatge d'ajuda - Unable to bind to %s on this computer (bind returned error %d, %s) Impossible d'unir %s a aquest ordinador (s'ha retornat l'error %d, %s) - - Connect through socks proxy - Connectar a través de socks proxy - - - Allow DNS lookups for -addnode, -seednode and -connect Permetre consultes DNS per a -addnode, -seednode i -connect - Loading addresses... Carregant adreces... - Error loading wallet.dat: Wallet corrupted Error carregant wallet.dat: Moneder corrupte - Error loading wallet.dat: Wallet requires newer version of Myriadcoin Error carregant wallet.dat: El moneder requereix una versió de Myriadcoin més moderna - Wallet needed to be rewritten: restart Myriadcoin to complete El moneder necesita ser re-escrit: re-inicia Myriadcoin per a completar la tasca - Error loading wallet.dat Error carregant wallet.dat - Invalid -proxy address: '%s' Adreça -proxy invalida: '%s' - Unknown network specified in -onlynet: '%s' Xarxa desconeguda especificada a -onlynet: '%s' - Unknown -socks proxy version requested: %i S'ha demanat una versió desconeguda de -socks proxy: %i - Cannot resolve -bind address: '%s' No es pot resoldre l'adreça -bind: '%s' - Cannot resolve -externalip address: '%s' No es pot resoldre l'adreça -externalip: '%s' - Invalid amount for -paytxfee=<amount>: '%s' Quantitat invalida per a -paytxfee=<amount>: '%s' - Invalid amount Quanitat invalida - Insufficient funds Balanç insuficient - Loading block index... Carregant índex de blocs... - Add a node to connect to and attempt to keep the connection open Afegir un node per a connectar's-hi i intentar mantenir la connexió oberta - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - Impossible d'unir %s en aquest ordinador. Probablement Myriadcoin ja estigui en execució. - - - - Fee per KB to add to transactions you send - Comisió a afegir per cada KB de transaccions que enviïs - - - Loading wallet... Carregant moneder... - Cannot downgrade wallet No es pot reduir la versió del moneder - Cannot write default address No es pot escriure l'adreça per defecte - Rescanning... Re-escanejant... - Done loading Càrrega acabada - To use the %s option Utilitza la opció %s - Error Error - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_cmn.ts b/src/qt/locale/bitcoin_cmn.ts new file mode 100644 index 00000000..9f7166bd --- /dev/null +++ b/src/qt/locale/bitcoin_cmn.ts @@ -0,0 +1,3368 @@ + + + AboutDialog + + About Myriadcoin Core + + + + <b>Myriadcoin Core</b> version + + + + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. + + + + Copyright + + + + The Myriadcoin Core developers + + + + (%1-bit) + + + + + AddressBookPage + + Double-click to edit address or label + + + + Create a new address + + + + &New + + + + Copy the currently selected address to the system clipboard + + + + &Copy + + + + C&lose + + + + &Copy Address + + + + Delete the currently selected address from the list + + + + Export the data in the current tab to a file + + + + &Export + + + + &Delete + + + + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + + Copy &Label + + + + &Edit + + + + Export Address List + + + + Comma separated file (*.csv) + + + + Exporting Failed + + + + There was an error trying to save the address list to %1. + + + + + AddressTableModel + + Label + + + + Address + + + + (no label) + + + + + AskPassphraseDialog + + Passphrase Dialog + + + + Enter passphrase + + + + New passphrase + + + + Repeat new passphrase + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + + + + Encrypt wallet + + + + This operation needs your wallet passphrase to unlock the wallet. + + + + Unlock wallet + + + + This operation needs your wallet passphrase to decrypt the wallet. + + + + Decrypt wallet + + + + Change passphrase + + + + Enter the old and new passphrase to the wallet. + + + + Confirm wallet encryption + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! + + + + Are you sure you wish to encrypt your wallet? + + + + 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. + + + + Warning: The Caps Lock key is on! + + + + Wallet encrypted + + + + Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. + + + + Wallet encryption failed + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + + + + The supplied passphrases do not match. + + + + Wallet unlock failed + + + + The passphrase entered for the wallet decryption was incorrect. + + + + Wallet decryption failed + + + + Wallet passphrase was successfully changed. + + + + + BitcoinGUI + + Sign &message... + + + + Synchronizing with network... + + + + &Overview + + + + Node + + + + Show general overview of wallet + + + + &Transactions + + + + Browse transaction history + + + + E&xit + + + + Quit application + + + + Show information about Myriadcoin + + + + About &Qt + + + + Show information about Qt + + + + &Options... + + + + &Encrypt Wallet... + + + + &Backup Wallet... + + + + &Change Passphrase... + + + + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + + Importing blocks from disk... + + + + Reindexing blocks on disk... + + + + Send coins to a Myriadcoin address + + + + Modify configuration options for Myriadcoin + + + + Backup wallet to another location + + + + Change the passphrase used for wallet encryption + + + + &Debug window + + + + Open debugging and diagnostic console + + + + &Verify message... + + + + Myriadcoin + + + + Wallet + + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your Myriadcoin addresses to prove you own them + + + + Verify messages to ensure they were signed with specified Myriadcoin addresses + + + + &File + + + + &Settings + + + + &Help + + + + Tabs toolbar + + + + [testnet] + + + + Myriadcoin Core + + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + + Myriadcoin client + + + + %n active connection(s) to Myriadcoin network + + + + No block source available... + + + + Processed %1 of %2 (estimated) blocks of transaction history. + + + + Processed %1 blocks of transaction history. + + + + %n hour(s) + + + + %n day(s) + + + + %n week(s) + + + + %1 and %2 + + + + %n year(s) + + + + %1 behind + + + + Last received block was generated %1 ago. + + + + Transactions after this will not yet be visible. + + + + Error + + + + Warning + + + + Information + + + + Up to date + + + + Catching up... + + + + Sent transaction + + + + Incoming transaction + + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + A fatal error occurred. Myriadcoin can no longer continue safely and will quit. + + + + + ClientModel + + Network Alert + + + + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + + + + Address + + + + Date + + + + Confirmations + + + + Confirmed + + + + Priority + + + + Copy address + + + + Copy label + + + + Copy amount + + + + Copy transaction ID + + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + + + + Dust + + + + yes + + + + no + + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + + + + change from %1 (%2) + + + + (change) + + + + + EditAddressDialog + + Edit Address + + + + &Label + + + + The label associated with this address list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + + + + &Address + + + + New receiving address + + + + New sending address + + + + Edit receiving address + + + + Edit sending address + + + + The entered address "%1" is already in the address book. + + + + The entered address "%1" is not a valid Myriadcoin address. + + + + Could not unlock wallet. + + + + New key generation failed. + + + + + FreespaceChecker + + A new data directory will be created. + + + + name + + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core + + + + version + + + + Usage: + + + + command-line options + + + + UI options + + + + Set language, for example "de_DE" (default: system locale) + + + + Start minimized + + + + Set SSL root certificates for payment request (default: -system-) + + + + Show splash screen on startup (default: 1) + + + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + + + + Error: Specified data directory "%1" can not be created. + + + + Error + + + + GB of free space available + + + + (of %1GB needed) + + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open + + + + + OptionsDialog + + Options + + + + &Main + + + + Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. + + + + Pay transaction &fee + + + + Automatically start Myriadcoin after logging in to the system. + + + + &Start Myriadcoin on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + + Reset all client options to default. + + + + &Reset Options + + + + &Network + + + + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. + + + + Map port using &UPnP + + + + Proxy &IP: + + + + &Port: + + + + Port of the proxy (e.g. 9050) + + + + SOCKS &Version: + + + + SOCKS version of the proxy (e.g. 5) + + + + &Window + + + + Show only a tray icon after minimizing the window. + + + + &Minimize to the tray instead of the taskbar + + + + Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. + + + + M&inimize on close + + + + &Display + + + + User Interface &language: + + + + The user interface language can be set here. This setting will take effect after restarting Myriadcoin. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show Myriadcoin addresses in the transaction list or not. + + + + &Display addresses in transaction list + + + + Whether to show coin control features or not. + + + + &OK + + + + &Cancel + + + + default + + + + none + + + + Confirm options reset + + + + Client restart required to activate changes. + + + + Client will be shutdown, do you want to proceed? + + + + This change would require a client restart. + + + + The supplied proxy address is invalid. + + + + + OverviewPage + + Form + + + + The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. + + + + Wallet + + + + Available: + + + + Your current spendable balance + + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + + + + Immature: + + + + Mined balance that has not yet matured + + + + Total: + + + + Your current total balance + + + + <b>Recent transactions</b> + + + + out of sync + + + + + PaymentServer + + URI handling + + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start myriadcoin: click-to-pay handler + + + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + + + + Network request error + + + + + QObject + + Myriadcoin + + + + Error: Specified data directory "%1" does not exist. + + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + + + + Error: Invalid combination of -regtest and -testnet. + + + + Myriadcoin Core didn't yet exit safely... + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + + QRImageWidget + + &Save Image... + + + + &Copy Image + + + + Save QR Code + + + + PNG Image (*.png) + + + + + RPCConsole + + Client name + + + + N/A + + + + Client version + + + + &Information + + + + Debug window + + + + General + + + + Using OpenSSL version + + + + Startup time + + + + Network + + + + Name + + + + Number of connections + + + + Block chain + + + + Current number of blocks + + + + Estimated total blocks + + + + Last block time + + + + &Open + + + + &Console + + + + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + + Build date + + + + Debug log file + + + + Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the Myriadcoin RPC console. + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + Type <b>help</b> for an overview of available commands. + + + + %1 B + + + + %1 KB + + + + %1 MB + + + + %1 GB + + + + %1 m + + + + %1 h + + + + %1 h %2 m + + + + + ReceiveCoinsDialog + + &Amount: + + + + &Label: + + + + &Message: + + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + + + + Clear + + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + + + + Remove the selected entries from the list + + + + Remove + + + + Copy label + + + + Copy message + + + + Copy amount + + + + + ReceiveRequestDialog + + QR Code + + + + Copy &URI + + + + Copy &Address + + + + &Save Image... + + + + Request payment to %1 + + + + Payment information + + + + URI + + + + Address + + + + Amount + + + + Label + + + + Message + + + + Resulting URI too long, try to reduce the text for label / message. + + + + Error encoding URI into QR Code. + + + + + RecentRequestsTableModel + + Date + + + + Label + + + + Message + + + + Amount + + + + (no label) + + + + (no message) + + + + (no amount) + + + + + SendCoinsDialog + + Send Coins + + + + Coin Control Features + + + + Inputs... + + + + automatically selected + + + + Insufficient funds! + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + + Send to multiple recipients at once + + + + Add &Recipient + + + + Clear all fields of the form. + + + + Clear &All + + + + Balance: + + + + Confirm the send action + + + + S&end + + + + Confirm send coins + + + + %1 to %2 + + + + Copy quantity + + + + Copy amount + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + + + + or + + + + The recipient address is not valid, please recheck. + + + + The amount to pay must be larger than 0. + + + + The amount exceeds your balance. + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + Duplicate address found, can only send to each address once per send operation. + + + + Transaction creation failed! + + + + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + + + + (no label) + + + + Warning: Unknown change address + + + + Are you sure you want to send? + + + + added as transaction fee + + + + Payment request expired + + + + Invalid payment address %1 + + + + + SendCoinsEntry + + A&mount: + + + + Pay &To: + + + + The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Enter a label for this address to add it to your address book + + + + &Label: + + + + Choose previously used address + + + + This is a normal payment. + + + + Alt+A + + + + Paste address from clipboard + + + + Alt+P + + + + Remove this entry + + + + Message: + + + + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. + + + + + SignVerifyMessageDialog + + Signatures - Sign / Verify a Message + + + + &Sign Message + + + + You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. + + + + The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Choose previously used address + + + + Alt+A + + + + Paste address from clipboard + + + + Alt+P + + + + Enter the message you want to sign here + + + + Signature + + + + Copy the current signature to the system clipboard + + + + Sign the message to prove you own this Myriadcoin address + + + + Sign &Message + + + + Reset all sign message fields + + + + Clear &All + + + + &Verify Message + + + + Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. + + + + The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Verify the message to ensure it was signed with the specified Myriadcoin address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Click "Sign Message" to generate signature + + + + The entered address is invalid. + + + + Please check the address and try again. + + + + The entered address does not refer to a key. + + + + Wallet unlock was cancelled. + + + + Private key for the entered address is not available. + + + + Message signing failed. + + + + Message signed. + + + + The signature could not be decoded. + + + + Please check the signature and try again. + + + + The signature did not match the message digest. + + + + Message verification failed. + + + + Message verified. + + + + + SplashScreen + + Myriadcoin Core + + + + The Myriadcoin Core developers + + + + [testnet] + + + + + TrafficGraphWidget + + KB/s + + + + + TransactionDesc + + Open until %1 + + + + conflicted + + + + %1/offline + + + + %1/unconfirmed + + + + %1 confirmations + + + + Status + + + + , broadcast through %n node(s) + + + + Date + + + + Source + + + + Generated + + + + From + + + + To + + + + own address + + + + label + + + + Credit + + + + matures in %n more block(s) + + + + not accepted + + + + Debit + + + + Transaction fee + + + + Net amount + + + + Message + + + + Comment + + + + Transaction ID + + + + Merchant + + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + Debug information + + + + Transaction + + + + Inputs + + + + Amount + + + + true + + + + false + + + + , has not been successfully broadcast yet + + + + Open for %n more block(s) + + + + unknown + + + + + TransactionDescDialog + + Transaction details + + + + This pane shows a detailed description of the transaction + + + + + TransactionTableModel + + Date + + + + Type + + + + Address + + + + Amount + + + + Immature (%1 confirmations, will be available after %2) + + + + Open for %n more block(s) + + + + Open until %1 + + + + Confirmed (%1 confirmations) + + + + This block was not received by any other nodes and will probably not be accepted! + + + + Generated but not accepted + + + + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + + Received with + + + + Received from + + + + Sent to + + + + Payment to yourself + + + + Mined + + + + (n/a) + + + + Transaction status. Hover over this field to show number of confirmations. + + + + Date and time that the transaction was received. + + + + Type of transaction. + + + + Destination address of transaction. + + + + Amount removed from or added to balance. + + + + + TransactionView + + All + + + + Today + + + + This week + + + + This month + + + + Last month + + + + This year + + + + Range... + + + + Received with + + + + Sent to + + + + To yourself + + + + Mined + + + + Other + + + + Enter address or label to search + + + + Min amount + + + + Copy address + + + + Copy label + + + + Copy amount + + + + Copy transaction ID + + + + Edit label + + + + Show transaction details + + + + Export Transaction History + + + + Exporting Failed + + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + + + + The transaction history was successfully saved to %1. + + + + Comma separated file (*.csv) + + + + Confirmed + + + + Date + + + + Type + + + + Label + + + + Address + + + + Amount + + + + ID + + + + Range: + + + + to + + + + + WalletFrame + + No wallet has been loaded. + + + + + WalletModel + + Send Coins + + + + + WalletView + + &Export + + + + Export the data in the current tab to a file + + + + Backup Wallet + + + + Wallet Data (*.dat) + + + + Backup Failed + + + + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. + + + + Backup Successful + + + + + bitcoin-core + + Usage: + + + + List commands + + + + Get help for a command + + + + Options: + + + + Specify configuration file (default: myriadcoin.conf) + + + + Specify pid file (default: myriadcoind.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 8333 or testnet: 18333) + + + + Maintain at most <n> connections to peers (default: 125) + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + Specify your own public address + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) + + + + Accept command line and JSON-RPC commands + + + + Myriadcoin Core RPC client version + + + + Run in the background as a daemon and accept commands + + + + Use the test network + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=myriadcoinrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + Bind to given address and always listen on it. Use [host]:port notation for IPv6 + + + + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) + + + + Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + + + + This is a pre-release test build - use at your own risk - do not use for mining or merchant applications + + + + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. + + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + Myriadcoin Core Daemon + + + + Block creation options: + + + + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + + Connect only to the specified node(s) + + + + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + + Corrupted block database detected + + + + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + Do not load the wallet and disable wallet RPC calls + + + + Do you want to rebuild the block database now? + + + + Error initializing block database + + + + Error initializing wallet database environment %s! + + + + Error loading block database + + + + Error opening block database + + + + Error: Disk space is low! + + + + Error: Wallet locked, unable to create transaction! + + + + Error: system error: + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + Failed to read block info + + + + Failed to read block + + + + Failed to sync block index + + + + Failed to write block index + + + + Failed to write block info + + + + Failed to write block + + + + Failed to write file info + + + + Failed to write to coin database + + + + Failed to write transaction index + + + + Failed to write undo data + + + + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + + Find peers using DNS lookup (default: 1 unless -connect) + + + + Force safe mode (default: 0) + + + + Generate coins (default: 0) + + + + How many blocks to check at startup (default: 288, 0 = all) + + + + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' + + + + Not enough file descriptors available. + + + + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + + Rebuild block chain index from current blk000??.dat files + + + + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + + Set the number of threads to service RPC calls (default: 4) + + + + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + + Verifying blocks... + + + + Verifying wallet... + + + + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + + + + Imports blocks from external blk000??.dat file + + + + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + + + + Information + + + + Invalid amount for -minrelaytxfee=<amount>: '%s' + + + + Invalid amount for -mintxfee=<amount>: '%s' + + + + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + + Maintain a full transaction index (default: 0) + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + Only accept block chain matching built-in checkpoints (default: 1) + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + Print block on startup, if found in block index + + + + Print block tree on startup (default: 0) + + + + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + + + + SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + Send command to Myriadcoin Core + + + + Send trace/debug info to console instead of debug.log file + + + + Set minimum block size in bytes (default: 0) + + + + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + Signing transaction failed + + + + Specify connection timeout in milliseconds (default: 5000) + + + + Start Myriadcoin Core Daemon + + + + System error: + + + + Transaction amount too small + + + + Transaction amounts must be positive + + + + Transaction too large + + + + Use UPnP to map the listening port (default: 0) + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + Username for JSON-RPC connections + + + + Warning + + + + Warning: This version is obsolete, upgrade required! + + + + Zapping all transactions from wallet... + + + + on startup + + + + version + + + + wallet.dat corrupt, salvage failed + + + + Password for JSON-RPC connections + + + + Allow JSON-RPC connections from specified IP address + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + Upgrade wallet to latest format + + + + Set key pool size to <n> (default: 100) + + + + Rescan the block chain for missing wallet transactions + + + + Use OpenSSL (https) for JSON-RPC connections + + + + Server certificate file (default: server.cert) + + + + Server private key (default: server.pem) + + + + This help message + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + Loading addresses... + + + + Error loading wallet.dat: Wallet corrupted + + + + Error loading wallet.dat: Wallet requires newer version of Myriadcoin + + + + Wallet needed to be rewritten: restart Myriadcoin to complete + + + + Error loading wallet.dat + + + + Invalid -proxy address: '%s' + + + + Unknown network specified in -onlynet: '%s' + + + + Unknown -socks proxy version requested: %i + + + + Cannot resolve -bind address: '%s' + + + + Cannot resolve -externalip address: '%s' + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + Invalid amount + + + + Insufficient funds + + + + Loading block index... + + + + Add a node to connect to and attempt to keep the connection open + + + + Loading wallet... + + + + Cannot downgrade wallet + + + + Cannot write default address + + + + Rescanning... + + + + Done loading + + + + To use the %s option + + + + Error + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + \ No newline at end of file diff --git a/src/qt/locale/bitcoin_cs.ts b/src/qt/locale/bitcoin_cs.ts index 6cd8676c..57dd7c5d 100644 --- a/src/qt/locale/bitcoin_cs.ts +++ b/src/qt/locale/bitcoin_cs.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - O Myriadcoinu + About Myriadcoin Core + O Myriadcoin Core - - <b>Myriadcoin</b> version - <b>Myriadcoin</b> verze + <b>Myriadcoin Core</b> version + <b>Myriadcoin Core</b> verze - This is experimental software. @@ -28,153 +24,128 @@ Tohle je experimentální program. Tento produkt zahrnuje programy vyvinuté OpenSSL Projektem pro použití v OpenSSL Toolkitu (http://www.openssl.org/) a kryptografický program od Erika Younga (eay@cryptsoft.com) a program UPnP od Thomase Bernarda. - Copyright Copyright - - The Myriadcoin developers - Vývojáři Myriadcoinu + The Myriadcoin Core developers + Vývojáři Myriadcoin Core + + + (%1-bit) + (%1-bit) AddressBookPage - - Address Book - Adresář - - - Double-click to edit address or label Dvojklikem myši začneš upravovat označení adresy - Create a new address Vytvoř novou adresu - + &New + &Nová + + Copy the currently selected address to the system clipboard Zkopíruj aktuálně vybranou adresu do systémové schránky - - &New Address - Nová &adresa + &Copy + &Kopíruj - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Tohle jsou tvé Myriadcoinové adresy pro příjem plateb. Můžeš dát pokaždé každému plátci novou adresu, abys věděl, kdo ti kdy kolik platil. + C&lose + &Zavřít - &Copy Address &Kopíruj adresu - - Show &QR Code - Zobraz &QR kód - - - - Sign a message to prove you own a Myriadcoin address - Podepiš zprávu, čímž prokážeš, že jsi vlastníkem Myriadcoinové adresy - - - - Sign &Message - Po&depiš zprávu - - - Delete the currently selected address from the list Smaž zvolenou adresu ze seznamu - Export the data in the current tab to a file Exportuj data z tohoto panelu do souboru - &Export &Export - - Verify a message to ensure it was signed with a specified Myriadcoin address - Ověř zprávu, aby ses ujistil, že byla podepsána danou Myriadcoinovou adresou - - - - &Verify Message - &Ověř zprávu - - - &Delete S&maž - - These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - Tohle jsou tvé Myriadcoinové adresy pro posílání plateb. Před odesláním mincí si vždy zkontroluj částku a cílovou adresu. + Choose the address to send coins to + Zvol adresu, na kterou pošleš mince + + + Choose the address to receive coins with + Zvol adres na příjem mincí + + + C&hoose + &Zvol + + + Sending addresses + Odesílací adresy + + + Receiving addresses + Přijímací adresy + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + Tohle jsou tvé Bitcoinové adresy pro posílání plateb. Před odesláním mincí si vždy zkontroluj částku a cílovou adresu. + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Tohle jsou tvé Bitcoinové adresy pro příjem plateb. Je doporučené používat pokaždé novou adresu pro každou transakci. - Copy &Label Kopíruj &označení - &Edit &Uprav - - Send &Coins - Pošli min&ce + Export Address List + Exportuj seznam adres - - Export Address Book Data - Exportuj data adresáře - - - Comma separated file (*.csv) CSV formát (*.csv) - - Error exporting - Chyba při exportu + Exporting Failed + Exportování selhalo - - Could not write to file %1. - Nemohu zapisovat do souboru %1. + There was an error trying to save the address list to %1. + Při ukládání seznamu adres do %1 se přihodila nějaká chyba. AddressTableModel - Label Označení - Address Adresa - (no label) (bez označení) @@ -182,140 +153,106 @@ Tento produkt zahrnuje programy vyvinuté OpenSSL Projektem pro použití v Open AskPassphraseDialog - Passphrase Dialog Změna hesla - Enter passphrase Zadej platné heslo - New passphrase Zadej nové heslo - Repeat new passphrase Totéž heslo ještě jednou - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. Zadej nové heslo k peněžence.<br/>Použij <b>alespoň 10 náhodných znaků</b> nebo <b>alespoň osm slov</b>. - Encrypt wallet Zašifruj peněženku - This operation needs your wallet passphrase to unlock the wallet. K provedení této operace musíš zadat heslo k peněžence, aby se mohla odemknout. - Unlock wallet Odemkni peněženku - This operation needs your wallet passphrase to decrypt the wallet. K provedení této operace musíš zadat heslo k peněžence, aby se mohla dešifrovat. - Decrypt wallet Dešifruj peněženku - Change passphrase Změň heslo - Enter the old and new passphrase to the wallet. Zadej staré a nové heslo k peněžence. - Confirm wallet encryption Potvrď zašifrování peněženky - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! - Varování: Pokud si zašifruješ peněženku a ztratíš či zapomeneš heslo, <b>PŘIJDEŠ O VŠECHNY MYRIADCOINY</b>! + Upozornění: Pokud si zašifruješ peněženku a ztratíš či zapomeneš heslo, <b>PŘIJDEŠ O VŠECHNY MYRIADCOINY</b>! - Are you sure you wish to encrypt your wallet? Jsi si jistý, že chceš peněženku zašifrovat? - 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. DŮLEŽITÉ: Všechny předchozí zálohy peněženky by měly být nahrazeny nově vygenerovanou, zašifrovanou peněženkou. Z bezpečnostních důvodů budou předchozí zálohy nešifrované peněženky nepoužitelné, jakmile začneš používat novou zašifrovanou peněženku. - - Warning: The Caps Lock key is on! Upozornění: Caps Lock je zapnutý! - - Wallet encrypted Peněženka je zašifrována - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. - Myriadcoin se teď ukončí, aby dokončil zašifrování. Pamatuj však, že pouhé zašifrování peněženky úplně nezabraňuje krádeži tvých myriadcoinů malwarem, kterým se může počítač nakazit. + Myriadcoin se teď ukončí, aby dokončil zašifrování. Pamatuj však, že pouhé zašifrování peněženky úplně nezabraňuje krádeži tvých bitcoinů malwarem, kterým se může počítač nakazit. - - - - Wallet encryption failed Zašifrování peněženky selhalo - Wallet encryption failed due to an internal error. Your wallet was not encrypted. Zašifrování peněženky selhalo kvůli vnitřní chybě. Tvá peněženka tedy nebyla zašifrována. - - The supplied passphrases do not match. Zadaná hesla nejsou shodná. - Wallet unlock failed Odemčení peněženky selhalo - - - The passphrase entered for the wallet decryption was incorrect. Nezadal jsi správné heslo pro dešifrování peněženky. - Wallet decryption failed Dešifrování peněženky selhalo - Wallet passphrase was successfully changed. Heslo k peněžence bylo v pořádku změněno. @@ -323,319 +260,286 @@ Tento produkt zahrnuje programy vyvinuté OpenSSL Projektem pro použití v Open BitcoinGUI - Sign &message... Po&depiš zprávu... - Synchronizing with network... Synchronizuji se se sítí... - &Overview &Přehled - + Node + Uzel + + Show general overview of wallet Zobraz celkový přehled peněženky - &Transactions &Transakce - Browse transaction history Procházej historii transakcí - - Edit the list of stored addresses and labels - Uprav seznam uložených adres a jejich označení - - - - Show the list of addresses for receiving payments - Zobraz seznam adres pro příjem plateb - - - E&xit &Konec - Quit application Ukonči aplikaci - Show information about Myriadcoin - Zobraz informace o Myriadcoinu + Zobraz informace o Bitcoinu - About &Qt O &Qt - Show information about Qt Zobraz informace o Qt - &Options... &Možnosti... - &Encrypt Wallet... Zaši&fruj peněženku... - &Backup Wallet... &Zazálohuj peněženku... - &Change Passphrase... Změň &heslo... - + &Sending addresses... + Od&esílací adresy... + + + &Receiving addresses... + Př&ijímací adresy... + + + Open &URI... + Načíst &URI... + + Importing blocks from disk... Importuji bloky z disku... - Reindexing blocks on disk... Vytvářím nový index bloků na disku... - Send coins to a Myriadcoin address - Pošli mince na Myriadcoinovou adresu + Pošli mince na Bitcoinovou adresu - Modify configuration options for Myriadcoin - Uprav nastavení Myriadcoinu + Uprav nastavení Bitcoinu - Backup wallet to another location Zazálohuj peněženku na jiné místo - Change the passphrase used for wallet encryption Změň heslo k šifrování peněženky - &Debug window &Ladicí okno - Open debugging and diagnostic console Otevři ladicí a diagnostickou konzoli - &Verify message... &Ověř zprávu... - - Myriadcoin Myriadcoin - Wallet Peněženka - &Send &Pošli - &Receive Při&jmi - - &Addresses - &Adresy - - - - &About Myriadcoin - O &Myriadcoinu - - - &Show / Hide &Zobraz/Skryj - Show or hide the main Window Zobraz nebo skryj hlavní okno - Encrypt the private keys that belong to your wallet Zašifruj soukromé klíče ve své peněžence - Sign messages with your Myriadcoin addresses to prove you own them - Podepiš zprávy svými Myriadcoinovými adresami, čímž prokážeš, že jsi jejich vlastníkem + Podepiš zprávy svými Bitcoinovými adresami, čímž prokážeš, že jsi jejich vlastníkem - Verify messages to ensure they were signed with specified Myriadcoin addresses - Ověř zprávy, aby ses ujistil, že byly podepsány danými Myriadcoinovými adresami + Ověř zprávy, aby ses ujistil, že byly podepsány danými Bitcoinovými adresami - &File &Soubor - &Settings &Nastavení - &Help Ná&pověda - Tabs toolbar Panel s listy - - [testnet] [testnet] - + Myriadcoin Core + Myriadcoin Core + + + Request payments (generates QR codes and myriadcoin: URIs) + Požaduj platby (generuje QR kódy a myriadcoin: URI) + + + &About Myriadcoin Core + O &Myriadcoin Core + + + Show the list of used sending addresses and labels + Ukaž seznam použitých odesílacích adres a jejich označení + + + Show the list of used receiving addresses and labels + Ukaž seznam použitých přijímacích adres a jejich označení + + + Open a myriadcoin: URI or payment request + Načti myriadcoin: URI nebo platební požadavek + + + &Command-line options + Ar&gumenty z příkazové řádky + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + Seznam argumentů Bitcoinu pro příkazovou řádku získáš v nápovědě Bitcoinu Core + + Myriadcoin client Myriadcoin klient - %n active connection(s) to Myriadcoin network - %n aktivní spojení do Myriadcoinové sítě%n aktivní spojení do Myriadcoinové sítě%n aktivních spojení do Myriadcoinové sítě + %n aktivní spojení do Bitcoinové sítě%n aktivní spojení do Bitcoinové sítě%n aktivních spojení do Bitcoinové sítě - No block source available... Není dostupný žádný zdroj bloků... - Processed %1 of %2 (estimated) blocks of transaction history. Zpracováno %1 z přibližně %2 bloků transakční historie. - Processed %1 blocks of transaction history. Zpracováno %1 bloků transakční historie. - %n hour(s) hodinu%n hodiny%n hodin - %n day(s) den%n dny%n dnů - %n week(s) týden%n týdny%n týdnů - + %1 and %2 + %1 a %2 + + + %n year(s) + rok%n roky%n roků + + %1 behind Stahuji ještě bloky transakcí za poslední %1 - Last received block was generated %1 ago. Poslední stažený blok byl vygenerován %1 zpátky. - Transactions after this will not yet be visible. Následné transakce ještě nebudou vidět. - Error Chyba - Warning Upozornění - Information Informace - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - Tahle transakce přesahuje velikostní limit. I tak ji ale můžeš poslat, pokud za ni zaplatíš poplatek %1, který půjde uzlům, které tvou transakci zpracují, a navíc tak podpoříš síť. Chceš zaplatit poplatek? - - - Up to date Aktuální - Catching up... Stahuji... - - Confirm transaction fee - Potvrď transakční poplatek - - - Sent transaction Odeslané transakce - Incoming transaction Příchozí transakce - Date: %1 Amount: %2 Type: %3 @@ -648,29 +552,14 @@ Adresa: %4 - - - URI handling - Zpracování URI - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - Nepodařilo se analyzovat URI! Důvodem může být neplatná Myriadcoinová adresa nebo poškozené parametry URI. - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> Peněženka je <b>zašifrovaná</b> a momentálně <b>odemčená</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> Peněženka je <b>zašifrovaná</b> a momentálně <b>zamčená</b> - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. Stala se fatální chyba. Myriadcoin nemůže bezpečně pokračovat v činnosti, a proto skončí. @@ -678,329 +567,647 @@ Adresa: %4 ClientModel - Network Alert Upozornění sítě + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + Počet: + + + Bytes: + Bajtů: + + + Amount: + Částka: + + + Priority: + Priorita: + + + Fee: + Poplatek: + + + Low Output: + Malý výstup: + + + After Fee: + Čistá částka: + + + Change: + Drobné: + + + (un)select all + (od)označit všechny + + + Tree mode + Zobrazit jako strom + + + List mode + Vypsat jako seznam + + + Amount + Částka + + + Address + Adresa + + + Date + Datum + + + Confirmations + Potvrzení + + + Confirmed + Potvrzeno + + + Priority + Priorita + + + Copy address + Kopíruj adresu + + + Copy label + Kopíruj její označení + + + Copy amount + Kopíruj částku + + + Copy transaction ID + Kopíruj ID transakce + + + Lock unspent + Zamkni neutracené + + + Unlock unspent + Odemkni k utracení + + + Copy quantity + Kopíruj počet + + + Copy fee + Kopíruj poplatek + + + Copy after fee + Kopíruj čistou částku + + + Copy bytes + Kopíruj bajty + + + Copy priority + Kopíruj prioritu + + + Copy low output + Kopíruj malý výstup + + + Copy change + Kopíruj drobné + + + highest + nejvyšší + + + higher + vyšší + + + high + vysoká + + + medium-high + vyšší střední + + + medium + střední + + + low-medium + nižší střední + + + low + nízká + + + lower + nižší + + + lowest + nejnižší + + + (%1 locked) + (%1 zamčeno) + + + none + žádná + + + Dust + + + + yes + ano + + + no + ne + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + To znamená, že je vyžadován poplatek alespoň %1 za kB. + + + Can vary +/- 1 byte per input. + Může se lišit o +/– 1 bajt na každý vstup. + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + (bez označení) + + + change from %1 (%2) + + + + (change) + (drobné) + + EditAddressDialog - Edit Address Uprav adresu - &Label &Označení - - The label associated with this address book entry - Označení spojené s tímto záznamem v adresáři + The label associated with this address list entry + Označení spojené s tímto záznamem v seznamu adres + + + The address associated with this address list entry. This can only be modified for sending addresses. + Adresa spojená s tímto záznamem v seznamu adres. Lze upravovat jen pro odesílací adresy. - &Address &Adresa - - The address associated with this address book entry. This can only be modified for sending addresses. - Adresa spojená s tímto záznamem v adresáři. Lze upravovat jen pro odesílací adresy. - - - New receiving address Nová přijímací adresa - New sending address Nová odesílací adresa - Edit receiving address Uprav přijímací adresu - Edit sending address Uprav odesílací adresu - The entered address "%1" is already in the address book. Zadaná adresa "%1" už v adresáři je. - The entered address "%1" is not a valid Myriadcoin address. - Zadaná adresa "%1" není platná Myriadcoinová adresa. + Zadaná adresa "%1" není platná Bitcoinová adresa. - Could not unlock wallet. Nemohu odemknout peněženku. - New key generation failed. Nepodařilo se mi vygenerovat nový klíč. - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt - Myriadcoin-Qt + A new data directory will be created. + Vytvoří se nový adresář pro data. + + + name + název + + + Directory already exists. Add %1 if you intend to create a new directory here. + Adresář už existuje. Přidej %1, pokud tady chceš vytvořit nový adresář. + + + Path already exists, and is not a directory. + Taková cesta už existuje, ale není adresářem. + + + Cannot create data directory here. + Tady nemůžu vytvořit adresář pro data. + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core + Myriadcoin Core - version verze - Usage: Užití: - command-line options možnosti příkazové řádky - UI options Možnosti UI - Set language, for example "de_DE" (default: system locale) Nastavit jazyk, například "de_DE" (výchozí: systémové nastavení) - Start minimized Nastartovat minimalizovaně - + Set SSL root certificates for payment request (default: -system-) + + + Show splash screen on startup (default: 1) Zobrazit startovací obrazovku (výchozí: 1) + + Choose data directory on startup (default: 0) + Zvolit adresář pro data při startu (výchozí: 0) + + + + Intro + + Welcome + Vítej + + + Welcome to Myriadcoin Core. + Vítej v Myriadcoin Core. + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + Tohle je poprvé, co spouštíš Myriadcoin Core, takže si můžeš zvolit, kam bude ukládat svá data. + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + Myriadcoin Core bude stahovat kopii řetězce bloků. Proto bude potřeba do tohoto adresáře uložit nejméně %1 GB dat – toto číslo bude navíc v průběhu času pomalu růst. Tvá peněženka bude rovněž uložena v tomto adresáři. + + + Use the default data directory + Použij výchozí adresář pro data + + + Use a custom data directory: + Použij tento adresář pro data: + + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" can not be created. + Chyba: Nejde vytvořit požadovaný adresář pro data „%1“. + + + Error + Chyba + + + GB of free space available + GB volného místa + + + (of %1GB needed) + (z potřebných %1 GB) + + + + OpenURIDialog + + Open URI + Načíst URI + + + Open payment request from URI or file + Načíst platební požadavek z URI nebo ze souboru + + + URI: + URI: + + + Select payment request file + Vyber soubor platebního požadavku + + + Select payment request file to open + Vyber soubor platebního požadavku k načtení + OptionsDialog - Options Možnosti - &Main &Hlavní - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Dobrovolný transakční poplatek za každý započatý kB dopomáhá k rychlému zpracování tvých transakcí. Většina transakcí má do 1 kB. - Pay transaction &fee Platit &transakční poplatek - Automatically start Myriadcoin after logging in to the system. Automaticky spustí Myriadcoin po přihlášení do systému. - &Start Myriadcoin on system login S&pustit Myriadcoin po přihlášení do systému - + Size of &database cache + Velikost &databázové cache + + + MB + MB + + + Number of script &verification threads + Počet vláken pro &verifikaci skriptů + + + Connect to the Myriadcoin network through a SOCKS proxy. + Připojí se do Bitcoinové sítě přes SOCKS proxy. + + + &Connect through SOCKS proxy (default proxy): + &Připojit přes SOCKS proxy (výchozí proxy): + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + IP adresa proxy (např. IPv4: 127.0.0.1/IPv6: ::1) + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + Reset all client options to default. Vrátí všechny volby na výchozí hodnoty. - &Reset Options &Obnovit nastavení - &Network &Síť - + (0 = auto, <0 = leave that many cores free) + (0 = automaticky, <0 = nechat daný počet jader volný, výchozí: 0) + + + W&allet + P&eněženka + + + Expert + Odborník + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. Automaticky otevře potřebný port na routeru. Tohle funguje jen za předpokladu, že tvůj router podporuje UPnP a že je UPnP povolené. - Map port using &UPnP Namapovat port přes &UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - Připojí se do Myriadcoinové sítě přes SOCKS proxy (např. když se připojuje přes Tor). - - - - &Connect through SOCKS proxy: - &Připojit přes SOCKS proxy: - - - Proxy &IP: &IP adresa proxy: - - IP address of the proxy (e.g. 127.0.0.1) - IP adresa proxy (např. 127.0.0.1) - - - &Port: Por&t: - Port of the proxy (e.g. 9050) Port proxy (např. 9050) - SOCKS &Version: &Verze SOCKS: - SOCKS version of the proxy (e.g. 5) Verze SOCKS proxy (např. 5) - &Window O&kno - Show only a tray icon after minimizing the window. Po minimalizaci okna zobrazí pouze ikonu v panelu. - &Minimize to the tray instead of the taskbar &Minimalizovávat do ikony v panelu - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. Zavřením se aplikace minimalizuje. Pokud je tato volba zaškrtnuta, tak se aplikace ukončí pouze zvolením Konec v menu. - M&inimize on close Za&vřením minimalizovat - &Display Zobr&azení - User Interface &language: &Jazyk uživatelského rozhraní: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. - Tady lze nastavit jazyk uživatelského rozhraní. Nastavení se projeví až po restartování Myriadcoinu. + Tady lze nastavit jazyk uživatelského rozhraní. Nastavení se projeví až po restartování Bitcoinu. - &Unit to show amounts in: J&ednotka pro částky: - Choose the default subdivision unit to show in the interface and when sending coins. Zvol výchozí podjednotku, která se bude zobrazovat v programu a při posílání mincí. - Whether to show Myriadcoin addresses in the transaction list or not. - Zda ukazovat myriadcoinové adresy ve výpisu transakcí nebo ne. + Zda ukazovat bitcoinové adresy ve výpisu transakcí nebo ne. - &Display addresses in transaction list Ukazo&vat adresy ve výpisu transakcí - + Whether to show coin control features or not. + + + &OK &Budiž - &Cancel &Zrušit - - &Apply - &Uložit - - - default výchozí - + none + žádná + + Confirm options reset Potvrzení obnovení nastavení - - Some settings may require a client restart to take effect. - Některá nastavení mohou vyžadovat restart klienta, aby se mohly projevit. + Client restart required to activate changes. + K aktivaci změn je potřeba restartovat klienta. - - Do you want to proceed? - Chceš pokračovat? + Client will be shutdown, do you want to proceed? + Klient se vypne, chceš pokračovat? - - - Warning - Upozornění + This change would require a client restart. + Tahle změna bude chtít restartovat klienta. - - - This setting will take effect after restarting Myriadcoin. - Nastavení se projeví až po restartování Myriadcoinu. - - - The supplied proxy address is invalid. Zadaná adresa proxy je neplatná. @@ -1008,59 +1215,54 @@ Adresa: %4 OverviewPage - Form Formulář - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. - Zobrazené informace nemusí být aktuální. Tvá peněženka se automaticky sesynchronizuje s Myriadcoinovou sítí, jakmile se s ní spojí. Zatím ale ještě není synchronizace dokončena. + Zobrazené informace nemusí být aktuální. Tvá peněženka se automaticky sesynchronizuje s Bitcoinovou sítí, jakmile se s ní spojí. Zatím ale ještě není synchronizace dokončena. - - Balance: - Stav účtu: - - - - Unconfirmed: - Nepotvrzeno: - - - Wallet Peněženka - + Available: + K dispozici: + + + Your current spendable balance + Aktuální disponibilní stav tvého účtu + + + Pending: + Očekáváno: + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + Celkem z transakcí, které ještě nejsou potvrzené a které se ještě nezapočítávají do celkového disponibilního stavu účtu + + Immature: Nedozráno: - Mined balance that has not yet matured Vytěžené mince, které ještě nejsou zralé - + Total: + Celkem: + + + Your current total balance + Celkový stav tvého účtu + + <b>Recent transactions</b> <b>Poslední transakce</b> - - Your current balance - Aktuální stav tvého účtu - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - Celkem z transakcí, které ještě nejsou potvrzené a které se ještě nezapočítávají do celkového stavu účtu - - - - out of sync nesynchronizováno @@ -1068,579 +1270,856 @@ Adresa: %4 PaymentServer - + URI handling + Zpracování URI + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + Nepodařilo se analyzovat URI! Důvodem může být neplatná Bitcoinová adresa nebo poškozené parametry URI. + + + Requested payment amount of %1 is too small (considered dust). + Požadovaná platební částka %1 je příliš malá (je považována za prach). + + + Payment request error + Chyba platebního požadavku + + Cannot start myriadcoin: click-to-pay handler Nemůžu spustit myriadcoin: obsluha click-to-pay + + Net manager warning + Upozornění správce sítě + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + Tvá aktivní proxy nepodporuje SOCKS5, které je vyžadováno pro platební požadavky skrz proxy. + + + Payment request fetch URL is invalid: %1 + Zdrojová URL platebního požadavku není platná: %1 + + + Payment request file handling + Zpracování souboru platebního požadavku + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + Soubor platebního požadavku nejde přečíst nebo zpracovat! Příčinou může být špatný soubor platebního požadavku. + + + Unverified payment requests to custom payment scripts are unsupported. + Neověřené platební požadavky k uživatelským platebním skriptům nejsou podporované. + + + Refund from %1 + Vrácení peněz od %1 + + + Error communicating with %1: %2 + Chyba při komunikaci s %1: %2 + + + Payment request can not be parsed or processed! + Platebního požadavku nejde přečíst nebo zpracovat! + + + Bad response from server %1 + Chybná odpověď ze serveru %1 + + + Payment acknowledged + Platba potvrzena + + + Network request error + Chyba síťového požadavku + - QRCodeDialog + QObject - - QR Code Dialog - QR kód + Myriadcoin + Myriadcoin - - Request Payment - Požadovat platbu + Error: Specified data directory "%1" does not exist. + Chyba: Zadaný adresář pro data „%1“ neexistuje. - - Amount: - Částka: + Error: Cannot parse configuration file: %1. Only use key=value syntax. + Chyba: Nemohu zpracovat konfigurační soubor: %1. Používej pouze syntaxi klíč=hodnota. - - Label: - Označení: + Error: Invalid combination of -regtest and -testnet. + Chyba: Neplatná kombinace -regtest a -testnet. - - Message: - Zpráva: + Myriadcoin Core didn't yet exit safely... + Myriadcoin Core ještě bezpečně neskončil... - - &Save As... - &Ulož jako... + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Zadej Bitcoinovou adresu (např. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + &Ulož obrázek... - - Error encoding URI into QR Code. - Chyba při kódování URI do QR kódu. + &Copy Image + &Kopíruj obrázek - - The entered amount is invalid, please check. - Zadaná částka je neplatná, překontroluj ji prosím. - - - - Resulting URI too long, try to reduce the text for label / message. - Výsledná URI je příliš dlouhá, zkus zkrátit text označení / zprávy. - - - Save QR Code Ulož QR kód - - PNG Images (*.png) - PNG obrázky (*.png) + PNG Image (*.png) + PNG obrázek (*.png) RPCConsole - Client name Název klienta - - - - - - - - - - N/A N/A - Client version Verze klienta - &Information &Informace - + Debug window + Ladicí okno + + + General + Obecné + + Using OpenSSL version Používaná verze OpenSSL - Startup time Čas spuštění - Network Síť - + Name + Název + + Number of connections Počet spojení - - On testnet - V testnetu - - - Block chain Řetězec bloků - Current number of blocks Aktuální počet bloků - Estimated total blocks Odhad celkového počtu bloků - Last block time Čas posledního bloku - &Open &Otevřít - - Command-line options - Argumenty z příkazové řádky - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - Seznam parametrů Myriadcoinu pro příkazovou řádku získáš v nápovědě Myriadcoinu Qt. - - - - &Show - &Zobrazit - - - &Console &Konzole - + &Network Traffic + &Síťový provoz + + + &Clear + &Vyčistit + + + Totals + Sumy + + + In: + Sem: + + + Out: + Ven: + + Build date Datum kompilace - - Myriadcoin - Debug window - Myriadcoin - ladicí okno - - - - Myriadcoin Core - Jádro Myriadcoinu - - - Debug log file Soubor s ladicími záznamy - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. - Otevři soubor s ladicími záznamy Myriadcoinu z aktuálního datového adresáře. U velkých logů to může pár vteřin zabrat. + Otevři soubor s ladicími záznamy Bitcoinu z aktuálního datového adresáře. U velkých logů to může pár vteřin zabrat. - Clear console Vyčistit konzoli - Welcome to the Myriadcoin RPC console. - Vítej v Myriadcoinové RPC konzoli. + Vítej v Bitcoinové RPC konzoli. - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. V historii se pohybuješ šipkami nahoru a dolů a pomocí <b>Ctrl-L</b> čistíš obrazovku. - Type <b>help</b> for an overview of available commands. Napsáním <b>help</b> si vypíšeš přehled dostupných příkazů. + + %1 B + %1 B + + + %1 KB + %1 kB + + + %1 MB + %1 MB + + + %1 GB + %1 GB + + + %1 m + %1 m + + + %1 h + %1 h + + + %1 h %2 m + %1 h %2 m + + + + ReceiveCoinsDialog + + &Amount: + Čás&tka: + + + &Label: + &Označení: + + + &Message: + &Zpráva: + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + Smaže všechny pole formuláře. + + + Clear + + + + Requested payments history + + + + &Request payment + &Vyžádat platbu + + + Show the selected request (does the same as double clicking an entry) + + + + Show + + + + Remove the selected entries from the list + + + + Remove + Odstranit + + + Copy label + Kopíruj její označení + + + Copy message + Kopíruj zprávu + + + Copy amount + Kopíruj částku + + + + ReceiveRequestDialog + + QR Code + QR kód + + + Copy &URI + Kopíruj &URI + + + Copy &Address + Kopíruj &adresu + + + &Save Image... + &Ulož obrázek... + + + Request payment to %1 + + + + Payment information + Informace o platbě + + + URI + URI + + + Address + Adresa + + + Amount + Částka + + + Label + Označení + + + Message + Zpráva + + + Resulting URI too long, try to reduce the text for label / message. + Výsledná URI je příliš dlouhá, zkus zkrátit text označení/zprávy. + + + Error encoding URI into QR Code. + Chyba při kódování URI do QR kódu. + + + + RecentRequestsTableModel + + Date + Datum + + + Label + Označení + + + Message + Zpráva + + + Amount + Částka + + + (no label) + (bez označení) + + + (no message) + (bez zprávy) + + + (no amount) + (bez částky) + SendCoinsDialog - - - - - - - - Send Coins Pošli mince - + Coin Control Features + + + + Inputs... + Vstupy... + + + automatically selected + automaticky vybrané + + + Insufficient funds! + Nedostatek prostředků! + + + Quantity: + Počet: + + + Bytes: + Bajtů: + + + Amount: + Částka: + + + Priority: + Priorita: + + + Fee: + Poplatek: + + + Low Output: + Malý výstup: + + + After Fee: + Čistá částka: + + + Change: + Drobné: + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + Vlastní adresa pro drobné + + Send to multiple recipients at once Pošli více příjemcům naráz - Add &Recipient Při&dej příjemce - - Remove all transaction fields - Smaž všechny transakční formuláře + Clear all fields of the form. + Smaže všechny pole formuláře. - Clear &All Všechno s&maž - Balance: Stav účtu: - - 123.456 BTC - 123.456 BTC - - - Confirm the send action Potvrď odeslání - S&end P&ošli - - <b>%1</b> to %2 (%3) - <b>%1</b> pro %2 (%3) - - - Confirm send coins Potvrď odeslání mincí - - Are you sure you want to send %1? - Jsi si jistý, že chceš poslat %1? + %1 to %2 + - - and - a + Copy quantity + Kopíruj počet + + + Copy amount + Kopíruj částku + + + Copy fee + Kopíruj poplatek + + + Copy after fee + Kopíruj čistou částku + + + Copy bytes + Kopíruj bajty + + + Copy priority + Kopíruj prioritu + + + Copy low output + Kopíruj malý výstup + + + Copy change + Kopíruj drobné + + + Total Amount %1 (= %2) + Celková částka %1 (= %2) + + + or + nebo - The recipient address is not valid, please recheck. Adresa příjemce je neplatná, překontroluj ji prosím. - The amount to pay must be larger than 0. Odesílaná částka musí být větší než 0. - The amount exceeds your balance. Částka překračuje stav účtu. - The total exceeds your balance when the %1 transaction fee is included. Celková částka při připočítání poplatku %1 překročí stav účtu. - Duplicate address found, can only send to each address once per send operation. Zaznamenána duplikovaná adresa; každá adresa může být v odesílané platbě pouze jednou. - - Error: Transaction creation failed! - Chyba: Vytvoření transakce selhalo! + Transaction creation failed! + Vytvoření transakce selhalo! - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Chyba: Transakce byla odmítnuta. Tohle může nastat, pokud nějaké mince z tvé peněženky už jednou byly utraceny, například pokud používáš kopii souboru wallet.dat a mince byly utraceny v druhé kopii, ale nebyly označeny jako utracené v této. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Transakce byla odmítnuta! Tohle může nastat, pokud nějaké mince z tvé peněženky už jednou byly utraceny, například pokud používáš kopii souboru wallet.dat a mince byly utraceny v druhé kopii, ale nebyly označeny jako utracené v této. + + + Warning: Invalid Myriadcoin address + Upozornění: Neplatná Bitcoinová adresa + + + (no label) + (bez označení) + + + Warning: Unknown change address + Upozornění: Neznámá adresa pro drobné + + + Are you sure you want to send? + Opravdu chcete odeslat %1? + + + added as transaction fee + přidán jako transakční poplatek + + + Payment request expired + Platební požadavek vypršel + + + Invalid payment address %1 + Neplatná platební adresa %1 SendCoinsEntry - - Form - Formulář - - - A&mount: Čás&tka: - Pay &To: &Komu: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Adresa příjemce (např. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book Zadej označení této adresy; obojí se ti pak uloží do adresáře - &Label: O&značení: - - Choose address from address book - Vyber adresu z adresáře + Choose previously used address + Vyber již použitou adresu + + + This is a normal payment. + Tohle je normální platba. - Alt+A Alt+A - Paste address from clipboard Vlož adresu ze schránky - Alt+P Alt+P - - Remove this recipient - Smaž tohoto příjemce + Remove this entry + Smaž tento záznam - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Zadej Myriadcoinovou adresu (např. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + Zpráva: + + + This is a verified payment request. + Toto je ověřený požadavek k platbě. + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + Toto je neověřený požadavek k platbě. + + + Pay To: + Komu: + + + Memo: + Poznámka: + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + Myriadcoin Core se ukončuje... + + + Do not shut down the computer until this window disappears. + Nevypínej počítač, dokud toto okno nezmizí. SignVerifyMessageDialog - Signatures - Sign / Verify a Message Podpisy - podepsat/ověřit zprávu - &Sign Message &Podepiš zprávu - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. Podepsáním zprávy svými adresami můžeš prokázat, že je skutečně vlastníš. Buď opatrný a nepodepisuj nic vágního; například při phishingových útocích můžeš být lákán, abys něco takového podepsal. Podepisuj pouze zcela úplná a detailní prohlášení, se kterými souhlasíš. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Adresa, kterou se zpráva podepíše (např. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book - Vyber adresu z adresáře + Choose previously used address + Vyber již použitou adresu - - Alt+A Alt+A - Paste address from clipboard Vlož adresu ze schránky - Alt+P Alt+P - Enter the message you want to sign here Sem vepiš zprávu, kterou chceš podepsat - Signature Podpis - Copy the current signature to the system clipboard Zkopíruj aktuálně vybraný podpis do systémové schránky - Sign the message to prove you own this Myriadcoin address - Podepiš zprávu, čímž prokážeš, že jsi vlastníkem této Myriadcoinové adresy + Podepiš zprávu, čímž prokážeš, že jsi vlastníkem této Bitcoinové adresy - Sign &Message Po&depiš zprávu - Reset all sign message fields Vymaž všechna pole formuláře pro podepsání zrávy - - Clear &All Všechno &smaž - &Verify Message &Ověř zprávu - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. K ověření podpisu zprávy zadej podepisující adresu, zprávu (ověř si, že správně kopíruješ zalomení řádků, mezery, tabulátory apod.) a podpis. Dávej pozor na to, abys nezkopíroval do podpisu víc, než co je v samotné podepsané zprávě, abys nebyl napálen man-in-the-middle útokem. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Adresa, kterou je zpráva podepsána (např. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address - Ověř zprávu, aby ses ujistil, že byla podepsána danou Myriadcoinovou adresou + Ověř zprávu, aby ses ujistil, že byla podepsána danou Bitcoinovou adresou - Verify &Message O&věř zprávu - Reset all verify message fields Vymaž všechna pole formuláře pro ověření zrávy - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Zadej Myriadcoinovou adresu (např. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Zadej Bitcoinovou adresu (např. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature Kliknutím na "Podepiš zprávu" vygeneruješ podpis - - Enter Myriadcoin signature - Vlož Myriadcoinový podpis - - - - The entered address is invalid. Zadaná adresa je neplatná. - - - - Please check the address and try again. Zkontroluj ji prosím a zkus to pak znovu. - - The entered address does not refer to a key. Zadaná adresa nepasuje ke klíči. - Wallet unlock was cancelled. Odemčení peněženky bylo zrušeno. - Private key for the entered address is not available. Soukromý klíč pro zadanou adresu není dostupný. - Message signing failed. Podepisování zprávy selhalo. - Message signed. Zpráv podepsána. - The signature could not be decoded. Podpis nejde dekódovat. - - Please check the signature and try again. Zkontroluj ho prosím a zkus to pak znovu. - The signature did not match the message digest. Podpis se neshoduje s hašem zprávy. - Message verification failed. Ověřování zprávy selhalo. - Message verified. Zpráva ověřena. @@ -1648,186 +2127,160 @@ Adresa: %4 SplashScreen - - The Myriadcoin developers - Vývojáři Myriadcoinu + Myriadcoin Core + Myriadcoin Core + + + The Myriadcoin Core developers + Vývojáři Myriadcoin Core - [testnet] [testnet] + + TrafficGraphWidget + + KB/s + kB/s + + TransactionDesc - Open until %1 Otřevřeno dokud %1 - + conflicted + kolidující + + %1/offline %1/offline - %1/unconfirmed %1/nepotvrzeno - %1 confirmations %1 potvrzení - Status Stav - , broadcast through %n node(s) , rozesláno přes 1 uzel, rozesláno přes %n uzly, rozesláno přes %n uzlů - Date Datum - Source Zdroj - Generated Vygenerováno - - From Od - - - To Pro - - own address vlastní adresa - label označení - - - - - Credit Příjem - matures in %n more block(s) dozraje po jednom blokudozraje po %n blocíchdozraje po %n blocích - not accepted neakceptováno - - - - Debit Výdaj - Transaction fee Transakční poplatek - Net amount Čistá částka - Message Zpráva - Comment Komentář - Transaction ID ID transakce - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Vygenerované mince musí čekat 120 bloků, než mohou být utraceny. Když jsi vygeneroval tenhle blok, tak byl rozposlán do sítě, aby byl přidán do řetězce bloků. Pokud se mu nepodaří dostat se do řetězce, změní se na "neakceptovaný" a nepůjde utratit. To se občas může stát, pokud jiný uzel vygeneruje blok zhruba ve stejném okamžiku jako ty. + Merchant + Obchodník + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Vygenerované mince musí čekat %1 bloků, než mohou být utraceny. Když jsi vygeneroval tenhle blok, tak byl rozposlán do sítě, aby byl přidán do řetězce bloků. Pokud se mu nepodaří dostat se do řetězce, změní se na "neakceptovaný" a nepůjde utratit. To se občas může stát, pokud jiný uzel vygeneruje blok zhruba ve stejném okamžiku jako ty. - Debug information Ladicí informace - Transaction Transakce - Inputs Vstupy - Amount Částka - true true - false false - , has not been successfully broadcast yet , ještě nebylo rozesláno - Open for %n more block(s) Otevřeno pro 1 další blokOtevřeno pro %n další blokyOtevřeno pro %n dalších bloků - unknown neznámo @@ -1835,12 +2288,10 @@ Adresa: %4 TransactionDescDialog - Transaction details Detaily transakce - This pane shows a detailed description of the transaction Toto okno zobrazuje detailní popis transakce @@ -1848,117 +2299,102 @@ Adresa: %4 TransactionTableModel - Date Datum - Type Typ - Address Adresa - Amount Částka + + Immature (%1 confirmations, will be available after %2) + Nedozráno (%1 potvrzení, bude k dispozici za %2) + - Open for %n more block(s) Otevřeno pro 1 další blokOtevřeno pro %n další blokyOtevřeno pro %n dalších bloků - Open until %1 Otřevřeno dokud %1 - - Offline (%1 confirmations) - Offline (%1 potvrzení) - - - - Unconfirmed (%1 of %2 confirmations) - Nepotvrzeno (%1 z %2 potvrzení) - - - Confirmed (%1 confirmations) Potvrzeno (%1 potvrzení) - - - Mined balance will be available when it matures in %n more block(s) - Vytěžené mince budou použitelné po dozrání, tj. po jednom blokuVytěžené mince budou použitelné po dozrání, tj. po %n blocíchVytěžené mince budou použitelné po dozrání, tj. po %n blocích - - This block was not received by any other nodes and will probably not be accepted! Tento blok nedostal žádný jiný uzel a pravděpodobně nebude akceptován! - Generated but not accepted Vygenerováno, ale neakceptováno - + Offline + Offline + + + Unconfirmed + Nepotvrzeno + + + Confirming (%1 of %2 recommended confirmations) + Potvrzuje se (%1 z %2 doporučených potvrzení) + + + Conflicted + V kolizi + + Received with Přijato do - Received from Přijato od - Sent to Posláno na - Payment to yourself Platba sama sobě - Mined Vytěženo - (n/a) (n/a) - Transaction status. Hover over this field to show number of confirmations. Stav transakce. Najetím myši na toto políčko si zobrazíš počet potvrzení. - Date and time that the transaction was received. Datum a čas přijetí transakce. - Type of transaction. Druh transakce. - Destination address of transaction. Cílová adresa transakce. - Amount removed from or added to balance. Částka odečtená z nebo přičtená k účtu. @@ -1966,176 +2402,156 @@ Adresa: %4 TransactionView - - All Vše - Today Dnes - This week Tento týden - This month Tento měsíc - Last month Minulý měsíc - This year Letos - Range... Rozsah... - Received with Přijato - Sent to Posláno - To yourself Sám sobě - Mined Vytěženo - Other Ostatní - Enter address or label to search Zadej adresu nebo označení pro její vyhledání - Min amount Minimální částka - Copy address Kopíruj adresu - Copy label Kopíruj její označení - Copy amount Kopíruj částku - Copy transaction ID Kopíruj ID transakce - Edit label Uprav označení - Show transaction details Zobraz detaily transakce - - Export Transaction Data - Exportuj transakční data + Export Transaction History + Exportuj transakční historii + + + Exporting Failed + Exportování selhalo + + + There was an error trying to save the transaction history to %1. + Při ukládání transakční historie do %1 se přihodila nějaká chyba. + + + Exporting Successful + Úspěšně vyexportováno + + + The transaction history was successfully saved to %1. + Transakční historie byla v pořádku uložena do %1. - Comma separated file (*.csv) CSV formát (*.csv) - Confirmed Potvrzeno - Date Datum - Type Typ - Label Označení - Address Adresa - Amount Částka - ID ID - - Error exporting - Chyba při exportu - - - - Could not write to file %1. - Nemohu zapisovat do souboru %1. - - - Range: Rozsah: - to až + + WalletFrame + + No wallet has been loaded. + Žádná peněženka se nenačetla. + + WalletModel - Send Coins Pošli mince @@ -2143,160 +2559,121 @@ Adresa: %4 WalletView - &Export &Export - Export the data in the current tab to a file Exportuj data z tohoto panelu do souboru - Backup Wallet Záloha peněženky - Wallet Data (*.dat) Data peněženky (*.dat) - Backup Failed Zálohování selhalo - - There was an error trying to save the wallet data to the new location. - Při ukládání peněženky na nové místo se přihodila nějaká chyba. + There was an error trying to save the wallet data to %1. + Při ukládání peněženky do %1 se přihodila nějaká chyba. + + + The wallet data was successfully saved to %1. + Data z peněženky byla v pořádku uložena do %1. - Backup Successful Úspěšně zazálohováno - - - The wallet data was successfully saved to the new location. - Data z peněženky byla v pořádku uložena na nové místo. - bitcoin-core - - Myriadcoin version - Verze Myriadcoinu - - - Usage: Užití: - - Send command to -server or myriadcoind - Poslat příkaz pro -server nebo myriadcoind - - - List commands Výpis příkazů - Get help for a command Získat nápovědu pro příkaz - Options: Možnosti: - Specify configuration file (default: myriadcoin.conf) Konfigurační soubor (výchozí: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) PID soubor (výchozí: myriadcoind.pid) - Specify data directory Adresář pro data - - Set database cache size in megabytes (default: 25) - Nastavit velikost databázové vyrovnávací paměti v megabajtech (výchozí: 25) - - - Listen for connections on <port> (default: 8333 or testnet: 18333) Čekat na spojení na <portu> (výchozí: 8333 nebo testnet: 18333) - Maintain at most <n> connections to peers (default: 125) Povolit nejvýše <n> připojení k uzlům (výchozí: 125) - Connect to a node to retrieve peer addresses, and disconnect Připojit se k uzlu, získat adresy jeho protějšků a odpojit se - Specify your own public address Specifikuj svou veřejnou adresu - Threshold for disconnecting misbehaving peers (default: 100) Práh pro odpojování zlobivých uzlů (výchozí: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Doba ve vteřinách, po kterou se nebudou moci zlobivé uzly znovu připojit (výchozí: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s Při nastavování naslouchacího RPC portu %i pro IPv4 nastala chyba: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) Čekat na JSON RPC spojení na <portu> (výchozí: 8332 nebo testnet: 18332) - Accept command line and JSON-RPC commands Akceptovat příkazy z příkazové řádky a přes JSON-RPC - + Myriadcoin Core RPC client version + Verze Myriadcoin Core RPC klienta + + Run in the background as a daemon and accept commands Běžet na pozadí jako démon a akceptovat příkazy - Use the test network Použít testovací síť (testnet) - Accept connections from outside (default: 1 if no -proxy or -connect) Přijímat spojení zvenčí (výchozí: 1, pokud není zadáno -proxy nebo -connect) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2321,612 +2698,686 @@ například: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + Akceptovatelné šifry (výchozí: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s Při nastavování naslouchacího RPC portu %u pro IPv6 nastala chyba, vracím se k IPv4: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 Poslouchat na zadané adrese. Pro zápis IPv6 adresy použij notaci [adresa]:port - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. - Nedaří se mi získat zámek na datový adresář %s. Myriadcoin pravděpodobně už jednou běží. + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + Přepnout do módu testování regresí, který používá speciální řetězec, ve kterém jsou mohou být bloky okamžitě vyřešeny. Je to určeno pro nástroje pro regresní testování a vyvíjení aplikací. + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + Přepnout do módu testování regresí, který používá speciální řetězec, ve kterém mohou být bloky okamžitě vyřešeny. + + + Error: Listening for incoming connections failed (listen returned error %d) + - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. Chyba: Transakce byla odmítnuta! Tohle může nastat, pokud nějaké mince z tvé peněženky už jednou byly utraceny, například pokud používáš kopii souboru wallet.dat a mince byly utraceny v druhé kopii, ale nebyly označeny jako utracené v této. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! Chyba: Tahle transakce vyžaduje transakční poplatek nejméně %s kvůli velikosti zasílané částky, komplexnosti nebo použití nedávno přijatých mincí! - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - Spustit příkaz po přijetí relevantního hlášení (%s se v příkazu nahradí za zprávu) - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Spustit příkaz, když se objeví transakce týkající se peněženky (%s se v příkazu nahradí za TxID) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - Nastavit maximální velikost prioritních/nízkopoplatkových transakcí v bajtech (výchozí: 27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + Jak moc důkladná má být verifikace bloků -checkblocks (0-4, výchozí: 3) + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + Nastavení počtu vláken pro verifikaci skriptů (%u až %d, 0 = automaticky, <0 = nechat daný počet jader volný, výchozí: 0) + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications Tohle je testovací verze – používej ji jen na vlastní riziko, ale rozhodně ji nepoužívej k těžbě nebo pro obchodní aplikace - + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + Nedaří se mi připojit na %s na tomhle počítači. Myriadcoin Core už pravděpodobně jednou běží. + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + Použít samostatnou SOCKS5 proxy ke spojení s peery přes skryté služby v Toru (výchozí: -proxy) + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Upozornění: -paytxfee je nastaveno velmi vysoko! Toto je transakční poplatek, který zaplatíš za každou poslanou transakci. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - Upozornění: Zobrazené transakce nemusí být správné! Možná potřebuješ aktualizovat nebo ostatní uzly potřebují aktualizovat. - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. Upozornění: Zkontroluj, že máš v počítači správně nastavený datum a čas! Pokud jsou nastaveny špatně, Myriadcoin nebude fungovat správně. - + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + Upozornění: Síť podle všeho není v konzistentním stavu. Někteří těžaři jsou zřejmě v potížích. + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + Upozornění: Nesouhlasím zcela se svými protiuzly! Možná potřebuji aktualizovat nebo ostatní uzly potřebují aktualizovat. + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Upozornění: nastala chyba při čtení souboru wallet.dat! Všechny klíče se přečetly správně, ale data o transakcích nebo záznamy v adresáři mohou chybět či být nesprávné. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. Upozornění: soubor wallet.dat je poškozený, data jsou však zachráněna! Původní soubor wallet.dat je uložený jako wallet.{timestamp}.bak v %s. Pokud je stav tvého účtu nebo transakce nesprávné, zřejmě bys měl obnovit zálohu. - + (default: 1) + (výchozí: 1) + + + (default: wallet.dat) + (výchozí: wallet.dat) + + + <category> can be: + <category> může být: + + Attempt to recover private keys from a corrupt wallet.dat Pokusit se zachránit soukromé klíče z poškozeného souboru wallet.dat - + Myriadcoin Core Daemon + Myriadcoin Core démon + + Block creation options: Možnosti vytvoření bloku: - + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + Connect only to the specified node(s) Připojit se pouze k zadanému uzlu (příp. zadaným uzlům) - + Connect through SOCKS proxy + Připojit se přes SOCKS proxy + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + Připojit se k JSON RPC na <port> (výchozí: 8332 nebo testnet: 18332) + + + Connection options: + Možnosti připojení: + + Corrupted block database detected Bylo zjištěno poškození databáze bloků - + Debugging/Testing options: + Možnosti ladění/testování: + + + Disable safemode, override a real safe mode event (default: 0) + + + Discover own IP address (default: 1 when listening and no -externalip) Zjistit vlastní IP adresu (výchozí: 1, pokud naslouchá a není zadáno -externalip) - + Do not load the wallet and disable wallet RPC calls + Nenačítat peněženku a vypnout její RPC volání + + Do you want to rebuild the block database now? Chceš přestavět databázi bloků hned teď? - Error initializing block database Chyba při zakládání databáze bloků - Error initializing wallet database environment %s! Chyba při vytváření databázového prostředí %s pro peněženku! - Error loading block database Chyba při načítání databáze bloků - Error opening block database Chyba při otevírání databáze bloků - Error: Disk space is low! Problém: Na disku je málo místa! - Error: Wallet locked, unable to create transaction! Chyba: Peněženka je zamčená, nemohu vytvořit transakci! - Error: system error: Chyba: systémová chyba: - Failed to listen on any port. Use -listen=0 if you want this. Nepodařilo se naslouchat na žádném portu. Použij -listen=0, pokud to byl tvůj záměr. - Failed to read block info Nepodařilo se přečíst informace o bloku - Failed to read block Nepodařilo se přečíst blok - Failed to sync block index Nepodařilo se sesynchronizovat index bloků - Failed to write block index Nepodařilo se zapsat index bloků - Failed to write block info Nepodařilo se zapsat informace o bloku - Failed to write block Nepodařilo se zapsat blok - Failed to write file info Nepodařilo se zapsat informace o souboru - Failed to write to coin database Selhal zápis do databáze mincí - Failed to write transaction index Nepodařilo se zapsat index transakcí - Failed to write undo data Nepodařilo se zapsat data o vracení změn - + Fee per kB to add to transactions you send + Poplatek za kB, který se přidá ke každé odeslané transakci + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + Find peers using DNS lookup (default: 1 unless -connect) Hledat uzly přes DNS (výchozí: 1, pokud není zadáno -connect) - + Force safe mode (default: 0) + Vynutit bezpečný mód (výchozí: 0) + + Generate coins (default: 0) Generovat mince (výchozí: 0) - How many blocks to check at startup (default: 288, 0 = all) Kolik bloků při startu zkontrolovat (výchozí: 288, 0 = všechny) - - How thorough the block verification is (0-4, default: 3) - Jak moc důkladná má být verifikace bloků (0-4, výchozí: 3) + If <category> is not supplied, output all debugging information. + + + + Importing... + Importuji... + + + Incorrect or no genesis block found. Wrong datadir for network? + Nemám žádný nebo jen špatný genesis blok. Není špatně nastavený datadir? + + + Invalid -onion address: '%s' + Neplatná -onion adresa: '%s' - Not enough file descriptors available. Je nedostatek deskriptorů souborů. - + Prepend debug output with timestamp (default: 1) + Připojit před ladicí výstup časové razítko (výchozí: 1) + + + RPC client options: + + + Rebuild block chain index from current blk000??.dat files Znovu vytvořit index řetězce bloků z aktuálních blk000??.dat souborů - + Select SOCKS version for -proxy (4 or 5, default: 5) + Zvol verzi SOCKS proxy pro -proxy (4 nebo 5, výchozí: 5) + + + Set database cache size in megabytes (%d to %d, default: %d) + Nastavit velikost databázové vyrovnávací paměti v megabajtech (%d až %d, výchozí: %d) + + + Set maximum block size in bytes (default: %d) + Nastavit maximální velikost bloku v bajtech (výchozí: %d) + + Set the number of threads to service RPC calls (default: 4) Nastavení počtu vláken pro servisní RPC volání (výchozí: 4) - + Specify wallet file (within data directory) + Udej název souboru s peněženkou (v rámci datového adresáře) + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + Tohle je určeno pro nástroje na regresní testování a vyvíjení aplikací. + + + Usage (deprecated, use myriadcoin-cli): + + + Verifying blocks... Ověřuji bloky... - Verifying wallet... Kontroluji peněženku... - + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + Peněženka %s se nachází mimo datový adresář %s + + + Wallet options: + Možnosti peněženky: + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + Je třeba přestavět databázi použitím -reindex, aby bylo možné změnit -txindex + + Imports blocks from external blk000??.dat file Importovat bloky z externího souboru blk000??.dat - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) - Nastavení počtu vláken pro verifikaci skriptů (max. 16, 0 = automaticky, <0 = nechat daný počet jader volný, výchozí: 0) + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + Nedaří se mi získat zámek na datový adresář %s. Myriadcoin Core pravděpodobně už jednou běží. + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + Spustit příkaz, když přijde relevantní upozornění nebo když dojde k opravdu dlouhému rozštěpení řetezce bloků (%s se v příkazu nahradí zprávou) + + + Output debugging information (default: 0, supplying <category> is optional) + Tisknout ladicí informace (výchozí: 0, zadání <category> je volitelné) + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + Nastavit maximální velikost prioritních/nízkopoplatkových transakcí v bajtech (výchozí: %d) - Information Informace - - Invalid -tor address: '%s' - Neplatná -tor adresa: '%s' - - - Invalid amount for -minrelaytxfee=<amount>: '%s' Neplatná částka pro -minrelaytxfee=<částka>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' Neplatná částka pro -mintxfee=<částka>: '%s' - + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + Maintain a full transaction index (default: 0) Spravovat úplný index transakcí (výchozí: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) Maximální velikost přijímacího bufferu pro každé spojení, <n>*1000 bajtů (výchozí: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) Maximální velikost odesílacího bufferu pro každé spojení, <n>*1000 bajtů (výchozí: 1000) - Only accept block chain matching built-in checkpoints (default: 1) - Uznávat pouze řetěz bloků, který odpovídá vnitřním kontrolním bodům (výchozí: 1) + Uznávat pouze řetězec bloků, který odpovídá vnitřním kontrolním bodům (výchozí: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Připojit se pouze k uzlům v <net> síti (IPv4, IPv6 nebo Tor) - - Output extra debugging information. Implies all other -debug* options - Tisknout speciální ladicí informace. Implikuje použití všech -debug* voleb + Print block on startup, if found in block index + - - Output extra network debugging information - Tisknout speciální ladicí informace o síti + Print block tree on startup (default: 0) + - - Prepend debug output with timestamp - Připojit před ladicí výstup časové razítko + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + Možnosti RPC serveru: + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) Možnosti SSL: (viz instrukce nastavení SSL v Myriadcoin Wiki) - - Select the version of socks proxy to use (4-5, default: 5) - Zvol verzi socks proxy (4-5, výchozí: 5) + Send command to Myriadcoin Core + Poslat příkaz Myriadcoin Core - Send trace/debug info to console instead of debug.log file Posílat stopovací/ladicí informace do konzole místo do souboru debug.log - - Send trace/debug info to debugger - Posílat stopovací/ladicí informace do debuggeru - - - - Set maximum block size in bytes (default: 250000) - Nastavit maximální velikost bloku v bajtech (výchozí: 250000) - - - Set minimum block size in bytes (default: 0) Nastavit minimální velikost bloku v bajtech (výchozí: 0) - + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + Shrink debug.log file on client startup (default: 1 when no -debug) Při spuštění klienta zmenšit soubor debug.log (výchozí: 1, pokud není zadáno -debug) - Signing transaction failed Podepisování transakce selhalo - Specify connection timeout in milliseconds (default: 5000) Zadej časový limit spojení v milisekundách (výchozí: 5000) - + Start Myriadcoin Core Daemon + + + System error: Systémová chyba: - Transaction amount too small Částka v transakci je příliš malá - Transaction amounts must be positive Částky v transakci musí být kladné - Transaction too large Transace je příliš velká - Use UPnP to map the listening port (default: 0) Použít UPnP k namapování naslouchacího portu (výchozí: 0) - Use UPnP to map the listening port (default: 1 when listening) Použít UPnP k namapování naslouchacího portu (výchozí: 1, pokud naslouchá) - - Use proxy to reach tor hidden services (default: same as -proxy) - Použít proxy k připojení ke skryté služby (výchozí: stejné jako -proxy) - - - Username for JSON-RPC connections Uživatelské jméno pro JSON-RPC spojení - Warning Upozornění - Warning: This version is obsolete, upgrade required! Upozornění: tahle verze je zastaralá, měl bys ji aktualizovat! - - You need to rebuild the databases using -reindex to change -txindex - Je třeba přestavět databázi použitím -reindex, aby bylo možné změnit -txindex + Zapping all transactions from wallet... + + + + on startup + při startu + + + version + verze - wallet.dat corrupt, salvage failed Soubor wallet.dat je poškozen, jeho záchrana se nezdařila - Password for JSON-RPC connections Heslo pro JSON-RPC spojení - Allow JSON-RPC connections from specified IP address Povolit JSON-RPC spojení ze specifikované IP adresy - Send commands to node running on <ip> (default: 127.0.0.1) Posílat příkazy uzlu běžícím na <ip> (výchozí: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) Spustit příkaz, když se změní nejlepší blok (%s se v příkazu nahradí hashem bloku) - Upgrade wallet to latest format Převést peněženku na nejnovější formát - Set key pool size to <n> (default: 100) Nastavit zásobník klíčů na velikost <n> (výchozí: 100) - Rescan the block chain for missing wallet transactions Přeskenovat řetězec bloků na chybějící transakce tvé pěněženky - Use OpenSSL (https) for JSON-RPC connections Použít OpenSSL (https) pro JSON-RPC spojení - Server certificate file (default: server.cert) Soubor se serverovým certifikátem (výchozí: server.cert) - Server private key (default: server.pem) Soubor se serverovým soukromým klíčem (výchozí: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Akceptovatelné šifry (výchozí: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - This help message Tato nápověda - Unable to bind to %s on this computer (bind returned error %d, %s) Nedaří se mi připojit na %s na tomhle počítači (operace bind vrátila chybu %d, %s) - - Connect through socks proxy - Připojit se přes socks proxy - - - Allow DNS lookups for -addnode, -seednode and -connect Povolit DNS dotazy pro -addnode (přidání uzlu), -seednode a -connect (připojení) - Loading addresses... Načítám adresy... - Error loading wallet.dat: Wallet corrupted Chyba při načítání wallet.dat: peněženka je poškozená - Error loading wallet.dat: Wallet requires newer version of Myriadcoin - Chyba při načítání wallet.dat: peněženka vyžaduje novější verzi Myriadcoinu + Chyba při načítání wallet.dat: peněženka vyžaduje novější verzi Bitcoinu - Wallet needed to be rewritten: restart Myriadcoin to complete - Soubor s peněženkou potřeboval přepsat: restartuj Myriadcoin, aby se operace dokončila + Soubor s peněženkou potřeboval přepsat: restartuj Bitcoin, aby se operace dokončila - Error loading wallet.dat Chyba při načítání wallet.dat - Invalid -proxy address: '%s' Neplatná -proxy adresa: '%s' - Unknown network specified in -onlynet: '%s' V -onlynet byla uvedena neznámá síť: '%s' - Unknown -socks proxy version requested: %i V -socks byla požadována neznámá verze proxy: %i - Cannot resolve -bind address: '%s' Nemohu přeložit -bind adresu: '%s' - Cannot resolve -externalip address: '%s' Nemohu přeložit -externalip adresu: '%s' - Invalid amount for -paytxfee=<amount>: '%s' Neplatná částka pro -paytxfee=<částka>: '%s' - Invalid amount Neplatná částka - Insufficient funds Nedostatek prostředků - Loading block index... Načítám index bloků... - Add a node to connect to and attempt to keep the connection open Přidat uzel, ke kterému se připojit a snažit se spojení udržet - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - Nedaří se mi připojit na %s na tomhle počítači. Myriadcoin už pravděpodobně jednou běží. - - - - Fee per KB to add to transactions you send - Poplatek za kB, který se přidá ke každé odeslané transakci - - - Loading wallet... Načítám peněženku... - Cannot downgrade wallet Nemohu převést peněženku do staršího formátu - Cannot write default address Nemohu napsat výchozí adresu - Rescanning... Přeskenovávám... - Done loading Načítání dokončeno - To use the %s option K použití volby %s - Error Chyba - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_cy.ts b/src/qt/locale/bitcoin_cy.ts index 4322c192..7e6228ce 100644 --- a/src/qt/locale/bitcoin_cy.ts +++ b/src/qt/locale/bitcoin_cy.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin + About Myriadcoin Core - - <b>Myriadcoin</b> version - Fersiwn <b>Myriadcoin</b> + <b>Myriadcoin Core</b> version + - This is experimental software. @@ -23,153 +19,128 @@ This product includes software developed by the OpenSSL Project for use in the O - Copyright - - The Myriadcoin developers + The Myriadcoin Core developers + + + + (%1-bit) AddressBookPage - - Address Book - Llyfr Cyfeiriadau - - - Double-click to edit address or label Clicio dwywaith i olygu cyfeiriad neu label - Create a new address Creu cyfeiriad newydd - + &New + + + Copy the currently selected address to the system clipboard Copio'r cyfeiriad sydd wedi'i ddewis i'r clipfwrdd system - - &New Address + &Copy - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + C&lose - &Copy Address - - Show &QR Code - - - - - Sign a message to prove you own a Myriadcoin address - - - - - Sign &Message - - - - Delete the currently selected address from the list - Export the data in the current tab to a file - &Export - - Verify a message to ensure it was signed with a specified Myriadcoin address - - - - - &Verify Message - - - - &Delete &Dileu - + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + Copy &Label - &Edit - - Send &Coins + Export Address List - - Export Address Book Data - Allforio Data Llyfr Cyfeiriad - - - Comma separated file (*.csv) - - Error exporting - Gwall allforio + Exporting Failed + - - Could not write to file %1. - Ni ellir ysgrifennu i ffeil %1. + There was an error trying to save the address list to %1. + AddressTableModel - Label Label - Address Cyfeiriad - (no label) (heb label) @@ -177,140 +148,106 @@ This product includes software developed by the OpenSSL Project for use in the O AskPassphraseDialog - Passphrase Dialog - Enter passphrase Teipiwch gyfrinymadrodd - New passphrase Cyfrinymadrodd newydd - Repeat new passphrase Ailadroddwch gyfrinymadrodd newydd - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. Dewiswch gyfrinymadrodd newydd ar gyfer y waled. <br/> Defnyddiwch cyfrinymadrodd o <b>10 neu fwy o lythyrennau hapgyrch</b>, neu <b> wyth neu fwy o eiriau. - Encrypt wallet Amgryptio'r waled - This operation needs your wallet passphrase to unlock the wallet. Mae angen i'r gweithred hon ddefnyddio'ch cyfrinymadrodd er mwyn datgloi'r waled. - Unlock wallet Datgloi'r waled - This operation needs your wallet passphrase to decrypt the wallet. Mae angen i'r gweithred hon ddefnyddio'ch cyfrinymadrodd er mwyn dadgryptio'r waled. - Decrypt wallet Dadgryptio'r waled - Change passphrase Newid cyfrinymadrodd - Enter the old and new passphrase to the wallet. Teipiwch yr hen cyfrinymadrodd a chyfrinymadrodd newydd i mewn i'r waled. - Confirm wallet encryption Cadarnau amgryptiad y waled - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! - Are you sure you wish to encrypt your wallet? - 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. - - Warning: The Caps Lock key is on! - - Wallet encrypted Waled wedi'i amgryptio - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. - - - - Wallet encryption failed Amgryptiad waled wedi methu - Wallet encryption failed due to an internal error. Your wallet was not encrypted. Methodd amgryptiad y waled oherwydd gwall mewnol. Ni amgryptwyd eich waled. - - The supplied passphrases do not match. Dydy'r cyfrinymadroddion a ddarparwyd ddim yn cyd-fynd â'u gilydd. - Wallet unlock failed Methodd ddatgloi'r waled - - - The passphrase entered for the wallet decryption was incorrect. - Wallet decryption failed Methodd dadgryptiad y waled - Wallet passphrase was successfully changed. @@ -318,319 +255,286 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - Sign &message... - Synchronizing with network... Cysoni â'r rhwydwaith... - &Overview &Trosolwg - + Node + + + Show general overview of wallet Dangos trosolwg cyffredinol y waled - &Transactions &Trafodion - Browse transaction history Pori hanes trafodion - - Edit the list of stored addresses and labels - Golygu'r rhestr o cyfeiriadau a labeli ar gadw - - - - Show the list of addresses for receiving payments - Dangos rhestr o gyfeiriadau ar gyfer derbyn taliadau - - - E&xit - Quit application Gadael rhaglen - Show information about Myriadcoin Dangos gwybodaeth am Myriadcoin - About &Qt - Show information about Qt - &Options... &Opsiynau - &Encrypt Wallet... - &Backup Wallet... - &Change Passphrase... - + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + Importing blocks from disk... - Reindexing blocks on disk... - Send coins to a Myriadcoin address - Modify configuration options for Myriadcoin - Backup wallet to another location - Change the passphrase used for wallet encryption Newid y cyfrinymadrodd a ddefnyddiwyd ar gyfer amgryptio'r waled - &Debug window - Open debugging and diagnostic console - &Verify message... - - Myriadcoin - Wallet - &Send - &Receive - - &Addresses - - - - - &About Myriadcoin - - - - &Show / Hide - Show or hide the main Window - Encrypt the private keys that belong to your wallet - Sign messages with your Myriadcoin addresses to prove you own them - Verify messages to ensure they were signed with specified Myriadcoin addresses - &File &Ffeil - &Settings &Gosodiadau - &Help &Cymorth - Tabs toolbar Bar offer tabiau - - [testnet] [testnet] - + Myriadcoin Core + + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + Myriadcoin client - %n active connection(s) to Myriadcoin network - No block source available... - Processed %1 of %2 (estimated) blocks of transaction history. - Processed %1 blocks of transaction history. - %n hour(s) - %n day(s) - %n week(s) - + %1 and %2 + + + + %n year(s) + + + %1 behind - Last received block was generated %1 ago. - Transactions after this will not yet be visible. - Error - + Gwall - Warning - + Rhybudd - Information - + Gwybodaeth - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - Up to date Cyfamserol - Catching up... Dal i fyny - - Confirm transaction fee - - - - Sent transaction Trafodiad a anfonwyd - Incoming transaction Trafodiad sy'n cyrraedd - Date: %1 Amount: %2 Type: %3 @@ -639,29 +543,14 @@ Address: %4 - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> Mae'r waled <b>wedi'i amgryptio</b> ac <b>heb ei gloi</b> ar hyn o bryd - Wallet is <b>encrypted</b> and currently <b>locked</b> Mae'r waled <b>wedi'i amgryptio</b> ac <b>ar glo</b> ar hyn o bryd - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. @@ -669,329 +558,647 @@ Address: %4 ClientModel - Network Alert + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + + + + Address + Cyfeiriad + + + Date + Dyddiad + + + Confirmations + + + + Confirmed + + + + Priority + + + + Copy address + + + + Copy label + + + + Copy amount + + + + Copy transaction ID + + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + + + + Dust + + + + yes + + + + no + + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + (heb label) + + + change from %1 (%2) + + + + (change) + + + EditAddressDialog - Edit Address Golygu'r cyfeiriad - &Label &Label - - The label associated with this address book entry - Mae'r label hon yn cysylltiedig gyda'r cofnod llyfr cyfeiriad hon + The label associated with this address list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + - &Address &Cyfeiriad - - The address associated with this address book entry. This can only be modified for sending addresses. - Mae'r cyfeiriad hon yn cysylltiedig gyda'r cofnod llyfr cyfeiriad hon. Gall hyn gael ei olygu dim ond ar gyfer y pwrpas o anfon cyfeiriadau. - - - New receiving address Cyfeiriad derbyn newydd - New sending address Cyfeiriad anfon newydd - Edit receiving address Golygu'r cyfeiriad derbyn - Edit sending address Golygu'r cyfeiriad anfon - The entered address "%1" is already in the address book. Mae'r cyfeiriad "%1" sydd newydd gael ei geisio gennych yn y llyfr cyfeiriad yn barod. - The entered address "%1" is not a valid Myriadcoin address. - Could not unlock wallet. Methodd ddatgloi'r waled. - New key generation failed. Methodd gynhyrchu allwedd newydd. - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt + A new data directory will be created. + + + + name + + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core - version - Usage: - command-line options - UI options - Set language, for example "de_DE" (default: system locale) - Start minimized - + Set SSL root certificates for payment request (default: -system-) + + + Show splash screen on startup (default: 1) + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + + + + Error: Specified data directory "%1" can not be created. + + + + Error + Gwall + + + GB of free space available + + + + (of %1GB needed) + + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open + + OptionsDialog - Options Opsiynau - &Main - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. - Pay transaction &fee - Automatically start Myriadcoin after logging in to the system. - &Start Myriadcoin on system login - + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + Reset all client options to default. - &Reset Options - &Network - + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. - Map port using &UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - - - - - &Connect through SOCKS proxy: - - - - Proxy &IP: - - IP address of the proxy (e.g. 127.0.0.1) - - - - &Port: - Port of the proxy (e.g. 9050) - SOCKS &Version: - SOCKS version of the proxy (e.g. 5) - &Window - Show only a tray icon after minimizing the window. - &Minimize to the tray instead of the taskbar - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. - M&inimize on close - &Display - User Interface &language: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. - &Unit to show amounts in: - Choose the default subdivision unit to show in the interface and when sending coins. - Whether to show Myriadcoin addresses in the transaction list or not. - &Display addresses in transaction list - + Whether to show coin control features or not. + + + &OK - &Cancel - - &Apply - - - - default - + none + + + Confirm options reset - - Some settings may require a client restart to take effect. + Client restart required to activate changes. - - Do you want to proceed? + Client will be shutdown, do you want to proceed? - - - Warning + This change would require a client restart. - - - This setting will take effect after restarting Myriadcoin. - - - - The supplied proxy address is invalid. @@ -999,59 +1206,54 @@ Address: %4 OverviewPage - Form Ffurflen - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. - - Balance: - Gweddill: - - - - Unconfirmed: - Nas cadarnheir: - - - Wallet - + Available: + + + + Your current spendable balance + + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + + + Immature: - Mined balance that has not yet matured - + Total: + + + + Your current total balance + + + <b>Recent transactions</b> <b>Trafodion diweddar</b> - - Your current balance - Eich gweddill presennol - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - Cyfanswm o drafodion sydd heb eu cadarnhau a heb eu cyfri tuag at y gweddill presennol - - - - out of sync @@ -1059,579 +1261,856 @@ Address: %4 PaymentServer - + URI handling + + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + Cannot start myriadcoin: click-to-pay handler + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + + + + Network request error + + - QRCodeDialog + QObject - - QR Code Dialog + Myriadcoin - - Request Payment + Error: Specified data directory "%1" does not exist. - - Amount: + Error: Cannot parse configuration file: %1. Only use key=value syntax. - - Label: + Error: Invalid combination of -regtest and -testnet. - - Message: + Myriadcoin Core didn't yet exit safely... - - &Save As... + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + + QRImageWidget + + &Save Image... - - Error encoding URI into QR Code. + &Copy Image - - The entered amount is invalid, please check. - - - - - Resulting URI too long, try to reduce the text for label / message. - - - - Save QR Code - - PNG Images (*.png) + PNG Image (*.png) RPCConsole - Client name - - - - - - - - - - N/A - Client version - &Information - + Debug window + + + + General + + + Using OpenSSL version - Startup time - Network - + Name + + + Number of connections - - On testnet - - - - Block chain - Current number of blocks - Estimated total blocks - Last block time - &Open - - Command-line options - - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - - - - - &Show - - - - &Console - + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + Build date - - Myriadcoin - Debug window - - - - - Myriadcoin Core - - - - Debug log file - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. - Clear console - Welcome to the Myriadcoin RPC console. - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Type <b>help</b> for an overview of available commands. + + %1 B + + + + %1 KB + + + + %1 MB + + + + %1 GB + + + + %1 m + + + + %1 h + + + + %1 h %2 m + + + + + ReceiveCoinsDialog + + &Amount: + + + + &Label: + &Label: + + + &Message: + + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + + + + Clear + + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + + + + Remove the selected entries from the list + + + + Remove + + + + Copy label + + + + Copy message + + + + Copy amount + + + + + ReceiveRequestDialog + + QR Code + + + + Copy &URI + + + + Copy &Address + + + + &Save Image... + + + + Request payment to %1 + + + + Payment information + + + + URI + + + + Address + Cyfeiriad + + + Amount + + + + Label + Label + + + Message + Neges + + + Resulting URI too long, try to reduce the text for label / message. + + + + Error encoding URI into QR Code. + + + + + RecentRequestsTableModel + + Date + Dyddiad + + + Label + Label + + + Message + Neges + + + Amount + + + + (no label) + (heb label) + + + (no message) + + + + (no amount) + + SendCoinsDialog - - - - - - - - Send Coins Anfon arian - + Coin Control Features + + + + Inputs... + + + + automatically selected + + + + Insufficient funds! + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + Send to multiple recipients at once Anfon at pobl lluosog ar yr un pryd - Add &Recipient - - Remove all transaction fields + Clear all fields of the form. - Clear &All - Balance: Gweddill: - - 123.456 BTC - 123.456 BTC - - - Confirm the send action Cadarnhau'r gweithrediad anfon - S&end - - <b>%1</b> to %2 (%3) - <b>%1</b> to %2 (%3) - - - Confirm send coins - - Are you sure you want to send %1? - Ydych chi'n siwr eich bod chi eisiau anfon %1? + %1 to %2 + %1 i %2 - - and - a + Copy quantity + + + + Copy amount + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + + + + or + - The recipient address is not valid, please recheck. - The amount to pay must be larger than 0. - The amount exceeds your balance. - The total exceeds your balance when the %1 transaction fee is included. - Duplicate address found, can only send to each address once per send operation. - - Error: Transaction creation failed! + Transaction creation failed! - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + + + + (no label) + (heb label) + + + Warning: Unknown change address + + + + Are you sure you want to send? + + + + added as transaction fee + + + + Payment request expired + + + + Invalid payment address %1 SendCoinsEntry - - Form - Ffurflen - - - A&mount: &Maint - Pay &To: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book - &Label: &Label: - - Choose address from address book + Choose previously used address + + + + This is a normal payment. - Alt+A Alt+A - Paste address from clipboard Gludo cyfeiriad o'r glipfwrdd - Alt+P Alt+P - - Remove this recipient + Remove this entry - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + + + + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. SignVerifyMessageDialog - Signatures - Sign / Verify a Message - &Sign Message - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book + Choose previously used address - - Alt+A Alt+A - Paste address from clipboard Gludo cyfeiriad o'r glipfwrdd - Alt+P Alt+P - Enter the message you want to sign here - Signature - Copy the current signature to the system clipboard - Sign the message to prove you own this Myriadcoin address - Sign &Message - Reset all sign message fields - - Clear &All - &Verify Message - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address - Verify &Message - Reset all verify message fields - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature - - Enter Myriadcoin signature - - - - - The entered address is invalid. - - - - Please check the address and try again. - - The entered address does not refer to a key. - Wallet unlock was cancelled. - Private key for the entered address is not available. - Message signing failed. - Message signed. - The signature could not be decoded. - - Please check the signature and try again. - The signature did not match the message digest. - Message verification failed. - Message verified. @@ -1639,186 +2118,160 @@ Address: %4 SplashScreen - - The Myriadcoin developers + Myriadcoin Core + + + + The Myriadcoin Core developers - [testnet] + + TrafficGraphWidget + + KB/s + + + TransactionDesc - Open until %1 Agor tan %1 - + conflicted + + + %1/offline - %1/unconfirmed - %1 confirmations - Status - , broadcast through %n node(s) - Date - + Dyddiad - Source - Generated - - From - - - To - - own address - label - - - - - Credit - matures in %n more block(s) - not accepted - - - - Debit - Transaction fee - Net amount - Message - + Neges - Comment - Transaction ID - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Merchant + + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Debug information - Transaction - Inputs - Amount - true - false - , has not been successfully broadcast yet - Open for %n more block(s) - unknown @@ -1826,12 +2279,10 @@ Address: %4 TransactionDescDialog - Transaction details - This pane shows a detailed description of the transaction @@ -1839,117 +2290,102 @@ Address: %4 TransactionTableModel - Date - + Dyddiad - Type - + Math - Address Cyfeiriad - Amount + + Immature (%1 confirmations, will be available after %2) + + - Open for %n more block(s) - Open until %1 Agor tan %1 - - Offline (%1 confirmations) - - - - - Unconfirmed (%1 of %2 confirmations) - - - - Confirmed (%1 confirmations) - - - Mined balance will be available when it matures in %n more block(s) - - - This block was not received by any other nodes and will probably not be accepted! - Generated but not accepted - + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + Received with - Received from - Sent to - Payment to yourself - Mined - (n/a) - Transaction status. Hover over this field to show number of confirmations. - Date and time that the transaction was received. - Type of transaction. - Destination address of transaction. - Amount removed from or added to balance. @@ -1957,176 +2393,156 @@ Address: %4 TransactionView - - All - Today - + Heddiw - This week - This month - Last month - This year - + Eleni - Range... - Received with - Sent to - To yourself - Mined - Other - Enter address or label to search - Min amount - Copy address - Copy label - Copy amount - Copy transaction ID - Edit label - Show transaction details - - Export Transaction Data + Export Transaction History + + + + Exporting Failed + + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + + + + The transaction history was successfully saved to %1. - Comma separated file (*.csv) - Confirmed - Date - + Dyddiad - Type - + Math - Label Label - Address Cyfeiriad - Amount - ID - - Error exporting - Gwall allforio - - - - Could not write to file %1. - Ni ellir ysgrifennu i ffeil %1. - - - Range: - to + + WalletFrame + + No wallet has been loaded. + + + WalletModel - Send Coins @@ -2134,160 +2550,121 @@ Address: %4 WalletView - &Export - Export the data in the current tab to a file - Backup Wallet - Wallet Data (*.dat) - Backup Failed - - There was an error trying to save the wallet data to the new location. + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. - Backup Successful - - - The wallet data was successfully saved to the new location. - - bitcoin-core - - Myriadcoin version - - - - Usage: - - Send command to -server or myriadcoind - - - - List commands - Get help for a command - Options: - Specify configuration file (default: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) - Specify data directory - - Set database cache size in megabytes (default: 25) - - - - Listen for connections on <port> (default: 8333 or testnet: 18333) - Maintain at most <n> connections to peers (default: 125) - Connect to a node to retrieve peer addresses, and disconnect - Specify your own public address - Threshold for disconnecting misbehaving peers (default: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) - Accept command line and JSON-RPC commands - + Myriadcoin Core RPC client version + + + Run in the background as a daemon and accept commands - Use the test network - Accept connections from outside (default: 1 if no -proxy or -connect) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2302,612 +2679,686 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications - + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. - + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + Attempt to recover private keys from a corrupt wallet.dat - + Myriadcoin Core Daemon + + + Block creation options: - + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + Connect only to the specified node(s) - + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + Corrupted block database detected - + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + Discover own IP address (default: 1 when listening and no -externalip) - + Do not load the wallet and disable wallet RPC calls + + + Do you want to rebuild the block database now? - Error initializing block database - Error initializing wallet database environment %s! - Error loading block database - Error opening block database - Error: Disk space is low! - Error: Wallet locked, unable to create transaction! - Error: system error: - Failed to listen on any port. Use -listen=0 if you want this. - Failed to read block info - Failed to read block - Failed to sync block index - Failed to write block index - Failed to write block info - Failed to write block - Failed to write file info - Failed to write to coin database - Failed to write transaction index - Failed to write undo data - + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + Find peers using DNS lookup (default: 1 unless -connect) - + Force safe mode (default: 0) + + + Generate coins (default: 0) - How many blocks to check at startup (default: 288, 0 = all) - - How thorough the block verification is (0-4, default: 3) + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' - Not enough file descriptors available. - + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + Rebuild block chain index from current blk000??.dat files - + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + Set the number of threads to service RPC calls (default: 4) - + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + Verifying blocks... - Verifying wallet... - + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + + + Imports blocks from external blk000??.dat file - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) - Information - + Gwybodaeth - - Invalid -tor address: '%s' - - - - Invalid amount for -minrelaytxfee=<amount>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' - + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + Maintain a full transaction index (default: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Only accept block chain matching built-in checkpoints (default: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - Output extra debugging information. Implies all other -debug* options + Print block on startup, if found in block index - - Output extra network debugging information + Print block tree on startup (default: 0) - - Prepend debug output with timestamp + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) - - Select the version of socks proxy to use (4-5, default: 5) + Send command to Myriadcoin Core - Send trace/debug info to console instead of debug.log file - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - Set minimum block size in bytes (default: 0) - + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + Shrink debug.log file on client startup (default: 1 when no -debug) - Signing transaction failed - Specify connection timeout in milliseconds (default: 5000) - + Start Myriadcoin Core Daemon + + + System error: - Transaction amount too small - Transaction amounts must be positive - Transaction too large - Use UPnP to map the listening port (default: 0) - Use UPnP to map the listening port (default: 1 when listening) - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - Username for JSON-RPC connections - Warning - + Rhybudd - Warning: This version is obsolete, upgrade required! - - You need to rebuild the databases using -reindex to change -txindex + Zapping all transactions from wallet... + + + + on startup + + + + version - wallet.dat corrupt, salvage failed - Password for JSON-RPC connections - Allow JSON-RPC connections from specified IP address - Send commands to node running on <ip> (default: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) - Upgrade wallet to latest format - Set key pool size to <n> (default: 100) - Rescan the block chain for missing wallet transactions - Use OpenSSL (https) for JSON-RPC connections - Server certificate file (default: server.cert) - Server private key (default: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - This help message - Unable to bind to %s on this computer (bind returned error %d, %s) - - Connect through socks proxy - - - - Allow DNS lookups for -addnode, -seednode and -connect - Loading addresses... - Error loading wallet.dat: Wallet corrupted - Error loading wallet.dat: Wallet requires newer version of Myriadcoin - Wallet needed to be rewritten: restart Myriadcoin to complete - Error loading wallet.dat - Invalid -proxy address: '%s' - Unknown network specified in -onlynet: '%s' - Unknown -socks proxy version requested: %i - Cannot resolve -bind address: '%s' - Cannot resolve -externalip address: '%s' - Invalid amount for -paytxfee=<amount>: '%s' - Invalid amount - Insufficient funds - Loading block index... - Add a node to connect to and attempt to keep the connection open - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - Loading wallet... - Cannot downgrade wallet - Cannot write default address - Rescanning... - Done loading - To use the %s option - Error - + Gwall - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_da.ts b/src/qt/locale/bitcoin_da.ts index 8e47fe95..00e56ed7 100644 --- a/src/qt/locale/bitcoin_da.ts +++ b/src/qt/locale/bitcoin_da.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - Om Myriadcoin + About Myriadcoin Core + Om Myriadcoin Core - - <b>Myriadcoin</b> version - <b>Myriadcoin</b> version + <b>Myriadcoin Core</b> version + <b>Myriadcoin Core</b> version - This is experimental software. @@ -21,160 +17,135 @@ Distributed under the MIT/X11 software license, see the accompanying file COPYIN This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. -Dette program er ekperimentielt. +Dette program er eksperimentelt. -Det er gjort tilgængeligt under MIT/X11-softwarelicensen. Se den tilhørende fil "COPYING" eller http://www.opensource.org/licenses/mit-license.php. +Det er gjort tilgængeligt under MIT/X11-softwarelicensen. Se den medfølgende fil "COPYING" eller http://www.opensource.org/licenses/mit-license.php. Produktet indeholder software som er udviklet af OpenSSL Project til brug i OpenSSL Toolkit (http://www.openssl.org/), kryptografisk software skrevet af Eric Young (eay@cryptsoft.com) og UPnP-software skrevet af Thomas Bernard. - Copyright - Copyright + Ophavsret - - The Myriadcoin developers - Myriadcoin-udviklerne + The Myriadcoin Core developers + Udviklerne af Myriadcoin Core + + + (%1-bit) + (%1-bit) AddressBookPage - - Address Book - Adressebog - - - Double-click to edit address or label Dobbeltklik for at redigere adresse eller mærkat - Create a new address Opret en ny adresse - + &New + Ny + + Copy the currently selected address to the system clipboard - Kopier den valgte adresse til systemets udklipsholder + Kopiér den valgte adresse til systemets udklipsholder - - &New Address - Ny adresse + &Copy + Kopiér - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Dette er dine Myriadcoin-adresser til at modtage betalinger med. Du kan give en forskellig adresse til hver afsender, så du kan holde styr på, hvem der betaler dig. + C&lose + Luk - &Copy Address - Kopier adresse + Kopiér adresse - - Show &QR Code - Vis QR-kode - - - - Sign a message to prove you own a Myriadcoin address - Underskriv en besked for at bevise, at en Myriadcoin-adresse tilhører dig - - - - Sign &Message - Underskriv besked - - - Delete the currently selected address from the list Slet den markerede adresse fra listen - Export the data in the current tab to a file Eksportér den aktuelle visning til en fil - &Export - Eksporter + Eksportér - - Verify a message to ensure it was signed with a specified Myriadcoin address - Efterprøv en besked for at sikre, at den er underskrevet med den angivne Myriadcoin-adresse - - - - &Verify Message - Efterprøv besked - - - &Delete Slet - + Choose the address to send coins to + Vælg adresse at sende myriadcoins til + + + Choose the address to receive coins with + Vælg adresse at modtage myriadcoins med + + + C&hoose + Vælg + + + Sending addresses + Afsendelsesadresser + + + Receiving addresses + Modtagelsesadresser + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - Disse er dine Myriadcoin-adresser for at sende betalinger. Tjek altid beløb og modtageradresse, inden du sender myriadcoins. + Disse er dine Bitcoin-adresser for at sende betalinger. Tjek altid beløb og modtageradresse, inden du sender myriadcoins. + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Dette er dine Bitcoin-adresser til at modtage betalinger med. Det anbefales are bruge en ny modtagelsesadresse for hver transaktion. - Copy &Label - Kopier mærkat + Kopiér mærkat - &Edit - Rediger + Redigér - - Send &Coins - Send myriadcoins + Export Address List + Eksportér adresseliste - - Export Address Book Data - Eksporter adressebogsdata - - - Comma separated file (*.csv) Kommasepareret fil (*.csv) - - Error exporting - Fejl under eksport + Exporting Failed + Eksport mislykkedes - - Could not write to file %1. - Kunne ikke skrive til filen %1. + There was an error trying to save the address list to %1. + En fejl opstod under gemning af adresseliste til %1. AddressTableModel - Label Mærkat - Address Adresse - (no label) (ingen mærkat) @@ -182,140 +153,106 @@ Produktet indeholder software som er udviklet af OpenSSL Project til brug i Open AskPassphraseDialog - Passphrase Dialog Adgangskodedialog - Enter passphrase Indtast adgangskode - New passphrase Ny adgangskode - Repeat new passphrase Gentag ny adgangskode - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. Indtast den nye adgangskode til tegnebogen.<br/>Brug venligst en adgangskode på <b>10 eller flere tilfældige tegn</b> eller <b>otte eller flere ord</b>. - Encrypt wallet - Krypter tegnebog + Kryptér tegnebog - This operation needs your wallet passphrase to unlock the wallet. Denne funktion har brug for din tegnebogs adgangskode for at låse tegnebogen op. - Unlock wallet Lås tegnebog op - This operation needs your wallet passphrase to decrypt the wallet. Denne funktion har brug for din tegnebogs adgangskode for at dekryptere tegnebogen. - Decrypt wallet - Dekrypter tegnebog + Dekryptér tegnebog - Change passphrase Skift adgangskode - Enter the old and new passphrase to the wallet. Indtast den gamle og den nye adgangskode til tegnebogen. - Confirm wallet encryption Bekræft tegnebogskryptering - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! Advarsel: Hvis du krypterer din tegnebog og mister din adgangskode, vil du <b>MISTE ALLE DINE MYRIADCOINS</b>! - Are you sure you wish to encrypt your wallet? Er du sikker på, at du ønsker at kryptere din tegnebog? - 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. - VIGTIGT: Enhver tidligere sikkerhedskopi, som du har lavet af tegnebogsfilen, bør blive erstattet af den nyligt genererede, krypterede tegnebogsfil. Af sikkerhedsmæssige årsager vil tidligere sikkerhedskopier af den ikke-krypterede tegnebogsfil blive ubrugelig i det øjeblik, du starter med at anvende den nye, krypterede tegnebog. + VIGTIGT: Enhver tidligere sikkerhedskopi, som du har lavet af tegnebogsfilen, bør blive erstattet af den nyligt genererede, krypterede tegnebogsfil. Af sikkerhedsmæssige årsager vil tidligere sikkerhedskopier af den ikke-krypterede tegnebogsfil blive ubrugelige i det øjeblik, du starter med at anvende den nye, krypterede tegnebog. - - Warning: The Caps Lock key is on! Advarsel: Caps Lock-tasten er aktiveret! - - Wallet encrypted Tegnebog krypteret - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. Myriadcoin vil nu lukke for at gennemføre krypteringsprocessen. Husk på, at kryptering af din tegnebog vil ikke beskytte dine myriadcoins fuldt ud mod at blive stjålet af malware på din computer. - - - - Wallet encryption failed Tegnebogskryptering mislykkedes - Wallet encryption failed due to an internal error. Your wallet was not encrypted. Tegnebogskryptering mislykkedes på grund af en intern fejl. Din tegnebog blev ikke krypteret. - - The supplied passphrases do not match. De angivne adgangskoder stemmer ikke overens. - Wallet unlock failed Tegnebogsoplåsning mislykkedes - - - The passphrase entered for the wallet decryption was incorrect. Den angivne adgangskode for tegnebogsdekrypteringen er forkert. - Wallet decryption failed Tegnebogsdekryptering mislykkedes - Wallet passphrase was successfully changed. Tegnebogens adgangskode blev ændret. @@ -323,319 +260,286 @@ Produktet indeholder software som er udviklet af OpenSSL Project til brug i Open BitcoinGUI - Sign &message... - Underskriv besked... + Underskriv besked … - Synchronizing with network... - Synkroniserer med netværk... + Synkroniserer med netværk … - &Overview Oversigt - + Node + Knude + + Show general overview of wallet Vis generel oversigt over tegnebog - &Transactions Transaktioner - Browse transaction history Gennemse transaktionshistorik - - Edit the list of stored addresses and labels - Rediger listen over gemte adresser og mærkater - - - - Show the list of addresses for receiving payments - Vis listen over adresser for at modtage betalinger - - - E&xit Luk - Quit application Afslut program - Show information about Myriadcoin Vis informationer om Myriadcoin - About &Qt Om Qt - Show information about Qt Vis informationer om Qt - &Options... - Indstillinger... + Indstillinger … - &Encrypt Wallet... - Krypter tegnebog... + Kryptér tegnebog … - &Backup Wallet... - Sikkerhedskopier tegnebog... + Sikkerhedskopiér tegnebog … - &Change Passphrase... - Skift adgangskode... + Skift adgangskode … + + + &Sending addresses... + Afsendelsesadresser … + + + &Receiving addresses... + Modtagelsesadresser … + + + Open &URI... + Åbn URI … - Importing blocks from disk... - Importerer blokke fra disken... + Importerer blokke fra disken … - Reindexing blocks on disk... - Genindekserer blokke på disken... + Genindekserer blokke på disken … - Send coins to a Myriadcoin address - Send myriadcoins til en Myriadcoin-adresse + Send myriadcoins til en Bitcoin-adresse - Modify configuration options for Myriadcoin - Rediger konfigurationsindstillinger af Myriadcoin + Redigér konfigurationsindstillinger for Myriadcoin - Backup wallet to another location Lav sikkerhedskopi af tegnebogen til et andet sted - Change the passphrase used for wallet encryption Skift adgangskode anvendt til tegnebogskryptering - &Debug window Fejlsøgningsvindue - Open debugging and diagnostic console Åbn fejlsøgnings- og diagnosticeringskonsollen - &Verify message... - Efterprøv besked... + Verificér besked … - - Myriadcoin Myriadcoin - Wallet Tegnebog - &Send Send - &Receive Modtag - - &Addresses - Adresser - - - - &About Myriadcoin - Om Myriadcoin - - - &Show / Hide - Vis/skjul + Vis / skjul - Show or hide the main Window Vis eller skjul hovedvinduet - Encrypt the private keys that belong to your wallet - Krypter de private nøgler, der hører til din tegnebog + Kryptér de private nøgler, der hører til din tegnebog - Sign messages with your Myriadcoin addresses to prove you own them - Underskriv beskeder med dine Myriadcoin-adresser for at bevise, at de tilhører dig + Underskriv beskeder med dine Bitcoin-adresser for at bevise, at de tilhører dig - Verify messages to ensure they were signed with specified Myriadcoin addresses - Efterprøv beskeder for at sikre, at de er underskrevet med de(n) angivne Myriadcoin-adresse(r) + Verificér beskeder for at sikre, at de er underskrevet med de angivne Bitcoin-adresser - &File Fil - &Settings - Indstillinger + Opsætning - &Help Hjælp - Tabs toolbar Faneværktøjslinje - - [testnet] [testnetværk] - + Myriadcoin Core + Myriadcoin Core + + + Request payments (generates QR codes and myriadcoin: URIs) + Forespørg betalinger (genererer QR-koder og "myriadcoin:"-URI'er) + + + &About Myriadcoin Core + Om Myriadcoin Core + + + Show the list of used sending addresses and labels + Vis listen over brugte afsendelsesadresser og -mærkater + + + Show the list of used receiving addresses and labels + Vis listen over brugte modtagelsesadresser og -mærkater + + + Open a myriadcoin: URI or payment request + Åbn en "myriadcoin:"-URI eller betalingsforespørgsel + + + &Command-line options + Tilvalg for kommandolinje + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + Vis Myriadcoin Core hjælpebesked for at få en liste over mulige tilvalg for Myriadcoin kommandolinje + + Myriadcoin client - Myriadcoin-klient + Bitcoin-klient - %n active connection(s) to Myriadcoin network - %n aktiv(e) forbindelse(r) til Myriadcoin-netværket%n aktiv(e) forbindelse(r) til Myriadcoin-netværket + %n aktiv forbindelse til Bitcoin-netværket%n aktive forbindelser til Bitcoin-netværket - No block source available... - Ingen blokkilde tilgængelig... + Ingen blokkilde tilgængelig … - Processed %1 of %2 (estimated) blocks of transaction history. - %1 ud af %2 (estimeret) blokke af transaktionshistorikken er blevet behandlet. + Behandlet %1 ud af %2 (estimeret) blokke af transaktionshistorikken. - Processed %1 blocks of transaction history. - %1 blokke af transaktionshistorikken er blevet behandlet. + Behandlet %1 blokke af transaktionshistorikken. - %n hour(s) - %n time(r)%n time(r) + %n time%n timer - %n day(s) - %n dag(e)%n dag(e) + %n dag%n dage - %n week(s) - %n uge(r)%n uge(r) + %n uge%n uger + + + %1 and %2 + %1 og %2 + + + %n year(s) + %n år%n år - %1 behind - %1 bagefter + %1 bagud - Last received block was generated %1 ago. Senest modtagne blok blev genereret for %1 siden. - Transactions after this will not yet be visible. Transaktioner herefter vil endnu ikke være synlige. - Error Fejl - Warning Advarsel - Information Information - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - Transaktionen overskrider størrelsesgrænsen. Du kan stadig sende den for et gebyr på %1, hvilket går til de knuder, der behandler din transaktion og hjælper med at understøtte netværket. Vil du betale gebyret? - - - Up to date Opdateret - Catching up... - Indhenter... + Indhenter … - - Confirm transaction fee - Bekræft transaktionsgebyr - - - Sent transaction Afsendt transaktion - Incoming transaction Indgående transaktion - Date: %1 Amount: %2 Type: %3 @@ -648,29 +552,14 @@ Adresse: %4 - - - URI handling - URI-håndtering - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - URI kan ikke fortolkes! Dette kan skyldes en ugyldig Myriadcoin-adresse eller misdannede URI-parametre. - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> Tegnebog er <b>krypteret</b> og i øjeblikket <b>ulåst</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> Tegnebog er <b>krypteret</b> og i øjeblikket <b>låst</b> - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. Der opstod en fatal fejl. Myriadcoin kan ikke længere fortsætte sikkert og vil afslutte. @@ -678,389 +567,702 @@ Adresse: %4 ClientModel - Network Alert Netværksadvarsel - EditAddressDialog + CoinControlDialog - - Edit Address - Rediger adresse + Coin Control Address Selection + Adressevalg for coin-styring + + + Quantity: + Mængde: + + + Bytes: + Byte: + + + Amount: + Beløb: + + + Priority: + Prioritet: + + + Fee: + Gebyr: + + + Low Output: + Lavt output: + + + After Fee: + Efter gebyr: + + + Change: + Byttepenge: + + + (un)select all + (af)vælg alle + + + Tree mode + Trætilstand + + + List mode + Listetilstand + + + Amount + Beløb + + + Address + Adresse + + + Date + Dato + + + Confirmations + Bekræftelser + + + Confirmed + Bekræftet + + + Priority + Prioritet + + + Copy address + Kopiér adresse + + + Copy label + Kopiér mærkat + + + Copy amount + Kopiér beløb + + + Copy transaction ID + Kopiér transaktions-ID + + + Lock unspent + Fastlås ubrugte + + + Unlock unspent + Lås ubrugte op + + + Copy quantity + Kopiér mængde + + + Copy fee + Kopiér gebyr + + + Copy after fee + Kopiér efter-gebyr + + + Copy bytes + Kopiér byte + + + Copy priority + Kopiér prioritet + + + Copy low output + Kopiér lavt output + + + Copy change + Kopiér byttepenge + + + highest + højest + + + higher + højere + + + high + højt + + + medium-high + mellemhøj + + + medium + medium + + + low-medium + mellemlav + + + low + lav + + + lower + lavere + + + lowest + lavest + + + (%1 locked) + (%1 fastlåst) + + + none + ingen + + + Dust + Støv + + + yes + ja + + + no + nej + + + This label turns red, if the transaction size is greater than 1000 bytes. + Dette mærkat bliver rødt, hvis transaktionsstørrelsen er større end 1000 byte. + + + This means a fee of at least %1 per kB is required. + Dette betyder, at et gebyr på mindst %1 pr. kB er nødvendigt. + + + Can vary +/- 1 byte per input. + Kan variere ±1 byte pr. input. + + + Transactions with higher priority are more likely to get included into a block. + Transaktioner med højere prioritet har højere sansynlighed for at blive inkluderet i en blok. + + + This label turns red, if the priority is smaller than "medium". + Dette mærkat bliver rødt, hvis prioriteten er mindre end "medium". + + + This label turns red, if any recipient receives an amount smaller than %1. + Dette mærkat bliver rødt, hvis mindst én modtager et beløb mindre end %1. + + + This means a fee of at least %1 is required. + Dette betyder, at et gebyr på mindst %1 er nødvendigt. + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + Beløb under 0,546 gange det minimale videreførselsgebyr vises som støv. + + + This label turns red, if the change is smaller than %1. + Dette mærkat bliver rødt, hvis byttepengene er mindre end %1. + + + (no label) + (ingen mærkat) + + + change from %1 (%2) + byttepenge fra %1 (%2) + + + (change) + (byttepange) + + + + EditAddressDialog + + Edit Address + Redigér adresse - &Label Mærkat - - The label associated with this address book entry - Mærkaten forbundet med denne post i adressebogen + The label associated with this address list entry + Mærkatet, der er associeret med denne indgang i adresselisten + + + The address associated with this address list entry. This can only be modified for sending addresses. + Adressen, der er associeret med denne indgang i adresselisten. Denne kan kune ændres for afsendelsesadresser. - &Address Adresse - - The address associated with this address book entry. This can only be modified for sending addresses. - Adressen tilknyttet til denne post i adressebogen. Dette kan kun ændres for afsendelsesadresser. - - - New receiving address Ny modtagelsesadresse - New sending address Ny afsendelsesadresse - Edit receiving address - Rediger modtagelsesadresse + Redigér modtagelsesadresse - Edit sending address - Rediger afsendelsesadresse + Redigér afsendelsesadresse - The entered address "%1" is already in the address book. Den indtastede adresse "%1" er allerede i adressebogen. - The entered address "%1" is not a valid Myriadcoin address. - Den indtastede adresse "%1" er ikke en gyldig Myriadcoin-adresse. + Den indtastede adresse "%1" er ikke en gyldig Bitcoin-adresse. - Could not unlock wallet. Kunne ikke låse tegnebog op. - New key generation failed. Ny nøglegenerering mislykkedes. - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt - Myriadcoin-Qt + A new data directory will be created. + En ny datamappe vil blive oprettet. + + + name + navn + + + Directory already exists. Add %1 if you intend to create a new directory here. + Mappe eksisterer allerede. Tilføj %1, hvis du vil oprette en ny mappe her. + + + Path already exists, and is not a directory. + Sti eksisterer allerede og er ikke en mappe. + + + Cannot create data directory here. + Kan ikke oprette en mappe her. + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + Myriadcoin Core – tilvalg for kommandolinje + + + Myriadcoin Core + Myriadcoin Core - version version - Usage: Anvendelse: - command-line options kommandolinjetilvalg - UI options Brugergrænsefladeindstillinger - Set language, for example "de_DE" (default: system locale) - Angiv sprog, f.eks "de_DE" (standard: systemlokalitet) + Angiv sprog, fx "da_DK" (standard: systemlokalitet) - Start minimized Start minimeret - + Set SSL root certificates for payment request (default: -system-) + Sæt SSL-rodcertifikater for betalingsforespørgsel (standard: -system-) + + Show splash screen on startup (default: 1) - Vis opstartsbillede ved start (standard: 1) + Vis opstartsbillede ved opstart (standard: 1) + + + Choose data directory on startup (default: 0) + Vælg datamappe ved opstart (standard: 0) + + + + Intro + + Welcome + Velkommen + + + Welcome to Myriadcoin Core. + Velkommen til Myriadcoin Core. + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + Siden dette er første gang, programmet startes, kan du vælge, hvor Myriadcoin Core skal gemme sin data. + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + Myriadcoin Core vil downloade og gemme et kopi af Bitcoin-blokkæden. Mindst %1 GB data vil blive gemt i denne mappe, og den vil vokse over tid. Tegnebogen vil også blive gemt i denne mappe. + + + Use the default data directory + Brug standardmappen for data + + + Use a custom data directory: + Brug tilpasset mappe for data: + + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" can not be created. + Fejl: Angivet datamappe "%1" kan ikke oprettes. + + + Error + Fejl + + + GB of free space available + GB fri plads tilgængelig + + + (of %1GB needed) + (ud af %1 GB behøvet) + + + + OpenURIDialog + + Open URI + Åbn URI + + + Open payment request from URI or file + Åbn betalingsforespørgsel fra URI eller fil + + + URI: + URI: + + + Select payment request file + Vælg fil for betalingsforespørgsel + + + Select payment request file to open + Vælg fil for betalingsforespørgsel til åbning OptionsDialog - Options Indstillinger - &Main Generelt - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Valgfrit transaktionsgebyr pr. kB, der hjælper dine transaktioner med at blive behandlet hurtigt. De fleste transaktioner er på 1 kB. - Pay transaction &fee Betal transaktionsgebyr - Automatically start Myriadcoin after logging in to the system. - Start Myriadcoin automatisk, når der logges ind på systemet + Start Myriadcoin automatisk, når der logges ind på systemet. - &Start Myriadcoin on system login - Start Myriadcoin, når systemet startes + Start Myriadcoin ved systemlogin + + + Size of &database cache + Størrelsen på databasens cache + + + MB + MB + + + Number of script &verification threads + Antallet af scriptverificeringstråde + + + Connect to the Myriadcoin network through a SOCKS proxy. + Forbind til Bitcoin-netværket gennem en SOCKS-proxy. + + + &Connect through SOCKS proxy (default proxy): + Forbind gennem SOCKS-proxy (standard-proxy): + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + IP-adresse for proxyen (fx IPv4: 127.0.0.1 / IPv6: ::1) + + + 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 |. + Tredjeparts-URL'er (fx et blokhåndteringsværktøj), der vises i transaktionsfanen som genvejsmenupunkter. %s i URL'en erstattes med transaktionens hash. Flere URL'er separeres med en lodret streg |. + + + Third party transaction URLs + Tredjeparts-transaktions-URL'er + + + Active command-line options that override above options: + Aktuelle tilvalg for kommandolinjen, der tilsidesætter ovenstående tilvalg: - Reset all client options to default. Nulstil alle klientindstillinger til deres standard. - &Reset Options Nulstil indstillinger - &Network Netværk - + (0 = auto, <0 = leave that many cores free) + (0 = auto, <0 = efterlad så mange kerner fri) + + + W&allet + Tegnebog + + + Expert + Ekspert + + + Enable coin &control features + Slå egenskaber for coin-styring til + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + Hvis du slår brug af ubekræftede byttepenge fra, kan byttepengene fra en transaktion ikke bruges, før pågældende transaktion har mindst én bekræftelse. Dette påvirker også måden hvorpå din saldo beregnes. + + + &Spend unconfirmed change + Brug ubekræftede byttepenge + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. - Åbn Myriadcoin-klientens port på routeren automatisk. Dette virker kun, når din router understøtter UPnP og UPnP er aktiveret. + Åbn automatisk Bitcoin-klientens port på routeren. Dette virker kun, når din router understøtter UPnP, og UPnP er aktiveret. - Map port using &UPnP - Konfigurer port vha. UPnP + Konfigurér port vha. UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - Opret forbindelse til Myriadcoin-netværket via en SOCKS-proxy (f.eks. ved tilslutning gennem Tor) - - - - &Connect through SOCKS proxy: - Forbind gennem SOCKS-proxy: - - - Proxy &IP: Proxy-IP: - - IP address of the proxy (e.g. 127.0.0.1) - IP-adressen på proxyen (f.eks. 127.0.0.1) - - - &Port: Port: - Port of the proxy (e.g. 9050) - Porten på proxyen (f.eks. 9050) + Port for proxyen (fx 9050) - SOCKS &Version: SOCKS-version - SOCKS version of the proxy (e.g. 5) - SOCKS-version af proxyen (f.eks. 5) + SOCKS-version for proxyen (fx 5) - &Window Vindue - Show only a tray icon after minimizing the window. Vis kun et statusikon efter minimering af vinduet. - &Minimize to the tray instead of the taskbar - Minimer til statusfeltet i stedet for proceslinjen + Minimér til statusfeltet i stedet for proceslinjen - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. - Minimer i stedet for at afslutte programmet, når vinduet lukkes. Når denne indstilling er valgt, vil programmet kun blive lukket, når du har valgt Afslut i menuen. + Minimér i stedet for at afslutte programmet, når vinduet lukkes. Når denne indstilling er valgt, vil programmet kun blive lukket, når du har valgt Afslut i menuen. - M&inimize on close - Minimer ved lukning + Minimér ved lukning - &Display Visning - User Interface &language: - Brugergrænsefladesprog: + Sprog for brugergrænseflade: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. - Brugergrænsefladesproget kan angives her. Denne indstilling træder først i kraft, når Myriadcoin genstartes. + Sproget for brugergrænsefladen kan angives her. Denne indstilling træder først i kraft, når Myriadcoin genstartes. - &Unit to show amounts in: Enhed at vise beløb i: - Choose the default subdivision unit to show in the interface and when sending coins. - Vælg den standard underopdelingsenhed, som skal vises i brugergrænsefladen og ved afsendelse af myriadcoins. + Vælg standard for underopdeling af enhed, som skal vises i brugergrænsefladen og ved afsendelse af myriadcoins. - Whether to show Myriadcoin addresses in the transaction list or not. - Afgør hvorvidt Myriadcoin-adresser skal vises i transaktionslisten eller ej. + Afgør hvorvidt Bitcoin-adresser skal vises i transaktionslisten eller ej. - &Display addresses in transaction list Vis adresser i transaktionsliste - + Whether to show coin control features or not. + Hvorvidt egenskaber for coin-styring skal vises eller ej. + + &OK OK - &Cancel - Annuller + Annullér - - &Apply - Anvend - - - default standard - + none + ingeningen + + Confirm options reset Bekræft nulstilling af indstillinger - - Some settings may require a client restart to take effect. - Nogle indstillinger kan kræve, at klienten genstartes, før de træder i kraft. + Client restart required to activate changes. + Genstart af klienten er nødvendig for at aktivere ændringer. - - Do you want to proceed? - Ønsker du at fortsætte? + Client will be shutdown, do you want to proceed? + Klienten vil blive lukket ned; vil du fortsætte? - - - Warning - Advarsel + This change would require a client restart. + Denne ændring vil kræve en genstart af klienten. - - - This setting will take effect after restarting Myriadcoin. - Denne indstilling træder i kraft, efter Myriadcoin genstartes. - - - The supplied proxy address is invalid. - Ugyldig proxy-adresse + Den angivne proxy-adresse er ugyldig. OverviewPage - Form Formular - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. - Den viste information kan være forældet. Din tegnebog synkroniserer automatisk med Myriadcoin-netværket, når en forbindelse etableres, men denne proces er ikke gennemført endnu. + Den viste information kan være forældet. Din tegnebog synkroniserer automatisk med Bitcoin-netværket, når en forbindelse etableres, men denne proces er ikke gennemført endnu. - - Balance: - Saldo: - - - - Unconfirmed: - Ubekræftede: - - - Wallet Tegnebog - + Available: + Tilgængelig: + + + Your current spendable balance + Din nuværende tilgængelige saldo + + + Pending: + Uafgjort: + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + Total saldo for transaktioner, som ikke er blevet bekræftet endnu, og som ikke endnu er en del af den tilgængelige saldo + + Immature: Umodne: - Mined balance that has not yet matured Udvunden saldo, som endnu ikke er modnet - + Total: + Total: + + + Your current total balance + Din nuværende totale saldo + + <b>Recent transactions</b> <b>Nyeste transaktioner</b> - - Your current balance - Din nuværende saldo - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - Summen af transaktioner, der endnu ikke er bekræftet og endnu ikke er inkluderet i den nuværende saldo - - - - out of sync ikke synkroniseret @@ -1068,766 +1270,1017 @@ Adresse: %4 PaymentServer - + URI handling + URI-håndtering + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + URI kan ikke fortolkes! Dette kan skyldes en ugyldig Bitcoin-adresse eller misdannede URI-parametre. + + + Requested payment amount of %1 is too small (considered dust). + Forespurgt betalingsbeløb på %1 er for lille (regnes som støv). + + + Payment request error + Fejl i betalingsforespørgsel + + Cannot start myriadcoin: click-to-pay handler Kan ikke starte myriadcoin: click-to-pay-håndtering + + Net manager warning + Net-håndterings-advarsel + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + Din aktuelle proxy understøtter ikke SOCKS5, hvilket kræves for betalingsforespørgsler via proxy. + + + Payment request fetch URL is invalid: %1 + Betalingsforespørgslens hentnings-URL er ugyldig: %1 + + + Payment request file handling + Filhåndtering for betalingsanmodninger + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + Betalingsanmodningsfil kan ikke indlæses eller bearbejdes! Dette kan skyldes en ugyldig betalingsanmodningsfil. + + + Unverified payment requests to custom payment scripts are unsupported. + Ikke-verificerede betalingsforespørgsler for tilpassede betalings-scripts understøttes ikke. + + + Refund from %1 + Tilbagebetaling fra %1 + + + Error communicating with %1: %2 + Fejl under kommunikation med %1: %2 + + + Payment request can not be parsed or processed! + Betalingsanmodning kan ikke fortolkes eller bearbejdes! + + + Bad response from server %1 + Fejlagtigt svar fra server %1 + + + Payment acknowledged + Betaling anerkendt + + + Network request error + Fejl i netværksforespørgsel + - QRCodeDialog + QObject - - QR Code Dialog - QR-kode-dialog + Myriadcoin + Myriadcoin - - Request Payment - Anmod om betaling + Error: Specified data directory "%1" does not exist. + Fejl: Angivet datamappe "%1" eksisterer ikke. - - Amount: - Beløb: + Error: Cannot parse configuration file: %1. Only use key=value syntax. + Fejl: Kan ikke fortolke konfigurationsfil: %1. Brug kun syntaksen nøgle=værdi. - - Label: - Mærkat: + Error: Invalid combination of -regtest and -testnet. + Fejl: Ugyldig kombination af -regtest og -testnet. - - Message: - Besked: + Myriadcoin Core didn't yet exit safely... + Myriadcoin Core blev ikke afsluttet på sikker vis … - - &Save As... - Gem som... + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Indtast en Bitcoin-adresse (fx 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + Gem billede … - - Error encoding URI into QR Code. - Fejl ved kodning fra URI til QR-kode + &Copy Image + Kopiér foto - - The entered amount is invalid, please check. - Det indtastede beløb er ugyldig, tjek venligst. - - - - Resulting URI too long, try to reduce the text for label / message. - Resulterende URI var for lang; prøv at forkorte teksten til mærkaten/beskeden. - - - Save QR Code Gem QR-kode - - PNG Images (*.png) - PNG-billeder (*.png) + PNG Image (*.png) + PNG-billede (*.png) RPCConsole - Client name Klientnavn - - - - - - - - - - N/A N/A - Client version Klientversion - &Information Information - + Debug window + Fejlsøgningsvindue + + + General + Generelt + + Using OpenSSL version - Anvendt OpenSSL-version + Anvender OpenSSL-version - Startup time - Opstartstid + Opstartstidspunkt - Network Netværk - + Name + Navn + + Number of connections Antal forbindelser - - On testnet - Tilsluttet testnetværk - - - Block chain Blokkæde - Current number of blocks Nuværende antal blokke - Estimated total blocks Estimeret antal blokke - Last block time Tidsstempel for seneste blok - &Open Åbn - - Command-line options - Kommandolinjetilvalg - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - Vis Myriadcoin-Qt-hjælpebeskeden for at få en liste over de tilgængelige Myriadcoin-kommandolinjeindstillinger. - - - - &Show - Vis - - - &Console Konsol - + &Network Traffic + Netværkstrafik + + + &Clear + Ryd + + + Totals + Totaler + + + In: + Indkommende: + + + Out: + Udgående: + + Build date Byggedato - - Myriadcoin - Debug window - Myriadcoin - Fejlsøgningsvindue - - - - Myriadcoin Core - Myriadcoin Core - - - Debug log file Fejlsøgningslogfil - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. - Åbn Myriadcoin-fejlsøgningslogfilen fra det nuværende datakatalog. Dette kan tage nogle få sekunder for en store logfiler. + Åbn Bitcoin-fejlsøgningslogfilen fra den nuværende datamappe. Dette kan tage nogle få sekunder for store logfiler. - Clear console Ryd konsol - Welcome to the Myriadcoin RPC console. - Velkommen til Myriadcoin RPC-konsollen + Velkommen til Myriadcoin RPC-konsollen. - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Brug op og ned-piletasterne til at navigere historikken og <b>Ctrl-L</b> til at rydde skærmen. + Brug op- og ned-piletasterne til at navigere i historikken og <b>Ctrl-L</b> til at rydde skærmen. - Type <b>help</b> for an overview of available commands. Tast <b>help</b> for en oversigt over de tilgængelige kommandoer. + + %1 B + %1 B + + + %1 KB + %1 KB + + + %1 MB + %1 MB + + + %1 GB + %1 GB + + + %1 m + %1 m + + + %1 h + %1 t + + + %1 h %2 m + %1 t %2 m + + + + ReceiveCoinsDialog + + &Amount: + Beløb: + + + &Label: + Mærkat: + + + &Message: + Besked: + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + Genbrug en af de tidligere brugte modtagelsesadresser. Genbrug af adresser har indflydelse på sikkerhed og privatliv. Brug ikke dette med mindre du genskaber en betalingsforespørgsel fra tidligere. + + + R&euse an existing receiving address (not recommended) + Genbrug en eksisterende modtagelsesadresse (anbefales ikke) + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + En valgfri besked, der føjes til betalingsanmodningen, og som vil vises, når anmodningen åbnes. Bemærk: Beskeden vil ikke sendes med betalingen over Bitcoin-netværket. + + + An optional label to associate with the new receiving address. + Et valgfrit mærkat, der associeres med den nye modtagelsesadresse. + + + Use this form to request payments. All fields are <b>optional</b>. + Brug denne formular for at anmode om betalinger. Alle felter er <b>valgfri</b>. + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + Et valgfrit beløb til anmodning. Lad dette felt være tomt eller indeholde nul for at anmode om et ikke-specifikt beløb. + + + Clear all fields of the form. + Ryd alle felter af formen. + + + Clear + Ryd + + + Requested payments history + Historik over betalingsanmodninger + + + &Request payment + Anmod om betaling + + + Show the selected request (does the same as double clicking an entry) + Vis den valgte forespørgsel (gør det samme som dobbeltklik på en indgang) + + + Show + Vis + + + Remove the selected entries from the list + Fjern de valgte indgange fra listen + + + Remove + Fjern + + + Copy label + Kopiér mærkat + + + Copy message + Kopiér besked + + + Copy amount + Kopier beløb + + + + ReceiveRequestDialog + + QR Code + QR-kode + + + Copy &URI + Kopiér URI + + + Copy &Address + Kopiér adresse + + + &Save Image... + Gem billede … + + + Request payment to %1 + Anmod om betaling til %1 + + + Payment information + Betalingsinformation + + + URI + URI + + + Address + Adresse + + + Amount + Beløb + + + Label + Mærkat + + + Message + Besked + + + Resulting URI too long, try to reduce the text for label / message. + Resulterende URI var for lang; prøv at forkorte teksten til mærkaten/beskeden. + + + Error encoding URI into QR Code. + Fejl ved kodning fra URI til QR-kode. + + + + RecentRequestsTableModel + + Date + Dato + + + Label + Mærkat + + + Message + Besked + + + Amount + Beløb + + + (no label) + (ingen mærkat) + + + (no message) + (ingen besked) + + + (no amount) + (intet beløb) + SendCoinsDialog - - - - - - - - Send Coins Send myriadcoins - + Coin Control Features + Egenskaber for coin-styring + + + Inputs... + Inputs … + + + automatically selected + valgt automatisk + + + Insufficient funds! + Utilstrækkelige midler! + + + Quantity: + Mængde: + + + Bytes: + Byte: + + + Amount: + Beløb: + + + Priority: + Prioritet: + + + Fee: + Gebyr: + + + Low Output: + Lavt output: + + + After Fee: + Efter gebyr: + + + Change: + Byttepenge: + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + Hvis dette aktiveres, men byttepengeadressen er tom eller ugyldig, vil byttepenge blive sendt til en nygenereret adresse. + + + Custom change address + Tilpasset byttepengeadresse + + Send to multiple recipients at once Send til flere modtagere på en gang - Add &Recipient Tilføj modtager - - Remove all transaction fields - Fjern alle transaktionsfelter + Clear all fields of the form. + Ryd alle felter af formen. - Clear &All Ryd alle - Balance: Saldo: - - 123.456 BTC - 123,456 BTC - - - Confirm the send action Bekræft afsendelsen - S&end Afsend - - <b>%1</b> to %2 (%3) - <b>%1</b> til %2 (%3) - - - Confirm send coins Bekræft afsendelse af myriadcoins - - Are you sure you want to send %1? - Er du sikker på, at du vil sende %1? + %1 to %2 + %1 til %2 - - and - og + Copy quantity + Kopiér mængde + + + Copy amount + Kopier beløb + + + Copy fee + Kopiér gebyr + + + Copy after fee + Kopiér efter-gebyr + + + Copy bytes + Kopiér byte + + + Copy priority + Kopiér prioritet + + + Copy low output + Kopiér lavt output + + + Copy change + Kopiér byttepenge + + + Total Amount %1 (= %2) + Totalbeløb %1 (= %2) + + + or + eller - The recipient address is not valid, please recheck. Modtagerens adresse er ikke gyldig. Tjek venligst adressen igen. - The amount to pay must be larger than 0. Beløbet til betaling skal være større end 0. - The amount exceeds your balance. Beløbet overstiger din saldo. - The total exceeds your balance when the %1 transaction fee is included. - Totalen overstiger din saldo, når %1 transaktionsgebyr er inkluderet. + Totalen overstiger din saldo, når transaktionsgebyret på %1 er inkluderet. - Duplicate address found, can only send to each address once per send operation. - Duplikeret adresse fundet. Du kan kun sende til hver adresse en gang pr. afsendelse. + Duplikeret adresse fundet. Du kan kun sende til hver adresse én gang pr. afsendelse. - - Error: Transaction creation failed! - Fejl: Oprettelse af transaktionen mislykkedes! + Transaction creation failed! + Oprettelse af transaktion mislykkedes! - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Fejl: Transaktionen blev afvist. Dette kan ske, hvis nogle af dine myriadcoins i din tegnebog allerede er brugt, som hvis du brugte en kopi af wallet.dat og dine myriadcoins er blevet brugt i kopien, men ikke er markeret som brugt her. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Transaktionen blev afvist! Dette kan ske, hvis nogle af dine myriadcoins i din tegnebog allerede er brugt, som hvis du brugte en kopi af wallet.dat og dine myriadcoins er blevet brugt i kopien, men ikke er markeret som brugt her. + + + Warning: Invalid Myriadcoin address + Advarsel: Ugyldig Bitcoin-adresse + + + (no label) + (ingen mærkat) + + + Warning: Unknown change address + Advarsel: Ukendt byttepengeadresse + + + Are you sure you want to send? + Er du sikker på, at du vil sende? + + + added as transaction fee + tilføjet som transaktionsgebyr + + + Payment request expired + Betalingsforespørgsel udløbet + + + Invalid payment address %1 + Ugyldig betalingsadresse %1 SendCoinsEntry - - Form - Formular - - - A&mount: Beløb: - Pay &To: Betal til: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Myriadcoin-adressen som betalingen skal sendes til (f.eks. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Bitcoin-adressen som betalingen skal sendes til (fx 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book Indtast en mærkat for denne adresse for at føje den til din adressebog - &Label: Mærkat: - - Choose address from address book - Vælg adresse fra adressebog + Choose previously used address + Vælg tidligere brugt adresse + + + This is a normal payment. + Dette er en normal betaling. - Alt+A Alt+A - Paste address from clipboard Indsæt adresse fra udklipsholderen - Alt+P Alt+P - - Remove this recipient - Fjern denne modtager + Remove this entry + Fjern denne indgang - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Indtast en Myriadcoin-adresse (f.eks. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + Besked: + + + This is a verified payment request. + Dette er en verificeret betalingsforespørgsel. + + + Enter a label for this address to add it to the list of used addresses + Indtast et mærkat for denne adresse for at føje den til listen over brugte adresser + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + En besked, som blev føjet til "bitcon:"-URI'en, som vil gemmes med transaktionen til din reference. Bemærk: Denne besked vil ikke blive sendt over Bitcoin-netværket. + + + This is an unverified payment request. + Dette er en ikke-verificeret betalingsforespørgsel. + + + Pay To: + Betal til: + + + Memo: + Memo: + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + Myriadcoin Core lukker ned … + + + Do not shut down the computer until this window disappears. + Luk ikke computeren ned, før dette vindue forsvinder. SignVerifyMessageDialog - Signatures - Sign / Verify a Message - Underskrifter - Underskriv/efterprøv en besked + Signature - Underskriv/verificér en besked - &Sign Message Underskriv besked - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. - Du kan underskrive beskeder med dine Myriadcoin-adresser for at bevise, at de tilhører dig. Pas på ikke at underskrive noget vagt, da phisingangreb kan narre dig til at overdrage din identitet. Underskriv kun fuldt detaljerede udsagn, du er enig i. + Du kan underskrive beskeder med dine Bitcoin-adresser for at bevise, at de tilhører dig. Pas på ikke at underskrive noget vagt, da phisingangreb kan narre dig til at overdrage din identitet. Underskriv kun fuldt detaljerede udsagn, du er enig i. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Myriadcoin-adressen som beskeden skal underskrives med (f.eks. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Bitcoin-adressen som beskeden skal underskrives med (fx 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book - Vælg adresse fra adressebog + Choose previously used address + Vælg tidligere brugt adresse - - Alt+A Alt+A - Paste address from clipboard Indsæt adresse fra udklipsholderen - Alt+P Alt+P - Enter the message you want to sign here - Indtast beskeden, du ønsker at underskrive + Indtast her beskeden, du ønsker at underskrive - Signature Underskrift - Copy the current signature to the system clipboard - Kopier den nuværende underskrift til systemets udklipsholder + Kopiér den nuværende underskrift til systemets udklipsholder - Sign the message to prove you own this Myriadcoin address - Underskriv denne besked for at bevise, at Myriadcoin-adressen tilhører dig + Underskriv denne besked for at bevise, at Bitcoin-adressen tilhører dig - Sign &Message Underskriv besked - Reset all sign message fields - Nulstil alle underskriv besked-indtastningsfelter + Nulstil alle "underskriv besked"-felter - - Clear &All Ryd alle - &Verify Message - Efterprøv besked + Verificér besked - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. - Indtast den underskrevne adresse, beskeden (inkluder linjeskift, mellemrum mv. nøjagtigt, som de fremgår) og underskriften for at efterprøve beskeden. Vær forsigtig med ikke at lægge mere i underskriften end besked selv, så du undgår at blive narret af et man-in-the-middle-angreb. + Indtast herunder den underskrivende adresse, beskeden (inkludér linjeskift, mellemrum mv. nøjagtigt, som de fremgår) og underskriften for at verificere beskeden. Vær forsigtig med ikke at lægge mere i underskriften end besked selv, så du undgår at blive narret af et man-in-the-middle-angreb. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Myriadcoin-adressen som beskeden er underskrevet med (f.eks. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Bitcoin-adressen som beskeden er underskrevet med (fx 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address - Efterprøv beskeden for at sikre, at den er underskrevet med den angivne Myriadcoin-adresse + Verificér beskeden for at sikre, at den er underskrevet med den angivne Bitcoin-adresse - Verify &Message - Efterprøv besked + Verificér besked - Reset all verify message fields - Nulstil alle efterprøv besked-indtastningsfelter + Nulstil alle "verificér besked"-felter - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Indtast en Myriadcoin-adresse (f.eks. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Indtast en Bitcoin-adresse (fx 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature Klik "Underskriv besked" for at generere underskriften - - Enter Myriadcoin signature - Indtast Myriadcoin-underskriften - - - - The entered address is invalid. Den indtastede adresse er ugyldig. - - - - Please check the address and try again. - Tjek venligst adressen, og forsøg igen. + Tjek venligst adressen og forsøg igen. - - The entered address does not refer to a key. Den indtastede adresse henviser ikke til en nøgle. - Wallet unlock was cancelled. Tegnebogsoplåsning annulleret. - Private key for the entered address is not available. Den private nøgle for den indtastede adresse er ikke tilgængelig. - Message signing failed. Underskrivning af besked mislykkedes. - Message signed. Besked underskrevet. - The signature could not be decoded. Underskriften kunne ikke afkodes. - - Please check the signature and try again. Tjek venligst underskriften, og forsøg igen. - The signature did not match the message digest. Underskriften matcher ikke beskedens indhold. - Message verification failed. - Efterprøvelse af besked mislykkedes. + Verificering af besked mislykkedes. - Message verified. - Besked efterprøvet. + Besked verificeret. SplashScreen - - The Myriadcoin developers - Myriadcoin-udviklerne + Myriadcoin Core + Myriadcoin Core + + + The Myriadcoin Core developers + Udviklerne af Myriadcoin Core - [testnet] - [testnet] + [testnetværk] + + + + TrafficGraphWidget + + KB/s + KB/s TransactionDesc - Open until %1 Åben indtil %1 - + conflicted + konflikt + + %1/offline %1/offline - %1/unconfirmed %1/ubekræftet - %1 confirmations %1 bekræftelser - Status Status - , broadcast through %n node(s) - , transmitteret igennem %n knude(r), transmitteret igennem %n knude(r) + , transmitteret igennem %n knude, transmitteret igennem %n knuder - Date Dato - Source Kilde - Generated Genereret - - From Fra - - - To Til - - own address egen adresse - label mærkat - - - - - Credit Kredit - matures in %n more block(s) - modner efter yderligere %n blok(ke)modner efter yderligere %n blok(ke) + modner efter yderligere %n blokmodner efter yderligere %n blokke - not accepted ikke accepteret - - - - Debit Debet - Transaction fee Transaktionsgebyr - Net amount Nettobeløb - Message Besked - Comment Kommentar - Transaction ID - Transaktionens ID + Transaktions-ID - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Genererede myriadcoins skal vente 120 blokke, før de kan blive brugt. Da du genererede denne blok, blev den transmitteret til netværket for at blive føjet til blokkæden. Hvis det mislykkes at komme ind i kæden, vil den skifte til "ikke godkendt" og ikke blive kunne bruges. Dette kan lejlighedsvis ske, hvis en anden knude genererer en blok inden for få sekunder af din. + Merchant + Forretningsdrivende + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Udvundne myriadcoins skal modne %1 blokke, før de kan bruges. Da du genererede denne blok, blev den udsendt til netværket for at blive føjet til blokkæden. Hvis det ikke lykkes at få den i kæden, vil dens tilstand ændres til "ikke accepteret", og den vil ikke kunne bruges. Dette kan ske nu og da, hvis en anden knude udvinder en blok inden for nogle få sekunder fra din. - Debug information Fejlsøgningsinformation - Transaction Transaktion - Inputs Input - Amount Beløb - true sand - false falsk - , has not been successfully broadcast yet , er ikke blevet transmitteret endnu - Open for %n more block(s) - Åben %n blok yderligereÅben %n blokke yderligere + Åbn yderligere %n blokÅbn yderligere %n blokke - unknown ukendt @@ -1835,12 +2288,10 @@ Adresse: %4 TransactionDescDialog - Transaction details Transaktionsdetaljer - This pane shows a detailed description of the transaction Denne rude viser en detaljeret beskrivelse af transaktionen @@ -1848,294 +2299,259 @@ Adresse: %4 TransactionTableModel - Date Dato - Type Type - Address Adresse - Amount Beløb + + Immature (%1 confirmations, will be available after %2) + Umoden (%1 bekræftelser; vil være tilgængelig efter %2) + - Open for %n more block(s) - Åben %n blok(ke) yderligereÅben %n blok(ke) yderligere + Åbn yderligere %n blokÅbn yderligere %n blokke - Open until %1 Åben indtil %1 - - Offline (%1 confirmations) - Offline (%1 bekræftelser) - - - - Unconfirmed (%1 of %2 confirmations) - Ubekræftet (%1 af %2 bekræftelser) - - - Confirmed (%1 confirmations) Bekræftet (%1 bekræftelser) - - - Mined balance will be available when it matures in %n more block(s) - Udvunden saldo, som vil være tilgængelig, når den modner efter yderligere %n blok(ke)Udvunden saldo, som vil være tilgængelig, når den modner efter yderligere %n blok(ke) - - This block was not received by any other nodes and will probably not be accepted! Denne blok blev ikke modtaget af nogen andre knuder og vil formentlig ikke blive accepteret! - Generated but not accepted Genereret, men ikke accepteret - + Offline + Offline + + + Unconfirmed + Ubekræftet + + + Confirming (%1 of %2 recommended confirmations) + Bekræfter (%1 af %2 anbefalede bekræftelser) + + + Conflicted + Konflikt + + Received with Modtaget med - Received from Modtaget fra - Sent to Sendt til - Payment to yourself Betaling til dig selv - Mined Udvundne - (n/a) (n/a) - Transaction status. Hover over this field to show number of confirmations. Transaktionsstatus. Hold musen over dette felt for at vise antallet af bekræftelser. - Date and time that the transaction was received. Dato og klokkeslæt for modtagelse af transaktionen. - Type of transaction. Transaktionstype. - Destination address of transaction. Destinationsadresse for transaktion. - Amount removed from or added to balance. - Beløb fjernet eller tilføjet balance. + Beløb trukket fra eller tilføjet balance. TransactionView - - All Alle - Today I dag - This week Denne uge - This month Denne måned - Last month Sidste måned - This year Dette år - Range... - Interval... + Interval … - Received with Modtaget med - Sent to Sendt til - To yourself Til dig selv - Mined Udvundne - Other Andet - Enter address or label to search Indtast adresse eller mærkat for at søge - Min amount Minimumsbeløb - Copy address - Kopier adresse + Kopiér adresse - Copy label - Kopier mærkat + Kopiér mærkat - Copy amount - Kopier beløb + Kopiér beløb - Copy transaction ID - Kopier transaktionens ID + Kopiér transaktions-ID - Edit label - Rediger mærkat + Redigér mærkat - Show transaction details Vis transaktionsdetaljer - - Export Transaction Data - Eksporter transaktionsdata + Export Transaction History + Historik for eksport af transaktioner + + + Exporting Failed + Eksport mislykkedes + + + There was an error trying to save the transaction history to %1. + En fejl opstod under gemning af transaktionshistorik til %1. + + + Exporting Successful + Eksport problemfri + + + The transaction history was successfully saved to %1. + Transaktionshistorikken blev gemt til %1 med succes. - Comma separated file (*.csv) Kommasepareret fil (*.csv) - Confirmed Bekræftet - Date Dato - Type Type - Label Mærkat - Address Adresse - Amount Beløb - ID ID - - Error exporting - Fejl under eksport - - - - Could not write to file %1. - Kunne ikke skrive til filen %1. - - - Range: Interval: - to til + + WalletFrame + + No wallet has been loaded. + Ingen tegnebog er indlæst. + + WalletModel - Send Coins Send myriadcoins @@ -2143,160 +2559,121 @@ Adresse: %4 WalletView - &Export - Eksporter + Eksportér - Export the data in the current tab to a file Eksportér den aktuelle visning til en fil - Backup Wallet - Sikkerhedskopier tegnebog + Sikkerhedskopiér tegnebog - Wallet Data (*.dat) Tegnebogsdata (*.dat) - Backup Failed - Foretagelse af sikkerhedskopi fejlede + Sikkerhedskopiering mislykkedes - - There was an error trying to save the wallet data to the new location. - Der opstod en fejl i forbindelse med at gemme tegnebogsdata til det nye sted + There was an error trying to save the wallet data to %1. + Der skete en fejl under gemning af tegnebogsdata til %1. + + + The wallet data was successfully saved to %1. + Tegnebogsdata blev gemt til %1 med succes. - Backup Successful - Sikkerhedskopieret problemfri - - - - The wallet data was successfully saved to the new location. - Tegnebogsdata blev problemfrit gemt til det nye sted. + Sikkerhedskopiering problemfri bitcoin-core - - Myriadcoin version - Myriadcoin-version - - - Usage: Anvendelse: - - Send command to -server or myriadcoind - Send kommando til -server eller myriadcoind - - - List commands Liste over kommandoer - Get help for a command Få hjælp til en kommando - Options: Indstillinger: - Specify configuration file (default: myriadcoin.conf) Angiv konfigurationsfil (standard: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) Angiv pid-fil (default: myriadcoind.pid) - Specify data directory - Angiv datakatalog + Angiv datamappe - - Set database cache size in megabytes (default: 25) - Angiv databasecachestørrelse i megabytes (standard: 25) - - - Listen for connections on <port> (default: 8333 or testnet: 18333) Lyt til forbindelser på <port> (standard: 8333 eller testnetværk: 18333) - Maintain at most <n> connections to peers (default: 125) Oprethold højest <n> forbindelser til andre i netværket (standard: 125) - Connect to a node to retrieve peer addresses, and disconnect - Forbind til en knude for at modtage adresse, og afbryd + Forbind til en knude for at modtage adresser på andre knuder, og afbryd derefter - Specify your own public address Angiv din egen offentlige adresse - Threshold for disconnecting misbehaving peers (default: 100) Grænse for afbrydelse til dårlige forbindelser (standard: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Antal sekunder dårlige forbindelser skal vente før reetablering (standard: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s Der opstod en fejl ved angivelse af RPC-porten %u til at lytte på IPv4: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) Lyt til JSON-RPC-forbindelser på <port> (standard: 8332 eller testnetværk: 18332) - Accept command line and JSON-RPC commands - Accepter kommandolinje- og JSON-RPC-kommandoer + Acceptér kommandolinje- og JSON-RPC-kommandoer + + + Myriadcoin Core RPC client version + Myriadcoin Core RPC-klient-version - Run in the background as a daemon and accept commands - Kør i baggrunden som en service, og accepter kommandoer + Kør i baggrunden som en service, og acceptér kommandoer - Use the test network Brug testnetværket - Accept connections from outside (default: 1 if no -proxy or -connect) - Accepter forbindelser udefra (standard: 1 hvis hverken -proxy eller -connect) + Acceptér forbindelser udefra (standard: 1 hvis hverken -proxy eller -connect) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2317,620 +2694,694 @@ rpcpassword=%s Brugernavnet og adgangskode MÅ IKKE være det samme. Hvis filen ikke eksisterer, opret den og giv ingen andre end ejeren læserettighed. Det anbefales også at angive alertnotify, så du påmindes om problemer; -f.eks.: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com +fx: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + Accepterede krypteringer (standard: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s Der opstod en fejl ved angivelse af RPC-porten %u til at lytte på IPv6, falder tilbage til IPv4: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 Tildel til den givne adresse og lyt altid på den. Brug [vært]:port-notation for IPv6 - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. - Kan ikke opnå lås på datakatalog %s. Myriadcoin er sandsynligvis allerede startet. + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + Rate-begræns kontinuerligt frie transaktioner til <n>*1000 byte i minuttet (standard:15) + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + Start regressionstesttilstand, som bruger en speciel kæde, hvor blokke kan løses med det samme. Dette er tiltænkt til testværktøjer for regression of programudvikling. + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + Start regressionstesttilstand, som bruger en speciel kæde, hvor blokke kan løses med det samme. + + + Error: Listening for incoming connections failed (listen returned error %d) + Fejl: Lytning efter indkommende forbindelser mislykkedes (lytning returnerede fejl %d) - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. Fejl: Transaktionen blev afvist. Dette kan ske, hvis nogle af dine myriadcoins i din tegnebog allerede er brugt, som hvis du brugte en kopi af wallet.dat og dine myriadcoins er blevet brugt i kopien, men ikke er markeret som brugt her. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! - Fejl: Denne transaktion kræver et transaktionsgebyr på minimum %s pga. dens størrelse, kompleksitet eller anvendelse af nyligt modtagne myriadcoins! + Fejl: Denne transaktion kræver et transaktionsgebyr på minimum %s pga. dens beløb, kompleksitet eller anvendelse af nyligt modtagne myriadcoins! - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - Udfør kommando, når en relevant advarsel modtages (%s i kommandoen erstattes med beskeden) - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Udfør kommando, når en transaktion i tegnebogen ændres (%s i kommandoen erstattes med TxID) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - Angiv maksimumstørrelse for høj prioritet/lavt gebyr-transaktioner i bytes (standard: 27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + Gebyrer mindre end dette opfattes som nul-gebyr (for oprettelse af transaktioner) (standard: + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + Flyt databaseaktivitet fra hukommelsespulje til disklog hver <n> megabytes (standard: 100) + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + Hvor gennemarbejdet blokverificeringen for -checkblocks er (0-4; standard: 3) + + + In this mode -genproclimit controls how many blocks are generated immediately. + I denne tilstand styrer -genproclimit hvor mange blokke, der genereres med det samme. + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + Sæt antallet af scriptverificeringstråde (%u til %d, 0 = auto, <0 = efterlad det antal kernet fri, standard: %d) + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + Sæt processorbegrænsning for når generering er slået til (-1 = ubegrænset, standard: -1) - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications Dette er en foreløbig testudgivelse - brug på eget ansvar - brug ikke til udvinding eller handelsprogrammer - + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + Ikke i stand til at tildele til %s på denne computer. Myriadcoin Core kører sansynligvis allerede. + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + Brug separat SOCS5-proxy for at nå andre knuder via Tor skjulte tjenester (standard: -proxy) + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Advarsel: -paytxfee er sat meget højt! Dette er det gebyr du vil betale, hvis du sender en transaktion. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - Advarsel: Viste transaktioner kan være ukorrekte! Du eller andre knuder kan have behov for at opgradere. - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. Advarsel: Undersøg venligst, at din computers dato og klokkeslæt er korrekt indstillet! Hvis der er fejl i disse, vil Myriadcoin ikke fungere korrekt. - + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + Advarsel: Netværket ser ikke ud til at være fuldt ud enige! Enkelte minere ser ud til at opleve problemer. + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + Advarsel: Vi ser ikke ud til at være fuldt ud enige med andre noder! Du kan være nødt til at opgradere, eller andre noder kan være nødt til at opgradere. + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Advarsel: fejl under læsning af wallet.dat! Alle nøgler blev læst korrekt, men transaktionsdata eller adressebogsposter kan mangle eller være forkerte. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - Advarsel: wallet.dat ødelagt, data reddet! Oprindelig wallet.net gemt som wallet.{timestamp}.bak i %s; hvis din saldo eller dine transaktioner er forkert, bør du genskabe fra en sikkerhedskopi. + Advarsel: wallet.dat ødelagt, data reddet! Oprindelig wallet.dat gemt som wallet.{timestamp}.bak i %s; hvis din saldo eller dine transaktioner er forkert, bør du genskabe fra en sikkerhedskopi. + + + (default: 1) + (standard: 1) + + + (default: wallet.dat) + (standard: wallet.dat) + + + <category> can be: + <kategori> kan være: - Attempt to recover private keys from a corrupt wallet.dat Forsøg at genskabe private nøgler fra ødelagt wallet.dat - + Myriadcoin Core Daemon + Myriadcoin Core-tjeneste + + Block creation options: Blokoprettelsestilvalg: - + Clear list of wallet transactions (diagnostic tool; implies -rescan) + Ryd liste over transaktioner i tegnebog (diagnoseværktøj; medfører -rescan) + + Connect only to the specified node(s) Tilslut kun til de(n) angivne knude(r) - + Connect through SOCKS proxy + Forbind gennem SOCKS-proxy + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + Forbind til JSON-RPC på <port> (standard: 8332 eller testnetværk: 18332) + + + Connection options: + Tilvalg for forbindelser: + + Corrupted block database detected Ødelagt blokdatabase opdaget - + Debugging/Testing options: + Tilvalg for fejlfinding/test: + + + Disable safemode, override a real safe mode event (default: 0) + Slå sikker tilstand fra, tilsidesæt hændelser fra sikker tilstand (standard: 0) + + Discover own IP address (default: 1 when listening and no -externalip) Find egen IP-adresse (standard: 1 når lytter og ingen -externalip) - + Do not load the wallet and disable wallet RPC calls + Indlæs ikke tegnebogen og slå tegnebogs-RPC-kald fra + + Do you want to rebuild the block database now? Ønsker du at genbygge blokdatabasen nu? - Error initializing block database Klargøring af blokdatabase mislykkedes - Error initializing wallet database environment %s! Klargøring af tegnebogsdatabasemiljøet %s mislykkedes! - Error loading block database Indlæsning af blokdatabase mislykkedes - Error opening block database Åbning af blokdatabase mislykkedes - Error: Disk space is low! Fejl: Mangel på ledig diskplads! - Error: Wallet locked, unable to create transaction! Fejl: Tegnebog låst, kan ikke oprette transaktion! - Error: system error: Fejl: systemfejl: - Failed to listen on any port. Use -listen=0 if you want this. Lytning på enhver port mislykkedes. Brug -listen=0, hvis du ønsker dette. - Failed to read block info Læsning af blokinformation mislykkedes - Failed to read block Læsning af blok mislykkedes - Failed to sync block index Synkronisering af blokindeks mislykkedes - Failed to write block index Skrivning af blokindeks mislykkedes - Failed to write block info Skrivning af blokinformation mislykkedes - Failed to write block Skrivning af blok mislykkedes - Failed to write file info Skriving af filinformation mislykkedes - Failed to write to coin database - Skrivning af myriadcoin-database mislykkedes + Skrivning af bitcoin-database mislykkedes - Failed to write transaction index Skrivning af transaktionsindeks mislykkedes - Failed to write undo data Skrivning af genskabelsesdata mislykkedes - + Fee per kB to add to transactions you send + Føj gebyr pr. kB til transaktioner, du sender + + + Fees smaller than this are considered zero fee (for relaying) (default: + Gebyrer mindre end dette opfattes som nul-gebyr (for videreførsler) (standard: + + Find peers using DNS lookup (default: 1 unless -connect) - Find ligeværdige ved DNS-opslag (standard: 1 hvis ikke -connect) + Find andre knuder ved DNS-opslag (standard: 1 hvis ikke -connect) + + + Force safe mode (default: 0) + Gennemtving sikker tilstand (standard: 0) - Generate coins (default: 0) - Generer myriadcoins (standard: 0) + Generér myriadcoins (standard: 0) - How many blocks to check at startup (default: 288, 0 = all) - Antal blokke som tjekkes ved opstart (0=alle, standard: 288) + Antal blokke som tjekkes ved opstart (standard: 288, 0=alle) - - How thorough the block verification is (0-4, default: 3) - Grundighed af efterprøvning af blokke (0-4, standard: 3) + If <category> is not supplied, output all debugging information. + Hvis <kategori> ikke angives, udskriv al fejlsøgningsinformation. + + + Importing... + Importerer … + + + Incorrect or no genesis block found. Wrong datadir for network? + Ukorrekt eller ingen tilblivelsesblok fundet. Forkert datamappe for netværk? + + + Invalid -onion address: '%s' + Ugyldig -onion adresse: "%s" - Not enough file descriptors available. For få tilgængelige fildeskriptorer. - + Prepend debug output with timestamp (default: 1) + Føj tidsstempel foran fejlsøgningsoutput (standard: 1) + + + RPC client options: + Tilvalg for RPC-klient: + + Rebuild block chain index from current blk000??.dat files Genbyg blokkædeindeks fra nuværende blk000??.dat filer - + Select SOCKS version for -proxy (4 or 5, default: 5) + Vælg SOCKS-version for -proxy (4 eller 5, standard: 5) + + + Set database cache size in megabytes (%d to %d, default: %d) + Sæt cache-størrelse for database i megabytes (%d til %d; standard: %d) + + + Set maximum block size in bytes (default: %d) + Sæt maksimum blokstørrelse i byte (standard: %d) + + Set the number of threads to service RPC calls (default: 4) Angiv antallet af tråde til at håndtere RPC-kald (standard: 4) - + Specify wallet file (within data directory) + Angiv tegnebogsfil (inden for datamappe) + + + Spend unconfirmed change when sending transactions (default: 1) + Brug ubekræftede byttepenge under afsendelse af transaktioner (standard: 1) + + + This is intended for regression testing tools and app development. + This is intended for regression testing tools and app development. + + + Usage (deprecated, use myriadcoin-cli): + Brug (forældet, brug myriadcoin-cli): + + Verifying blocks... - Efterprøver blokke... + Verificerer blokke … - Verifying wallet... - Efterprøver tegnebog... + Verificerer tegnebog … + + + Wait for RPC server to start + Vent på opstart af RPC-server + + + Wallet %s resides outside data directory %s + Tegnebog %1 findes uden for datamappe %s + + + Wallet options: + Tilvalg for tegnebog: + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + Advarsel: Forældet argument -debugnet ignoreret; brug -debug=net + + + You need to rebuild the database using -reindex to change -txindex + Du er nødt til at genopbygge databasen ved hjælp af -reindex for at ændre -txindex - Imports blocks from external blk000??.dat file Importerer blokke fra ekstern blk000??.dat fil - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) - Angiv nummeret af skriptefterprøvningstråde (op til 16, 0 = automatisk, <0 = efterlad det antal kerner tilgængelige, standard: 0) + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + Kan ikke opnå en lås på datamappe %s. Myriadcoin Core kører sansynligvis allerede. + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + Udfør kommando, når en relevant alarm modtages eller vi ser en virkelig lang udsplitning (%s i cmd erstattes af besked) + + + Output debugging information (default: 0, supplying <category> is optional) + Udskriv fejlsøgningsinformation (standard: 0, angivelse af <kategori> er valgfri) + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + Sæt maksimumstørrelse for højprioritet/lavgebyr-transaktioner i byte (standard: %d) - Information Information - - Invalid -tor address: '%s' - Ugyldig -tor adresse: '%s' - - - Invalid amount for -minrelaytxfee=<amount>: '%s' - Ugyldigt beløb til -minrelaytxfee=<beløb>:'%s' + Ugyldigt beløb til -minrelaytxfee=<beløb>: "%s" - Invalid amount for -mintxfee=<amount>: '%s' - Ugyldigt beløb til -mintxfee=<beløb>:'%s' + Ugyldigt beløb til -mintxfee=<beløb>: "%s" + + + Limit size of signature cache to <n> entries (default: 50000) + Begræns størrelsen på signaturcache til <n> indgange (standard: 50000) + + + Log transaction priority and fee per kB when mining blocks (default: 0) + Prioritet for transaktionslog og gebyr pr. kB under udvinding af blokke (standard: 0) - Maintain a full transaction index (default: 0) Vedligehold et komplet transaktionsindeks (standard: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Maksimum for modtagelsesbuffer pr. forbindelse, <n>*1000 bytes (standard: 5000) + Maksimum for modtagelsesbuffer pr. forbindelse, <n>*1000 byte (standard: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Maksimum for afsendelsesbuffer pr. forbindelse, <n>*1000 bytes (standard: 1000) + Maksimum for afsendelsesbuffer pr. forbindelse, <n>*1000 byte (standard: 1000) - Only accept block chain matching built-in checkpoints (default: 1) - Accepter kun blokkæde, som matcher indbyggede kontrolposter (standard: 1) + Acceptér kun blokkæde, som matcher indbyggede kontrolposter (standard: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Tilslut kun til knuder i netværk <net> (IPv4, IPv6 eller Tor) - - Output extra debugging information. Implies all other -debug* options - Skriv ekstra fejlsøgningsinformation. Indebærer alle andre -debug* tilvalg + Print block on startup, if found in block index + Udskriv blok under opstart, hvis den findes i blokindeks - - Output extra network debugging information - Skriv ekstra netværksfejlsøgningsinformation + Print block tree on startup (default: 0) + Udskriv bloktræ under startop (standard: 0) - - Prepend debug output with timestamp - Tilføj fejlsøgningsoutput med tidsstempel + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + Tilvalg for RPC SSL: (se Myriadcoin Wiki for instruktioner i SSL-opstart) - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - SSL-indstillinger: (se Bitcoin Wiki for SSL-opsætningsinstruktioner) + RPC server options: + Tilvalg for RPC-server: - - Select the version of socks proxy to use (4-5, default: 5) - Angiv version af SOCKS-proxyen (4-5, standard: 5) + Randomly drop 1 of every <n> network messages + Drop tilfældigt 1 ud af hver <n> netværksbeskeder + + + Randomly fuzz 1 of every <n> network messages + Slør tilfældigt 1 ud af hver <n> netværksbeskeder + + + Run a thread to flush wallet periodically (default: 1) + Kør en tråd for at rydde tegnebog periodisk (standard: 1) + + + SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + SSL-indstillinger: (se Myriadcoin Wiki for SSL-opsætningsinstruktioner) + + + Send command to Myriadcoin Core + Send kommando til Myriadcoin Core - Send trace/debug info to console instead of debug.log file Send sporings-/fejlsøgningsinformation til konsollen i stedet for debug.log filen - - Send trace/debug info to debugger - Send sporings-/fejlsøgningsinformation til fejlsøgningprogrammet - - - - Set maximum block size in bytes (default: 250000) - Angiv maksimumblokstørrelse i bytes (standard: 250000) - - - Set minimum block size in bytes (default: 0) - Angiv minimumsblokstørrelse i bytes (standard: 0) + Angiv minimumsblokstørrelse i byte (standard: 0) + + + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + Sætter DB_PRIVATE-flaget i tegnebogens db-miljø (standard: 1) + + + Show all debugging options (usage: --help -help-debug) + Vis alle tilvalg for fejlsøgning (brug: --help -help-debug) + + + Show benchmark information (default: 0) + Vis information om ydelsesmåling (standard: 0) - Shrink debug.log file on client startup (default: 1 when no -debug) Formindsk debug.log filen ved klientopstart (standard: 1 hvis ikke -debug) - Signing transaction failed Underskrift af transaktion mislykkedes - Specify connection timeout in milliseconds (default: 5000) Angiv tilslutningstimeout i millisekunder (standard: 5000) - + Start Myriadcoin Core Daemon + Start Myriadcoin Core-tjeneste + + System error: Systemfejl: - Transaction amount too small Transaktionsbeløb er for lavt - Transaction amounts must be positive Transaktionsbeløb skal være positive - Transaction too large Transaktionen er for stor - Use UPnP to map the listening port (default: 0) - Forsøg at bruge UPnP til at konfigurere den lyttende port (standard: 0) + Brug UPnP til at konfigurere den lyttende port (standard: 0) - Use UPnP to map the listening port (default: 1 when listening) - Forsøg at bruge UPnP til at konfigurere den lyttende port (standard: 1 når lytter) + Brug UPnP til at konfigurere den lyttende port (standard: 1 under lytning) - - Use proxy to reach tor hidden services (default: same as -proxy) - Brug proxy til at tilgå Tor Hidden Services (standard: som -proxy) - - - Username for JSON-RPC connections Brugernavn til JSON-RPC-forbindelser - Warning Advarsel - Warning: This version is obsolete, upgrade required! Advarsel: Denne version er forældet, opgradering påkrævet! - - You need to rebuild the databases using -reindex to change -txindex - Du skal genbygge databaserne med -reindex for at ændre -txindex + Zapping all transactions from wallet... + Zapper alle transaktioner fra tegnebog … + + + on startup + under opstart + + + version + version - wallet.dat corrupt, salvage failed wallet.dat ødelagt, redning af data mislykkedes - Password for JSON-RPC connections Adgangskode til JSON-RPC-forbindelser - Allow JSON-RPC connections from specified IP address Tillad JSON-RPC-forbindelser fra bestemt IP-adresse - Send commands to node running on <ip> (default: 127.0.0.1) Send kommandoer til knude, der kører på <ip> (standard: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) Udfør kommando, når den bedste blok ændres (%s i kommandoen erstattes med blokhash) - Upgrade wallet to latest format Opgrader tegnebog til seneste format - Set key pool size to <n> (default: 100) Angiv nøglepoolstørrelse til <n> (standard: 100) - Rescan the block chain for missing wallet transactions Gennemsøg blokkæden for manglende tegnebogstransaktioner - Use OpenSSL (https) for JSON-RPC connections Brug OpenSSL (https) for JSON-RPC-forbindelser - Server certificate file (default: server.cert) Servercertifikat-fil (standard: server.cert) - Server private key (default: server.pem) Serverens private nøgle (standard: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Acceptable ciphers (standard: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - This help message Denne hjælpebesked - Unable to bind to %s on this computer (bind returned error %d, %s) Kunne ikke tildele %s på denne computer (bind returnerede fejl %d, %s) - - Connect through socks proxy - Tilslut via SOCKS-proxy - - - Allow DNS lookups for -addnode, -seednode and -connect Tillad DNS-opslag for -addnode, -seednode og -connect - Loading addresses... - Indlæser adresser... + Indlæser adresser … - Error loading wallet.dat: Wallet corrupted Fejl ved indlæsning af wallet.dat: Tegnebog ødelagt - Error loading wallet.dat: Wallet requires newer version of Myriadcoin Fejl ved indlæsning af wallet.dat: Tegnebog kræver en nyere version af Myriadcoin - Wallet needed to be rewritten: restart Myriadcoin to complete Det var nødvendigt at genskrive tegnebogen: genstart Myriadcoin for at gennemføre - Error loading wallet.dat Fejl ved indlæsning af wallet.dat - Invalid -proxy address: '%s' - Ugyldig -proxy adresse: '%s' + Ugyldig -proxy adresse: "%s" - Unknown network specified in -onlynet: '%s' - Ukendt netværk anført i -onlynet: '%s' + Ukendt netværk anført i -onlynet: "%s" - Unknown -socks proxy version requested: %i Ukendt -socks proxy-version: %i - Cannot resolve -bind address: '%s' - Kan ikke finde -bind adressen: '%s' + Kan ikke finde -bind adressen: "%s" - Cannot resolve -externalip address: '%s' - Kan ikke finde -externalip adressen: '%s' + Kan ikke finde -externalip adressen: "%s" - Invalid amount for -paytxfee=<amount>: '%s' - Ugyldigt beløb for -paytxfee=<amount>: '%s' + Ugyldigt beløb for -paytxfee=<beløb>: "%s" - Invalid amount Ugyldigt beløb - Insufficient funds Manglende dækning - Loading block index... - Indlæser blokindeks... + Indlæser blokindeks … - Add a node to connect to and attempt to keep the connection open Tilføj en knude til at forbinde til og forsøg at holde forbindelsen åben - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - Kunne ikke tildele %s på denne computer. Myriadcoin kører sikkert allerede. - - - - Fee per KB to add to transactions you send - Gebyr pr. kB, som skal tilføjes til transaktioner, du sender - - - Loading wallet... - Indlæser tegnebog... + Indlæser tegnebog … - Cannot downgrade wallet Kan ikke nedgradere tegnebog - Cannot write default address Kan ikke skrive standardadresse - Rescanning... - Genindlæser... + Genindlæser … - Done loading Indlæsning gennemført - To use the %s option For at bruge %s mulighed - Error Fejl - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. - Du skal angive rpcpassword=<password> i konfigurationsfilen: + Du skal angive rpcpassword=<adgangskode> i konfigurationsfilen: %s Hvis filen ikke eksisterer, opret den og giv ingen andre end ejeren læserettighed. diff --git a/src/qt/locale/bitcoin_de.ts b/src/qt/locale/bitcoin_de.ts index 4b54d43f..3328277f 100644 --- a/src/qt/locale/bitcoin_de.ts +++ b/src/qt/locale/bitcoin_de.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - Über Myriadcoin + About Myriadcoin Core + Über Myriadcoin Core - - <b>Myriadcoin</b> version - <b>Myriadcoin</b>-Version + <b>Myriadcoin Core</b> version + <b>"Myriadcoin Core"</b>-Version - This is experimental software. @@ -25,156 +21,131 @@ Dies ist experimentelle Software. Veröffentlicht unter der MIT/X11-Softwarelizenz, siehe beiligende Datei COPYING oder http://www.opensource.org/licenses/mit-license.php. -Dieses Produkt enthält Software, die vom OpenSSL-Projekt zur Verwendung im OpenSSL-Toolkit (http://www.openssl.org/) entwickelt wurde, sowie kryptographische Software geschrieben von Eric Young (eay@cryptsoft.com) und UPnP-Software geschrieben von Thomas Bernard. +Dieses Produkt enthält Software, die vom OpenSSL-Projekt zur Verwendung im OpenSSL-Toolkit (https://www.openssl.org) entwickelt wird, sowie von Eric Young (eay@cryptsoft.com) geschriebene kryptographische Software und von Thomas Bernard geschriebene UPnP-Software. - Copyright - Copyright + Urheberrecht - - The Myriadcoin developers - Die Myriadcoinentwickler + The Myriadcoin Core developers + Die "Myriadcoin Core"-Entwickler + + + (%1-bit) + (%1-Bit) AddressBookPage - - Address Book - Adressbuch - - - Double-click to edit address or label - Doppelklicken, um die Adresse oder die Bezeichnung zu bearbeiten + Doppelklick zum Bearbeiten der Adresse oder der Bezeichnung - Create a new address Eine neue Adresse erstellen - + &New + &Neu + + Copy the currently selected address to the system clipboard Ausgewählte Adresse in die Zwischenablage kopieren - - &New Address - &Neue Adresse + &Copy + &Kopieren - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Dies sind Ihre Myriadcoin-Adressen zum Empfangen von Zahlungen. Es steht Ihnen frei, jedem Absender eine Andere mitzuteilen, um einen besseren Überblick über eingehende Zahlungen zu erhalten. + C&lose + &Schließen - &Copy Address Adresse &kopieren - - Show &QR Code - &QR-Code anzeigen - - - - Sign a message to prove you own a Myriadcoin address - Eine Nachricht signieren, um den Besitz einer Myriadcoin-Adresse zu beweisen - - - - Sign &Message - Nachricht &signieren - - - Delete the currently selected address from the list - Die ausgewählte Adresse aus der Liste entfernen. + Ausgewählte Adresse aus der Liste entfernen - Export the data in the current tab to a file Daten der aktuellen Ansicht in eine Datei exportieren - &Export E&xportieren - - Verify a message to ensure it was signed with a specified Myriadcoin address - Eine Nachricht verifizieren, um sicherzustellen, dass diese mit einer angegebenen Myriadcoin-Adresse signiert wurde - - - - &Verify Message - Nachricht &verifizieren - - - &Delete &Löschen - - These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - Dies sind Ihre Myriadcoin-Adressen zum Tätigen von Überweisungen. Bitte prüfen Sie den Betrag und die Empfangsadresse, bevor Sie Myriadcoins überweisen. + Choose the address to send coins to + Wählen Sie die Adresse aus, an die Sie Bitcoins überweisen möchten + + + Choose the address to receive coins with + Wählen Sie die Adresse aus, über die Sie Bitcoins empfangen wollen + + + C&hoose + &Auswählen + + + Sending addresses + Zahlungsadressen + + + Receiving addresses + Empfangsadressen + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + Dies sind ihre Bitcoin-Adressen zum Tätigen von Überweisungen. Bitte prüfen Sie den Betrag und die Empfangsadresse, bevor Sie Bitcoins überweisen. + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Dies sind ihre Bitcoin-Adressen zum Empfangen von Zahlungen. Es wird empfohlen für jede Transaktion eine neue Empfangsadresse zu verwenden. - Copy &Label &Bezeichnung kopieren - &Edit &Editieren - - Send &Coins - Myriadcoins &überweisen + Export Address List + Addressliste exportieren - - Export Address Book Data - Adressbuch exportieren - - - Comma separated file (*.csv) Kommagetrennte-Datei (*.csv) - - Error exporting - Fehler beim Exportieren + Exporting Failed + Exportieren fehlgeschlagen - - Could not write to file %1. - Konnte nicht in Datei %1 schreiben. + There was an error trying to save the address list to %1. + Beim Speichern der Adressliste nach %1 ist ein Fehler aufgetreten. AddressTableModel - Label Bezeichnung - Address Adresse - (no label) (keine Bezeichnung) @@ -182,460 +153,393 @@ Dieses Produkt enthält Software, die vom OpenSSL-Projekt zur Verwendung im Open AskPassphraseDialog - Passphrase Dialog Passphrasendialog - Enter passphrase Passphrase eingeben - New passphrase Neue Passphrase - Repeat new passphrase Neue Passphrase wiederholen - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Geben Sie die neue Passphrase für die Brieftasche ein.<br>Bitte benutzen Sie eine Passphrase bestehend aus <b>10 oder mehr zufälligen Zeichen</b> oder <b>8 oder mehr Wörtern</b>. + Geben Sie die neue Passphrase für die Wallet ein.<br>Bitte benutzen Sie eine Passphrase bestehend aus <b>10 oder mehr zufälligen Zeichen</b> oder <b>8 oder mehr Wörtern</b>. - Encrypt wallet - Brieftasche verschlüsseln + Wallet verschlüsseln - This operation needs your wallet passphrase to unlock the wallet. - Dieser Vorgang benötigt Ihre Passphrase, um die Brieftasche zu entsperren. + Dieser Vorgang benötigt ihre Passphrase, um die Wallet zu entsperren. - Unlock wallet - Brieftasche entsperren + Wallet entsperren - This operation needs your wallet passphrase to decrypt the wallet. - Dieser Vorgang benötigt Ihre Passphrase, um die Brieftasche zu entschlüsseln. + Dieser Vorgang benötigt ihre Passphrase, um die Wallet zu entschlüsseln. - Decrypt wallet - Brieftasche entschlüsseln + Wallet entschlüsseln - Change passphrase Passphrase ändern - Enter the old and new passphrase to the wallet. - Geben Sie die alte und neue Passphrase der Brieftasche ein. + Geben Sie die alte und neue Wallet-Passphrase ein. - Confirm wallet encryption - Verschlüsselung der Brieftasche bestätigen + Wallet-Verschlüsselung bestätigen - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! - Warnung: Wenn Sie Ihre Brieftasche verschlüsseln und Ihre Passphrase verlieren, werden Sie <b>alle Ihre Myriadcoins verlieren</b>! + Warnung: Wenn Sie ihre Wallet verschlüsseln und ihre Passphrase verlieren, werden Sie <b>alle ihre Bitcoins verlieren</b>! - Are you sure you wish to encrypt your wallet? - Sind Sie sich sicher, dass Sie Ihre Brieftasche verschlüsseln möchten? + Sind Sie sich sicher, dass Sie ihre Wallet verschlüsseln möchten? - 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. - WICHTIG: Alle vorherigen Sicherungen Ihrer Brieftasche sollten durch die neu erzeugte, verschlüsselte Brieftasche ersetzt werden. Aus Sicherheitsgründen werden vorherige Sicherungen der unverschlüsselten Brieftasche nutzlos, sobald Sie die neue, verschlüsselte Brieftasche verwenden. + 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. - - Warning: The Caps Lock key is on! Warnung: Die Feststelltaste ist aktiviert! - - Wallet encrypted - Brieftasche verschlüsselt + Wallet verschlüsselt - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. - Myriadcoin wird jetzt beendet, um den Verschlüsselungsprozess abzuschließen. Bitte beachten Sie, dass die Verschlüsselung Ihrer Brieftasche nicht vollständig vor Diebstahl Ihrer Myriadcoins durch Schadsoftware schützt, die Ihren Computer befällt. + Myriadcoin wird jetzt beendet, um den Verschlüsselungsprozess abzuschließen. Bitte beachten Sie, dass die Wallet-Verschlüsselung nicht vollständig vor Diebstahl ihrer Bitcoins durch Schadsoftware schützt, die ihren Computer befällt. - - - - Wallet encryption failed - Verschlüsselung der Brieftasche fehlgeschlagen + Wallet-Verschlüsselung fehlgeschlagen - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Die Verschlüsselung der Brieftasche ist aufgrund eines internen Fehlers fehlgeschlagen. Ihre Brieftasche wurde nicht verschlüsselt. + Die Wallet-Verschlüsselung ist aufgrund eines internen Fehlers fehlgeschlagen. Ihre Wallet wurde nicht verschlüsselt. - - The supplied passphrases do not match. Die eingegebenen Passphrasen stimmen nicht überein. - Wallet unlock failed - Entsperrung der Brieftasche fehlgeschlagen + Wallet-Entsperrung fehlgeschlagen - - - The passphrase entered for the wallet decryption was incorrect. - Die eingegebene Passphrase zum Entschlüsseln der Brieftasche war nicht korrekt. + Die eingegebene Passphrase zur Wallet-Entschlüsselung war nicht korrekt. - Wallet decryption failed - Entschlüsselung der Brieftasche fehlgeschlagen + Wallet-Entschlüsselung fehlgeschlagen - Wallet passphrase was successfully changed. - Die Passphrase der Brieftasche wurde erfolgreich geändert. + Die Wallet-Passphrase wurde erfolgreich geändert. BitcoinGUI - Sign &message... Nachricht s&ignieren... - Synchronizing with network... Synchronisiere mit Netzwerk... - &Overview &Übersicht - - Show general overview of wallet - Allgemeine Übersicht der Brieftasche anzeigen + Node + Knoten + + + Show general overview of wallet + Allgemeine Wallet-Übersicht anzeigen - &Transactions &Transaktionen - Browse transaction history Transaktionsverlauf durchsehen - - Edit the list of stored addresses and labels - Liste der gespeicherten Zahlungsadressen und Bezeichnungen bearbeiten - - - - Show the list of addresses for receiving payments - Liste der Empfangsadressen anzeigen - - - E&xit &Beenden - Quit application Anwendung beenden - Show information about Myriadcoin Informationen über Myriadcoin anzeigen - About &Qt Über &Qt - Show information about Qt Informationen über Qt anzeigen - &Options... &Konfiguration... - &Encrypt Wallet... - Brieftasche &verschlüsseln... + Wallet &verschlüsseln... - &Backup Wallet... - Brieftasche &sichern... + Wallet &sichern... - &Change Passphrase... Passphrase &ändern... - + &Sending addresses... + &Zahlungsadressen... + + + &Receiving addresses... + &Empfangsadressen... + + + Open &URI... + &URI öffnen... + + Importing blocks from disk... - Importiere Blöcke von Laufwerk... + Importiere Blöcke von Datenträger... - Reindexing blocks on disk... - Reindiziere Blöcke auf Laufwerk... + Reindiziere Blöcke auf Datenträger... - Send coins to a Myriadcoin address - Myriadcoins an eine Myriadcoin-Adresse überweisen + Bitcoins an eine Bitcoin-Adresse überweisen - Modify configuration options for Myriadcoin Die Konfiguration des Clients bearbeiten - Backup wallet to another location - Eine Sicherungskopie der Brieftasche erstellen und abspeichern + Eine Wallet-Sicherungskopie erstellen und abspeichern - Change the passphrase used for wallet encryption - Ändert die Passphrase, die für die Verschlüsselung der Brieftasche benutzt wird + Ändert die Passphrase, die für die Wallet-Verschlüsselung benutzt wird - &Debug window &Debugfenster - Open debugging and diagnostic console Debugging- und Diagnosekonsole öffnen - &Verify message... Nachricht &verifizieren... - - Myriadcoin Myriadcoin - Wallet - Brieftasche + Wallet - &Send - Überweisen + &Überweisen - &Receive &Empfangen - - &Addresses - &Adressen - - - - &About Myriadcoin - &Über Myriadcoin - - - &Show / Hide &Anzeigen / Verstecken - Show or hide the main Window Das Hauptfenster anzeigen oder verstecken - Encrypt the private keys that belong to your wallet - Verschlüsselt die zu Ihrer Brieftasche gehörenden privaten Schlüssel + Verschlüsselt die zu ihrer Wallet gehörenden privaten Schlüssel - Sign messages with your Myriadcoin addresses to prove you own them - Nachrichten signieren, um den Besitz Ihrer Myriadcoin-Adressen zu beweisen + Nachrichten signieren, um den Besitz ihrer Bitcoin-Adressen zu beweisen - Verify messages to ensure they were signed with specified Myriadcoin addresses - Nachrichten verifizieren, um sicherzustellen, dass diese mit den angegebenen Myriadcoin-Adressen signiert wurden + Nachrichten verifizieren, um sicherzustellen, dass diese mit den angegebenen Bitcoin-Adressen signiert wurden - &File &Datei - &Settings &Einstellungen - &Help &Hilfe - Tabs toolbar Registerkartenleiste - - [testnet] [Testnetz] - - Myriadcoin client - Myriadcoin-Client - - - - %n active connection(s) to Myriadcoin network - %n aktive Verbindung zum Myriadcoin-Netzwerk%n aktive Verbindungen zum Myriadcoin-Netzwerk + Myriadcoin Core + Myriadcoin Core + + + Request payments (generates QR codes and myriadcoin: URIs) + Zahlungen anfordern (erzeugt QR-Codes und "myriadcoin:"-URIs) + + + &About Myriadcoin Core + &Über Myriadcoin Core + + + Show the list of used sending addresses and labels + Liste verwendeter Zahlungsadressen und Bezeichnungen anzeigen + + + Show the list of used receiving addresses and labels + Liste verwendeter Empfangsadressen und Bezeichnungen anzeigen + + + Open a myriadcoin: URI or payment request + Eine "myriadcoin:"-URI oder Zahlungsanforderung öffnen + + + &Command-line options + &Kommandozeilenoptionen + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + Zeige den "Myriadcoin Core"-Hilfetext, um eine Liste mit möglichen Kommandozeilenoptionen zu erhalten + + + Myriadcoin client + Bitcoin-Client + + + %n active connection(s) to Myriadcoin network + %n aktive Verbindung zum Bitcoin-Netzwerk%n aktive Verbindungen zum Bitcoin-Netzwerk - No block source available... Keine Blockquelle verfügbar... - Processed %1 of %2 (estimated) blocks of transaction history. %1 von (geschätzten) %2 Blöcken des Transaktionsverlaufs verarbeitet. - Processed %1 blocks of transaction history. %1 Blöcke des Transaktionsverlaufs verarbeitet. - %n hour(s) %n Stunde%n Stunden - %n day(s) %n Tag%n Tage - %n week(s) %n Woche%n Wochen - + %1 and %2 + %1 und %2 + + + %n year(s) + %n Jahr%n Jahre + + %1 behind %1 im Rückstand - Last received block was generated %1 ago. Der letzte empfangene Block ist %1 alt. - Transactions after this will not yet be visible. Transaktionen hiernach werden noch nicht angezeigt. - Error Fehler - Warning Warnung - Information Hinweis - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - Die Transaktion übersteigt das Größenlimit. Sie können sie trotzdem senden, wenn Sie eine zusätzliche Transaktionsgebühr in Höhe von %1 zahlen. Diese wird an die Knoten verteilt, die Ihre Transaktion bearbeiten und unterstützt damit das Myriadcoin-Netzwerk. Möchten Sie die Gebühr bezahlen? - - - Up to date Auf aktuellem Stand - Catching up... Hole auf... - - Confirm transaction fee - Transaktionsgebühr bestätigen - - - Sent transaction Gesendete Transaktion - Incoming transaction Eingehende Transaktion - Date: %1 Amount: %2 Type: %3 @@ -647,29 +551,14 @@ Typ: %3 Adresse: %4 - - - URI handling - URI Verarbeitung - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - URI kann nicht analysiert werden! Dies kann durch eine ungültige Myriadcoin-Adresse oder fehlerhafte URI-Parameter verursacht werden. - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Brieftasche ist <b>verschlüsselt</b> und aktuell <b>entsperrt</b> + Wallet ist <b>verschlüsselt</b> und aktuell <b>entsperrt</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> - Brieftasche ist <b>verschlüsselt</b> und aktuell <b>gesperrt</b> + Wallet ist <b>verschlüsselt</b> und aktuell <b>gesperrt</b> - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. Ein schwerer Fehler ist aufgetreten. Myriadcoin kann nicht stabil weiter ausgeführt werden und wird beendet. @@ -677,329 +566,647 @@ Adresse: %4 ClientModel - Network Alert Netzwerkalarm + + CoinControlDialog + + Coin Control Address Selection + "Coin Control"-Adressauswahl + + + Quantity: + Anzahl: + + + Bytes: + Byte: + + + Amount: + Betrag: + + + Priority: + Priorität: + + + Fee: + Gebühr: + + + Low Output: + Zu geringer Ausgabebetrag: + + + After Fee: + Abzüglich Gebühr: + + + Change: + Wechselgeld: + + + (un)select all + Alles (de)selektieren + + + Tree mode + Baumansicht + + + List mode + Listenansicht + + + Amount + Betrag + + + Address + Adresse + + + Date + Datum + + + Confirmations + Bestätigungen + + + Confirmed + Bestätigt + + + Priority + Priorität + + + Copy address + Adresse kopieren + + + Copy label + Bezeichnung kopieren + + + Copy amount + Betrag kopieren + + + Copy transaction ID + Transaktions-ID kopieren + + + Lock unspent + Nicht ausgegebenen Betrag sperren + + + Unlock unspent + Nicht ausgegebenen Betrag entsperren + + + Copy quantity + Anzahl kopieren + + + Copy fee + Gebühr kopieren + + + Copy after fee + Abzüglich Gebühr kopieren + + + Copy bytes + Byte kopieren + + + Copy priority + Priorität kopieren + + + Copy low output + Zu geringen Ausgabebetrag kopieren + + + Copy change + Wechselgeld kopieren + + + highest + am höchsten + + + higher + höher + + + high + hoch + + + medium-high + mittel-hoch + + + medium + mittel + + + low-medium + niedrig-mittel + + + low + niedrig + + + lower + niedriger + + + lowest + am niedrigsten + + + (%1 locked) + (%1 gesperrt) + + + none + keine + + + Dust + "Dust" + + + yes + ja + + + no + nein + + + This label turns red, if the transaction size is greater than 1000 bytes. + Diese Bezeichnung wird rot, wenn die Transaktion größer als 1000 Byte ist. + + + This means a fee of at least %1 per kB is required. + Das bedeutet, dass eine Gebühr von mindestens %1 pro kB erforderlich ist. + + + Can vary +/- 1 byte per input. + Kann um +/- 1 Byte pro Eingabe variieren. + + + Transactions with higher priority are more likely to get included into a block. + Transaktionen mit höherer Priorität haben eine größere Chance in einen Block aufgenommen zu werden. + + + This label turns red, if the priority is smaller than "medium". + Diese Bezeichnung wird rot, wenn die Priorität niedriger als "mittel" ist. + + + This label turns red, if any recipient receives an amount smaller than %1. + Diese Bezeichnung wird rot, wenn irgendein Empfänger einen Betrag kleiner als %1 erhält. + + + This means a fee of at least %1 is required. + Das bedeutet, dass eine Gebühr von mindestens %1 erforderlich ist. + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + Beträge kleiner als das 0,546-fache der niedrigsten Vermittlungsgebühr werden als "Dust" angezeigt. + + + This label turns red, if the change is smaller than %1. + Diese Bezeichnung wird rot, wenn das Wechselgeld weniger als %1 ist. + + + (no label) + (keine Bezeichnung) + + + change from %1 (%2) + Wechselgeld von %1 (%2) + + + (change) + (Wechselgeld) + + EditAddressDialog - Edit Address Adresse bearbeiten - &Label &Bezeichnung - - The label associated with this address book entry - Die Bezeichnung dieses Adressbuchseintrags + The label associated with this address list entry + Bezeichnung, die dem Adresslisteneintrag zugeordnet ist. + + + The address associated with this address list entry. This can only be modified for sending addresses. + Adresse, die dem Adresslisteneintrag zugeordnet ist. Diese kann nur bei Zahlungsadressen verändert werden. - &Address &Adresse - - The address associated with this address book entry. This can only be modified for sending addresses. - Die Adresse des Adressbucheintrags. Diese kann nur für Zahlungsadressen bearbeitet werden. - - - New receiving address Neue Empfangsadresse - New sending address Neue Zahlungsadresse - Edit receiving address Empfangsadresse bearbeiten - Edit sending address Zahlungsadresse bearbeiten - The entered address "%1" is already in the address book. Die eingegebene Adresse "%1" befindet sich bereits im Adressbuch. - The entered address "%1" is not a valid Myriadcoin address. - Die eingegebene Adresse "%1" ist keine gültige Myriadcoin-Adresse. + Die eingegebene Adresse "%1" ist keine gültige Bitcoin-Adresse. - Could not unlock wallet. - Die Brieftasche konnte nicht entsperrt werden. + Wallet konnte nicht entsperrt werden. - New key generation failed. - Generierung eines neuen Schlüssels fehlgeschlagen. + Erzeugung eines neuen Schlüssels fehlgeschlagen. - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt - Myriadcoin-Qt + A new data directory will be created. + Es wird ein neues Datenverzeichnis angelegt. + + + name + Name + + + Directory already exists. Add %1 if you intend to create a new directory here. + Verzeichnis existiert bereits. Fügen Sie %1 an, wenn Sie beabsichtigen hier ein neues Verzeichnis anzulegen. + + + Path already exists, and is not a directory. + Pfad existiert bereits und ist kein Verzeichnis. + + + Cannot create data directory here. + Datenverzeichnis kann hier nicht angelegt werden. + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + Myriadcoin Core - Kommandozeilenoptionen + + + Myriadcoin Core + Myriadcoin Core - version Version - Usage: Benutzung: - command-line options Kommandozeilenoptionen - UI options UI-Optionen - Set language, for example "de_DE" (default: system locale) - Sprache festlegen, z.B. "de_DE" (Standard: System Locale) + Sprache festlegen, z.B. "de_DE" (Standard: Systemstandard) - Start minimized Minimiert starten - + Set SSL root certificates for payment request (default: -system-) + SSL-Wurzelzertifikate für Zahlungsanforderungen festlegen (Standard: Systemstandard) + + Show splash screen on startup (default: 1) Startbildschirm beim Starten anzeigen (Standard: 1) + + Choose data directory on startup (default: 0) + Datenverzeichnis beim Starten auswählen (Standard: 0) + + + + Intro + + Welcome + Willkommen + + + Welcome to Myriadcoin Core. + Willkommen zu Myriadcoin Core. + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + Da Sie das Programm gerade zum ersten Mal starten, können Sie nun auswählen wo Myriadcoin Core seine Daten ablegen soll. + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + Myriadcoin Core wird eine Kopie der Blockkette herunterladen und speichern. Mindestens %1GB Daten werden in diesem Verzeichnis abgelegt und die Datenmenge wächst über die Zeit an. Auch die Wallet wird in diesem Verzeichnis abgelegt. + + + Use the default data directory + Standard-Datenverzeichnis verwenden + + + Use a custom data directory: + Ein benutzerdefiniertes Datenverzeichnis verwenden: + + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" can not be created. + Fehler: Angegebenes Datenverzeichnis "%1" kann nicht angelegt werden. + + + Error + Fehler + + + GB of free space available + GB freier Speicherplatz verfügbar + + + (of %1GB needed) + (von benötigten %1GB) + + + + OpenURIDialog + + Open URI + URI öffnen + + + Open payment request from URI or file + Zahlungsanforderung über URI oder aus Datei öffnen + + + URI: + URI: + + + Select payment request file + Zahlungsanforderungsdatei auswählen + + + Select payment request file to open + Zu öffnende Zahlungsanforderungsdatei auswählen + OptionsDialog - Options - Erweiterte Einstellungen + Konfiguration - &Main &Allgemein - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. - Optionale Transaktionsgebühr pro KB, die sicherstellt, dass Ihre Transaktionen schnell bearbeitet werden. Die meisten Transaktionen sind 1 kB groß. + Optionale Transaktionsgebühr pro kB, die sicherstellt, dass ihre Transaktionen schnell bearbeitet werden. Die meisten Transaktionen sind 1 kB groß. - Pay transaction &fee Transaktions&gebühr bezahlen - Automatically start Myriadcoin after logging in to the system. Myriadcoin nach der Anmeldung am System automatisch ausführen. - &Start Myriadcoin on system login &Starte Myriadcoin nach Systemanmeldung - + Size of &database cache + Größe des &Datenbankcaches + + + MB + MB + + + Number of script &verification threads + Anzahl an Skript-&Verifizierungs-Threads + + + Connect to the Myriadcoin network through a SOCKS proxy. + Über einen SOCKS-Proxy mit dem Bitcoin-Netzwerk verbinden. + + + &Connect through SOCKS proxy (default proxy): + Über einen SOCKS-Proxy &verbinden (Standardproxy): + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + IP-Adresse des Proxies (z.B. IPv4: 127.0.0.1 / IPv6: ::1) + + + 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 |. + 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. + + + Third party transaction URLs + Externe Transaktions-URLs + + + Active command-line options that override above options: + Aktive Kommandozeilenoptionen, die obige Konfiguration überschreiben: + + Reset all client options to default. Setzt die Clientkonfiguration auf Standardwerte zurück. - &Reset Options Konfiguration &zurücksetzen - &Network &Netzwerk - - Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. - Automatisch den Myriadcoin-Clientport auf dem Router öffnen. Dies funktioniert nur, wenn Ihr Router UPnP unterstützt und dies aktiviert ist. + (0 = auto, <0 = leave that many cores free) + (0 = automatisch, <0 = so viele Kerne frei lassen) + + + W&allet + W&allet + + + Expert + Erweiterte Wallet-Optionen + + + Enable coin &control features + "&Coin Control"-Funktionen aktivieren + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + Wenn Sie das Ausgeben von unbestätigtem Wechselgeld deaktivieren, kann das Wechselgeld einer Transaktion nicht verwendet werden, bis es mindestens eine Bestätigung erhalten hat. Dies wirkt sich auf die Berechnung des Kontostands aus. + + + &Spend unconfirmed change + &Unbestätigtes Wechselgeld darf ausgegeben werden + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. + Automatisch den Bitcoin-Clientport auf dem Router öffnen. Dies funktioniert nur, wenn ihr Router UPnP unterstützt und dies aktiviert ist. - Map port using &UPnP Portweiterleitung via &UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - Über einen SOCKS-Proxy mit dem Myriadcoin-Netzwerk verbinden (z.B. beim Verbinden über Tor). - - - - &Connect through SOCKS proxy: - Über einen SOCKS-Proxy &verbinden: - - - Proxy &IP: Proxy-&IP: - - IP address of the proxy (e.g. 127.0.0.1) - IP-Adresse des Proxies (z.B. 127.0.0.1) - - - &Port: &Port: - Port of the proxy (e.g. 9050) Port des Proxies (z.B. 9050) - SOCKS &Version: SOCKS-&Version: - SOCKS version of the proxy (e.g. 5) SOCKS-Version des Proxies (z.B. 5) - &Window &Programmfenster - Show only a tray icon after minimizing the window. Nur ein Symbol im Infobereich anzeigen, nachdem das Programmfenster minimiert wurde. - &Minimize to the tray instead of the taskbar In den Infobereich anstatt in die Taskleiste &minimieren - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. Minimiert die Anwendung anstatt sie zu beenden wenn das Fenster geschlossen wird. Wenn dies aktiviert ist, müssen Sie das Programm über "Beenden" im Menü schließen. - M&inimize on close Beim Schließen m&inimieren - &Display - &Anzeige + Anzei&ge - User Interface &language: &Sprache der Benutzeroberfläche: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. Legt die Sprache der Benutzeroberfläche fest. Diese Einstellung wird erst nach einem Neustart von Myriadcoin aktiv. - &Unit to show amounts in: &Einheit der Beträge: - Choose the default subdivision unit to show in the interface and when sending coins. - Wählen Sie die Standarduntereinheit, die in der Benutzeroberfläche und beim Überweisen von Myriadcoins angezeigt werden soll. + Wählen Sie die standardmäßige Untereinheit, die in der Benutzeroberfläche und beim Überweisen von Bitcoins angezeigt werden soll. - Whether to show Myriadcoin addresses in the transaction list or not. - Legt fest, ob Myriadcoin-Adressen in der Transaktionsliste angezeigt werden. + Legt fest, ob Bitcoin-Adressen im Transaktionsverlauf angezeigt werden. - &Display addresses in transaction list - Adressen in der Transaktionsliste &anzeigen + Adressen im Transaktionsverlauf &anzeigen + + + Whether to show coin control features or not. + Legt fest, ob die "Coin Control"-Funktionen angezeigt werden. - &OK &OK - &Cancel - &Abbrechen + A&bbrechen - - &Apply - &Übernehmen - - - default Standard - + none + keine + + Confirm options reset Zurücksetzen der Konfiguration bestätigen - - Some settings may require a client restart to take effect. - Einige Einstellungen benötigen möglicherweise einen Clientneustart, um aktiv zu werden. + Client restart required to activate changes. + Clientneustart nötig, um die Änderungen zu aktivieren. - - Do you want to proceed? - Wollen Sie fortfahren? + Client will be shutdown, do you want to proceed? + Client wird beendet, wollen Sie fortfahren? - - - Warning - Warnung + This change would require a client restart. + Diese Änderung würde einen Clientneustart benötigen. - - - This setting will take effect after restarting Myriadcoin. - Diese Einstellung wird erst nach einem Neustart von Myriadcoin aktiv. - - - The supplied proxy address is invalid. Die eingegebene Proxyadresse ist ungültig. @@ -1007,59 +1214,54 @@ Adresse: %4 OverviewPage - Form Formular - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. - Die angezeigten Informationen sind möglicherweise nicht mehr aktuell. Ihre Brieftasche wird automatisch synchronisiert, nachdem eine Verbindung zum Myriadcoin-Netzwerk hergestellt wurde. Dieser Prozess ist jedoch derzeit noch nicht abgeschlossen. + Die angezeigten Informationen sind möglicherweise nicht mehr aktuell. Ihre Wallet wird automatisch synchronisiert, nachdem eine Verbindung zum Bitcoin-Netzwerk hergestellt wurde. Dieser Prozess ist jedoch derzeit noch nicht abgeschlossen. - - Balance: - Kontostand: - - - - Unconfirmed: - Unbestätigt: - - - Wallet - Brieftasche + Wallet + + + Available: + Verfügbar: + + + Your current spendable balance + Ihr aktuell verfügbarer Kontostand + + + Pending: + Ausstehend: + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + Betrag aus unbestätigten Transaktionen, der noch nicht im aktuell verfügbaren Kontostand enthalten ist - Immature: Unreif: - Mined balance that has not yet matured Erarbeiteter Betrag der noch nicht gereift ist - + Total: + Gesamtbetrag: + + + Your current total balance + Aktueller Gesamtbetrag aus obigen Kategorien + + <b>Recent transactions</b> <b>Letzte Transaktionen</b> - - Your current balance - Ihr aktueller Kontostand - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - Betrag aus unbestätigten Transaktionen, der noch nicht im aktuellen Kontostand enthalten ist - - - - out of sync nicht synchron @@ -1067,579 +1269,856 @@ Adresse: %4 PaymentServer - + URI handling + URI-Verarbeitung + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + URI kann nicht analysiert werden! Dies kann durch eine ungültige Bitcoin-Adresse oder fehlerhafte URI-Parameter verursacht werden. + + + Requested payment amount of %1 is too small (considered dust). + Angeforderter Zahlungsbetrag in Höhe von %1 ist zu niedrig und wurde als "Dust" eingestuft. + + + Payment request error + fehlerhafte Zahlungsanforderung + + Cannot start myriadcoin: click-to-pay handler "myriadcoin: Klicken-zum-Bezahlen"-Handler konnte nicht gestartet werden + + Net manager warning + Netzwerkmanager-Warnung + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + Ihr aktiver Proxy unterstützt kein SOCKS5, dies wird jedoch für Zahlungsanforderungen über einen Proxy benötigt. + + + Payment request fetch URL is invalid: %1 + Abruf-URL der Zahlungsanforderung ist ungültig: %1 + + + Payment request file handling + Zahlungsanforderungsdatei-Verarbeitung + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + Zahlungsanforderungsdatei kann nicht gelesen oder verarbeitet werden! Dies kann durch eine ungültige Zahlungsanforderungsdatei verursacht werden. + + + Unverified payment requests to custom payment scripts are unsupported. + Unverifizierte Zahlungsanforderungen an benutzerdefinierte Zahlungsskripte werden nicht unterstützt. + + + Refund from %1 + Rücküberweisung von %1 + + + Error communicating with %1: %2 + Kommunikationsfehler mit %1: %2 + + + Payment request can not be parsed or processed! + Zahlungsanforderung kann nicht analysiert oder verarbeitet werden! + + + Bad response from server %1 + Fehlerhafte Antwort vom Server: %1 + + + Payment acknowledged + Zahlung bestätigt + + + Network request error + fehlerhafte Netzwerkanfrage + - QRCodeDialog + QObject - - QR Code Dialog - QR-Code-Dialog + Myriadcoin + Myriadcoin - - Request Payment - Zahlung anfordern + Error: Specified data directory "%1" does not exist. + Fehler: Angegebenes Datenverzeichnis "%1" existiert nicht. - - Amount: - Betrag: + Error: Cannot parse configuration file: %1. Only use key=value syntax. + Fehler: Konfigurationsdatei kann nicht analysiert werden: %1. Bitte nur "Schlüssel=Wert"-Syntax verwenden. - - Label: - Bezeichnung: + Error: Invalid combination of -regtest and -testnet. + Fehler: Ungültige Kombination von -regtest und -testnet. - - Message: - Nachricht: + Myriadcoin Core didn't yet exit safely... + Myriadcoin Core wurde noch nicht sicher beendet... - - &Save As... - &Speichern unter... + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Bitcoin-Adresse eingeben (z.B. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + Grafik &speichern... - - Error encoding URI into QR Code. - Fehler beim Kodieren der URI in den QR-Code. + &Copy Image + Grafik &kopieren - - The entered amount is invalid, please check. - Der eingegebene Betrag ist ungültig, bitte überprüfen. - - - - Resulting URI too long, try to reduce the text for label / message. - Resultierende URI zu lang, bitte den Text für Bezeichnung / Nachricht kürzen. - - - Save QR Code - QR-Code abspeichern + QR-Code speichern - - PNG Images (*.png) - PNG-Bild (*.png) + PNG Image (*.png) + PNG-Grafik (*.png) RPCConsole - Client name Clientname - - - - - - - - - - N/A - n.v. + k.A. - Client version Clientversion - &Information &Information - + Debug window + Debugfenster + + + General + Allgemein + + Using OpenSSL version Verwendete OpenSSL-Version - Startup time Startzeit - Network Netzwerk - + Name + Name + + Number of connections Anzahl Verbindungen - - On testnet - Im Testnetz - - - Block chain Blockkette - Current number of blocks Aktuelle Anzahl Blöcke - Estimated total blocks Geschätzte Gesamtzahl Blöcke - Last block time Letzte Blockzeit - &Open &Öffnen - - Command-line options - Kommandozeilenoptionen - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - Zeige die Myriadcoin-Qt-Hilfsnachricht, um eine Liste mit möglichen Kommandozeilenoptionen zu erhalten. - - - - &Show - &Anzeigen - - - &Console &Konsole - + &Network Traffic + &Netzwerkauslastung + + + &Clear + &Zurücksetzen + + + Totals + Summen + + + In: + eingehend: + + + Out: + ausgehend: + + Build date Erstellungsdatum - - Myriadcoin - Debug window - Myriadcoin - Debugfenster - - - - Myriadcoin Core - Myriadcoin-Kern - - - Debug log file Debugprotokolldatei - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. - Öffnet die Myriadcoin-Debugprotokolldatei aus dem aktuellen Datenverzeichnis. Dies kann bei großen Protokolldateien einige Sekunden dauern. + Öffnet die Bitcoin-Debugprotokolldatei aus dem aktuellen Datenverzeichnis. Dies kann bei großen Protokolldateien einige Sekunden dauern. - Clear console Konsole zurücksetzen - Welcome to the Myriadcoin RPC console. - Willkommen in der Myriadcoin-RPC-Konsole. + Willkommen in der Bitcoin-RPC-Konsole. - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Pfeiltaste hoch und runter, um die Historie durchzublättern und <b>Strg-L</b>, um die Konsole zurückzusetzen. + Pfeiltaste hoch und runter, um den Verlauf durchzublättern und <b>Strg-L</b>, um die Konsole zurückzusetzen. - Type <b>help</b> for an overview of available commands. Bitte <b>help</b> eingeben, um eine Übersicht verfügbarer Befehle zu erhalten. + + %1 B + %1 B + + + %1 KB + %1 KB + + + %1 MB + %1 MB + + + %1 GB + %1 GB + + + %1 m + %1 m + + + %1 h + %1 h + + + %1 h %2 m + %1 h %2 m + + + + ReceiveCoinsDialog + + &Amount: + &Betrag: + + + &Label: + &Bezeichnung: + + + &Message: + &Nachricht: + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + Eine der bereits verwendeten Empfangsadressen wiederverwenden. Addressen wiederzuverwenden birgt Sicherheits- und Datenschutzrisiken. Außer zum Neuerstellen einer bereits erzeugten Zahlungsanforderung sollten Sie dies nicht nutzen. + + + R&euse an existing receiving address (not recommended) + Vorhandene Empfangsadresse &wiederverwenden (nicht empfohlen) + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + Eine optionale Nachricht, die an die Zahlungsanforderung angehängt wird. Sie wird angezeigt, wenn die Anforderung geöffnet wird. Hinweis: Diese Nachricht wird nicht mit der Zahlung über das Bitcoin-Netzwerk gesendet. + + + An optional label to associate with the new receiving address. + Eine optionale Bezeichnung, die der neuen Empfangsadresse zugeordnet wird. + + + Use this form to request payments. All fields are <b>optional</b>. + Verwenden Sie dieses Formular, um Zahlungen anzufordern. Alle Felder sind <b>optional</b>. + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + Ein optional angeforderte Betrag. Lassen Sie dieses Feld leer oder setzen Sie es auf 0, um keinen spezifischen Betrag anzufordern. + + + Clear all fields of the form. + Alle Formularfelder zurücksetzen. + + + Clear + Zurücksetzen + + + Requested payments history + Verlauf der angeforderten Zahlungen + + + &Request payment + &Zahlung anfordern + + + Show the selected request (does the same as double clicking an entry) + Ausgewählte Zahlungsanforderungen anzeigen (entspricht einem Doppelklick auf einen Eintrag) + + + Show + Anzeigen + + + Remove the selected entries from the list + Ausgewählte Einträge aus der Liste entfernen + + + Remove + Entfernen + + + Copy label + Bezeichnung kopieren + + + Copy message + Nachricht kopieren + + + Copy amount + Betrag kopieren + + + + ReceiveRequestDialog + + QR Code + QR-Code + + + Copy &URI + &URI kopieren + + + Copy &Address + &Addresse kopieren + + + &Save Image... + Grafik &speichern... + + + Request payment to %1 + Zahlung anfordern an %1 + + + Payment information + Zahlungsinformationen + + + URI + URI + + + Address + Adresse + + + Amount + Betrag + + + Label + Bezeichnung + + + Message + Nachricht + + + Resulting URI too long, try to reduce the text for label / message. + Resultierende URI ist zu lang, bitte den Text für Bezeichnung/Nachricht kürzen. + + + Error encoding URI into QR Code. + Beim Enkodieren der URI in den QR-Code ist ein Fehler aufgetreten. + + + + RecentRequestsTableModel + + Date + Datum + + + Label + Bezeichnung + + + Message + Nachricht + + + Amount + Betrag + + + (no label) + (keine Bezeichnung) + + + (no message) + (keine Nachricht) + + + (no amount) + (kein Betrag) + SendCoinsDialog - - - - - - - - Send Coins - Myriadcoins überweisen + Bitcoins überweisen + + + Coin Control Features + "Coin Control"-Funktionen + + + Inputs... + Eingaben... + + + automatically selected + automatisch ausgewählt + + + Insufficient funds! + Unzureichender Kontostand! + + + Quantity: + Anzahl: + + + Bytes: + Byte: + + + Amount: + Betrag: + + + Priority: + Priorität: + + + Fee: + Gebühr: + + + Low Output: + Zu geringer Ausgabebetrag: + + + After Fee: + Abzüglich Gebühr: + + + Change: + Wechselgeld: + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + Wenn dies aktivert, und die Wechselgeld-Adresse leer oder ungültig ist, wird das Wechselgeld einer neu erzeugten Adresse gutgeschrieben. + + + Custom change address + Benutzerdefinierte Wechselgeld-Adresse - Send to multiple recipients at once - In einer Transaktion an mehrere Empfänger auf einmal überweisen + An mehrere Empfänger auf einmal überweisen - Add &Recipient Empfänger &hinzufügen - - Remove all transaction fields - Alle Überweisungsfelder zurücksetzen + Clear all fields of the form. + Alle Formularfelder zurücksetzen. - Clear &All &Zurücksetzen - Balance: Kontostand: - - 123.456 BTC - 123.456 BTC - - - Confirm the send action Überweisung bestätigen - S&end &Überweisen - - <b>%1</b> to %2 (%3) - <b>%1</b> an %2 (%3) - - - Confirm send coins Überweisung bestätigen - - Are you sure you want to send %1? - Sind Sie sich sicher, dass Sie die folgende Überweisung ausführen möchten?<br>%1 + %1 to %2 + %1 an %2 - - and - und + Copy quantity + Anzahl kopieren + + + Copy amount + Betrag kopieren + + + Copy fee + Gebühr kopieren + + + Copy after fee + Abzüglich Gebühr kopieren + + + Copy bytes + Byte kopieren + + + Copy priority + Priorität kopieren + + + Copy low output + Zu geringen Ausgabebetrag kopieren + + + Copy change + Wechselgeld kopieren + + + Total Amount %1 (= %2) + Gesamtbetrag %1 (= %2) + + + or + oder - The recipient address is not valid, please recheck. Die Zahlungsadresse ist ungültig, bitte nochmals überprüfen. - The amount to pay must be larger than 0. Der zu zahlende Betrag muss größer als 0 sein. - The amount exceeds your balance. - Der angegebene Betrag übersteigt Ihren Kontostand. + Der angegebene Betrag übersteigt ihren Kontostand. - The total exceeds your balance when the %1 transaction fee is included. - Der angegebene Betrag übersteigt aufgrund der Transaktionsgebühr in Höhe von %1 Ihren Kontostand. + Der angegebene Betrag übersteigt aufgrund der Transaktionsgebühr in Höhe von %1 ihren Kontostand. - Duplicate address found, can only send to each address once per send operation. - Doppelte Adresse gefunden, pro Überweisung kann an jede Adresse nur einmalig etwas überwiesen werden. + Doppelte Zahlungsadresse gefunden, pro Überweisung kann an jede Adresse nur einmalig etwas überwiesen werden. - - Error: Transaction creation failed! - Fehler: Transaktionserstellung fehlgeschlagen! + Transaction creation failed! + Transaktionserstellung fehlgeschlagen! - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Fehler: Die Transaktion wurde abgelehnt. Dies kann passieren, wenn einige Myriadcoins aus Ihrer Brieftasche bereits ausgegeben wurden. Beispielsweise weil Sie eine Kopie Ihrer wallet.dat genutzt, die Myriadcoins dort ausgegeben haben und dies daher in der derzeit aktiven Brieftasche nicht vermerkt ist. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Die Transaktion wurde abgelehnt! Dies kann passieren, wenn einige Bitcoins aus ihrer Wallet bereits ausgegeben wurden. Beispielsweise weil Sie eine Kopie ihrer wallet.dat genutzt, die Bitcoins dort ausgegeben haben und dies daher in der derzeit aktiven Wallet nicht vermerkt ist. + + + Warning: Invalid Myriadcoin address + Warnung: Ungültige Bitcoin-Adresse + + + (no label) + (keine Bezeichnung) + + + Warning: Unknown change address + Warnung: Unbekannte Wechselgeld-Adresse + + + Are you sure you want to send? + Wollen Sie die Überweisung ausführen? + + + added as transaction fee + als Transaktionsgebühr hinzugefügt + + + Payment request expired + Zahlungsanforderung abgelaufen + + + Invalid payment address %1 + Ungültige Zahlungsadresse %1 SendCoinsEntry - - Form - Formular - - - A&mount: - &Betrag: + Betra&g: - Pay &To: - &Empfänger: + E&mpfänger: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Die Zahlungsadresse der Überweisung (z.B. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book Adressbezeichnung eingeben (diese wird zusammen mit der Adresse dem Adressbuch hinzugefügt) - &Label: &Bezeichnung: - - Choose address from address book - Adresse aus Adressbuch wählen + Choose previously used address + Bereits verwendete Adresse auswählen + + + This is a normal payment. + Dies ist eine normale Überweisung. - Alt+A Alt+A - Paste address from clipboard Adresse aus der Zwischenablage einfügen - Alt+P Alt+P - - Remove this recipient - Diesen Empfänger entfernen + Remove this entry + Diesen Eintrag entfernen - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Myriadcoin-Adresse eingeben (z.B. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + Nachricht: + + + This is a verified payment request. + Dies is eine verifizierte Zahlungsanforderung. + + + Enter a label for this address to add it to the list of used addresses + Adressbezeichnung eingeben, die dann zusammen mit der Adresse der Liste bereits verwendeter Adressen hinzugefügt wird. + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + Eine an die "myriadcoin:"-URI angefügte Nachricht, die zusammen mit der Transaktion gespeichert wird. Hinweis: Diese Nachricht wird nicht über das Bitcoin-Netzwerk gesendet. + + + This is an unverified payment request. + Dies is eine unverifizierte Zahlungsanforderung. + + + Pay To: + Empfänger: + + + Memo: + Memo: + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + Myriadcoin Core wird beendet... + + + Do not shut down the computer until this window disappears. + Fahren Sie den Computer nicht herunter, bevor dieses Fenster verschwindet. SignVerifyMessageDialog - Signatures - Sign / Verify a Message Signaturen - eine Nachricht signieren / verifizieren - &Sign Message Nachricht &signieren - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. - Sie können Nachrichten mit Ihren Adressen signieren, um den Besitz dieser Adressen zu beweisen. Bitte nutzen Sie diese Funktion mit Vorsicht und nehmen Sie sich vor Phishingangriffen in Acht. Signieren Sie nur Nachrichten, mit denen Sie vollständig einverstanden sind. + Sie können Nachrichten mit ihren Adressen signieren, um den Besitz dieser Adressen zu beweisen. Bitte nutzen Sie diese Funktion mit Vorsicht und nehmen Sie sich vor Phishingangriffen in Acht. Signieren Sie nur Nachrichten, mit denen Sie vollständig einverstanden sind. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Die Adresse mit der die Nachricht signiert wird (z.B. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book - Eine Adresse aus dem Adressbuch wählen + Choose previously used address + Bereits verwendete Adresse auswählen - - Alt+A Alt+A - Paste address from clipboard Adresse aus der Zwischenablage einfügen - Alt+P Alt+P - Enter the message you want to sign here Zu signierende Nachricht hier eingeben - Signature Signatur - Copy the current signature to the system clipboard Aktuelle Signatur in die Zwischenablage kopieren - Sign the message to prove you own this Myriadcoin address - Die Nachricht signieren, um den Besitz dieser Myriadcoin-Adresse zu beweisen + Die Nachricht signieren, um den Besitz dieser Bitcoin-Adresse zu beweisen - Sign &Message &Nachricht signieren - Reset all sign message fields Alle "Nachricht signieren"-Felder zurücksetzen - - Clear &All &Zurücksetzen - &Verify Message Nachricht &verifizieren - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. - Geben Sie die signierende Adresse, Nachricht (achten Sie darauf Zeilenumbrüche, Leerzeichen, Tabulatoren usw. exakt zu kopieren) und Signatur unten ein, um die Nachricht zu verifizieren. Vorsicht, interpretieren Sie nicht mehr in die Signatur, als in der signierten Nachricht selber enthalten ist, um nicht von einerm Man-in-the-middle-Angriff hinters Licht geführt zu werden. + Geben Sie die signierende Adresse, Nachricht (achten Sie darauf Zeilenumbrüche, Leerzeichen, Tabulatoren usw. exakt zu kopieren) und Signatur unten ein, um die Nachricht zu verifizieren. Vorsicht, interpretieren Sie nicht mehr in die Signatur hinein, als in der signierten Nachricht selber enthalten ist, um nicht von einem Man-in-the-middle-Angriff hinters Licht geführt zu werden. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Die Adresse mit der die Nachricht signiert wurde (z.B. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address - Die Nachricht verifizieren, um sicherzustellen, dass diese mit der angegebenen Myriadcoin-Adresse signiert wurde + Die Nachricht verifizieren, um sicherzustellen, dass diese mit der angegebenen Bitcoin-Adresse signiert wurde - Verify &Message &Nachricht verifizieren - Reset all verify message fields Alle "Nachricht verifizieren"-Felder zurücksetzen - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Myriadcoin-Adresse eingeben (z.B. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Bitcoin-Adresse eingeben (z.B. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature Auf "Nachricht signieren" klicken, um die Signatur zu erzeugen - - Enter Myriadcoin signature - Myriadcoin-Signatur eingeben - - - - The entered address is invalid. Die eingegebene Adresse ist ungültig. - - - - Please check the address and try again. Bitte überprüfen Sie die Adresse und versuchen Sie es erneut. - - The entered address does not refer to a key. Die eingegebene Adresse verweist nicht auf einen Schlüssel. - Wallet unlock was cancelled. - Entsperrung der Brieftasche wurde abgebrochen. + Wallet-Entsperrung wurde abgebrochen. - Private key for the entered address is not available. Privater Schlüssel zur eingegebenen Adresse ist nicht verfügbar. - Message signing failed. Signierung der Nachricht fehlgeschlagen. - Message signed. Nachricht signiert. - The signature could not be decoded. Die Signatur konnte nicht dekodiert werden. - - Please check the signature and try again. Bitte überprüfen Sie die Signatur und versuchen Sie es erneut. - The signature did not match the message digest. - Die Signatur entspricht nicht dem Message Digest. + Die Signatur entspricht nicht dem "Message Digest". - Message verification failed. Verifikation der Nachricht fehlgeschlagen. - Message verified. Nachricht verifiziert. @@ -1647,186 +2126,160 @@ Adresse: %4 SplashScreen - - The Myriadcoin developers - Die Myriadcoinentwickler + Myriadcoin Core + Myriadcoin Core + + + The Myriadcoin Core developers + Die "Myriadcoin Core"-Entwickler - [testnet] [Testnetz] + + TrafficGraphWidget + + KB/s + KB/s + + TransactionDesc - Open until %1 Offen bis %1 - + conflicted + in Konflikt stehend + + %1/offline %1/offline - %1/unconfirmed %1/unbestätigt - %1 confirmations %1 Bestätigungen - Status Status - , broadcast through %n node(s) , über %n Knoten übertragen, über %n Knoten übertragen - Date Datum - Source Quelle - Generated - Generiert + Erzeugt - - From Von - - - To An - - own address eigene Adresse - label Bezeichnung - - - - - Credit Gutschrift - matures in %n more block(s) reift noch %n weiteren Blockreift noch %n weitere Blöcke - not accepted nicht angenommen - - - - Debit Belastung - Transaction fee Transaktionsgebühr - Net amount Nettobetrag - Message - Nachricht signieren + Nachricht - Comment Kommentar - Transaction ID Transaktions-ID - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Generierte Myriadcoins müssen 120 Blöcke lang reifen, bevor sie ausgegeben werden können. Als Sie diesen Block generierten, wurde er an das Netzwerk übertragen, um ihn der Blockkette hinzuzufügen. Falls dies fehlschlägt wird der Status in "nicht angenommen" geändert und der Betrag wird nicht verfügbar werden. Das kann gelegentlich passieren, wenn ein anderer Knoten einen Block fast zeitgleich generiert. + Merchant + Händler + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Erzeugte Bitcoins müssen %1 Blöcke lang reifen, bevor sie ausgegeben werden können. Als Sie diesen Block erzeugten, wurde er an das Netzwerk übertragen, um ihn der Blockkette hinzuzufügen. Falls dies fehlschlägt wird der Status in "nicht angenommen" geändert und Sie werden keine Bitcoins gutgeschrieben bekommen. Das kann gelegentlich passieren, wenn ein anderer Knoten einen Block fast zeitgleich erzeugt. - Debug information Debuginformationen - Transaction Transaktion - Inputs Eingaben - Amount Betrag - true wahr - false falsch - , has not been successfully broadcast yet , wurde noch nicht erfolgreich übertragen - Open for %n more block(s) Offen für %n weiteren BlockOffen für %n weitere Blöcke - unknown unbekannt @@ -1834,12 +2287,10 @@ Adresse: %4 TransactionDescDialog - Transaction details Transaktionsdetails - This pane shows a detailed description of the transaction Dieser Bereich zeigt eine detaillierte Beschreibung der Transaktion an @@ -1847,117 +2298,102 @@ Adresse: %4 TransactionTableModel - Date Datum - Type Typ - Address Adresse - Amount Betrag + + Immature (%1 confirmations, will be available after %2) + Unreif (%1 Bestätigungen, wird verfügbar sein nach %2) + - Open for %n more block(s) Offen für %n weiteren BlockOffen für %n weitere Blöcke - Open until %1 Offen bis %1 - - Offline (%1 confirmations) - Offline (%1 Bestätigungen) - - - - Unconfirmed (%1 of %2 confirmations) - Unbestätigt (%1 von %2 Bestätigungen) - - - Confirmed (%1 confirmations) Bestätigt (%1 Bestätigungen) - - - Mined balance will be available when it matures in %n more block(s) - Erarbeiteter Betrag wird verfügbar sein, nachdem er noch %n weiteren Block reiftErarbeiteter Betrag wird verfügbar sein, nachdem er noch %n weitere Blöcke reift - - This block was not received by any other nodes and will probably not be accepted! Dieser Block wurde von keinem anderen Knoten empfangen und wird wahrscheinlich nicht angenommen werden! - Generated but not accepted - Generiert, jedoch nicht angenommen + Erzeugt, jedoch nicht angenommen + + + Offline + Offline + + + Unconfirmed + Unbestätigt + + + Confirming (%1 of %2 recommended confirmations) + Wird bestätigt (%1 von %2 empfohlenen Bestätigungen) + + + Conflicted + in Konflikt stehend - Received with Empfangen über - Received from Empfangen von - Sent to Überwiesen an - Payment to yourself Eigenüberweisung - Mined Erarbeitet - (n/a) (k.A.) - Transaction status. Hover over this field to show number of confirmations. - Transaktionsstatus. Fahren Sie mit der Maus über dieses Feld, um die Anzahl der Bestätigungen zu sehen. + Transaktionsstatus, fahren Sie mit der Maus über dieses Feld, um die Anzahl der Bestätigungen zu sehen. - Date and time that the transaction was received. - Datum und Uhrzeit als die Transaktion empfangen wurde. + Datum und Uhrzeit zu der die Transaktion empfangen wurde. - Type of transaction. Art der Transaktion - Destination address of transaction. Zieladresse der Transaktion - Amount removed from or added to balance. Der Betrag, der dem Kontostand abgezogen oder hinzugefügt wurde. @@ -1965,337 +2401,278 @@ Adresse: %4 TransactionView - - All Alle - Today Heute - This week Diese Woche - This month Diesen Monat - Last month Letzten Monat - This year Dieses Jahr - Range... Zeitraum... - Received with Empfangen über - Sent to Überwiesen an - To yourself Eigenüberweisung - Mined Erarbeitet - Other Andere - Enter address or label to search Zu suchende Adresse oder Bezeichnung eingeben - Min amount Minimaler Betrag - Copy address Adresse kopieren - Copy label Bezeichnung kopieren - Copy amount Betrag kopieren - Copy transaction ID Transaktions-ID kopieren - Edit label Bezeichnung bearbeiten - Show transaction details Transaktionsdetails anzeigen - - Export Transaction Data - Transaktionen exportieren + Export Transaction History + Transaktionsverlauf exportieren + + + Exporting Failed + Exportieren fehlgeschlagen + + + There was an error trying to save the transaction history to %1. + Beim Speichern des Transaktionsverlaufs nach %1 ist ein Fehler aufgetreten. + + + Exporting Successful + Exportieren erfolgreich + + + The transaction history was successfully saved to %1. + Speichern des Transaktionsverlaufs nach %1 war erfolgreich. - Comma separated file (*.csv) Kommagetrennte-Datei (*.csv) - Confirmed Bestätigt - Date Datum - Type Typ - Label Bezeichnung - Address Adresse - Amount Betrag - ID ID - - Error exporting - Fehler beim Exportieren - - - - Could not write to file %1. - Konnte nicht in Datei %1 schreiben. - - - Range: Zeitraum: - to bis + + WalletFrame + + No wallet has been loaded. + Es wurde keine Wallet geladen. + + WalletModel - Send Coins - Myriadcoins überweisen + Bitcoins überweisen WalletView - &Export E&xportieren - Export the data in the current tab to a file Daten der aktuellen Ansicht in eine Datei exportieren - Backup Wallet - Brieftasche sichern + Wallet sichern - Wallet Data (*.dat) - Brieftaschendaten (*.dat) + Wallet-Daten (*.dat) - Backup Failed Sicherung fehlgeschlagen - - There was an error trying to save the wallet data to the new location. - Beim Speichern der Brieftaschendaten an die neue Position ist ein Fehler aufgetreten. + There was an error trying to save the wallet data to %1. + Beim Speichern der Wallet-Daten nach %1 ist ein Fehler aufgetreten. + + + The wallet data was successfully saved to %1. + Speichern der Wallet-Daten nach %1 war erfolgreich. - Backup Successful Sicherung erfolgreich - - - The wallet data was successfully saved to the new location. - Speichern der Brieftaschendaten an die neue Position war erfolgreich. - bitcoin-core - - Myriadcoin version - Myriadcoin-Version - - - Usage: Benutzung: - - Send command to -server or myriadcoind - Befehl an -server oder myriadcoind senden - - - List commands Befehle auflisten - Get help for a command Hilfe zu einem Befehl erhalten - Options: Optionen: - Specify configuration file (default: myriadcoin.conf) Konfigurationsdatei festlegen (Standard: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) PID-Datei festlegen (Standard: myriadcoind.pid) - Specify data directory Datenverzeichnis festlegen - - Set database cache size in megabytes (default: 25) - Größe des Datenbankcaches in MB festlegen (Standard: 25) - - - Listen for connections on <port> (default: 8333 or testnet: 18333) <port> nach Verbindungen abhören (Standard: 8333 oder Testnetz: 18333) - Maintain at most <n> connections to peers (default: 125) Maximal <n> Verbindungen zu Gegenstellen aufrechterhalten (Standard: 125) - Connect to a node to retrieve peer addresses, and disconnect - Mit dem Knoten verbinden um Adressen von Gegenstellen abzufragen, danach trennen + Mit dem angegebenen Knoten verbinden, um Adressen von Gegenstellen abzufragen, danach trennen - Specify your own public address Die eigene öffentliche Adresse angeben - Threshold for disconnecting misbehaving peers (default: 100) Schwellenwert, um Verbindungen zu sich nicht konform verhaltenden Gegenstellen zu beenden (Standard: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Anzahl Sekunden, während denen sich nicht konform verhaltenden Gegenstellen die Wiederverbindung verweigert wird (Standard: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Beim Einrichten des abzuhörenden RPC-Ports %u für IPv4 ist ein Fehler aufgetreten: %s + Beim Einrichten des RPC-Ports %u zum Abhören von IPv4 ist ein Fehler aufgetreten: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) <port> nach JSON-RPC-Verbindungen abhören (Standard: 8332 oder Testnetz: 18332) - Accept command line and JSON-RPC commands - Kommandozeilenbefehle und JSON-RPC-Befehle annehmen + Kommandozeilen- und JSON-RPC-Befehle annehmen + + + Myriadcoin Core RPC client version + "Myriadcoin Core"-RPC-Client-Version - Run in the background as a daemon and accept commands - Als Hintergrunddienst starten und Befehle annehmen + Als Hintergrunddienst ausführen und Befehle annehmen - Use the test network Das Testnetz verwenden - Accept connections from outside (default: 1 if no -proxy or -connect) Eingehende Verbindungen annehmen (Standard: 1, wenn nicht -proxy oder -connect) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2320,612 +2697,686 @@ zum Beispiel: alertnotify=echo %%s | mail -s \"Myriadcoin Alert\" admi - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + Zulässige Chiffren (Standard: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Beim Einrichten des abzuhörenden RPC-Ports %u für IPv6 ist ein Fehler aufgetreten, es wird auf IPv4 zurückgegriffen: %s + Beim Einrichten des RPC-Ports %u zum Abhören von IPv6 ist ein Fehler aufgetreten, es wird auf IPv4 zurückgegriffen: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 - An die angegebene Adresse binden und immer abhören. Für IPv6 [Host]:Port-Schreibweise verwenden + An die angegebene Adresse binden und immer abhören. Für IPv6 "[Host]:Port"-Schreibweise verwenden - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. - Datenverzeichnis %s kann nicht gesperrt werden. Evtl. wurde Myriadcoin bereits gestartet. + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + Anzahl der freien Transaktionen auf <n> * 1000 Byte pro Minute begrenzen (Standard: 15) + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + Regressionstest-Modus aktivieren, der eine spezielle Blockkette nutzt, in der Blöcke sofort gelöst werden können. Dies ist für Regressionstest-Tools und Anwendungsentwicklung gedacht. + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + Regressionstest-Modus aktivieren, der eine spezielle Blockkette nutzt, in der Blöcke sofort gelöst werden können. + + + Error: Listening for incoming connections failed (listen returned error %d) + Fehler: Abhören nach eingehenden Verbindungen fehlgeschlagen (Fehler %d) - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Fehler: Die Transaktion wurde abgelehnt! Dies kann passieren, wenn einige Myriadcoins aus Ihrer Brieftasche bereits ausgegeben wurden. Beispielsweise weil Sie eine Kopie Ihrer wallet.dat genutzt, die Myriadcoins dort ausgegeben haben und dies daher in der derzeit aktiven Brieftasche nicht vermerkt ist. + Fehler: Die Transaktion wurde abgelehnt! Dies kann passieren, wenn einige Bitcoins aus ihrer Wallet bereits ausgegeben wurden. Beispielsweise weil Sie eine Kopie ihrer wallet.dat genutzt, die Bitcoins dort ausgegeben haben und dies daher in der derzeit aktiven Wallet nicht vermerkt ist. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! - Fehler: Diese Transaktion benötigt aufgrund ihres Betrags, ihrer Komplexität oder der Nutzung kürzlich erhaltener Zahlungen eine Transaktionsgebühr in Höhe von mindestens %s! + Fehler: Diese Transaktion benötigt aufgrund ihres Betrags, ihrer Komplexität oder der Nutzung erst kürzlich erhaltener Zahlungen eine Transaktionsgebühr in Höhe von mindestens %s! - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - Kommando ausführen wenn ein relevanter Alarm empfangen wird (%s im Kommando wird durch die Nachricht ersetzt) - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - Kommando ausführen wenn sich eine Transaktion der Briefrasche verändert (%s im Kommando wird durch die TxID ersetzt) + Befehl ausführen wenn sich eine Wallet-Transaktion verändert (%s im Befehl wird durch die TxID ersetzt) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - Maximale Größe von "high-priority/low-fee"-Transaktionen in Byte festlegen (Standard: 27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + Niedrigere Gebühren als diese werden als gebührenfrei angesehen (bei der Transaktionserstellung) (Standard: + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + Datenbankaktivitäten vom Arbeitsspeicher-Pool alle <n> Megabyte auf den Datenträger schreiben (Standard: 100) + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + Legt fest, wie gründlich die Blockverifikation von -checkblocks ist (0-4, Standard: 3) + + + In this mode -genproclimit controls how many blocks are generated immediately. + In diesem Modus legt -genproclimit fest, wie viele Blöcke sofort erzeugt werden. + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + Maximale Anzahl an Skript-Verifizierungs-Threads festlegen (%u bis %d, 0 = automatisch, <0 = so viele Kerne frei lassen, Standard: %d) + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + Legt ein Prozessor-/CPU-Kernlimit fest, wenn CPU-Mining aktiviert ist (-1 = unbegrenzt, Standard: -1) - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications Dies ist eine Vorab-Testversion - Verwendung auf eigene Gefahr - nicht für Mining- oder Handelsanwendungen nutzen! - + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + Kann auf diesem Computer nicht an %s binden, da Myriadcoin Core wahrscheinlich bereits gestartet wurde. + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + Separaten SOCKS5-Proxy verwenden, um Gegenstellen über versteckte Tor-Dienste zu erreichen (Standard: -proxy) + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Warnung: -paytxfee ist auf einen sehr hohen Wert festgelegt! Dies ist die Gebühr die beim Senden einer Transaktion fällig wird. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - Warnung: Angezeigte Transaktionen sind evtl. nicht korrekt! Sie oder die anderen Knoten müssen unter Umständen (den Client) aktualisieren. - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. - Warnung: Bitte korrigieren Sie die Datums- und Uhrzeiteinstellungen Ihres Computers, da Myriadcoin ansonsten nicht ordnungsgemäß funktionieren wird! + Warnung: Bitte korrigieren Sie die Datums- und Uhrzeiteinstellungen ihres Computers, da Myriadcoin ansonsten nicht ordnungsgemäß funktionieren wird! + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + Warnung: Das Netzwerk scheint nicht vollständig übereinzustimmen! Einige Miner scheinen Probleme zu haben. + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + Warnung: Wir scheinen nicht vollständig mit unseren Gegenstellen übereinzustimmen! Sie oder die anderen Knoten müssen unter Umständen ihre Client-Software aktualisieren. - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Warnung: Lesen von wallet.dat fehlgeschlagen! Alle Schlüssel wurden korrekt gelesen, Transaktionsdaten bzw. Adressbucheinträge fehlen aber möglicherweise oder sind inkorrekt. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - Warnung: wallet.dat beschädigt, Rettung erfolgreich! Original wallet.dat wurde als wallet.{Zeitstempel}.dat in %s gespeichert. Falls Ihr Kontostand oder Transaktionen nicht korrekt sind, sollten Sie von einer Datensicherung wiederherstellen. + Warnung: wallet.dat beschädigt, Datenrettung erfolgreich! Original wallet.dat wurde als wallet.{Zeitstempel}.dat in %s gespeichert. Falls ihr Kontostand oder Transaktionen nicht korrekt sind, sollten Sie von einer Datensicherung wiederherstellen. + + + (default: 1) + (Standard: 1) + + + (default: wallet.dat) + (Standard: wallet.dat) + + + <category> can be: + <category> kann sein: - Attempt to recover private keys from a corrupt wallet.dat - Versucht private Schlüssel aus einer beschädigten wallet.dat wiederherzustellen + Versuchen, private Schlüssel aus einer beschädigten wallet.dat wiederherzustellen + + + Myriadcoin Core Daemon + "Myriadcoin Core"-Hintergrunddienst - Block creation options: Blockerzeugungsoptionen: - - Connect only to the specified node(s) - Nur mit dem/den angegebenen Knoten verbinden + Clear list of wallet transactions (diagnostic tool; implies -rescan) + Liste der Wallet-Transaktionen zurücksetzen (Diagnosetool; beinhaltet -rescan) + + + Connect only to the specified node(s) + Mit nur dem oder den angegebenen Knoten verbinden + + + Connect through SOCKS proxy + Über einen SOCKS-Proxy verbinden + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + Mit JSON-RPC auf <port> verbinden (Standard: 8332 oder Testnetz: 18332) + + + Connection options: + Verbindungsoptionen: - Corrupted block database detected Beschädigte Blockdatenbank erkannt - + Debugging/Testing options: + Debugging-/Testoptionen: + + + Disable safemode, override a real safe mode event (default: 0) + Sicherheitsmodus deaktivieren, übergeht ein echtes Sicherheitsmodusereignis (Standard: 0) + + Discover own IP address (default: 1 when listening and no -externalip) Eigene IP-Adresse erkennen (Standard: 1, wenn abgehört wird und nicht -externalip) - - Do you want to rebuild the block database now? - Möchten Sie die Blockdatenbank nun neu aufbauen? + Do not load the wallet and disable wallet RPC calls + Die Wallet nicht laden und Wallet-RPC-Aufrufe deaktivieren + + + Do you want to rebuild the block database now? + Möchten Sie die Blockdatenbank jetzt neu aufbauen? - Error initializing block database Fehler beim Initialisieren der Blockdatenbank - Error initializing wallet database environment %s! - Fehler beim Initialisieren der Brieftaschen-Datenbankumgebung %s! + Fehler beim Initialisieren der Wallet-Datenbankumgebung %s! - Error loading block database Fehler beim Laden der Blockdatenbank - Error opening block database Fehler beim Öffnen der Blockdatenbank - Error: Disk space is low! - Fehler: Zu wenig freier Laufwerksspeicherplatz! + Fehler: Zu wenig freier Speicherplatz auf dem Datenträger! - Error: Wallet locked, unable to create transaction! - Fehler: Brieftasche gesperrt, Transaktion kann nicht erstellt werden! + Fehler: Wallet gesperrt, Transaktion kann nicht erstellt werden! - Error: system error: Fehler: Systemfehler: - Failed to listen on any port. Use -listen=0 if you want this. Fehler, es konnte kein Port abgehört werden. Wenn dies so gewünscht wird -listen=0 verwenden. - Failed to read block info Lesen der Blockinformationen fehlgeschlagen - Failed to read block Lesen des Blocks fehlgeschlagen - Failed to sync block index Synchronisation des Blockindex fehlgeschlagen - Failed to write block index Schreiben des Blockindex fehlgeschlagen - Failed to write block info Schreiben der Blockinformationen fehlgeschlagen - Failed to write block Schreiben des Blocks fehlgeschlagen - Failed to write file info Schreiben der Dateiinformationen fehlgeschlagen - Failed to write to coin database Schreiben in die Münzendatenbank fehlgeschlagen - Failed to write transaction index Schreiben des Transaktionsindex fehlgeschlagen - Failed to write undo data Schreiben der Rücksetzdaten fehlgeschlagen - + Fee per kB to add to transactions you send + Gebühr pro kB, die gesendeten Transaktionen hinzugefügt wird + + + Fees smaller than this are considered zero fee (for relaying) (default: + Niedrigere Gebühren als diese werden als gebührenfrei angesehen (bei der Vermittlung) (Standard: + + Find peers using DNS lookup (default: 1 unless -connect) - Gegenstellen via DNS-Namensauflösung finden (Standard: 1, außer bei -connect) + Gegenstellen via DNS-Abfrage finden (Standard: 1, außer bei -connect) + + + Force safe mode (default: 0) + Sicherheitsmodus erzwingen (Standard: 0) - Generate coins (default: 0) - Myriadcoins generieren (Standard: 0) + Bitcoins erzeugen (Standard: 0) - How many blocks to check at startup (default: 288, 0 = all) - Wieviele Blöcke sollen beim Starten geprüft werden (Standard: 288, 0 = alle) + Wieviele Blöcke beim Starten geprüft werden sollen (Standard: 288, 0 = alle) - - How thorough the block verification is (0-4, default: 3) - Wie gründlich soll die Blockprüfung sein (0-4, Standard: 3) + If <category> is not supplied, output all debugging information. + Wenn <category> nicht angegeben wird, jegliche Debugginginformationen ausgeben. + + + Importing... + Importiere... + + + Incorrect or no genesis block found. Wrong datadir for network? + Fehlerhafter oder kein Genesis-Block gefunden. Falsches Datenverzeichnis für das Netzwerk? + + + Invalid -onion address: '%s' + Ungültige "-onion"-Adresse: '%s' - Not enough file descriptors available. - Nicht genügend File-Deskriptoren verfügbar. + Nicht genügend Datei-Deskriptoren verfügbar. + + + Prepend debug output with timestamp (default: 1) + Debugausgaben einen Zeitstempel voranstellen (Standard: 1) + + + RPC client options: + RPC-Client-Optionen: - Rebuild block chain index from current blk000??.dat files Blockkettenindex aus aktuellen Dateien blk000??.dat wiederaufbauen - + Select SOCKS version for -proxy (4 or 5, default: 5) + SOCKS-Version des Proxies wählen (4 oder 5, Standard: 5) + + + Set database cache size in megabytes (%d to %d, default: %d) + Größe des Datenbankcaches in Megabyte festlegen (%d bis %d, Standard: %d) + + + Set maximum block size in bytes (default: %d) + Maximale Blockgröße in Byte festlegen (Standard: %d) + + Set the number of threads to service RPC calls (default: 4) Maximale Anzahl an Threads zur Verarbeitung von RPC-Anfragen festlegen (Standard: 4) - + Specify wallet file (within data directory) + Wallet-Datei angeben (innerhalb des Datenverzeichnisses) + + + Spend unconfirmed change when sending transactions (default: 1) + Unbestätigtes Wechselgeld beim Senden von Transaktionen ausgeben (Standard: 1) + + + This is intended for regression testing tools and app development. + Dies ist für Regressionstest-Tools und Anwendungsentwicklung gedacht. + + + Usage (deprecated, use myriadcoin-cli): + Benutzung (veraltet, bitte myriadcoin-cli verwenden): + + Verifying blocks... Verifiziere Blöcke... - Verifying wallet... - Verifiziere Brieftasche... + Verifiziere Wallet... + + + Wait for RPC server to start + Warten, bis der RPC-Server gestartet ist + + + Wallet %s resides outside data directory %s + Wallet %s liegt außerhalb des Datenverzeichnisses %s + + + Wallet options: + Wallet-Optionen: + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + Warnung: Veraltetes Argument -debugnet gefunden, bitte -debug=net verwenden + + + You need to rebuild the database using -reindex to change -txindex + Sie müssen die Datenbank mit Hilfe von -reindex neu aufbauen, um -txindex zu verändern - Imports blocks from external blk000??.dat file Blöcke aus externer Datei blk000??.dat importieren - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) - Maximale Anzahl an Skript-Verifizierungs-Threads festlegen (bis zu 16, 0 = automatisch, <0 = soviele Kerne frei lassen, Standard: 0) + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + Datenverzeichnis %s kann nicht gesperrt werden, da Myriadcoin Core wahrscheinlich bereits gestartet wurde. + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + Befehl ausführen wenn ein relevanter Alarm empfangen wird oder wir einen wirklich langen Fork entdecken (%s im Befehl wird durch die Nachricht ersetzt) + + + Output debugging information (default: 0, supplying <category> is optional) + Debugginginformationen ausgeben (Standard: 0, <category> anzugeben ist optional) + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + Maximale Größe in Byte von Transaktionen hoher Priorität/mit niedrigen Gebühren festlegen (Standard: %d) - Information Hinweis - - Invalid -tor address: '%s' - Ungültige Adresse in -tor: '%s' - - - Invalid amount for -minrelaytxfee=<amount>: '%s' Ungültiger Betrag für -minrelaytxfee=<amount>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' Ungültiger Betrag für -mintxfee=<amount>: '%s' - + Limit size of signature cache to <n> entries (default: 50000) + Größe des Signaturcaches auf <n> Einträge begrenzen (Standard: 50000) + + + Log transaction priority and fee per kB when mining blocks (default: 0) + Transaktionspriorität und Gebühr pro kB beim Erzeugen von Blöcken protokollieren (Standard: 0) + + Maintain a full transaction index (default: 0) - Einen vollständigen Transaktionsindex pflegen (Standard: 0) + Einen vollständigen Transaktionsindex führen (Standard: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Maximale Größe, <n> * 1000 Byte, des Empfangspuffers pro Verbindung (Standard: 5000) + Maximale Größe des Empfangspuffers pro Verbindung, <n> * 1000 Byte (Standard: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Maximale Größe, <n> * 1000 Byte, des Sendepuffers pro Verbindung (Standard: 1000) + Maximale Größe des Sendepuffers pro Verbindung, <n> * 1000 Byte (Standard: 1000) - Only accept block chain matching built-in checkpoints (default: 1) - Blockkette nur akzeptieren, wenn sie mit den integrierten Prüfpunkten übereinstimmt (Standard: 1) + Blockkette nur als gültig ansehen, wenn sie mit den integrierten Prüfpunkten übereinstimmt (Standard: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Verbinde nur zu Knoten des Netztyps <net> (IPv4, IPv6 oder Tor) - - Output extra debugging information. Implies all other -debug* options - Ausgabe zusätzlicher Debugginginformationen. Beinhaltet alle anderen "-debug*"-Parameter + Print block on startup, if found in block index + Block beim Starten ausgeben, wenn dieser im Blockindex gefunden wurde. - - Output extra network debugging information - Ausgabe zusätzlicher Netzwerk-Debugginginformationen + Print block tree on startup (default: 0) + Blockbaum beim Starten ausgeben (Standard: 0) - - Prepend debug output with timestamp - Der Debugausgabe einen Zeitstempel voranstellen + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + RPC-SSL-Optionen (siehe Bitcoin-Wiki für SSL-Einrichtung): - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - SSL-Optionen: (siehe Bitcoin-Wiki für SSL-Installationsanweisungen) + RPC server options: + RPC-Serveroptionen: - - Select the version of socks proxy to use (4-5, default: 5) - SOCKS-Version des Proxies festlegen (4-5, Standard: 5) + Randomly drop 1 of every <n> network messages + Zufällig eine von <n> Netzwerknachrichten verwerfen + + + Randomly fuzz 1 of every <n> network messages + Zufällig eine von <n> Netzwerknachrichten verwürfeln + + + Run a thread to flush wallet periodically (default: 1) + Einen Thread starten, der periodisch die Wallet sicher auf den Datenträger schreibt (Standard: 1) + + + SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + SSL-Optionen (siehe Bitcoin-Wiki für SSL-Einrichtungssanweisungen): + + + Send command to Myriadcoin Core + Befehl an Myriadcoin Core senden - Send trace/debug info to console instead of debug.log file - Rückverfolgungs- und Debuginformationen an die Konsole senden anstatt sie in die Datei debug.log zu schreiben + Rückverfolgungs- und Debuginformationen an die Konsole senden, anstatt sie in debug.log zu schreiben - - Send trace/debug info to debugger - Rückverfolgungs- und Debuginformationen an den Debugger senden - - - - Set maximum block size in bytes (default: 250000) - Maximale Blockgröße in Byte festlegen (Standard: 250000) - - - Set minimum block size in bytes (default: 0) Minimale Blockgröße in Byte festlegen (Standard: 0) - - Shrink debug.log file on client startup (default: 1 when no -debug) - Verkleinere Datei debug.log beim Start des Clients (Standard: 1, wenn kein -debug) + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + DB_PRIVATE-Flag in der Wallet-Datenbankumgebung setzen (Standard: 1) + + + Show all debugging options (usage: --help -help-debug) + Zeige alle Debuggingoptionen (Benutzung: --help -help-debug) + + + Show benchmark information (default: 0) + Zeige Benchmarkinformationen (Standard: 0) + + + Shrink debug.log file on client startup (default: 1 when no -debug) + Protokolldatei debug.log beim Starten des Clients kürzen (Standard: 1, wenn kein -debug) - Signing transaction failed Signierung der Transaktion fehlgeschlagen - Specify connection timeout in milliseconds (default: 5000) - Verbindungstimeout in Millisekunden festlegen (Standard: 5000) + Verbindungzeitüberschreitung in Millisekunden festlegen (Standard: 5000) + + + Start Myriadcoin Core Daemon + "Myriadcoin Core"-Hintergrunddienst starten - System error: Systemfehler: - Transaction amount too small - Transaktionsbetrag zu gering + Transaktionsbetrag zu niedrig - Transaction amounts must be positive Transaktionsbeträge müssen positiv sein - Transaction too large Transaktion zu groß - Use UPnP to map the listening port (default: 0) - UPnP verwenden, um die Portweiterleitung einzurichten (Standard: 0) + UPnP verwenden, um eine Portweiterleitung einzurichten (Standard: 0) - Use UPnP to map the listening port (default: 1 when listening) - UPnP verwenden, um die Portweiterleitung einzurichten (Standard: 1, wenn abgehört wird) + UPnP verwenden, um eine Portweiterleitung einzurichten (Standard: 1, wenn abgehört wird) - - Use proxy to reach tor hidden services (default: same as -proxy) - Proxy verwenden, um versteckte Tor-Dienste zu erreichen (Standard: identisch mit -proxy) - - - Username for JSON-RPC connections Benutzername für JSON-RPC-Verbindungen - Warning Warnung - Warning: This version is obsolete, upgrade required! Warnung: Diese Version is veraltet, Aktualisierung erforderlich! - - You need to rebuild the databases using -reindex to change -txindex - Sie müssen die Datenbank mit Hilfe von -reindex neu aufbauen, um -txindex zu verändern. + Zapping all transactions from wallet... + Lösche alle Transaktionen aus Wallet... + + + on startup + beim Starten + + + version + Version - wallet.dat corrupt, salvage failed - wallet.dat beschädigt, Rettung fehlgeschlagen + wallet.dat beschädigt, Datenrettung fehlgeschlagen - Password for JSON-RPC connections Passwort für JSON-RPC-Verbindungen - Allow JSON-RPC connections from specified IP address JSON-RPC-Verbindungen von der angegebenen IP-Adresse erlauben - Send commands to node running on <ip> (default: 127.0.0.1) Sende Befehle an Knoten <ip> (Standard: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) - Kommando ausführen wenn der beste Block wechselt (%s im Kommando wird durch den Hash des Blocks ersetzt) + Befehl ausführen wenn der beste Block wechselt (%s im Befehl wird durch den Hash des Blocks ersetzt) - Upgrade wallet to latest format - Brieftasche auf das neueste Format aktualisieren + Wallet auf das neueste Format aktualisieren - Set key pool size to <n> (default: 100) Größe des Schlüsselpools festlegen auf <n> (Standard: 100) - Rescan the block chain for missing wallet transactions - Blockkette erneut nach fehlenden Transaktionen der Brieftasche durchsuchen + Blockkette erneut nach fehlenden Wallet-Transaktionen durchsuchen - Use OpenSSL (https) for JSON-RPC connections OpenSSL (https) für JSON-RPC-Verbindungen verwenden - Server certificate file (default: server.cert) Serverzertifikat (Standard: server.cert) - Server private key (default: server.pem) Privater Serverschlüssel (Standard: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Akzeptierte Chiffren (Standard: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - This help message Dieser Hilfetext - Unable to bind to %s on this computer (bind returned error %d, %s) Kann auf diesem Computer nicht an %s binden (von bind zurückgegebener Fehler %d, %s) - - Connect through socks proxy - Verbindung über SOCKS-Proxy herstellen - - - Allow DNS lookups for -addnode, -seednode and -connect - Erlaube DNS-Namensauflösung für -addnode, -seednode und -connect + Erlaube DNS-Abfragen für -addnode, -seednode und -connect - Loading addresses... Lade Adressen... - Error loading wallet.dat: Wallet corrupted - Fehler beim Laden von wallet.dat: Brieftasche beschädigt + Fehler beim Laden von wallet.dat: Wallet beschädigt - Error loading wallet.dat: Wallet requires newer version of Myriadcoin - Fehler beim Laden von wallet.dat: Brieftasche benötigt neuere Version von Myriadcoin + Fehler beim Laden von wallet.dat: Wallet benötigt neuere Version von Myriadcoin - Wallet needed to be rewritten: restart Myriadcoin to complete - Brieftasche musste neu geschrieben werden: Starten Sie Myriadcoin zur Fertigstellung neu + Wallet musste neu geschrieben werden: starten Sie Myriadcoin zur Fertigstellung neu - Error loading wallet.dat - Fehler beim Laden von wallet.dat (Brieftasche) + Fehler beim Laden von wallet.dat - Invalid -proxy address: '%s' Ungültige Adresse in -proxy: '%s' - Unknown network specified in -onlynet: '%s' Unbekannter Netztyp in -onlynet angegeben: '%s' - Unknown -socks proxy version requested: %i Unbekannte Proxyversion in -socks angefordert: %i - Cannot resolve -bind address: '%s' Kann Adresse in -bind nicht auflösen: '%s' - Cannot resolve -externalip address: '%s' Kann Adresse in -externalip nicht auflösen: '%s' - Invalid amount for -paytxfee=<amount>: '%s' Ungültiger Betrag für -paytxfee=<amount>: '%s' - Invalid amount Ungültiger Betrag - Insufficient funds Unzureichender Kontostand - Loading block index... Lade Blockindex... - Add a node to connect to and attempt to keep the connection open - Mit dem Knoten verbinden und versuchen die Verbindung aufrecht zu halten + Mit dem angegebenen Knoten verbinden und versuchen die Verbindung aufrecht zu erhalten - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - Kann auf diesem Computer nicht an %s binden. Evtl. wurde Myriadcoin bereits gestartet. - - - - Fee per KB to add to transactions you send - Gebühr pro KB, die gesendeten Transaktionen hinzugefügt wird - - - Loading wallet... - Lade Brieftasche... + Lade Wallet... - Cannot downgrade wallet - Brieftasche kann nicht auf eine ältere Version herabgestuft werden + Wallet kann nicht auf eine ältere Version herabgestuft werden - Cannot write default address Standardadresse kann nicht geschrieben werden - Rescanning... Durchsuche erneut... - Done loading Laden abgeschlossen - To use the %s option - Zur Nutzung der %s Option + Zur Nutzung der %s-Option - Error Fehler - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_el_GR.ts b/src/qt/locale/bitcoin_el_GR.ts index e7489569..9e7b1b0b 100644 --- a/src/qt/locale/bitcoin_el_GR.ts +++ b/src/qt/locale/bitcoin_el_GR.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - Σχετικά με το Myriadcoin + About Myriadcoin Core + Σχετικά με το Myriadcoin Core - - <b>Myriadcoin</b> version - Έκδοση Myriadcoin + <b>Myriadcoin Core</b> version + <b>Myriadcoin Core</b> έκδοση - This is experimental software. @@ -28,153 +24,128 @@ Distributed under the MIT/X11 software license, see the accompanying file COPYIN This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - Copyright Πνευματική ιδιοκτησία - - The Myriadcoin developers - Οι Myriadcoin προγραμματιστές + The Myriadcoin Core developers + Οι προγραμματιστές του Myriadcoin Core + + + (%1-bit) + (%1-bit) AddressBookPage - - Address Book - Βιβλίο Διευθύνσεων - - - Double-click to edit address or label Διπλό-κλικ για επεξεργασία της διεύθυνσης ή της ετικέτας - Create a new address Δημιούργησε νέα διεύθυνση - + &New + &Νέα + + Copy the currently selected address to the system clipboard Αντέγραψε την επιλεγμένη διεύθυνση στο πρόχειρο του συστήματος - - &New Address - &Νέα διεύθυνση + &Copy + &Αντιγραφή - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Αυτές είναι οι Myriadcoin διευθύνσεις σας για να λαμβάνετε πληρωμές. Δίνοντας μία ξεχωριστή διεύθυνση σε κάθε αποστολέα, θα μπορείτε να ελέγχετε ποιος σας πληρώνει. + C&lose + Κ&λείσιμο - &Copy Address &Αντιγραφή διεύθυνσης - - Show &QR Code - Δείξε &QR κωδικα - - - - Sign a message to prove you own a Myriadcoin address - Υπογράψτε ένα μήνυμα για ν' αποδείξετε πως σας ανήκει μια συγκεκριμένη διεύθυνση Myriadcoin - - - - Sign &Message - &Υπέγραψε το μήνυμα - - - Delete the currently selected address from the list Αντιγραφη της επιλεγμενης διεύθυνσης στο πρόχειρο του συστηματος - Export the data in the current tab to a file Εξαγωγή δεδομένων καρτέλας σε αρχείο - &Export &Εξαγωγή - - Verify a message to ensure it was signed with a specified Myriadcoin address - Υπογράψτε ένα μήνυμα για ν' αποδείξετε πως ανήκει μια συγκεκριμένη διεύθυνση Myriadcoin - - - - &Verify Message - &Επιβεβαίωση μηνύματος - - - &Delete &Διαγραφή - + Choose the address to send coins to + Επιλογή διεύθυνσης όπου θα σταλθούν νομίσματα + + + Choose the address to receive coins with + Επιλογή διεύθυνσης απ' όπου θα ληφθούν νομίσματα + + + C&hoose + + + + Sending addresses + Διευθύνσεις αποστολής + + + Receiving addresses + Διευθύνσεις λήψης + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. Αυτές είναι οι Myriadcoin διευθύνσεις σας για να λαμβάνετε πληρωμές. Δίνοντας μία ξεχωριστή διεύθυνση σε κάθε αποστολέα, θα μπορείτε να ελέγχετε ποιος σας πληρώνει. - + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + Copy &Label Αντιγραφή &επιγραφής - &Edit &Επεξεργασία - - Send &Coins - Αποστολή νομισμάτων + Export Address List + Εξαγωγή της λίστας διευθύνσεων - - Export Address Book Data - Εξαγωγή Δεδομενων Βιβλίου Διευθύνσεων - - - Comma separated file (*.csv) Αρχείο οριοθετημένο με κόμματα (*.csv) - - Error exporting - Εξαγωγή λαθών + Exporting Failed + Η εξαγωγή απέτυχε - - Could not write to file %1. - Αδυναμία εγγραφής στο αρχείο %1. + There was an error trying to save the address list to %1. + Παρουσιάστηκε σφάλμα κατά την αποθήκευση της λίστας πορτοφολιών στο %1. AddressTableModel - Label Ετικέτα - Address Διεύθυνση - (no label) (χωρίς ετικέτα) @@ -182,141 +153,107 @@ This product includes software developed by the OpenSSL Project for use in the O AskPassphraseDialog - Passphrase Dialog Φράση πρόσβασης - Enter passphrase Βάλτε κωδικό πρόσβασης - New passphrase Νέος κωδικός πρόσβασης - Repeat new passphrase Επανέλαβε τον νέο κωδικό πρόσβασης - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. Εισάγετε τον νέο κωδικό πρόσβασης στον πορτοφόλι <br/> Παρακαλώ χρησιμοποιείστε ένα κωδικό με <b> 10 ή περισσότερους τυχαίους χαρακτήρες</b> ή <b> οχτώ ή παραπάνω λέξεις</b>. - Encrypt wallet Κρυπτογράφησε το πορτοφόλι - This operation needs your wallet passphrase to unlock the wallet. Αυτη η ενεργεία χρειάζεται τον κωδικό του πορτοφολιού για να ξεκλειδώσει το πορτοφόλι. - Unlock wallet Ξεκλειδωσε το πορτοφολι - This operation needs your wallet passphrase to decrypt the wallet. Αυτη η ενεργεια χρειάζεται τον κωδικο του πορτοφολιου για να αποκρυπτογραφησειι το πορτοφολι. - Decrypt wallet Αποκρυπτογράφησε το πορτοφολι - Change passphrase Άλλαξε κωδικο πρόσβασης - Enter the old and new passphrase to the wallet. Εισάγετε τον παλιό και τον νεο κωδικο στο πορτοφολι. - Confirm wallet encryption Επιβεβαίωσε την κρυπτογραφηση του πορτοφολιού - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! Προσοχη: Εαν κρυπτογραφησεις το πορτοφολι σου και χάσεις τον κωδικο σου θα χάσεις <b> ΟΛΑ ΣΟΥ ΤΑ MYRIADCOINS</b>! Είσαι σίγουρος ότι θέλεις να κρυπτογραφησεις το πορτοφολι; - Are you sure you wish to encrypt your wallet? Είστε σίγουροι ότι θέλετε να κρυπτογραφήσετε το πορτοφόλι σας; - 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. ΣΗΜΑΝΤΙΚΟ: Τα προηγούμενα αντίγραφα ασφαλείας που έχετε κάνει από το αρχείο του πορτοφόλιου σας θα πρέπει να αντικατασταθουν με το νέο που δημιουργείται, κρυπτογραφημένο αρχείο πορτοφόλιου. Για λόγους ασφαλείας, τα προηγούμενα αντίγραφα ασφαλείας του μη κρυπτογραφημένου αρχείου πορτοφόλιου θα καταστουν άχρηστα μόλις αρχίσετε να χρησιμοποιείτε το νέο κρυπτογραφημένο πορτοφόλι. - - Warning: The Caps Lock key is on! Προσοχη: το πλήκτρο Caps Lock είναι ενεργο. - - Wallet encrypted Κρυπτογραφημενο πορτοφολι - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. - Το Myriadcoin θα κλεισει τώρα για να τελειώσει την διαδικασία κρυπτογραφησης. Θυμησου ότι κρυπτογραφώντας το πορτοφολι σου δεν μπορείς να προστατέψεις πλήρως τα myriadcoins σου από κλοπή στην περίπτωση όπου μολυνθεί ο υπολογιστής σου με κακόβουλο λογισμικο. + Το Myriadcoin θα κλεισει τώρα για να τελειώσει την διαδικασία κρυπτογραφησης. Θυμησου ότι κρυπτογραφώντας το πορτοφολι σου δεν μπορείς να προστατέψεις πλήρως τα myriadcoins σου από κλοπή στην περίπτωση όπου μολυνθεί ο υπολογιστής σου με κακόβουλο λογισμικό. - - - - Wallet encryption failed Η κρυπτογραφηση του πορτοφολιού απέτυχε - Wallet encryption failed due to an internal error. Your wallet was not encrypted. Η κρυπτογράφηση του πορτοφολιού απέτυχε λογω εσωτερικού σφάλματος. Το πορτοφολι δεν κρυπτογραφηθηκε. - - The supplied passphrases do not match. Οι εισαχθέντες κωδικοί δεν ταιριάζουν. - Wallet unlock failed το ξεκλείδωμα του πορτοφολιού απέτυχε - - - The passphrase entered for the wallet decryption was incorrect. Ο κωδικος που εισήχθη για την αποκρυπτογραφηση του πορτοφολιού ήταν λαθος. - Wallet decryption failed Η αποκρυπτογραφηση του πορτοφολιού απέτυχε - Wallet passphrase was successfully changed. Ο κωδικος του πορτοφολιού άλλαξε με επιτυχία. @@ -324,321 +261,286 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - Sign &message... Υπογραφή &Μηνύματος... - Synchronizing with network... Συγχρονισμός με το δίκτυο... - &Overview &Επισκόπηση - - Show general overview of wallet - Εμφάνισε γενική εικονα του πορτοφολιού + Node + + + + Show general overview of wallet + Εμφάνισε τη γενική εικόνα του πορτοφολιού - &Transactions &Συναλλαγές - Browse transaction history - Περιήγηση στο ιστορικο συνναλαγων + Περιήγηση στο ιστορικό συναλλαγών - - Edit the list of stored addresses and labels - Εξεργασια της λιστας των αποθηκευμενων διευθύνσεων και ετικετων - - - - Show the list of addresses for receiving payments - Εμφάνισε την λίστα των διευθύνσεων για την παραλαβή πληρωμων - - - E&xit Έ&ξοδος - Quit application Εξοδος από την εφαρμογή - Show information about Myriadcoin - Εμφάνισε πληροφορίες σχετικά με το Myriadcoin + Εμφάνιση πληροφοριών σχετικά με το Myriadcoin - About &Qt Σχετικά με &Qt - Show information about Qt Εμφάνισε πληροφορίες σχετικά με Qt - &Options... &Επιλογές... - &Encrypt Wallet... &Κρυπτογράφησε το πορτοφόλι - &Backup Wallet... &Αντίγραφο ασφαλείας του πορτοφολιού - &Change Passphrase... &Άλλαξε κωδικο πρόσβασης - + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + Importing blocks from disk... Εισαγωγή μπλοκ από τον σκληρο δίσκο ... - Reindexing blocks on disk... Φόρτωση ευρετηρίου μπλοκ στον σκληρο δισκο... - Send coins to a Myriadcoin address - Στείλε νομισματα σε μια διεύθυνση myriadcoin + Στείλε νομίσματα σε μια διεύθυνση bitcoin - Modify configuration options for Myriadcoin Επεργασία ρυθμισεων επιλογών για το Myriadcoin - Backup wallet to another location Δημιουργία αντιγράφου ασφαλείας πορτοφολιού σε άλλη τοποθεσία - Change the passphrase used for wallet encryption Αλλαγή του κωδικού κρυπτογράφησης του πορτοφολιού - &Debug window &Παράθυρο αποσφαλμάτωσης - Open debugging and diagnostic console Άνοιγμα κονσόλας αποσφαλμάτωσης και διαγνωστικών - &Verify message... &Επιβεβαίωση μηνύματος - - Myriadcoin Myriadcoin - Wallet Πορτοφόλι - &Send &Αποστολή - &Receive &Παραλαβή - - &Addresses - &Διεύθυνσεις - - - - &About Myriadcoin - &Σχετικα:Myriadcoin - - - &Show / Hide &Εμφάνισε/Κρύψε - Show or hide the main Window Εμφάνιση ή αποκρύψη του κεντρικου παράθυρου - Encrypt the private keys that belong to your wallet Κρυπτογραφήστε τα ιδιωτικά κλειδιά που ανήκουν στο πορτοφόλι σας - Sign messages with your Myriadcoin addresses to prove you own them Υπογράψτε ένα μήνυμα για να βεβαιώσετε πως είστε ο κάτοχος αυτής της διεύθυνσης - Verify messages to ensure they were signed with specified Myriadcoin addresses Υπογράψτε ένα μήνυμα για ν' αποδείξετε πως ανήκει μια συγκεκριμένη διεύθυνση Myriadcoin - &File &Αρχείο - &Settings &Ρυθμίσεις - &Help &Βοήθεια - Tabs toolbar Εργαλειοθήκη καρτελών - - [testnet] [testnet] - + Myriadcoin Core + Myriadcoin Core + + + Request payments (generates QR codes and myriadcoin: URIs) + Αίτηση πληρωμών (δημιουργεί QR codes και διευθύνσεις myriadcoin: ) + + + &About Myriadcoin Core + &Σχετικά με το Myriadcoin Core + + + Show the list of used sending addresses and labels + Προβολή της λίστας των χρησιμοποιημένων διευθύνσεων και ετικετών αποστολής + + + Show the list of used receiving addresses and labels + Προβολή της λίστας των χρησιμοποιημένων διευθύνσεων και ετικετών λήψεως + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + Myriadcoin client Πελάτης Myriadcoin - %n active connection(s) to Myriadcoin network %n ενεργή σύνδεση στο δίκτυο Myriadcoin%n ενεργές συνδέσεις στο δίκτυο Βitcoin - No block source available... Η πηγή του μπλοκ δεν ειναι διαθέσιμη... - Processed %1 of %2 (estimated) blocks of transaction history. - Μεταποιημένα %1 απο % 2 (κατ 'εκτίμηση) μπλοκ της ιστορίας της συναλλαγής. + Μεταποιημένα %1 απο %2 (κατ 'εκτίμηση) μπλοκ της ιστορίας της συναλλαγής. - Processed %1 blocks of transaction history. Έγινε λήψη %1 μπλοκ ιστορικού συναλλαγών - %n hour(s) %n ώρες %n ώρες - %n day(s) %n ημέρες %n ημέρες - %n week(s) %n εβδομαδες%n εβδομαδες - + %1 and %2 + %1 και %2 + + + %n year(s) + %n έτος%n έτη + + %1 behind %1 πίσω - Last received block was generated %1 ago. Το τελευταίο μπλοκ που ελήφθη δημιουργήθηκε %1 πριν. - Transactions after this will not yet be visible. Οι συναλλαγές μετά από αυτό δεν θα είναι ακόμη ορατες. - Error Σφάλμα - Warning Προειδοποίηση - Information Πληροφορία - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - Η συναλλαγή ξεπερνάει το όριο. -Μπορεί να ολοκληρωθεί με μια αμοιβή των %1, η οποία αποδίδεται στους κόμβους που επεξεργάζονται τις συναλλαγές και βοηθούν στην υποστήριξη του δικτύου. -Θέλετε να συνεχίσετε; - - - Up to date Ενημερωμένο - Catching up... Ενημέρωση... - - Confirm transaction fee - Επιβεβαίωση αμοιβής συναλλαγής - - - Sent transaction Η συναλλαγή απεστάλη - Incoming transaction Εισερχόμενη συναλλαγή - Date: %1 Amount: %2 Type: %3 @@ -651,29 +553,14 @@ Address: %4 - - - URI handling - Χειρισμός URI - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - Το URI δεν μπορεί να αναλυθεί! Αυτό μπορεί να προκληθεί από μια μη έγκυρη διεύθυνση Myriadcoin ή ακατάλληλη παραμέτρο URI. - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> Το πορτοφόλι είναι <b>κρυπτογραφημένο</b> και <b>ξεκλείδωτο</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> Το πορτοφόλι είναι <b>κρυπτογραφημένο</b> και <b>κλειδωμένο</b> - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. Παρουσιάστηκε ανεπανόρθωτο σφάλμα. Το Myriadcoin δεν μπορεί πλέον να συνεχίσει με ασφάλεια και θα τερματισθει. @@ -681,329 +568,648 @@ Address: %4 ClientModel - Network Alert Ειδοποίηση Δικτύου + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + Ποσότητα: + + + Bytes: + Bytes: + + + Amount: + Ποσό: + + + Priority: + Προτεραιότητα: + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + Ρέστα: + + + (un)select all + (από)επιλογή όλων + + + Tree mode + + + + List mode + + + + Amount + Ποσό + + + Address + Διεύθυνση + + + Date + Ημερομηνία + + + Confirmations + Επικυρώσεις + + + Confirmed + Επικυρωμένες + + + Priority + Προτεραιότητα + + + Copy address + Αντιγραφή διεύθυνσης + + + Copy label + Αντιγραφή επιγραφής + + + Copy amount + Αντιγραφή ποσού + + + Copy transaction ID + Αντιγραφη του ID Συναλλαγής + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + Αντιγραφή ποσότητας + + + Copy fee + + + + Copy after fee + + + + Copy bytes + Αντιγραφή των byte + + + Copy priority + Αντιγραφή προτεραιότητας + + + Copy low output + + + + Copy change + Αντιγραφή των ρέστων + + + highest + ύψιστη + + + higher + υψηλότερη + + + high + ψηλή + + + medium-high + μεσαία-ψηλή + + + medium + μεσαία + + + low-medium + μεσαία-χαμηλή + + + low + χαμηλή + + + lower + χαμηλότερη + + + lowest + χαμηλότατη + + + (%1 locked) + (%1 κλειδωμένο) + + + none + κανένα + + + Dust + + + + yes + ναι + + + no + όχι + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + (χωρίς ετικέτα) + + + change from %1 (%2) + ρέστα από %1 (%2) + + + (change) + (ρέστα) + + + EditAddressDialog - Edit Address Επεξεργασία Διεύθυνσης - &Label &Επιγραφή - - The label associated with this address book entry - Η επιγραφή που σχετίζεται με αυτή την καταχώρηση του βιβλίου διευθύνσεων + The label associated with this address list entry + Η ετικέτα που συνδέεται με αυτήν την καταχώρηση στο βιβλίο διευθύνσεων + + + The address associated with this address list entry. This can only be modified for sending addresses. + - &Address &Διεύθυνση - - The address associated with this address book entry. This can only be modified for sending addresses. - Η διεύθυνση που σχετίζεται με αυτή την καταχώρηση του βιβλίου διευθύνσεων. Μπορεί να τροποποιηθεί μόνο για τις διευθύνσεις αποστολής. - - - New receiving address Νέα διεύθυνση λήψης - New sending address Νέα διεύθυνση αποστολής - Edit receiving address Επεξεργασία διεύθυνσης λήψης - Edit sending address Επεξεργασία διεύθυνσης αποστολής - The entered address "%1" is already in the address book. Η διεύθυνση "%1" βρίσκεται ήδη στο βιβλίο διευθύνσεων. - The entered address "%1" is not a valid Myriadcoin address. Η διεύθυνση "%1" δεν είναι έγκυρη Myriadcoin διεύθυνση. - Could not unlock wallet. Δεν είναι δυνατό το ξεκλείδωμα του πορτοφολιού. - New key generation failed. Η δημιουργία νέου κλειδιού απέτυχε. - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt - myriadcoin-qt + A new data directory will be created. + Θα δημιουργηθεί ένας νέος φάκελος δεδομένων. + + + name + όνομα + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + Δεν μπορεί να δημιουργηθεί φάκελος δεδομένων εδώ. + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core + Myriadcoin Core - version έκδοση - Usage: Χρήση: - command-line options επιλογής γραμμής εντολών - UI options επιλογές UI - Set language, for example "de_DE" (default: system locale) Όρισε γλώσσα, για παράδειγμα "de_DE"(προεπιλογή:τοπικές ρυθμίσεις) - Start minimized Έναρξη ελαχιστοποιημένο - + Set SSL root certificates for payment request (default: -system-) + + + Show splash screen on startup (default: 1) Εμφάνισε την οθόνη εκκίνησης κατά την εκκίνηση(προεπιλογή:1) + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + Καλώς ήρθατε + + + Welcome to Myriadcoin Core. + Καλώς ήρθατε στο Myriadcoin Core. + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + Καθώς αυτή είναι η πρώτη φορά που εκκινείται το πρόγραμμα, μπορείτε να διαλέξετε πού θα αποθηκεύει το Myriadcoin Core τα δεδομένα του. + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + Χρήση του προεπιλεγμένου φακέλου δεδομένων + + + Use a custom data directory: + Προσαρμογή του φακέλου δεδομένων: + + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" can not be created. + Σφάλμα: Ο καθορισμένος φάκελος δεδομένων "%1" δεν μπορεί να δημιουργηθεί. + + + Error + Σφάλμα + + + GB of free space available + GB ελεύθερου χώρου διαθέσιμα + + + (of %1GB needed) + (από τα %1GB που χρειάζονται) + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open + + OptionsDialog - Options Ρυθμίσεις - &Main &Κύριο - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Η προαιρετική αμοιβή για κάθε kB επισπεύδει την επεξεργασία των συναλλαγών σας. Οι περισσότερες συναλλαγές είναι 1 kB. - Pay transaction &fee Αμοιβή &συναλλαγής - Automatically start Myriadcoin after logging in to the system. Αυτόματη εκκίνηση του Myriadcoin μετά την εισαγωγή στο σύστημα - &Start Myriadcoin on system login &Έναρξη του Βιtcoin κατά την εκκίνηση του συστήματος - + Size of &database cache + + + + MB + MB + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + Reset all client options to default. Επαναφορα όλων των επιλογων του πελάτη σε default. - &Reset Options Επαναφορα ρυθμίσεων - &Network &Δίκτυο - + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + Έμπειρος + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. Αυτόματο άνοιγμα των θυρών Myriadcoin στον δρομολογητή. Λειτουργεί μόνο αν ο δρομολογητής σας υποστηρίζει τη λειτουργία UPnP. - Map port using &UPnP Απόδοση θυρών με χρήστη &UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - Σύνδεση στο Myriadcoin δίκτυο μέσω διαμεσολαβητή SOCKS4 (π.χ. για σύνδεση μέσω Tor) - - - - &Connect through SOCKS proxy: - &Σύνδεση μέσω διαμεσολαβητή SOCKS - - - Proxy &IP: &IP διαμεσολαβητή: - - IP address of the proxy (e.g. 127.0.0.1) - Διεύθυνση IP του διαμεσολαβητή (π.χ. 127.0.0.1) - - - &Port: &Θύρα: - Port of the proxy (e.g. 9050) Θύρα διαμεσολαβητή - SOCKS &Version: SOCKS &Έκδοση: - SOCKS version of the proxy (e.g. 5) SOCKS εκδοση του διαμεσολαβητη (e.g. 5) - &Window &Παράθυρο - Show only a tray icon after minimizing the window. Εμφάνιση μόνο εικονιδίου στην περιοχή ειδοποιήσεων κατά την ελαχιστοποίηση - &Minimize to the tray instead of the taskbar &Ελαχιστοποίηση στην περιοχή ειδοποιήσεων αντί της γραμμής εργασιών - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. Ελαχιστοποίηση αντί για έξοδο κατά το κλείσιμο του παραθύρου - M&inimize on close Ε&λαχιστοποίηση κατά το κλείσιμο - &Display - %Απεικόνιση + &Απεικόνιση - User Interface &language: Γλώσσα περιβάλλοντος εργασίας: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. Εδώ μπορεί να ρυθμιστεί η γλώσσα διεπαφής χρήστη. Αυτή η ρύθμιση θα ισχύσει μετά την επανεκκίνηση του Myriadcoin. - &Unit to show amounts in: &Μονάδα μέτρησης: - Choose the default subdivision unit to show in the interface and when sending coins. Διαλέξτε την προεπιλεγμένη υποδιαίρεση που θα εμφανίζεται όταν στέλνετε νομίσματα. - Whether to show Myriadcoin addresses in the transaction list or not. Επιλέξτε αν θέλετε να εμφανίζονται οι διευθύνσεις Myriadcoin στη λίστα συναλλαγών. - &Display addresses in transaction list Εμφάνιση διευθύνσεων στη λίστα συναλλαγών - + Whether to show coin control features or not. + + + &OK &ΟΚ - &Cancel &Ακύρωση - - &Apply - &Εφαρμογή - - - default προεπιλογή - + none + κανένα + + Confirm options reset Επιβεβαιώση των επιλογων επαναφοράς - - Some settings may require a client restart to take effect. - Για ορισμένες ρυθμίσεις πρεπει η επανεκκίνηση να τεθεί σε ισχύ. + Client restart required to activate changes. + Χρειάζεται επανεκκίνηση του προγράμματος για να ενεργοποιηθούν οι αλλαγές. - - Do you want to proceed? - Θέλετε να προχωρήσετε; + Client will be shutdown, do you want to proceed? + - - - Warning - Προειδοποίηση + This change would require a client restart. + - - - This setting will take effect after restarting Myriadcoin. - Αυτή η ρύθμιση θα ισχύσει μετά την επανεκκίνηση του Myriadcoin. - - - The supplied proxy address is invalid. Δεν είναι έγκυρη η διεύθυνση διαμεσολαβητή @@ -1011,59 +1217,54 @@ Address: %4 OverviewPage - Form Φόρμα - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. Οι πληροφορίες που εμφανίζονται μπορεί να είναι ξεπερασμένες. Το πορτοφόλι σας συγχρονίζεται αυτόματα με το δίκτυο Myriadcoin μετά από μια σύνδεση, αλλά αυτή η διαδικασία δεν έχει ακόμη ολοκληρωθεί. - - Balance: - Υπόλοιπο - - - - Unconfirmed: - Ανεπιβεβαίωτες - - - Wallet Πορτοφόλι - + Available: + Διαθέσιμο: + + + Your current spendable balance + Το τρέχον διαθέσιμο υπόλοιπο + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + Το άθροισμα των συναλλαγών που δεν έχουν ακόμα επιβεβαιωθεί και δεν προσμετρώνται στο τρέχον διαθέσιμο υπόλοιπό σας + + Immature: Ανώριμος - Mined balance that has not yet matured Εξορυγμενο υπόλοιπο που δεν έχει ακόμα ωριμάσει - + Total: + Σύνολο: + + + Your current total balance + Το τρέχον συνολικό υπόλοιπο + + <b>Recent transactions</b> <b>Πρόσφατες συναλλαγές</b> - - Your current balance - Το τρέχον υπόλοιπο - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - Το άθροισμα των συναλλαγών που δεν έχουν ακόμα επιβεβαιωθεί και δεν προσμετρώνται στο τρέχον υπόλοιπό σας - - - - out of sync εκτός συγχρονισμού @@ -1071,579 +1272,856 @@ Address: %4 PaymentServer - + URI handling + Χειρισμός URI + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + Το URI δεν μπορεί να αναλυθεί! Αυτό μπορεί να προκληθεί από μια μη έγκυρη διεύθυνση Myriadcoin ή ακατάλληλη παραμέτρο URI. + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + Σφάλμα αιτήματος πληρωμής + + Cannot start myriadcoin: click-to-pay handler - Δεν είναι δυνατή η εκκίνηση του Myriadcoin: click-to-pay handler + Δεν είναι δυνατή η εκκίνηση του Bitcoin: click-to-pay handler + + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + Πληρωμή αναγνωρίστηκε + + + Network request error + Σφάλμα αιτήματος δικτύου - QRCodeDialog + QObject - - QR Code Dialog - Κώδικας QR + Myriadcoin + Myriadcoin - - Request Payment - Αίτηση πληρωμής + Error: Specified data directory "%1" does not exist. + Σφάλμα: Ο καθορισμένος φάκελος δεδομένων "%1" δεν υπάρχει. - - Amount: - Ποσό: + Error: Cannot parse configuration file: %1. Only use key=value syntax. + - - Label: - Επιγραφή: + Error: Invalid combination of -regtest and -testnet. + Σφάλμα: Άκυρος συνδυασμός των -regtest και -testnet - - Message: - Μήνυμα: + Myriadcoin Core didn't yet exit safely... + - - &Save As... - &Αποθήκευση ως... + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Εισάγετε μια διεύθυνση Myriadcoin (π.χ. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + &Αποθήκευση εικόνας... - - Error encoding URI into QR Code. - Σφάλμα κατά την κωδικοποίηση του URI σε κώδικα QR + &Copy Image + &Αντιγραφή εικόνας - - The entered amount is invalid, please check. - Το αναγραφόμενο ποσό δεν είναι έγκυρο, παρακαλούμε να το ελέγξετε. - - - - Resulting URI too long, try to reduce the text for label / message. - Το αποτέλεσμα της διεύθυνσης είναι πολύ μεγάλο. Μειώστε το μέγεθος για το κείμενο της ετικέτας/ μηνύματος. - - - Save QR Code Αποθήκευση κώδικα QR - - PNG Images (*.png) + PNG Image (*.png) Εικόνες PNG (*.png) RPCConsole - Client name Όνομα Πελάτη - - - - - - - - - - N/A Μη διαθέσιμο - Client version Έκδοση Πελάτη - &Information &Πληροφορία - + Debug window + Παράθυρο αποσφαλμάτωσης + + + General + Γενικά + + Using OpenSSL version Χρησιμοποιηση της OpenSSL εκδοσης - Startup time Χρόνος εκκίνησης - Network Δίκτυο - + Name + Όνομα + + Number of connections Αριθμός συνδέσεων - - On testnet - Στο testnet - - - Block chain - αλυσίδα εμποδισμού + Αλυσίδα μπλοκ - Current number of blocks Τρέχον αριθμός μπλοκ - Estimated total blocks Κατ' εκτίμηση συνολικά μπλοκς - Last block time Χρόνος τελευταίου μπλοκ - &Open &Άνοιγμα - - Command-line options - επιλογής γραμμής εντολών - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - Εμφανιση του Myriadcoin-Qt μήνυματος βοήθειας για να πάρετε μια λίστα με τις πιθανές επιλογές Myriadcoin γραμμής εντολών. - - - - &Show - &Εμφάνιση - - - &Console &Κονσόλα - + &Network Traffic + &Κίνηση δικτύου + + + &Clear + &Εκκαθάριση + + + Totals + Σύνολα + + + In: + Εισερχόμενα: + + + Out: + Εξερχόμενα: + + Build date Ημερομηνία κατασκευής - - Myriadcoin - Debug window - Myriadcoin - Παράθυρο αποσφαλμάτωσης - - - - Myriadcoin Core - Myriadcoin Core - - - Debug log file Αρχείο καταγραφής εντοπισμού σφαλμάτων - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. Ανοίξτε το αρχείο καταγραφής εντοπισμού σφαλμάτων από τον τρέχοντα κατάλογο δεδομένων. Αυτό μπορεί να πάρει μερικά δευτερόλεπτα για τα μεγάλα αρχεία καταγραφής. - Clear console Καθαρισμός κονσόλας - Welcome to the Myriadcoin RPC console. Καλώς ήρθατε στην Myriadcoin RPC κονσόλα. - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. Χρησιμοποιήστε το πάνω και κάτω βέλος για να περιηγηθείτε στο ιστορικο, και <b>Ctrl-L</b> για εκκαθαριση οθονης. - Type <b>help</b> for an overview of available commands. - Γράψτε <b>βοήθεια</b> για μια επισκόπηση των διαθέσιμων εντολών + Γράψτε <b>help</b> για μια επισκόπηση των διαθέσιμων εντολών + + + %1 B + %1 B + + + %1 KB + %1 KB + + + %1 MB + %1 MB + + + %1 GB + %1 GB + + + %1 m + %1 λ + + + %1 h + %1 ώ + + + %1 h %2 m + %1 ώ %2 λ + + + + ReceiveCoinsDialog + + &Amount: + &Ποσό: + + + &Label: + &Επιγραφή + + + &Message: + &Μήνυμα: + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + Καθαρισμός όλων των πεδίων της φόρμας. + + + Clear + Καθαρισμός + + + Requested payments history + + + + &Request payment + &Αίτηση πληρωμής + + + Show the selected request (does the same as double clicking an entry) + + + + Show + Εμφάνιση + + + Remove the selected entries from the list + + + + Remove + Αφαίρεση + + + Copy label + Αντιγραφή επιγραφής + + + Copy message + Αντιγραφή μηνύματος + + + Copy amount + Αντιγραφή ποσού + + + + ReceiveRequestDialog + + QR Code + Κώδικας QR + + + Copy &URI + + + + Copy &Address + + + + &Save Image... + &Αποθήκευση εικόνας... + + + Request payment to %1 + + + + Payment information + Πληροφορίες πληρωμής + + + URI + + + + Address + Διεύθυνση + + + Amount + Ποσό + + + Label + Ετικέτα + + + Message + Μήνυμα + + + Resulting URI too long, try to reduce the text for label / message. + Το αποτέλεσμα της διεύθυνσης είναι πολύ μεγάλο. Μειώστε το μέγεθος για το κείμενο της ετικέτας/ μηνύματος. + + + Error encoding URI into QR Code. + Σφάλμα κατά την κωδικοποίηση του URI σε κώδικα QR + + + + RecentRequestsTableModel + + Date + Ημερομηνία + + + Label + Ετικέτα + + + Message + Μήνυμα + + + Amount + Ποσό + + + (no label) + (χωρίς ετικέτα) + + + (no message) + (κανένα μήνυμα) + + + (no amount) + (κανένα ποσό) SendCoinsDialog - - - - - - - - Send Coins Αποστολή νομισμάτων - + Coin Control Features + + + + Inputs... + + + + automatically selected + επιλεγμένο αυτόματα + + + Insufficient funds! + Ανεπαρκές κεφάλαιο! + + + Quantity: + Ποσότητα: + + + Bytes: + Bytes: + + + Amount: + Ποσό: + + + Priority: + Προτεραιότητα: + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + Ρέστα: + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + Send to multiple recipients at once Αποστολή σε πολλούς αποδέκτες ταυτόχρονα - Add &Recipient &Προσθήκη αποδέκτη - - Remove all transaction fields - Διαγραφή όλων των πεδίων συναλλαγής + Clear all fields of the form. + Καθαρισμός όλων των πεδίων της φόρμας. - Clear &All Καθαρισμός &Όλων - Balance: Υπόλοιπο: - - 123.456 BTC - 123,456 BTC - - - Confirm the send action Επιβεβαίωση αποστολής - S&end Αποστολη - - <b>%1</b> to %2 (%3) - <b>%1</b> σε %2 (%3) - - - Confirm send coins Επιβεβαίωση αποστολής νομισμάτων - - Are you sure you want to send %1? - Είστε βέβαιοι για την αποστολή %1; + %1 to %2 + %1 σε %2 - - and - και + Copy quantity + Αντιγραφή ποσότητας + + + Copy amount + Αντιγραφή ποσού + + + Copy fee + + + + Copy after fee + + + + Copy bytes + Αντιγραφή των byte + + + Copy priority + Αντιγραφή προτεραιότητας + + + Copy low output + + + + Copy change + Αντιγραφή των ρέστων + + + Total Amount %1 (= %2) + Ολικό Ποσό %1 (= %2) + + + or + ή - The recipient address is not valid, please recheck. Η διεύθυνση του αποδέκτη δεν είναι σωστή. Παρακαλώ ελέγξτε ξανά. - The amount to pay must be larger than 0. Το ποσό πληρωμής πρέπει να είναι μεγαλύτερο από 0. - The amount exceeds your balance. Το ποσό ξεπερνάει το διαθέσιμο υπόλοιπο - The total exceeds your balance when the %1 transaction fee is included. Το σύνολο υπερβαίνει το υπόλοιπό σας όταν συμπεριληφθεί και η αμοιβή %1 - Duplicate address found, can only send to each address once per send operation. Βρέθηκε η ίδια διεύθυνση δύο φορές. Επιτρέπεται μία μόνο εγγραφή για κάθε διεύθυνση, σε κάθε διαδικασία αποστολής. - - Error: Transaction creation failed! - Σφάλμα: Η δημιουργία της συναλλαγής απέτυχε + Transaction creation failed! + Η δημιουργία της συναλλαγής απέτυχε! - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Σφάλμα: Η συναλλαγή απερρίφθη. Αυτό ενδέχεται να συμβαίνει αν κάποια από τα νομίσματα έχουν ήδη ξοδευθεί, όπως αν χρησιμοποιήσατε αντίγραφο του wallet.dat και τα νομίσματα ξοδεύθηκαν εκεί. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + Προειδοποίηση: Μη έγκυρη διεύθυνση Myriadcoin + + + (no label) + (χωρίς ετικέτα) + + + Warning: Unknown change address + + + + Are you sure you want to send? + Είστε βέβαιοι για την αποστολή; + + + added as transaction fee + προστέθηκαν ως αμοιβή συναλλαγής + + + Payment request expired + Έληξε η αίτηση πληρωμής + + + Invalid payment address %1 + Μη έγκυρη διεύθυνση πληρωμής %1 SendCoinsEntry - - Form - Φόρμα - - - A&mount: &Ποσό: - Pay &To: Πληρωμή &σε: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Διεύθυνση αποστολής της πληρωμής (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book Εισάγετε μια επιγραφή για αυτή τη διεύθυνση ώστε να καταχωρηθεί στο βιβλίο διευθύνσεων - &Label: &Επιγραφή - - Choose address from address book - Επιλογή διεύθυνσης από το βιβλίο διευθύνσεων + Choose previously used address + Επιλογή διεύθυνσης που έχει ήδη χρησιμοποιηθεί + + + This is a normal payment. + - Alt+A Alt+A - Paste address from clipboard Επικόλληση διεύθυνσης από το πρόχειρο - Alt+P Alt+P - - Remove this recipient - Αφαίρεση αποδέκτη + Remove this entry + Αφαίρεση αυτής της καταχώρησης - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Εισάγετε μια διεύθυνση Myriadcoin (π.χ. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + Μήνυμα: + + + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + Πληρωμή σε: + + + Memo: + Σημείωση: + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + Το Myriadcoin Core τερματίζεται... + + + Do not shut down the computer until this window disappears. + Μην απενεργοποιήσετε τον υπολογιστή μέχρι να κλείσει αυτό το παράθυρο. SignVerifyMessageDialog - Signatures - Sign / Verify a Message Υπογραφές - Είσοδος / Επαλήθευση μήνυματος - &Sign Message &Υπογραφή Μηνύματος - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. Μπορείτε να υπογράφετε μηνύματα με τις διευθύνσεις σας, ώστε ν' αποδεικνύετε πως αυτές σας ανήκουν. Αποφεύγετε να υπογράφετε κάτι αόριστο καθώς ενδέχεται να εξαπατηθείτε. Υπογράφετε μόνο πλήρης δηλώσεις με τις οποίες συμφωνείτε. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Εισάγετε μια διεύθυνση Myriadcoin (π.χ. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book - Επιλογή διεύθυνσης από το βιβλίο διευθύνσεων + Choose previously used address + Επιλογή διεύθυνσης που έχει ήδη χρησιμοποιηθεί - - Alt+A Alt+A - Paste address from clipboard Επικόλληση διεύθυνσης από το βιβλίο διευθύνσεων - Alt+P Alt+P - Enter the message you want to sign here Εισάγετε εδώ το μήνυμα που θέλετε να υπογράψετε - Signature Υπογραφή - Copy the current signature to the system clipboard Αντέγραφη της επιλεγμενης διεύθυνσης στο πρόχειρο του συστηματος - Sign the message to prove you own this Myriadcoin address Υπογράψτε ένα μήνυμα για ν' αποδείξετε πως σας ανήκει μια συγκεκριμένη διεύθυνση Myriadcoin - Sign &Message Υπογραφη μήνυματος - Reset all sign message fields Επαναφορά όλων των πεδίων μήνυματος - - Clear &All Καθαρισμός &Όλων - &Verify Message &Επιβεβαίωση μηνύματος - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Πληκτρολογήστε την υπογραφή διεύθυνσης, μήνυμα (βεβαιωθείτε ότι έχετε αντιγράψει τις αλλαγές γραμμής, κενά, tabs, κ.λπ. ακριβώς) και την υπογραφή παρακάτω, για να ελέγξει το μήνυμα. Να είστε προσεκτικοί για να μην διαβάσετε περισσότερα στην υπογραφή ό, τι είναι στην υπογραφή ίδιο το μήνυμα , για να μην εξαπατηθούν από έναν άνθρωπο -in - the-middle επίθεση. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Εισάγετε μια διεύθυνση Myriadcoin (π.χ. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address Υπογράψτε ένα μήνυμα για ν' αποδείξετε πως υπογραφθηκε απο μια συγκεκριμένη διεύθυνση Myriadcoin - Verify &Message Επιβεβαίωση μηνύματος - Reset all verify message fields Επαναφορά όλων επαλήθευμενων πεδίων μήνυματος - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Εισάγετε μια διεύθυνση Myriadcoin (π.χ. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature Κάντε κλικ στο "Υπογραφή Μηνύματος" για να λάβετε την υπογραφή - - Enter Myriadcoin signature - Εισαγωγή υπογραφής Myriadcoin - - - - The entered address is invalid. Η διεύθυνση που εισήχθη είναι λάθος. - - - - Please check the address and try again. Παρακαλούμε ελέγξτε την διεύθυνση και δοκιμάστε ξανά. - - The entered address does not refer to a key. Η διεύθυνση που έχει εισαχθεί δεν αναφέρεται σε ένα πλήκτρο. - Wallet unlock was cancelled. το ξεκλείδωμα του πορτοφολιού απέτυχε - Private key for the entered address is not available. Το προσωπικό κλειδί εισαγμενης διευθυνσης δεν είναι διαθέσιμο. - Message signing failed. Η υπογραφή του μηνύματος απέτυχε. - Message signed. Μήνυμα υπεγράφη. - The signature could not be decoded. Η υπογραφή δεν μπόρεσε να αποκρυπτογραφηθεί. - - Please check the signature and try again. Παρακαλούμε ελέγξτε την υπογραφή και δοκιμάστε ξανά. - The signature did not match the message digest. Η υπογραφή δεν ταιριάζει με το μήνυμα. - Message verification failed. Η επιβεβαίωση του μηνύματος απέτυχε - Message verified. Μήνυμα επιβεβαιώθηκε. @@ -1651,186 +2129,160 @@ Address: %4 SplashScreen - - The Myriadcoin developers - Οι Myriadcoin προγραμματιστές + Myriadcoin Core + Myriadcoin Core + + + The Myriadcoin Core developers + Οι προγραμματιστές του Myriadcoin Core - [testnet] [testnet] + + TrafficGraphWidget + + KB/s + KB/s + + TransactionDesc - Open until %1 Ανοιχτό μέχρι %1 - + conflicted + + + %1/offline %1/χωρίς σύνδεση; - %1/unconfirmed %1/χωρίς επιβεβαίωση - %1 confirmations %1 επιβεβαιώσεις - Status Κατάσταση - , broadcast through %n node(s) , έχει μεταδοθεί μέσω %n κόμβων, έχει μεταδοθεί μέσω %n κόμβων - Date Ημερομηνία - Source Πηγή - Generated Δημιουργία - - From Από - - - To Προς - - own address δική σας διεύθυνση - label eπιγραφή - - - - - Credit Πίστωση - matures in %n more block(s) ωρίμανση σε %n επιπλέον μπλοκωρίμανση σε %n επιπλέον μπλοκ - not accepted μη αποδεκτό - - - - Debit Debit - Transaction fee Τέλος συναλλαγής - Net amount Καθαρό ποσό - Message Μήνυμα - Comment Σχόλιο: - Transaction ID ID Συναλλαγής: - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Πρέπει να περιμένετε 120 μπλοκ πριν μπορέσετε να χρησιμοποιήσετε τα νομίσματα που έχετε δημιουργήσει. Το μπλοκ που δημιουργήσατε μεταδόθηκε στο δίκτυο για να συμπεριληφθεί στην αλυσίδα των μπλοκ. Αν δεν μπει σε αυτή θα μετατραπεί σε "μη αποδεκτό" και δε θα μπορεί να καταναλωθεί. Αυτό συμβαίνει σπάνια όταν κάποιος άλλος κόμβος δημιουργήσει ένα μπλοκ λίγα δευτερόλεπτα πριν από εσάς. + Merchant + Έμπορος + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + - Debug information Πληροφορίες αποσφαλμάτωσης - Transaction Συναλλαγή - Inputs εισροές - Amount Ποσό - true αληθής - false αναληθής - , has not been successfully broadcast yet , δεν έχει ακόμα μεταδοθεί μ' επιτυχία - Open for %n more block(s) Ανοιχτό για %n μπλοκΑνοιχτό για %n μπλοκ - unknown άγνωστο @@ -1838,12 +2290,10 @@ Address: %4 TransactionDescDialog - Transaction details Λεπτομέρειες συναλλαγής - This pane shows a detailed description of the transaction Αυτό το παράθυρο δείχνει μια λεπτομερή περιγραφή της συναλλαγής @@ -1851,117 +2301,102 @@ Address: %4 TransactionTableModel - Date Ημερομηνία - Type Τύπος - Address Διεύθυνση - Amount Ποσό + + Immature (%1 confirmations, will be available after %2) + + - Open for %n more block(s) Ανοιχτό για %n μπλοκΑνοιχτό για %n μπλοκ - Open until %1 Ανοιχτό μέχρι %1 - - Offline (%1 confirmations) - Χωρίς σύνδεση (%1 επικυρώσεις) - - - - Unconfirmed (%1 of %2 confirmations) - Χωρίς επιβεβαίωση (%1 από %2 επικυρώσεις) - - - Confirmed (%1 confirmations) Επικυρωμένη (%1 επικυρώσεις) - - - Mined balance will be available when it matures in %n more block(s) - Το υπόλοιπο από την εξόρυξη θα είναι διαθέσιμο μετά από %n μπλοκΤο υπόλοιπο από την εξόρυξη θα είναι διαθέσιμο μετά από %n μπλοκ - - This block was not received by any other nodes and will probably not be accepted! Αυτό το μπλοκ δεν έχει παραληφθεί από κανέναν άλλο κόμβο και κατά πάσα πιθανότητα θα απορριφθεί! - Generated but not accepted Δημιουργήθηκε αλλά απορρίφθηκε - + Offline + Offline + + + Unconfirmed + Ανεπιβεβαίωτες + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + Received with Παραλαβή με - Received from Ελήφθη από - Sent to Αποστολή προς - Payment to yourself Πληρωμή προς εσάς - Mined Εξόρυξη - (n/a) (δ/α) - Transaction status. Hover over this field to show number of confirmations. Κατάσταση συναλλαγής. Πηγαίνετε το ποντίκι πάνω από αυτό το πεδίο για να δείτε τον αριθμό των επικυρώσεων - Date and time that the transaction was received. Ημερομηνία κι ώρα λήψης της συναλλαγής. - Type of transaction. Είδος συναλλαγής. - Destination address of transaction. Διεύθυνση αποστολής της συναλλαγής. - Amount removed from or added to balance. Ποσό που αφαιρέθηκε ή προστέθηκε στο υπόλοιπο. @@ -1969,176 +2404,156 @@ Address: %4 TransactionView - - All Όλα - Today Σήμερα - This week Αυτή την εβδομάδα - This month Αυτόν τον μήνα - Last month Τον προηγούμενο μήνα - This year Αυτό το έτος - Range... Έκταση... - Received with Ελήφθη με - Sent to Απεστάλη προς - To yourself Προς εσάς - Mined Εξόρυξη - Other Άλλο - Enter address or label to search Αναζήτηση με βάση τη διεύθυνση ή την επιγραφή - Min amount Ελάχιστο ποσό - Copy address Αντιγραφή διεύθυνσης - Copy label Αντιγραφή επιγραφής - Copy amount Αντιγραφή ποσού - Copy transaction ID Αντιγραφη του ID Συναλλαγής - Edit label Επεξεργασία επιγραφής - Show transaction details Εμφάνιση λεπτομερειών συναλλαγής - - Export Transaction Data - Εξαγωγή Στοιχείων Συναλλαγών + Export Transaction History + Εξαγωγή Ιστορικού Συναλλαγών + + + Exporting Failed + Η Εξαγωγή Απέτυχε + + + There was an error trying to save the transaction history to %1. + Yπήρξε σφάλμα κατά την προσπάθεια αποθήκευσης του ιστορικού συναλλαγών στο %1. + + + Exporting Successful + Επιτυχής εξαγωγή + + + The transaction history was successfully saved to %1. + - Comma separated file (*.csv) Αρχείο οριοθετημένο με κόμματα (*.csv) - Confirmed Επικυρωμένες - Date Ημερομηνία - Type Τύπος - Label Επιγραφή - Address Διεύθυνση - Amount Ποσό - ID ID - - Error exporting - Σφάλμα εξαγωγής - - - - Could not write to file %1. - Αδυναμία εγγραφής στο αρχείο %1. - - - Range: Έκταση: - to έως + + WalletFrame + + No wallet has been loaded. + Δεν έχει φορτωθεί πορτοφόλι + + WalletModel - Send Coins Αποστολή νομισμάτων @@ -2146,160 +2561,121 @@ Address: %4 WalletView - &Export &Εξαγωγή - Export the data in the current tab to a file Εξαγωγή δεδομένων καρτέλας σε αρχείο - Backup Wallet Αντίγραφο ασφαλείας του πορτοφολιού - Wallet Data (*.dat) Αρχεία δεδομένων πορτοφολιού (*.dat) - Backup Failed Αποτυχία κατά τη δημιουργία αντιγράφου - - There was an error trying to save the wallet data to the new location. - Παρουσιάστηκε σφάλμα κατά την αποθήκευση των δεδομένων πορτοφολιού στη νέα τοποθεσία. + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. + Τα δεδομένα πορτοφολιού αποθηκεύτηκαν με επιτυχία στο %1. - Backup Successful Η δημιουργια αντιγραφου ασφαλειας πετυχε - - - The wallet data was successfully saved to the new location. - Τα δεδομένα πορτοφόλιου αποθηκεύτηκαν με επιτυχία στη νέα θέση. - bitcoin-core - - Myriadcoin version - Έκδοση Myriadcoin - - - Usage: Χρήση: - - Send command to -server or myriadcoind - Αποστολή εντολής στον εξυπηρετητή ή στο myriadcoind - - - List commands Λίστα εντολών - Get help for a command Επεξήγηση εντολής - Options: Επιλογές: - Specify configuration file (default: myriadcoin.conf) Ορίστε αρχείο ρυθμίσεων (προεπιλογή: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) Ορίστε αρχείο pid (προεπιλογή: myriadcoind.pid) - Specify data directory Ορισμός φακέλου δεδομένων - - Set database cache size in megabytes (default: 25) - Όρισε το μέγεθος της βάσης προσωρινής αποθήκευσης σε megabytes(προεπιλογή:25) - - - Listen for connections on <port> (default: 8333 or testnet: 18333) Εισερχόμενες συνδέσεις στη θύρα <port> (προεπιλογή: 8333 ή στο testnet: 18333) - Maintain at most <n> connections to peers (default: 125) Μέγιστες αριθμός συνδέσεων με τους peers <n> (προεπιλογή: 125) - Connect to a node to retrieve peer addresses, and disconnect Σύνδεση σε έναν κόμβο για την ανάκτηση διευθύνσεων από ομοτίμους, και αποσυνδέσh - Specify your own public address Διευκρινίστε τη δικιά σας δημόσια διεύθυνση. - Threshold for disconnecting misbehaving peers (default: 100) Όριο αποσύνδεσης προβληματικών peers (προεπιλογή: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Δευτερόλεπτα πριν επιτραπεί ξανά η σύνδεση των προβληματικών peers (προεπιλογή: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s Ένα σφάλμα συνέβη καθώς προετοιμαζόταν η πόρτα RPC %u για αναμονή IPv4: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) Εισερχόμενες συνδέσεις JSON-RPC στη θύρα <port> (προεπιλογή: 8332 or testnet: 18332) - Accept command line and JSON-RPC commands Αποδοχή εντολών κονσόλας και JSON-RPC - + Myriadcoin Core RPC client version + + + Run in the background as a daemon and accept commands Εκτέλεση στο παρασκήνιο κι αποδοχή εντολών - Use the test network Χρήση του δοκιμαστικού δικτύου - Accept connections from outside (default: 1 if no -proxy or -connect) Να δέχεσαι συνδέσεις από έξω(προεπιλογή:1) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2324,613 +2700,687 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s Ένα σφάλμα συνέβη καθώς προετοιμαζόταν η υποδοχη RPC %u για αναμονη του IPv6, επεσε πισω στο IPv4:%s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 Αποθηκευση σε συγκεκριμένη διεύθυνση. Χρησιμοποιήστε τα πλήκτρα [Host] : συμβολισμός θύρα για IPv6 - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. - Αδυναμία κλειδώματος του φακέλου δεδομένων %s. Πιθανώς το Myriadcoin να είναι ήδη ενεργό. + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) + - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. Σφάλμα: Η συναλλαγή απορρίφθηκε. Αυτό ίσως οφείλεται στο ότι τα νομίσματά σας έχουν ήδη ξοδευτεί, π.χ. με την αντιγραφή του wallet.dat σε άλλο σύστημα και την χρήση τους εκεί, χωρίς η συναλλαγή να έχει καταγραφεί στο παρόν σύστημα. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! Σφάλμα: Αυτή η συναλλαγή απαιτεί αμοιβή συναλλαγής τουλάχιστον %s λόγω του μεγέθους, πολυπλοκότητας ή της χρήσης πρόσφατης παραλαβής κεφαλαίου - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - Εκτέλεση της εντολής όταν το καλύτερο μπλοκ αλλάξει(%s στην εντολή αντικαθίσταται από το hash του μπλοκ) - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Εκτέλεσε την εντολή όταν το καλύτερο μπλοκ αλλάξει(%s στην εντολή αντικαθίσταται από το hash του μπλοκ) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - Ορίστε το μέγιστο μέγεθος των high-priority/low-fee συναλλαγων σε bytes (προεπιλογή: 27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications Αυτό είναι ένα προ-τεστ κυκλοφορίας - χρησιμοποιήστε το με δική σας ευθύνη - δεν χρησιμοποιείτε για εξόρυξη ή για αλλες εφαρμογές - + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Προειδοποίηση: Η παράμετρος -paytxfee είναι πολύ υψηλή. Πρόκειται για την αμοιβή που θα πληρώνετε για κάθε συναλλαγή που θα στέλνετε. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - Προειδοποίηση: Εμφανίσεις συναλλαγων δεν μπορεί να είναι σωστες! Μπορεί να χρειαστεί να αναβαθμίσετε, ή άλλοι κόμβοι μπορεί να χρειαστεί να αναβαθμίστουν. - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. Προειδοποίηση: Παρακαλώ βεβαιωθείτε πως η ημερομηνία κι ώρα του συστήματός σας είναι σωστές. Αν το ρολόι του υπολογιστή σας πάει λάθος, ενδέχεται να μη λειτουργεί σωστά το Myriadcoin. - + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Προειδοποίηση : Σφάλμα wallet.dat κατα την ανάγνωση ! Όλα τα κλειδιά αναγνωρισθηκαν σωστά, αλλά τα δεδομένα των συναλλαγών ή καταχωρήσεις στο βιβλίο διευθύνσεων μπορεί να είναι ελλιπείς ή λανθασμένα. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - Προειδοποίηση : το αρχειο wallet.dat ειναι διεφθαρμένο, τα δεδομένα σώζονται ! Original wallet.dat αποθηκεύονται ως πορτοφόλι { timestamp } bak στο % s ? . . Αν το υπόλοιπο του ή τις συναλλαγές σας, είναι λάθος θα πρέπει να επαναφέρετε από ένα αντίγραφο ασφαλείας + Προειδοποίηση : το αρχειο wallet.dat ειναι διεφθαρμένο, τα δεδομένα σώζονται ! Original wallet.dat αποθηκεύονται ως wallet.{timestamp}.bak στο %s . Αν το υπόλοιπο του ή τις συναλλαγές σας, είναι λάθος θα πρέπει να επαναφέρετε από ένα αντίγραφο ασφαλείας + + + (default: 1) + (προεπιλογή: 1) + + + (default: wallet.dat) + (προεπιλογή: wallet.dat) + + + <category> can be: + - Attempt to recover private keys from a corrupt wallet.dat Προσπάθεια για ανακτησει ιδιωτικων κλειδιων από ενα διεφθαρμένο αρχειο wallet.dat - + Myriadcoin Core Daemon + + + Block creation options: Αποκλεισμός επιλογων δημιουργίας: - + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + Connect only to the specified node(s) Σύνδεση μόνο με ορισμένους κόμβους - + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + Επιλογές σύνδεσης: + + Corrupted block database detected Εντοπισθηκε διεφθαρμενη βαση δεδομενων των μπλοκ - + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + Discover own IP address (default: 1 when listening and no -externalip) Ανακαλύψτε την δικη σας IP διεύθυνση (προεπιλογή: 1 όταν ακούει και δεν - externalip) - + Do not load the wallet and disable wallet RPC calls + + + Do you want to rebuild the block database now? Θελετε να δημιουργηθει τωρα η βαση δεδομενων του μπλοκ? - Error initializing block database Σφάλμα κατά την ενεργοποίηση της βάσης δεδομένων μπλοκ - Error initializing wallet database environment %s! Σφάλμα κατά την ενεργοποίηση της βάσης δεδομένων πορτοφόλιου %s! - Error loading block database Σφάλμα φορτωσης της βασης δεδομενων των μπλοκ - Error opening block database Σφάλμα φορτωσης της βασης δεδομενων των μπλοκ - Error: Disk space is low! Προειδοποίηση: Χαμηλός χώρος στο δίσκο - Error: Wallet locked, unable to create transaction! Σφάλμα: το πορτοφόλι είναι κλειδωμένο, δεν μπορεί να δημιουργηθεί συναλλαγή - Error: system error: Λάθος: λάθος συστήματος: - Failed to listen on any port. Use -listen=0 if you want this. ταλαιπωρηθειτε για να ακούσετε σε οποιαδήποτε θύρα. Χρήση - ακούστε = 0 , αν θέλετε αυτό. - Failed to read block info Αποτυχία αναγνωσης των block πληροφοριων - Failed to read block Η αναγνωση του μπλοκ απετυχε - Failed to sync block index Ο συγχρονισμος του μπλοκ ευρετηριου απετυχε - Failed to write block index Η δημιουργια του μπλοκ ευρετηριου απετυχε - Failed to write block info Η δημιουργια των μπλοκ πληροφοριων απετυχε - Failed to write block Η δημιουργια του μπλοκ απετυχε - Failed to write file info Αδυναμία εγγραφής πληροφοριων αρχειου - Failed to write to coin database Αποτυχία εγγραφής στη βάση δεδομένων νομίσματος - Failed to write transaction index Αποτυχία εγγραφής δείκτη συναλλαγών - Failed to write undo data Αποτυχία εγγραφής αναίρεσης δεδομένων - + Fee per kB to add to transactions you send + Προσθήκη αμοιβής ανά kB στις συναλλαγές που στέλνετε + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + Find peers using DNS lookup (default: 1 unless -connect) Βρες ομότιμους υπολογιστές χρησιμοποιώντας αναζήτηση DNS(προεπιλογή:1) - + Force safe mode (default: 0) + + + Generate coins (default: 0) Δημιουργία νομισμάτων (προκαθορισμος: 0) - How many blocks to check at startup (default: 288, 0 = all) Πόσα μπλοκ να ελέγχθουν κατά την εκκίνηση (προεπιλογή:288,0=όλα) - - How thorough the block verification is (0-4, default: 3) - Πόσο εξονυχιστική να είναι η επιβεβαίωση του μπλοκ(0-4, προεπιλογή:3) + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' + Άκυρη διεύθυνση -onion : '%s' - Not enough file descriptors available. Δεν ειναι αρκετες περιγραφες αρχείων διαθέσιμες. - + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + Rebuild block chain index from current blk000??.dat files Εισαγωγή μπλοκ από εξωτερικό αρχείο blk000?.dat - + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + Set the number of threads to service RPC calls (default: 4) Ορίσμος του αριθμόυ θεματων στην υπηρεσία κλήσεων RPC (προεπιλογή: 4) - + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + Verifying blocks... Επαλήθευση των μπλοκ... - Verifying wallet... Επαλήθευση πορτοφολιου... - + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + Επιλογές πορτοφολιού: + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + + + Imports blocks from external blk000??.dat file Εισαγωγή μπλοκ από εξωτερικό αρχείο blk000?.dat - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) - Ορίσμος του αριθμό των νημάτων ελέγχου σεναρίου (μέχρι 16, 0 = auto, <0 = αφήνουν τους πολλους πυρήνες δωρεάν, default: 0) + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + - Information Πληροφορία - - Invalid -tor address: '%s' - Δεν είναι έγκυρη η διεύθυνση διαμεσολαβητή: '%s' - - - Invalid amount for -minrelaytxfee=<amount>: '%s' Μη έγκυρο ποσό για την παράμετρο -paytxfee=<amount>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' Μη έγκυρο ποσό για την παράμετρο -paytxfee=<amount>: '%s' - + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + Maintain a full transaction index (default: 0) Διατηρήση ένος πλήρες ευρετήριου συναλλαγών (προεπιλογή: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) Μέγιστος buffer λήψης ανά σύνδεση, <n>*1000 bytes (προεπιλογή: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) Μέγιστος buffer αποστολής ανά σύνδεση, <n>*1000 bytes (προεπιλογή: 1000) - Only accept block chain matching built-in checkpoints (default: 1) Μονο αποδοχη αλυσίδας μπλοκ που ταιριάζει με τα ενσωματωμένα σημεία ελέγχου (προεπιλογή: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Συνδέση μόνο σε κόμβους του δικτύου <net> (IPv4, IPv6 ή Tor) - - Output extra debugging information. Implies all other -debug* options - Έξοδος επιπλέον πληροφοριών εντοπισμού σφαλμάτων + Print block on startup, if found in block index + - - Output extra network debugging information - Έξοδος επιπλέον πληροφοριών εντοπισμού σφαλμάτων + Print block tree on startup (default: 0) + - - Prepend debug output with timestamp - Χρονοσφραγίδα πληροφοριών εντοπισμού σφαλμάτων + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) Ρυθμίσεις SSL: (ανατρέξτε στο Myriadcoin Wiki για οδηγίες ρυθμίσεων SSL) - - Select the version of socks proxy to use (4-5, default: 5) - Επιλέξτε την έκδοση του διαμεσολαβητη για να χρησιμοποιήσετε (4-5 , προεπιλογή: 5) + Send command to Myriadcoin Core + - Send trace/debug info to console instead of debug.log file Αποστολή πληροφοριών εντοπισμού σφαλμάτων στην κονσόλα αντί του αρχείου debug.log - - Send trace/debug info to debugger - Αποστολή πληροφοριών εντοπισμού σφαλμάτων στον debugger - - - - Set maximum block size in bytes (default: 250000) - Ορίσμος του μέγιστου μέγεθος block σε bytes (προεπιλογή: 250000) - - - Set minimum block size in bytes (default: 0) - Ορίστε το μέγιστο μέγεθος block σε bytes (προεπιλογή: 0) + Ορίστε το μέγιστο μέγεθος μπλοκ σε bytes (προεπιλογή: 0) + + + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + - Shrink debug.log file on client startup (default: 1 when no -debug) Συρρίκνωση του αρχείο debug.log κατα την εκκίνηση του πελάτη (προεπιλογή: 1 όταν δεν-debug) - Signing transaction failed Η υπογραφή συναλλαγής απέτυχε - Specify connection timeout in milliseconds (default: 5000) Ορισμός λήξης χρονικού ορίου σε χιλιοστά του δευτερολέπτου(προεπιλογή:5000) - + Start Myriadcoin Core Daemon + + + System error: Λάθος Συστήματος: - Transaction amount too small Το ποσό της συναλλαγής είναι πολύ μικρο - Transaction amounts must be positive Τα ποσά των συναλλαγών πρέπει να είναι θετικα - Transaction too large Η συναλλαγή ειναι πολύ μεγάλη - Use UPnP to map the listening port (default: 0) Χρησιμοποίηση του UPnP για την χρήση της πόρτας αναμονής (προεπιλογή:0) - Use UPnP to map the listening port (default: 1 when listening) Χρησιμοποίηση του UPnP για την χρήση της πόρτας αναμονής (προεπιλογή:1) - - Use proxy to reach tor hidden services (default: same as -proxy) - Χρήση διακομιστή μεσολάβησης για την επίτευξη των Tor κρυμμένων υπηρεσιων (προεπιλογή: ίδιο με το-proxy) - - - Username for JSON-RPC connections Όνομα χρήστη για τις συνδέσεις JSON-RPC - Warning Προειδοποίηση - Warning: This version is obsolete, upgrade required! Προειδοποίηση: Αυτή η έκδοση είναι ξεπερασμένη, απαιτείται αναβάθμιση - - You need to rebuild the databases using -reindex to change -txindex - Θα πρέπει να ξαναχτίστουν οι βάσεις δεδομένων που χρησιμοποιούντε-Αναδημιουργία αλλάγων-txindex + Zapping all transactions from wallet... + + + + on startup + κατά την εκκίνηση + + + version + έκδοση - wallet.dat corrupt, salvage failed Το αρχειο wallet.dat ειναι διεφθαρμένο, η διάσωση απέτυχε - Password for JSON-RPC connections Κωδικός για τις συνδέσεις JSON-RPC - Allow JSON-RPC connections from specified IP address Αποδοχή συνδέσεων JSON-RPC από συγκεκριμένη διεύθυνση IP - Send commands to node running on <ip> (default: 127.0.0.1) Αποστολή εντολών στον κόμβο <ip> (προεπιλογή: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) Εκτέλεσε την εντολή όταν το καλύτερο μπλοκ αλλάξει(%s στην εντολή αντικαθίσταται από το hash του μπλοκ) - Upgrade wallet to latest format Αναβάθμισε το πορτοφόλι στην τελευταία έκδοση - Set key pool size to <n> (default: 100) Όριο πλήθους κλειδιών pool <n> (προεπιλογή: 100) - Rescan the block chain for missing wallet transactions Επανέλεγχος της αλυσίδας μπλοκ για απούσες συναλλαγές - Use OpenSSL (https) for JSON-RPC connections Χρήση του OpenSSL (https) για συνδέσεις JSON-RPC - Server certificate file (default: server.cert) Αρχείο πιστοποιητικού του διακομιστή (προεπιλογή: server.cert) - Server private key (default: server.pem) Προσωπικό κλειδί του διακομιστή (προεπιλογή: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Αποδεκτά κρυπτογραφήματα (προεπιλογή: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - This help message Αυτό το κείμενο βοήθειας - Unable to bind to %s on this computer (bind returned error %d, %s) Αδύνατη η σύνδεση με τη θύρα %s αυτού του υπολογιστή (bind returned error %d, %s) - - Connect through socks proxy - Σύνδεση μέσω διαμεσολαβητή socks - - - Allow DNS lookups for -addnode, -seednode and -connect Να επιτρέπονται οι έλεγχοι DNS για προσθήκη και σύνδεση κόμβων - Loading addresses... Φόρτωση διευθύνσεων... - Error loading wallet.dat: Wallet corrupted Σφάλμα φόρτωσης wallet.dat: Κατεστραμμένο Πορτοφόλι - Error loading wallet.dat: Wallet requires newer version of Myriadcoin Σφάλμα φόρτωσης wallet.dat: Το Πορτοφόλι απαιτεί μια νεότερη έκδοση του Myriadcoin - Wallet needed to be rewritten: restart Myriadcoin to complete Απαιτείται η επανεγγραφή του Πορτοφολιού, η οποία θα ολοκληρωθεί στην επανεκκίνηση του Myriadcoin - Error loading wallet.dat Σφάλμα φόρτωσης αρχείου wallet.dat - Invalid -proxy address: '%s' Δεν είναι έγκυρη η διεύθυνση διαμεσολαβητή: '%s' - Unknown network specified in -onlynet: '%s' Άγνωστo δίκτυο ορίζεται σε onlynet: '%s' - Unknown -socks proxy version requested: %i Άγνωστo δίκτυο ορίζεται: %i - Cannot resolve -bind address: '%s' Δεν μπορώ να γράψω την προεπιλεγμένη διεύθυνση: '%s' - Cannot resolve -externalip address: '%s' Δεν μπορώ να γράψω την προεπιλεγμένη διεύθυνση: '%s' - Invalid amount for -paytxfee=<amount>: '%s' Μη έγκυρο ποσό για την παράμετρο -paytxfee=<amount>: '%s' - Invalid amount Λάθος ποσότητα - Insufficient funds Ανεπαρκές κεφάλαιο - Loading block index... Φόρτωση ευρετηρίου μπλοκ... - Add a node to connect to and attempt to keep the connection open Προσέθεσε ένα κόμβο για σύνδεση και προσπάθησε να κρατήσεις την σύνδεση ανοιχτή - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - Αδύνατη η σύνδεση με τη θύρα %s αυτού του υπολογιστή. Το Myriadcoin είναι πιθανώς ήδη ενεργό. - - - - Fee per KB to add to transactions you send - Αμοιβή ανά KB που θα προστίθεται στις συναλλαγές που στέλνεις - - - Loading wallet... Φόρτωση πορτοφολιού... - Cannot downgrade wallet Δεν μπορώ να υποβαθμίσω το πορτοφόλι - Cannot write default address Δεν μπορώ να γράψω την προεπιλεγμένη διεύθυνση - Rescanning... Ανίχνευση... - Done loading Η φόρτωση ολοκληρώθηκε - To use the %s option Χρήση της %s επιλογής - Error Σφάλμα - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_en.ts b/src/qt/locale/bitcoin_en.ts index d12b0ed0..4338a180 100644 --- a/src/qt/locale/bitcoin_en.ts +++ b/src/qt/locale/bitcoin_en.ts @@ -1,18 +1,17 @@ - -UTF-8 + AboutDialog - About Myriadcoin - About Myriadcoin + About Myriadcoin Core + - <b>Myriadcoin</b> version - <b>Myriadcoin</b> version + <b>Myriadcoin Core</b> version + @@ -30,25 +29,26 @@ Distributed under the MIT/X11 software license, see the accompanying file COPYIN This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - + Copyright Copyright - The Myriadcoin developers - The Myriadcoin developers + The Myriadcoin Core developers + + + + + + (%1-bit) + AddressBookPage - - Address Book - Address Book - - - + Double-click to edit address or label Double-click to edit address or label @@ -58,42 +58,32 @@ This product includes software developed by the OpenSSL Project for use in the O Create a new address - + + &New + + + + Copy the currently selected address to the system clipboard Copy the currently selected address to the system clipboard - - &New Address - &New Address + + &Copy + - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + + C&lose + - + &Copy Address &Copy Address - - Show &QR Code - Show &QR Code - - - - Sign a message to prove you own a Myriadcoin address - Sign a message to prove you own a Myriadcoin address - - - - Sign &Message - Sign &Message - - - + Delete the currently selected address from the list Delete the currently selected address from the list @@ -108,27 +98,47 @@ This product includes software developed by the OpenSSL Project for use in the O &Export - - Verify a message to ensure it was signed with a specified Myriadcoin address - Verify a message to ensure it was signed with a specified Myriadcoin address - - - - &Verify Message - &Verify Message - - - + &Delete &Delete - + + Choose the address to send coins to + + + + + Choose the address to receive coins with + + + + + C&hoose + + + + + Sending addresses + + + + + Receiving addresses + + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + + Copy &Label Copy &Label @@ -138,14 +148,9 @@ This product includes software developed by the OpenSSL Project for use in the O &Edit - - Send &Coins - Send &Coins - - - - Export Address Book Data - Export Address Book Data + + Export Address List + @@ -154,19 +159,19 @@ This product includes software developed by the OpenSSL Project for use in the O - Error exporting - Error exporting + Exporting Failed + - - Could not write to file %1. - Could not write to file %1. + + There was an error trying to save the address list to %1. + AddressTableModel - + Label Label @@ -204,7 +209,7 @@ This product includes software developed by the OpenSSL Project for use in the O Repeat new passphrase - + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. @@ -325,22 +330,27 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - + Sign &message... Sign &message... - + Synchronizing with network... Synchronizing with network... - + &Overview &Overview - + + Node + + + + Show general overview of wallet Show general overview of wallet @@ -355,17 +365,7 @@ This product includes software developed by the OpenSSL Project for use in the O Browse transaction history - - Edit the list of stored addresses and labels - Edit the list of stored addresses and labels - - - - Show the list of addresses for receiving payments - Show the list of addresses for receiving payments - - - + E&xit E&xit @@ -380,12 +380,13 @@ This product includes software developed by the OpenSSL Project for use in the O Show information about Myriadcoin + About &Qt About &Qt - + Show information about Qt Show information about Qt @@ -410,7 +411,22 @@ This product includes software developed by the OpenSSL Project for use in the O &Change Passphrase... - + + &Sending addresses... + + + + + &Receiving addresses... + + + + + Open &URI... + + + + Importing blocks from disk... Importing blocks from disk... @@ -420,12 +436,12 @@ This product includes software developed by the OpenSSL Project for use in the O Reindexing blocks on disk... - + Send coins to a Myriadcoin address Send coins to a Myriadcoin address - + Modify configuration options for Myriadcoin Modify configuration options for Myriadcoin @@ -455,20 +471,17 @@ This product includes software developed by the OpenSSL Project for use in the O &Verify message... - - - + Myriadcoin Myriadcoin - - + Wallet Wallet - + &Send &Send @@ -478,18 +491,7 @@ This product includes software developed by the OpenSSL Project for use in the O &Receive - - &Addresses - &Addresses - - - - - &About Myriadcoin - &About Myriadcoin - - - + &Show / Hide &Show / Hide @@ -515,39 +517,80 @@ This product includes software developed by the OpenSSL Project for use in the O Verify messages to ensure they were signed with specified Myriadcoin addresses - + &File &File - + &Settings &Settings - + &Help &Help - + Tabs toolbar Tabs toolbar - - + + [testnet] [testnet] - + + Myriadcoin Core + Myriadcoin Core + + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + + + &About Myriadcoin Core + + + + + Show the list of used sending addresses and labels + + + + + Show the list of used receiving addresses and labels + + + + + Open a myriadcoin: URI or payment request + + + + + &Command-line options + + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + + Myriadcoin client Myriadcoin client - + %n active connection(s) to Myriadcoin network %n active connection to Myriadcoin network @@ -570,7 +613,7 @@ This product includes software developed by the OpenSSL Project for use in the O Processed %1 blocks of transaction history. - + %n hour(s) %n hour @@ -587,19 +630,33 @@ This product includes software developed by the OpenSSL Project for use in the O + %n week(s) %n week %n weeks + + + %1 and %2 + + + + + %n year(s) + + %n year + %n years + + %1 behind %1 behind - + Last received block was generated %1 ago. Last received block was generated %1 ago. @@ -609,7 +666,7 @@ This product includes software developed by the OpenSSL Project for use in the O Transactions after this will not yet be visible. - + Error Error @@ -624,27 +681,17 @@ This product includes software developed by the OpenSSL Project for use in the O Information - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - + Up to date Up to date - + Catching up... Catching up... - - Confirm transaction fee - Confirm transaction fee - - - + Sent transaction Sent transaction @@ -667,19 +714,7 @@ Address: %4 - - - URI handling - URI handling - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - - - + Wallet is <b>encrypted</b> and currently <b>unlocked</b> Wallet is <b>encrypted</b> and currently <b>unlocked</b> @@ -689,7 +724,7 @@ Address: %4 Wallet is <b>encrypted</b> and currently <b>locked</b> - + A fatal error occurred. Myriadcoin can no longer continue safely and will quit. A fatal error occurred. Myriadcoin can no longer continue safely and will quit. @@ -697,11 +732,303 @@ Address: %4 ClientModel - + Network Alert Network Alert + + CoinControlDialog + + + Coin Control Address Selection + + + + + Quantity: + + + + + Bytes: + + + + + Amount: + + + + + Priority: + + + + + Fee: + + + + + Low Output: + + + + + After Fee: + + + + + Change: + + + + + (un)select all + + + + + Tree mode + + + + + List mode + + + + + Amount + Amount + + + + Address + Address + + + + Date + Date + + + + Confirmations + + + + + Confirmed + Confirmed + + + + Priority + + + + + Copy address + Copy address + + + + Copy label + Copy label + + + + + Copy amount + Copy amount + + + + Copy transaction ID + Copy transaction ID + + + + Lock unspent + + + + + Unlock unspent + + + + + Copy quantity + + + + + Copy fee + + + + + Copy after fee + + + + + Copy bytes + + + + + Copy priority + + + + + Copy low output + + + + + Copy change + + + + + highest + + + + + higher + + + + + high + + + + + medium-high + + + + + medium + + + + + low-medium + + + + + low + + + + + lower + + + + + lowest + + + + + (%1 locked) + + + + + none + + + + + Dust + + + + + yes + + + + + no + + + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + + + This means a fee of at least %1 per kB is required. + + + + + Can vary +/- 1 byte per input. + + + + + Transactions with higher priority are more likely to get included into a block. + + + + + This label turns red, if the priority is smaller than "medium". + + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + + + This means a fee of at least %1 is required. + + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + + This label turns red, if the change is smaller than %1. + + + + + + (no label) + (no label) + + + + change from %1 (%2) + + + + + (change) + + + EditAddressDialog @@ -716,21 +1043,21 @@ Address: %4 - The label associated with this address book entry - The label associated with this address book entry + The label associated with this address list entry + - + + The address associated with this address list entry. This can only be modified for sending addresses. + + + + &Address &Address - - The address associated with this address book entry. This can only be modified for sending addresses. - The address associated with this address book entry. This can only be modified for sending addresses. - - - + New receiving address New receiving address @@ -771,47 +1098,175 @@ Address: %4 - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt - Myriadcoin-Qt + + A new data directory will be created. + A new data directory will be created. - + + name + name + + + + Directory already exists. Add %1 if you intend to create a new directory here. + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + Path already exists, and is not a directory. + + + + Cannot create data directory here. + Cannot create data directory here. + + + + HelpMessageDialog + + + Myriadcoin Core - Command-line options + + + + + Myriadcoin Core + Myriadcoin Core + + + version - version + version Usage: - Usage: + Usage: command-line options - command-line options + command-line options UI options - UI options + UI options - + Set language, for example "de_DE" (default: system locale) - Set language, for example "de_DE" (default: system locale) + Set language, for example "de_DE" (default: system locale) Start minimized - Start minimized + Start minimized + + + + Set SSL root certificates for payment request (default: -system-) + Show splash screen on startup (default: 1) - Show splash screen on startup (default: 1) + Show splash screen on startup (default: 1) + + + + Choose data directory on startup (default: 0) + Choose data directory on startup (default: 0) + + + + Intro + + + Welcome + Welcome + + + + Welcome to Myriadcoin Core. + + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + + Use the default data directory + Use the default data directory + + + + Use a custom data directory: + Use a custom data directory: + + + + Myriadcoin + Myriadcoin + + + + Error: Specified data directory "%1" can not be created. + Error: Specified data directory "%1" can not be created. + + + + Error + Error + + + + GB of free space available + GB of free space available + + + + (of %1GB needed) + (of %1GB needed) + + + + OpenURIDialog + + + Open URI + + + + + Open payment request from URI or file + + + + + URI: + + + + + Select payment request file + + + + + Select payment request file to open + @@ -822,12 +1277,12 @@ Address: %4 Options - + &Main &Main - + Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. @@ -837,7 +1292,7 @@ Address: %4 Pay transaction &fee - + Automatically start Myriadcoin after logging in to the system. Automatically start Myriadcoin after logging in to the system. @@ -847,7 +1302,53 @@ Address: %4 &Start Myriadcoin on system login - + + Size of &database cache + + + + + MB + + + + + Number of script &verification threads + + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + + &Connect through SOCKS proxy (default proxy): + + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + + + 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 |. + + + + + Third party transaction URLs + + + + + Active command-line options that override above options: + + + + Reset all client options to default. Reset all client options to default. @@ -857,12 +1358,42 @@ Address: %4 &Reset Options - + &Network &Network - + + (0 = auto, <0 = leave that many cores free) + + + + + W&allet + + + + + Expert + + + + + Enable coin &control features + + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + + &Spend unconfirmed change + + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -872,32 +1403,17 @@ Address: %4 Map port using &UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - - - - &Connect through SOCKS proxy: - &Connect through SOCKS proxy: - - - + Proxy &IP: Proxy &IP: - - IP address of the proxy (e.g. 127.0.0.1) - IP address of the proxy (e.g. 127.0.0.1) - - - + &Port: &Port: - + Port of the proxy (e.g. 9050) Port of the proxy (e.g. 9050) @@ -972,7 +1488,12 @@ Address: %4 &Display addresses in transaction list - + + Whether to show coin control features or not. + + + + &OK &OK @@ -982,44 +1503,38 @@ Address: %4 &Cancel - - &Apply - &Apply - - - + default default - + + none + + + + Confirm options reset Confirm options reset - Some settings may require a client restart to take effect. - Some settings may require a client restart to take effect. - - - - Do you want to proceed? - Do you want to proceed? - - - - - Warning - Warning - - - - - This setting will take effect after restarting Myriadcoin. - This setting will take effect after restarting Myriadcoin. - - + Client restart required to activate changes. + + + + + Client will be shutdown, do you want to proceed? + + + + + This change would require a client restart. + + + + The supplied proxy address is invalid. The supplied proxy address is invalid. @@ -1033,24 +1548,19 @@ Address: %4 - + The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. - - Unconfirmed: - Unconfirmed: - - - + Wallet Wallet - - Confirmed: - Confirmed: + + Available: + @@ -1058,12 +1568,17 @@ Address: %4 Your current spendable balance - + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance - + Immature: Immature: @@ -1073,7 +1588,7 @@ Address: %4 Mined balance that has not yet matured - + Total: Total: @@ -1083,12 +1598,12 @@ Address: %4 Your current total balance - + <b>Recent transactions</b> <b>Recent transactions</b> - + out of sync out of sync @@ -1097,67 +1612,153 @@ Address: %4 PaymentServer - - Cannot start myriadcoin: click-to-pay handler - Cannot start myriadcoin: click-to-pay handler + + + URI handling + URI handling - - - QRCodeDialog - - QR Code Dialog - QR Code Dialog + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + + + + + + + Payment request error + + + + + Cannot start myriadcoin: click-to-pay handler + + + + + Net manager warning + + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + + Payment request fetch URL is invalid: %1 + + + + + Payment request file handling + + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + + Unverified payment requests to custom payment scripts are unsupported. + - Request Payment - Request Payment + Refund from %1 + - - Amount: - Amount: + + Error communicating with %1: %2 + - - Label: - Label: + + Payment request can not be parsed or processed! + - - Message: - Message: + + Bad response from server %1 + - - &Save As... - &Save As... + + Payment acknowledged + - - Error encoding URI into QR Code. - Error encoding URI into QR Code. + + Network request error + + + + + QObject + + + + + Myriadcoin + Myriadcoin - - The entered amount is invalid, please check. - The entered amount is invalid, please check. + + Error: Specified data directory "%1" does not exist. + Error: Specified data directory "%1" does not exist. - - Resulting URI too long, try to reduce the text for label / message. - Resulting URI too long, try to reduce the text for label / message. + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + - + + Error: Invalid combination of -regtest and -testnet. + + + + + Myriadcoin Core didn't yet exit safely... + + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + + &Save Image... + + + + + &Copy Image + + + + Save QR Code - Save QR Code + Save QR Code - PNG Images (*.png) - PNG Images (*.png) + PNG Image (*.png) + @@ -1174,15 +1775,16 @@ Address: %4 - + + - + N/A N/A - + Client version Client version @@ -1192,7 +1794,17 @@ Address: %4 &Information - + + Debug window + + + + + General + + + + Using OpenSSL version Using OpenSSL version @@ -1208,16 +1820,16 @@ Address: %4 + Name + + + + Number of connections Number of connections - - On testnet - On testnet - - - + Block chain Block chain @@ -1241,43 +1853,45 @@ Address: %4 &Open &Open - - - Command-line options - Command-line options - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - - - - &Show - &Show - &Console &Console - + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + Build date Build date - - Myriadcoin - Debug window - Myriadcoin - Debug window - - - - Myriadcoin Core - Myriadcoin Core - - - + Debug log file Debug log file @@ -1287,12 +1901,12 @@ Address: %4 Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. - + Clear console Clear console - + Welcome to the Myriadcoin RPC console. Welcome to the Myriadcoin RPC console. @@ -1306,23 +1920,335 @@ Address: %4 Type <b>help</b> for an overview of available commands. Type <b>help</b> for an overview of available commands. + + + %1 B + + + + + %1 KB + + + + + %1 MB + + + + + %1 GB + + + + + %1 m + + + + + %1 h + + + + + %1 h %2 m + + + + + ReceiveCoinsDialog + + + &Amount: + + + + + &Label: + &Label: + + + + &Message: + + + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + + R&euse an existing receiving address (not recommended) + + + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + + + An optional label to associate with the new receiving address. + + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + + Clear all fields of the form. + + + + + Clear + + + + + Requested payments history + + + + + &Request payment + + + + + Show the selected request (does the same as double clicking an entry) + + + + + Show + + + + + Remove the selected entries from the list + + + + + Remove + + + + + Copy label + Copy label + + + + Copy message + + + + + Copy amount + Copy amount + + + + ReceiveRequestDialog + + + QR Code + + + + + Copy &URI + + + + + Copy &Address + + + + + &Save Image... + + + + + Request payment to %1 + + + + + Payment information + + + + + URI + + + + + Address + Address + + + + Amount + Amount + + + + Label + Label + + + + Message + Message + + + + Resulting URI too long, try to reduce the text for label / message. + Resulting URI too long, try to reduce the text for label / message. + + + + Error encoding URI into QR Code. + Error encoding URI into QR Code. + + + + RecentRequestsTableModel + + + Date + Date + + + + Label + Label + + + + Message + Message + + + + Amount + Amount + + + + (no label) + (no label) + + + + (no message) + + + + + (no amount) + + SendCoinsDialog - - - - - - - + + Send Coins Send Coins - + + Coin Control Features + + + + + Inputs... + + + + + automatically selected + + + + + Insufficient funds! + + + + + Quantity: + + + + + Bytes: + + + + + Amount: + + + + + Priority: + + + + + Fee: + + + + + Low Output: + + + + + After Fee: + + + + + Change: + + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + + Custom change address + + + + Send to multiple recipients at once Send to multiple recipients at once @@ -1332,9 +2258,9 @@ Address: %4 Add &Recipient - - Remove all transaction fields - Remove all transaction fields + + Clear all fields of the form. + @@ -1342,17 +2268,12 @@ Address: %4 Clear &All - + Balance: Balance: - - 123.456 BTC - 123.456 BTC - - - + Confirm the send action Confirm the send action @@ -1362,102 +2283,180 @@ Address: %4 S&end - - - <b>%1</b> to %2 (%3) - <b>%1</b> to %2 (%3) - - - + Confirm send coins Confirm send coins + + + + + + %1 to %2 + + + + + Copy quantity + + - Are you sure you want to send %1? - Are you sure you want to send %1? + Copy amount + Copy amount - - and - and + + Copy fee + - + + Copy after fee + + + + + Copy bytes + + + + + Copy priority + + + + + Copy low output + + + + + Copy change + + + + + Total Amount %1 (= %2) + + + + + or + + + + The recipient address is not valid, please recheck. The recipient address is not valid, please recheck. - + The amount to pay must be larger than 0. The amount to pay must be larger than 0. - + The amount exceeds your balance. The amount exceeds your balance. - + The total exceeds your balance when the %1 transaction fee is included. The total exceeds your balance when the %1 transaction fee is included. - + Duplicate address found, can only send to each address once per send operation. Duplicate address found, can only send to each address once per send operation. - - Error: Transaction creation failed! - Error: Transaction creation failed! + + Transaction creation failed! + - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + + Warning: Invalid Myriadcoin address + + + + + (no label) + (no label) + + + + Warning: Unknown change address + + + + + Are you sure you want to send? + + + + + added as transaction fee + + + + + Payment request expired + + + + + Invalid payment address %1 + SendCoinsEntry - - Form - Form - - - + + + A&mount: A&mount: - + Pay &To: Pay &To: - + The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - + Enter a label for this address to add it to your address book Enter a label for this address to add it to your address book - + &Label: &Label: - - Choose address from address book - Choose address from address book + + Choose previously used address + - + + This is a normal payment. + + + + Alt+A Alt+A @@ -1473,13 +2472,60 @@ Address: %4 - Remove this recipient - Remove this recipient + + + Remove this entry + - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + Message: + + + + + This is a verified payment request. + + + + + Enter a label for this address to add it to the list of used addresses + + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + + This is an unverified payment request. + + + + + + Pay To: + + + + + + Memo: + + + + + ShutdownWindow + + + Myriadcoin Core is shutting down... + + + + + Do not shut down the computer until this window disappears. + @@ -1490,7 +2536,7 @@ Address: %4 Signatures - Sign / Verify a Message - + &Sign Message &Sign Message @@ -1505,19 +2551,19 @@ Address: %4 The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book - Choose an address from the address book + + + Choose previously used address + - - + + Alt+A Alt+A - + Paste address from clipboard Paste address from clipboard @@ -1558,12 +2604,12 @@ Address: %4 - + Clear &All Clear &All - + &Verify Message &Verify Message @@ -1578,7 +2624,7 @@ Address: %4 The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - + Verify the message to ensure it was signed with the specified Myriadcoin address Verify the message to ensure it was signed with the specified Myriadcoin address @@ -1593,43 +2639,37 @@ Address: %4 Reset all verify message fields - - + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - + Click "Sign Message" to generate signature Click "Sign Message" to generate signature - - Enter Myriadcoin signature - Enter Myriadcoin signature - - - - + + The entered address is invalid. The entered address is invalid. - + - + Please check the address and try again. Please check the address and try again. - - + + The entered address does not refer to a key. The entered address does not refer to a key. - + Wallet unlock was cancelled. Wallet unlock was cancelled. @@ -1649,7 +2689,7 @@ Address: %4 Message signed. - + The signature could not be decoded. The signature could not be decoded. @@ -1678,9 +2718,14 @@ Address: %4 SplashScreen - - The Myriadcoin developers - The Myriadcoin developers + + Myriadcoin Core + Myriadcoin Core + + + + The Myriadcoin Core developers + @@ -1688,15 +2733,28 @@ Address: %4 [testnet] + + TrafficGraphWidget + + + KB/s + + + TransactionDesc - + Open until %1 Open until %1 + conflicted + + + + %1/offline %1/offline @@ -1711,7 +2769,7 @@ Address: %4 %1 confirmations - + Status Status @@ -1767,12 +2825,12 @@ Address: %4 - + Credit Credit - + matures in %n more block(s) matures in %n more block @@ -1788,12 +2846,12 @@ Address: %4 - + Debit Debit - + Transaction fee Transaction fee @@ -1804,11 +2862,12 @@ Address: %4 + Message Message - + Comment Comment @@ -1818,12 +2877,17 @@ Address: %4 Transaction ID - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + Merchant + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + Debug information Debug information @@ -1838,7 +2902,7 @@ Address: %4 Inputs - + Amount Amount @@ -1853,12 +2917,12 @@ Address: %4 false - + , has not been successfully broadcast yet , has not been successfully broadcast yet - + Open for %n more block(s) Open for %n more block @@ -1866,7 +2930,7 @@ Address: %4 - + unknown unknown @@ -1887,7 +2951,7 @@ Address: %4 TransactionTableModel - + Date Date @@ -1906,8 +2970,13 @@ Address: %4 Amount Amount + + + Immature (%1 confirmations, will be available after %2) + + - + Open for %n more block(s) Open for %n more block @@ -1920,30 +2989,12 @@ Address: %4 Open until %1 - - Offline (%1 confirmations) - Offline (%1 confirmations) - - - - Unconfirmed (%1 of %2 confirmations) - Unconfirmed (%1 of %2 confirmations) - - - + Confirmed (%1 confirmations) Confirmed (%1 confirmations) - - - Mined balance will be available when it matures in %n more block(s) - - Mined balance will be available when it matures in %n more block - Mined balance will be available when it matures in %n more blocks - - - + This block was not received by any other nodes and will probably not be accepted! This block was not received by any other nodes and will probably not be accepted! @@ -1953,7 +3004,27 @@ Address: %4 Generated but not accepted - + + Offline + + + + + Unconfirmed + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Conflicted + + + + Received with Received with @@ -1983,7 +3054,7 @@ Address: %4 (n/a) - + Transaction status. Hover over this field to show number of confirmations. Transaction status. Hover over this field to show number of confirmations. @@ -2011,7 +3082,7 @@ Address: %4 TransactionView - + All All @@ -2072,12 +3143,12 @@ Address: %4 Other - + Enter address or label to search Enter address or label to search - + Min amount Min amount @@ -2112,17 +3183,37 @@ Address: %4 Show transaction details - - Export Transaction Data - Export Transaction Data + + Export Transaction History + - + + Exporting Failed + + + + + There was an error trying to save the transaction history to %1. + + + + + Exporting Successful + + + + + The transaction history was successfully saved to %1. + + + + Comma separated file (*.csv) Comma separated file (*.csv) - + Confirmed Confirmed @@ -2157,17 +3248,7 @@ Address: %4 ID - - Error exporting - Error exporting - - - - Could not write to file %1. - Could not write to file %1. - - - + Range: Range: @@ -2177,10 +3258,18 @@ Address: %4 to + + WalletFrame + + + No wallet has been loaded. + + + WalletModel - + Send Coins Send Coins @@ -2188,7 +3277,7 @@ Address: %4 WalletView - + &Export &Export @@ -2198,70 +3287,60 @@ Address: %4 Export the data in the current tab to a file - + Backup Wallet Backup Wallet - + Wallet Data (*.dat) Wallet Data (*.dat) - + Backup Failed Backup Failed - There was an error trying to save the wallet data to the new location. - There was an error trying to save the wallet data to the new location. + There was an error trying to save the wallet data to %1. + - Backup Successful - Backup Successful + The wallet data was successfully saved to %1. + - The wallet data was successfully saved to the new location. - The wallet data was successfully saved to the new location. + Backup Successful + Backup Successful bitcoin-core - - Myriadcoin version - Myriadcoin version - - - + Usage: Usage: - - Send command to -server or myriadcoind - Send command to -server or myriadcoind - - - + List commands List commands - + Get help for a command Get help for a command - + Options: Options: - + Specify configuration file (default: myriadcoin.conf) Specify configuration file (default: myriadcoin.conf) @@ -2276,72 +3355,72 @@ Address: %4 Specify data directory - - Set database cache size in megabytes (default: 25) - Set database cache size in megabytes (default: 25) - - - + Listen for connections on <port> (default: 8333 or testnet: 18333) Listen for connections on <port> (default: 8333 or testnet: 18333) - + Maintain at most <n> connections to peers (default: 125) Maintain at most <n> connections to peers (default: 125) - + Connect to a node to retrieve peer addresses, and disconnect Connect to a node to retrieve peer addresses, and disconnect - + Specify your own public address Specify your own public address - + Threshold for disconnecting misbehaving peers (default: 100) Threshold for disconnecting misbehaving peers (default: 100) - + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - + An error occurred while setting up the RPC port %u for listening on IPv4: %s An error occurred while setting up the RPC port %u for listening on IPv4: %s - + Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) - + Accept command line and JSON-RPC commands Accept command line and JSON-RPC commands - + + Myriadcoin Core RPC client version + + + + Run in the background as a daemon and accept commands Run in the background as a daemon and accept commands - + Use the test network Use the test network - + Accept connections from outside (default: 1 if no -proxy or -connect) Accept connections from outside (default: 1 if no -proxy or -connect) - + %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2366,7 +3445,12 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f - + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s @@ -2376,9 +3460,9 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f Bind to given address and always listen on it. Use [host]:port notation for IPv6 - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. + + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + @@ -2387,6 +3471,16 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + + Error: Listening for incoming connections failed (listen returned error %d) + + + + Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. @@ -2396,39 +3490,74 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + + Fees smaller than this are considered zero fee (for transaction creation) (default: + - + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + + + + This is a pre-release test build - use at your own risk - do not use for mining or merchant applications This is a pre-release test build - use at your own risk - do not use for mining or merchant applications - + + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. + Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. @@ -2441,10 +3570,30 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - + + (default: 1) + + + + + (default: wallet.dat) + + + + + <category> can be: + + + + Attempt to recover private keys from a corrupt wallet.dat Attempt to recover private keys from a corrupt wallet.dat + + + Myriadcoin Core Daemon + + Block creation options: @@ -2452,19 +3601,54 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + + Connect only to the specified node(s) Connect only to the specified node(s) - + + Connect through SOCKS proxy + + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + + Connection options: + + + + Corrupted block database detected Corrupted block database detected + + + Debugging/Testing options: + + + + + Disable safemode, override a real safe mode event (default: 0) + + Discover own IP address (default: 1 when listening and no -externalip) Discover own IP address (default: 1 when listening and no -externalip) + + + Do not load the wallet and disable wallet RPC calls + + Do you want to rebuild the block database now? @@ -2561,10 +3745,25 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f Failed to write undo data - + + Fee per kB to add to transactions you send + + + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + + Find peers using DNS lookup (default: 1 unless -connect) Find peers using DNS lookup (default: 1 unless -connect) + + + Force safe mode (default: 0) + + Generate coins (default: 0) @@ -2577,8 +3776,13 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f - How thorough the block verification is (0-4, default: 3) - How thorough the block verification is (0-4, default: 3) + If <category> is not supplied, output all debugging information. + + + + + Importing... + @@ -2586,22 +3790,72 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f Incorrect or no genesis block found. Wrong datadir for network? - + + Invalid -onion address: '%s' + + + + Not enough file descriptors available. Not enough file descriptors available. - + + Prepend debug output with timestamp (default: 1) + + + + + RPC client options: + + + + Rebuild block chain index from current blk000??.dat files Rebuild block chain index from current blk000??.dat files - + + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + + Set maximum block size in bytes (default: %d) + + + + Set the number of threads to service RPC calls (default: 4) Set the number of threads to service RPC calls (default: 4) - + + Specify wallet file (within data directory) + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + + This is intended for regression testing tools and app development. + + + + + Usage (deprecated, use myriadcoin-cli): + + + + Verifying blocks... Verifying blocks... @@ -2611,32 +3865,62 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f Verifying wallet... - + + Wait for RPC server to start + + + + + Wallet %s resides outside data directory %s + Wallet %s resides outside data directory %s + + + + Wallet options: + + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex You need to rebuild the database using -reindex to change -txindex - + Imports blocks from external blk000??.dat file Imports blocks from external blk000??.dat file - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) + + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + - + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + + + + Information Information - - Invalid -tor address: '%s' - Invalid -tor address: '%s' - - - + Invalid amount for -minrelaytxfee=<amount>: '%s' Invalid amount for -minrelaytxfee=<amount>: '%s' @@ -2646,7 +3930,17 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f Invalid amount for -mintxfee=<amount>: '%s' - + + Limit size of signature cache to <n> entries (default: 50000) + + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + + Maintain a full transaction index (default: 0) Maintain a full transaction index (default: 0) @@ -2671,52 +3965,77 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - Output extra debugging information. Implies all other -debug* options - Output extra debugging information. Implies all other -debug* options + + Print block on startup, if found in block index + - Output extra network debugging information - Output extra network debugging information - - - - Prepend debug output with timestamp - Prepend debug output with timestamp - - - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - SSL options: (see the Bitcoin Wiki for SSL setup instructions) + Print block tree on startup (default: 0) + - Select the version of socks proxy to use (4-5, default: 5) - Select the version of socks proxy to use (4-5, default: 5) + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + - + + RPC server options: + + + + + Randomly drop 1 of every <n> network messages + + + + + Randomly fuzz 1 of every <n> network messages + + + + + Run a thread to flush wallet periodically (default: 1) + + + + + SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + Send command to Myriadcoin Core + + + + Send trace/debug info to console instead of debug.log file Send trace/debug info to console instead of debug.log file - - Send trace/debug info to debugger - Send trace/debug info to debugger - - - - Set maximum block size in bytes (default: 250000) - Set maximum block size in bytes (default: 250000) - - - + Set minimum block size in bytes (default: 0) Set minimum block size in bytes (default: 0) + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + + Show all debugging options (usage: --help -help-debug) + + + + + Show benchmark information (default: 0) + + + + Shrink debug.log file on client startup (default: 1 when no -debug) Shrink debug.log file on client startup (default: 1 when no -debug) @@ -2731,12 +4050,17 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f Specify connection timeout in milliseconds (default: 5000) - + + Start Myriadcoin Core Daemon + + + + System error: System error: - + Transaction amount too small Transaction amount too small @@ -2751,7 +4075,7 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f Transaction too large - + Use UPnP to map the listening port (default: 0) Use UPnP to map the listening port (default: 0) @@ -2760,58 +4084,68 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f Use UPnP to map the listening port (default: 1 when listening) Use UPnP to map the listening port (default: 1 when listening) - - - Use proxy to reach tor hidden services (default: same as -proxy) - Use proxy to reach tor hidden services (default: same as -proxy) - Username for JSON-RPC connections Username for JSON-RPC connections - + Warning Warning - + Warning: This version is obsolete, upgrade required! Warning: This version is obsolete, upgrade required! + Zapping all transactions from wallet... + + + + + on startup + + + + + version + version + + + wallet.dat corrupt, salvage failed wallet.dat corrupt, salvage failed - + Password for JSON-RPC connections Password for JSON-RPC connections - + Allow JSON-RPC connections from specified IP address Allow JSON-RPC connections from specified IP address - + Send commands to node running on <ip> (default: 127.0.0.1) Send commands to node running on <ip> (default: 127.0.0.1) - + Execute command when the best block changes (%s in cmd is replaced by block hash) Execute command when the best block changes (%s in cmd is replaced by block hash) - + Upgrade wallet to latest format Upgrade wallet to latest format - + Set key pool size to <n> (default: 100) Set key pool size to <n> (default: 100) @@ -2821,12 +4155,12 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f Rescan the block chain for missing wallet transactions - + Use OpenSSL (https) for JSON-RPC connections Use OpenSSL (https) for JSON-RPC connections - + Server certificate file (default: server.cert) Server certificate file (default: server.cert) @@ -2836,37 +4170,27 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f Server private key (default: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - + This help message This help message - + Unable to bind to %s on this computer (bind returned error %d, %s) Unable to bind to %s on this computer (bind returned error %d, %s) - - Connect through socks proxy - Connect through socks proxy - - - + Allow DNS lookups for -addnode, -seednode and -connect Allow DNS lookups for -addnode, -seednode and -connect - + Loading addresses... Loading addresses... - + Error loading wallet.dat: Wallet corrupted Error loading wallet.dat: Wallet corrupted @@ -2876,22 +4200,22 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f Error loading wallet.dat: Wallet requires newer version of Myriadcoin - + Wallet needed to be rewritten: restart Myriadcoin to complete Wallet needed to be rewritten: restart Myriadcoin to complete - + Error loading wallet.dat Error loading wallet.dat - + Invalid -proxy address: '%s' Invalid -proxy address: '%s' - + Unknown network specified in -onlynet: '%s' Unknown network specified in -onlynet: '%s' @@ -2901,7 +4225,7 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f Unknown -socks proxy version requested: %i - + Cannot resolve -bind address: '%s' Cannot resolve -bind address: '%s' @@ -2911,7 +4235,7 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f Cannot resolve -externalip address: '%s' - + Invalid amount for -paytxfee=<amount>: '%s' Invalid amount for -paytxfee=<amount>: '%s' @@ -2926,32 +4250,22 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f Insufficient funds - + Loading block index... Loading block index... - + Add a node to connect to and attempt to keep the connection open Add a node to connect to and attempt to keep the connection open - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - Unable to bind to %s on this computer. Myriadcoin is probably already running. - - - - Fee per KB to add to transactions you send - Fee per KB to add to transactions you send - - - + Loading wallet... Loading wallet... - + Cannot downgrade wallet Cannot downgrade wallet @@ -2961,27 +4275,27 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f Cannot write default address - + Rescanning... Rescanning... - + Done loading Done loading - + To use the %s option To use the %s option - + Error Error - + You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_eo.ts b/src/qt/locale/bitcoin_eo.ts index 5ebb21a4..87710c0d 100644 --- a/src/qt/locale/bitcoin_eo.ts +++ b/src/qt/locale/bitcoin_eo.ts @@ -1,1824 +1,2286 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - Pri Myriadcoin + About Myriadcoin Core + Pri la Bitmona Kerno - - <b>Myriadcoin</b> version - <b>Myriadcoin</b>-a versio + <b>Myriadcoin Core</b> version + Versio de <b>Bitmona Kerno</b> - This is experimental software. Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - + +Tio ĉi estas eksperimenta programo. + +Eldonita laŭ la permesilo MIT/X11. Vidu la kunan dosieron COPYING aŭ http://www.opensource.org/licenses/mit-license.php. + +Tiu ĉi produkto enhavas erojn kreitajn de la "OpenSSL Project" por uzo en la "OpenSSL Toolkit" (http://www.openssl.org/) kaj ĉifrajn erojn kreitajn de Eric Young (eay@cryptsoft.com) kaj UPnP-erojn kreitajn de Thomas Bernard. - Copyright - + Kopirajto - - The Myriadcoin developers + The Myriadcoin Core developers + La programistoj de Bitmona Kerno + + + (%1-bit) AddressBookPage - - Address Book - Adresaro - - - Double-click to edit address or label Duoble-klaku por redakti adreson aŭ etikedon - Create a new address - Kreu novan adreson + Krei novan adreson + + + &New + &Nova - Copy the currently selected address to the system clipboard - Kopiu elektitan adreson al la tondejo + Kopii elektitan adreson al la tondejo - - &New Address - &Nova Adreso + &Copy + &Kopii - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - + C&lose + &Fermi - &Copy Address - &Kopiu Adreson + &Kopii Adreson - - Show &QR Code - - - - - Sign a message to prove you own a Myriadcoin address - - - - - Sign &Message - - - - Delete the currently selected address from the list - + Forigi la elektitan adreson el la listo - Export the data in the current tab to a file - + Eksporti al dosiero la datumojn el la aktuala langeto - &Export - + &Eksporti - - Verify a message to ensure it was signed with a specified Myriadcoin address - - - - - &Verify Message - - - - &Delete - &Forviŝu + &Forigi + + + Choose the address to send coins to + Elektu la alsendotan adreson + + + Choose the address to receive coins with + Elektu la ricevontan adreson + + + C&hoose + &Elekti + + + Sending addresses + Sendaj adresoj + + + Receiving addresses + Ricevaj adresoj - These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - + Jen viaj Bitmon-adresoj por sendi pagojn. Zorge kontrolu la sumon kaj la alsendan adreson antaŭ ol sendi. + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Jen viaj bitmonaj adresoj por ricevi pagojn. Estas konsilinde uzi apartan ricevan adreson por ĉiu transakcio. - Copy &Label - Kopiu &Etikedon + Kopii &Etikedon - &Edit - &Redaktu + &Redakti - - Send &Coins + Export Address List + Eksporti Adresliston + + + Comma separated file (*.csv) + Perkome disigita dosiero (*.csv) + + + Exporting Failed - - Export Address Book Data - Eksportu Adresarajn Datumojn - - - - Comma separated file (*.csv) - Diskoma dosiero (*.csv) - - - - Error exporting - Eraro dum eksportado - - - - Could not write to file %1. - Ne eblis skribi al dosiero %1. + There was an error trying to save the address list to %1. + AddressTableModel - Label Etikedo - Address Adreso - (no label) - (ne etikedo) + (neniu etikedo) AskPassphraseDialog - Passphrase Dialog - + Dialogo pri pasfrazo - Enter passphrase Enigu pasfrazon - New passphrase Nova pasfrazo - Repeat new passphrase - Ripetu novan pasfrazon + Ripetu la novan pasfrazon - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Enigu novan pasfrazon por la monujo.<br/>Bonvolu, uzu pasfrazon kun <b>10 aŭ pli hazardaj signoj</b>, aŭ <b>ok aŭ pli vortoj</b>. + Enigu novan pasfrazon por la monujo.<br/>Bonvolu uzi pasfrazon kun <b>almenaŭ 10 hazardaj signoj</b>, aŭ <b>almenaŭ ok vortoj</b>. - Encrypt wallet - Ĉifru monujon + Ĉifri la monujon - This operation needs your wallet passphrase to unlock the wallet. - Ĉi tiu operacio devas vian monujan pasfrazon, por malŝlosi la monujon. + Ĉi tiu operacio bezonas vian monujan pasfrazon, por malŝlosi la monujon. - Unlock wallet - Malŝlosu monujon + Malŝlosi la monujon - This operation needs your wallet passphrase to decrypt the wallet. - Ĉi tiu operacio devas vian monujan pasfrazon, por malĉifri la monujon. + Ĉi tiu operacio bezonas vian monujan pasfrazon, por malĉifri la monujon. - Decrypt wallet - Malĉifru monujon + Malĉifri la monujon - Change passphrase - Anstataŭigu pasfrazon + Ŝanĝi la pasfrazon - Enter the old and new passphrase to the wallet. - Enigu la malnovan kaj novan monujan pasfrazon. + Tajpu la malnovan kaj novan monujajn pasfrazojn. - Confirm wallet encryption - Konfirmu ĉifrado de monujo + Konfirmo de ĉifrado de la monujo - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! - + Atentu! Se vi ĉifras vian monujon kaj perdas la pasfrazon, vi <b>PERDOS LA TUTON DE VIA BITMONO<b>! - Are you sure you wish to encrypt your wallet? - + Ĉu vi certas, ke vi volas ĉifri la monujon? - 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. - + GRAVE: antaŭaj sekur-kopioj de via monujo-dosiero estas forigindaj kiam vi havas nove kreitan ĉifritan monujo-dosieron. Pro sekureco, antaŭaj kopioj de la neĉifrita dosiero ne plu funkcios tuj kiam vi ekuzos la novan ĉifritan dosieron. - - Warning: The Caps Lock key is on! - + Atentu: la majuskla baskulo estas ŝaltita! - - Wallet encrypted - Monujo ĉifrita + La monujo estas ĉifrita - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. - + Bitmono nun fermiĝos por fini la ĉifradon. Memoru, ke eĉ ĉifrado ne protektas kontraŭ ĉiu atako, ekz. se viruso infektus vian komputilon. - - - - Wallet encryption failed - Monujo ĉifrado fiaskis + Ĉifrado de la monujo fiaskis - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Ĉifrado de monujo fiaskis, kaŭze de interna eraro. Via monujo ne ĉifritas. + Ĉifrado de monujo fiaskis pro interna eraro. Via monujo ne estas ĉifrita. - - The supplied passphrases do not match. - La pasfrazoj enigitaj ne samas. + La pasfrazoj entajpitaj ne samas. - Wallet unlock failed - Monujo malŝlosado fiaskis + Malŝloso de la monujo fiaskis - - - The passphrase entered for the wallet decryption was incorrect. - La pasfrazo enigita por ĉifrado de monujo ne konformas. + La pasfrazo enigita por ĉifrado de monujo ne ĝustas. - Wallet decryption failed - Monujo malĉifrado fiaskis + Malĉifrado de la monujo fiaskis - Wallet passphrase was successfully changed. - + Vi sukcese ŝanĝis la pasfrazon de la monujo. BitcoinGUI - Sign &message... - Subskribu &mesaĝon... + Subskribi &mesaĝon... - Synchronizing with network... Sinkronigante kun reto... - &Overview &Superrigardo - - Show general overview of wallet - + Node + Nodo + + + Show general overview of wallet + Vidigi ĝeneralan superrigardon de la monujo - &Transactions &Transakcioj - Browse transaction history - Esploru historion de transakcioj + Esplori historion de transakcioj - - Edit the list of stored addresses and labels - - - - - Show the list of addresses for receiving payments - - - - E&xit - &Eliru + &Eliri - Quit application - Eliru de aplikaĵo + Eliri la aplikaĵon - Show information about Myriadcoin - Vidigu informaĵon pri Bitmono + Vidigi informojjn pri Bitmono - About &Qt - Pri &QT + Pri &Qt - Show information about Qt - Vidigu informaĵon pri Qt + Vidigi informojn pri Qt - &Options... - &Opcioj... + &Agordoj... - &Encrypt Wallet... - &Ĉifru Monujon... + Ĉifri &Monujon... - &Backup Wallet... - + &Krei sekurkopion de la monujo... - &Change Passphrase... - &Anstataŭigu pasfrazon... + Ŝanĝi &Pasfrazon... + + + &Sending addresses... + &Sendaj adresoj... + + + &Receiving addresses... + &Ricevaj adresoj... + + + Open &URI... + Malfermi &URI-on... - Importing blocks from disk... - + Importado de blokoj el disko... - Reindexing blocks on disk... - + Reindeksado de blokoj sur disko... - Send coins to a Myriadcoin address - + Sendi monon al Bitmon-adreso - Modify configuration options for Myriadcoin - + Modifi agordaĵojn por Bitmono - Backup wallet to another location - + Krei alilokan sekurkopion de monujo - Change the passphrase used for wallet encryption - + Ŝanĝi la pasfrazon por ĉifri la monujon - &Debug window - + Sen&cimiga fenestro - Open debugging and diagnostic console - + Malfermi konzolon de sencimigo kaj diagnozo - &Verify message... - &Kontrolu mesaĝon... + &Kontroli mesaĝon... - - Myriadcoin - + Bitmono - Wallet Monujo - &Send - + &Sendi - &Receive - + &Ricevi - - &Addresses - - - - - &About Myriadcoin - - - - &Show / Hide - + &Montri / Kaŝi - Show or hide the main Window - + Montri aŭ kaŝi la ĉefan fenestron - Encrypt the private keys that belong to your wallet - + Ĉifri la privatajn ŝlosilojn de via monujo - Sign messages with your Myriadcoin addresses to prove you own them - + Subskribi mesaĝojn per via Bitmon-adresoj por pravigi, ke vi estas la posedanto - Verify messages to ensure they were signed with specified Myriadcoin addresses - + Kontroli mesaĝojn por kontroli ĉu ili estas subskribitaj per specifaj Bitmon-adresoj - &File &Dosiero - &Settings &Agordoj - &Help &Helpo - Tabs toolbar - + Langeto-breto - - [testnet] + [testnet] + + + Myriadcoin Core + Kerno de Bitmono + + + Request payments (generates QR codes and myriadcoin: URIs) + Peti pagon (kreas QR-kodojn kaj URI-ojn kun prefikso myriadcoin:) + + + &About Myriadcoin Core + &Pri la Bitmona Kerno + + + Show the list of used sending addresses and labels + Vidigi la liston de uzitaj sendaj adresoj kaj etikedoj + + + Show the list of used receiving addresses and labels + Vidigi la liston de uzitaj ricevaj adresoj kaj etikedoj + + + Open a myriadcoin: URI or payment request + Malfermi myriadcoin:-URI-on aŭ pagpeton + + + &Command-line options + &Komandliniaj agordaĵoj + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options - Myriadcoin client - + Bitmon-kliento - %n active connection(s) to Myriadcoin network - + %n aktiva konekto al la bitmona reto%n aktivaj konektoj al la bitmona reto - No block source available... - + Neniu fonto de blokoj trovebla... - Processed %1 of %2 (estimated) blocks of transaction history. - + Traktis %1 el (ĉirkaŭ) %2 blokoj de la transakcia historio. - Processed %1 blocks of transaction history. - + Traktis %1 blokoj de la transakcia historio. - %n hour(s) %n horo%n horoj - %n day(s) %n tago%n tagoj - %n week(s) %n semajno%n semajnoj - + %1 and %2 + %1 kaj %2 + + + %n year(s) + + + %1 behind - + mankas %1 - Last received block was generated %1 ago. - + Lasta ricevita bloko kreiĝis antaŭ %1. - Transactions after this will not yet be visible. - + Transakcioj por tio ankoraŭ ne videblas. - Error Eraro - Warning - + Averto - Information - + Informoj - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - Up to date Ĝisdata - Catching up... Ĝisdatigante... - - Confirm transaction fee - - - - Sent transaction Sendita transakcio - Incoming transaction Envenanta transakcio - Date: %1 Amount: %2 Type: %3 Address: %4 - + Dato: %1 +Sumo: %2 +Tipo: %3 +Adreso: %4 + - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Monujo estas <b>ĉifrita</b> kaj nun <b>malŝlosita</b> + Monujo estas <b>ĉifrita</b> kaj aktuale <b>malŝlosita</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> - Monujo estas <b>ĉifrita</b> kaj nun <b>ŝlosita</b> + Monujo estas <b>ĉifrita</b> kaj aktuale <b>ŝlosita</b> - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. - + Okazis neriparebla eraro. Bitmono ne plu povas sekure daŭri, do ĝi sekure ĉesos. ClientModel - Network Alert Reta Averto - EditAddressDialog + CoinControlDialog - - Edit Address - Redaktu Adreson + Coin Control Address Selection + + + + Quantity: + Kvanto: + + + Bytes: + Bajtoj: + + + Amount: + Sumo: + + + Priority: + Prioritato: + + + Fee: + Krompago: + + + Low Output: + Malalta Eligo: + + + After Fee: + Post krompago: + + + Change: + Restmono: + + + (un)select all + (mal)elekti ĉion + + + Tree mode + Arboreĝimo + + + List mode + Listreĝimo + + + Amount + Sumo + + + Address + Adreso + + + Date + Dato + + + Confirmations + Konfirmoj + + + Confirmed + Konfirmita + + + Priority + Prioritato + + + Copy address + Kopii adreson + + + Copy label + Kopii etikedon + + + Copy amount + Kopii sumon + + + Copy transaction ID + Kopii transakcian ID-on + + + Lock unspent + Ŝlosi la neelspezitajn + + + Unlock unspent + Malŝlosi la neelspezitajn + + + Copy quantity + Kopii kvanton + + + Copy fee + Kopii krompagon + + + Copy after fee + Kopii post krompago + + + Copy bytes + Kopii bajtojn + + + Copy priority + Kopii prioritaton + + + Copy low output + Kopii malaltan eligon + + + Copy change + Kopii restmonon + + + highest + plej alta + + + higher + pli alta + + + high + alta + + + medium-high + mezalta + + + medium + meza + + + low-medium + mezmalalta + + + low + malalta + + + lower + pli malalta + + + lowest + plej malalta + + + (%1 locked) + (%1 ŝlosita) + + + none + neniu + + + Dust + Polvo + + + yes + jes + + + no + ne + + + This label turns red, if the transaction size is greater than 1000 bytes. + Tiu ĉi etikedo ruĝiĝas se la grando de la transakcio estas pli ol 1000 bajtoj. + + + This means a fee of at least %1 per kB is required. + Tio signifas, ke krompago de almenaŭ po %1 por ĉiu kB estas deviga. + + + Can vary +/- 1 byte per input. + Povas varii po +/- 1 bajton por ĉiu enigo. + + + Transactions with higher priority are more likely to get included into a block. + Transakcioj kun pli alta prioritato havas pli altan ŝancon inkluziviĝi en bloko. + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + Tiu ĉi etikedo ruĝiĝas se iu ajn ricevonto ricevos sumon malpli ol %1. + + + This means a fee of at least %1 is required. + Tio signifas, ke krompago de almenaŭ %1 estas deviga. + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + Sumoj, kiuj valoras malpli ol 0.545 oble la minimuman plusendan kromkoston vidiĝas kiel polvo. + + + This label turns red, if the change is smaller than %1. + Tiu ĉi etikedo ruĝiĝas se la restmono estas malpli ol %1. + + + (no label) + (neniu etikedo) + + + change from %1 (%2) + restmono de %1 (%2) + + + (change) + (restmono) + + + + EditAddressDialog + + Edit Address + Redakti Adreson - &Label &Etikedo - - The label associated with this address book entry - La etikedo interrilatita kun ĉi tiun adreso + The label associated with this address list entry + La etikedo ligita al tiu ĉi adreslistero + + + The address associated with this address list entry. This can only be modified for sending addresses. + La adreso ligita al tiu ĉi adreslistero. Eblas modifi tion nur por sendaj adresoj. - &Address &Adreso - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - New receiving address - + Nova adreso por ricevi - New sending address - + Nova adreso por sendi - Edit receiving address - + Redakti adreson por ricevi - Edit sending address - + Redakti adreson por sendi - The entered address "%1" is already in the address book. La adreso enigita "%1" jam ekzistas en la adresaro. - The entered address "%1" is not a valid Myriadcoin address. - + La adreso enigita "%1" ne estas valida Bitmon-adreso. - Could not unlock wallet. - Ne eblis malŝlosi monujon + Ne eblis malŝlosi monujon. - New key generation failed. - + Fiaskis kreo de nova ŝlosilo. - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt - Myriadcoin-Qt + A new data directory will be created. + Kreiĝos nova dosierujo por la datumoj. + + + name + nomo + + + Directory already exists. Add %1 if you intend to create a new directory here. + Tiu dosierujo jam ekzistas. Aldonu %1 si vi volas krei novan dosierujon ĉi tie. + + + Path already exists, and is not a directory. + Vojo jam ekzistas, kaj ne estas dosierujo. + + + Cannot create data directory here. + Ne eblas krei dosierujon por datumoj ĉi tie. + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + Bitmona Kerno - Komandliniaj agordaĵoj + + + Myriadcoin Core + Kerno de Bitmono - version versio - Usage: - + Uzado: - command-line options - + komandliniaj agordaĵoj - UI options - + UI-agordaĵoj - Set language, for example "de_DE" (default: system locale) - + Agordi lingvon, ekzemple "de_DE" (defaŭlte: tiu de la sistemo) - Start minimized + Lanĉiĝi plejete + + + Set SSL root certificates for payment request (default: -system-) - Show splash screen on startup (default: 1) - + Montri salutŝildon dum lanĉo (defaŭlte: 1) + + + Choose data directory on startup (default: 0) + Elekti dosierujon por datumoj dum lanĉo (defaŭlte: 0) + + + + Intro + + Welcome + Bonvenon + + + Welcome to Myriadcoin Core. + Bonvenon al la bitmona kerno, Myriadcoin Core. + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + Dum tiu ĉi unua uzo de la programo, vi povas elekti lokon, kie Myriadcoin Core stokos siajn datumojn. + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + Myriadcoin Core elŝutos kaj konservos kopion de la bitmona blokĉeno. Almenaŭ %1GB da datumoj konserviĝos en tiu loko, kaj tio poiome kreskos. Ankaŭ via monujo konserviĝos en tiu dosierujo. + + + Use the default data directory + Uzi la defaŭltan dosierujon por datumoj + + + Use a custom data directory: + Uzi alian dosierujon por datumoj: + + + Myriadcoin + Bitmono + + + Error: Specified data directory "%1" can not be created. + Eraro: ne eblas krei la elektitan dosierujon por datumoj "%1". + + + Error + Eraro + + + GB of free space available + GB de libera loko disponebla + + + (of %1GB needed) + (el %1GB bezonataj) + + + + OpenURIDialog + + Open URI + Malfermi URI-on + + + Open payment request from URI or file + Malfermi pagpeton el URI aŭ dosiero + + + URI: + URI: + + + Select payment request file + Elektu la dosieron de la pagpeto + + + Select payment request file to open + Elektu la malfermotan dosieron de la pagpeto OptionsDialog - Options - Opcioj + Agordaĵoj - &Main - + Ĉ&efa - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. - + Nedeviga krompago por ĉiu kB, kiu helpas plirapidigi la traktadon de via transakcio. Plej multaj transakcioj grandas je 1kB. - Pay transaction &fee - + Krompago - Automatically start Myriadcoin after logging in to the system. - + Aŭtomate lanĉi Bitmonon post ensaluto al la sistemo. - &Start Myriadcoin on system login + &Lanĉi Bitmonon tuj post ensaluto al la sistemo + + + Size of &database cache + Dosiergrando de &datumbasa kaŝmemoro + + + MB + MB + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: - Reset all client options to default. - + Reagordi ĉion al defaŭlataj valoroj. - &Reset Options - + &Rekomenci agordadon - &Network + &Reto + + + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change - Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. - + Aŭtomate malfermi la kursilan pordon por Bitmono. Tio funkcias nur se via kursilo havas la UPnP-funkcion, kaj se tiu ĉi estas ŝaltita. - Map port using &UPnP - + Mapigi pordon per &UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - - - - - &Connect through SOCKS proxy: - - - - Proxy &IP: - + Prokurila &IP: - - IP address of the proxy (e.g. 127.0.0.1) - - - - &Port: - + &Pordo: - Port of the proxy (e.g. 9050) - + la pordo de la prokurilo (ekz. 9050) - SOCKS &Version: - + Versio de SOCKS: - SOCKS version of the proxy (e.g. 5) - + la versio de SOCKS ĉe la prokurilo (ekz. 5) - &Window - + &Fenestro - Show only a tray icon after minimizing the window. - + Montri nur sistempletan piktogramon post minimumigo de la fenestro. - &Minimize to the tray instead of the taskbar - + &Minimumigi al la sistempleto anstataŭ al la taskopleto - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. - + Minimumigi la aplikaĵon anstataŭ eliri kaj ĉesi kiam la fenestro estas fermita. Se tiu ĉi estas agordita, la aplikaĵo ĉesas nur kiam oni elektas "Eliri" el la menuo. - M&inimize on close - + M&inimumigi je fermo - &Display - + &Aspekto - User Interface &language: - + &Lingvo de la fasado: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. - + Vi povas elekti la lingvon uzata en la aplikaĵo ĉi tie. Tiu ekefikos nur post relanĉo de Bitmono. - &Unit to show amounts in: - + &Unuo por vidigi sumojn: - Choose the default subdivision unit to show in the interface and when sending coins. - + Elekti la defaŭltan manieron por montri bitmonajn sumojn en la interfaco, kaj kiam vi sendos bitmonon. - Whether to show Myriadcoin addresses in the transaction list or not. - + Elekti ĉu videblu Bitmon-adresoj en la listo de transakcioj. - &Display addresses in transaction list - + &Montri adresojn en la listo de transakcioj + + + Whether to show coin control features or not. + Ĉu montri detalan adres-regilon, aŭ ne. - &OK - &OK + &Bone - &Cancel - &Nuligu + &Nuligi - - &Apply - &Apliku - - - default - + defaŭlta + + + none + neniu - Confirm options reset + Konfirmi reŝargo de agordoj + + + Client restart required to activate changes. - - Some settings may require a client restart to take effect. + Client will be shutdown, do you want to proceed? - - Do you want to proceed? + This change would require a client restart. - - - Warning - - - - - - This setting will take effect after restarting Myriadcoin. - - - - The supplied proxy address is invalid. - + La prokurila adreso estas malvalida. OverviewPage - Form - + Formularo - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. - + Eblas, ke la informoj videblaj ĉi tie estas eksdataj. Via monujo aŭtomate sinkoniĝas kun la bitmona reto kiam ili konektiĝas, sed tiu procezo ankoraŭ ne finfariĝis. - - Balance: - - - - - Unconfirmed: - Nekonfirmita: - - - Wallet Monujo - + Available: + + + + Your current spendable balance + via aktuala elspezebla saldo + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + la sumo de transakcioj ankoraŭ ne konfirmitaj, kiuj ankoraŭ ne elspezeblas + + Immature: - + Nematura: - Mined balance that has not yet matured - + Minita saldo, kiu ankoraŭ ne maturiĝis + + + Total: + Totalo: + + + Your current total balance + via aktuala totala saldo - <b>Recent transactions</b> <b>Lastaj transakcioj</b> - - Your current balance - - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - - - - - out of sync - + nesinkronigita PaymentServer - + URI handling + Traktado de URI-oj + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + Fiaskis la analizon de la URI! Eble la Bitmon-adreso estas nevalida, aŭ povus esti problemo kun la parametroj de la URI. + + + Requested payment amount of %1 is too small (considered dust). + La petita pagosumo de %1 estas tro malgranda (konsiderata kiel polvo). + + + Payment request error + Eraro dum pagopeto + + Cannot start myriadcoin: click-to-pay handler + Ne eblas lanĉi la ilon 'klaki-por-pagi' + + + Net manager warning + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + Repago de %1 + + + Error communicating with %1: %2 + Eraro dum komunikado kun %1: %2 + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + Malbona respondo de la servilo %1 + + + Payment acknowledged + Pago agnoskita + + + Network request error + Eraro dum ret-peto + - QRCodeDialog + QObject - - QR Code Dialog + Myriadcoin + Bitmono + + + Error: Specified data directory "%1" does not exist. + Eraro: la elektita dosierujo por datumoj "%1" ne ekzistas. + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. - - Request Payment + Error: Invalid combination of -regtest and -testnet. + Eraro: nevalida kunigo de -regtest kaj -testnet + + + Myriadcoin Core didn't yet exit safely... - - Amount: - + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Enigi Bitmon-adreson (ekz. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + &Konservi Bildon... - - Label: - Etikedo: + &Copy Image + &Kopii Bildon - - Message: - - - - - &Save As... - - - - - Error encoding URI into QR Code. - - - - - The entered amount is invalid, please check. - - - - - Resulting URI too long, try to reduce the text for label / message. - - - - Save QR Code - + Konservi QR-kodon - - PNG Images (*.png) - + PNG Image (*.png) + PNG-bildo (*.png) RPCConsole - Client name - + Nomo de kliento - - - - - - - - - - N/A - + neaplikebla - Client version - + Versio de kliento - &Information - + &Informoj + + + Debug window + Sencimiga fenestro + + + General + Ĝenerala - Using OpenSSL version - + uzas OpenSSL-version - Startup time - + Horo de lanĉo - Network Reto - + Name + Nomo + + Number of connections - + Nombro de konektoj - - On testnet - - - - Block chain - + Blokĉeno - Current number of blocks - + Aktuala nombro de blokoj - Estimated total blocks - + Supozita totalo da blokoj - Last block time - + Horo de la lasta bloko - &Open - &Malfermu + &Malfermi - - Command-line options - - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - - - - - &Show - - - - &Console - + &Konzolo + + + &Network Traffic + &Reta Trafiko + + + &Clear + &Forigi ĉion + + + Totals + Totaloj + + + In: + En: + + + Out: + El: - Build date - + Dato de kompilado - - Myriadcoin - Debug window - - - - - Myriadcoin Core - - - - Debug log file - + Sencimiga protokoldosiero - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. - + Malfermi la sencimiga protokoldosiero de Bitmono el la aktuala dosierujo por datumoj. Tio eble daŭros plurajn sekundojn por granda protokoldosiero. - Clear console - + Malplenigi konzolon - Welcome to the Myriadcoin RPC console. - + Bonvenon al la RPC-konzolo de Bitmono. - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + Uzu la sagojn supran kaj malsupran por esplori la historion, kaj <b>stir-L</b> por malplenigi la ekranon. + + + Type <b>help</b> for an overview of available commands. + Tajpu <b>help</b> por superrigardo de la disponeblaj komandoj. + + + %1 B + %1 B + + + %1 KB + %1 KB + + + %1 MB + %1 MB + + + %1 GB + %1 GB + + + %1 m + %1 m + + + %1 h + %1 h + + + %1 h %2 m + %1 h %2 m + + + + ReceiveCoinsDialog + + &Amount: + &Kvanto: + + + &Label: + &Etikedo: + + + &Message: + &Mesaĝo: + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + Reuzi unu el la jam uzitaj ricevaj adresoj. Reuzo de adresoj povas krei problemojn pri sekureco kaj privateco. Ne uzu tiun ĉi funkcion krom por rekrei antaŭe faritan pagopeton. + + + R&euse an existing receiving address (not recommended) + R&euzi ekzistantan ricevan adreson (malrekomendinda) + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. - - Type <b>help</b> for an overview of available commands. + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + Malplenigi ĉiujn kampojn de la formularo. + + + Clear + Forigi + + + Requested payments history + + + + &Request payment + &Peti pagon + + + Show the selected request (does the same as double clicking an entry) + + + + Show + Vidigi + + + Remove the selected entries from the list + + + + Remove + Forigi + + + Copy label + Kopii etikedon + + + Copy message + Kopiu mesaĝon + + + Copy amount + Kopii sumon + + + + ReceiveRequestDialog + + QR Code + QR-kodo + + + Copy &URI + Kopii &URI + + + Copy &Address + Kopii &Adreson + + + &Save Image... + &Konservi Bildon... + + + Request payment to %1 + Peti pagon al %1 + + + Payment information + Paginformoj + + + URI + URI + + + Address + Adreso + + + Amount + Sumo + + + Label + Etikedo + + + Message + Mesaĝo + + + Resulting URI too long, try to reduce the text for label / message. + La rezultanta URI estas tro longa. Provu malplilongigi la tekston de la etikedo / mesaĝo. + + + Error encoding URI into QR Code. + Eraro de kodigo de URI en la QR-kodon. + + + + RecentRequestsTableModel + + Date + Dato + + + Label + Etikedo + + + Message + Mesaĝo + + + Amount + Sumo + + + (no label) + (neniu etikedo) + + + (no message) + (neniu mesaĝo) + + + (no amount) SendCoinsDialog - - - - - - - - Send Coins - Sendu Monojn + Sendi Monon + + + Coin Control Features + Monregaj Opcioj + + + Inputs... + Enigoj... + + + automatically selected + + + + Insufficient funds! + Nesufiĉa mono! + + + Quantity: + Kvanto: + + + Bytes: + Bajtoj: + + + Amount: + Sumo: + + + Priority: + Prioritato: + + + Fee: + Krompago: + + + Low Output: + Malalta Eligo: + + + After Fee: + Post krompago: + + + Change: + Restmono: + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + - Send to multiple recipients at once - Sendu samtempe al multaj ricevantoj + Sendi samtempe al pluraj ricevantoj - Add &Recipient - + Aldoni &Ricevonton - - Remove all transaction fields - + Clear all fields of the form. + Malplenigi ĉiujn kampojn de la formularo. - Clear &All - + &Forigi ĉion - Balance: - + Saldo: - - 123.456 BTC - 123,456 BTC - - - Confirm the send action - + Konfirmi la sendon - S&end - + Ŝendi - - <b>%1</b> to %2 (%3) - <b>%1</b> al %2 (%3) - - - Confirm send coins - + Konfirmi sendon de bitmono - - Are you sure you want to send %1? - Ĉu vi vere volas sendi %1? + %1 to %2 + %1 al %2 - - and - kaj + Copy quantity + Kopii kvanton + + + Copy amount + Kopii sumon + + + Copy fee + Kopii krompagon + + + Copy after fee + Kopii post krompago + + + Copy bytes + Kopii bajtojn + + + Copy priority + Kopii prioritaton + + + Copy low output + Kopii malaltan eligon + + + Copy change + Kopii restmonon + + + Total Amount %1 (= %2) + Totala Sumo %1 (= %2) + + + or + aŭ - The recipient address is not valid, please recheck. - + La adreso de la ricevonto ne validas. Bonvolu kontroli. - The amount to pay must be larger than 0. - + La pagenda sumo devas esti pli ol 0. - The amount exceeds your balance. - + La sumo estas pli granda ol via saldo. - The total exceeds your balance when the %1 transaction fee is included. - + La sumo kun la %1 krompago estas pli granda ol via saldo. - Duplicate address found, can only send to each address once per send operation. + Iu adreso estas ripetita. Vi povas sendi al ĉiu adreso po unufoje en iu send-operacio. + + + Transaction creation failed! + Kreo de transakcio fiaskis! + + + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - Error: Transaction creation failed! + Warning: Invalid Myriadcoin address + Averto: Nevalida Bitmon-adreso + + + (no label) + (neniu etikedo) + + + Warning: Unknown change address - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Are you sure you want to send? + Ĉu vi certas, ke vi volas sendi? + + + added as transaction fee + aldonita kiel krompago + + + Payment request expired + Pagopeto nun estas eksdata + + + Invalid payment address %1 + Nevalida pagadreso %1 SendCoinsEntry - - Form - - - - A&mount: - + &Sumo: - Pay &To: - + &Ricevonto: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - + La adreso kie vi sendos la pagon (ekz. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book - + Tajpu etikedon por tiu ĉi adreso kaj aldonu ĝin al via adresaro - &Label: &Etikedo: - - Choose address from address book - Elektu adreson el adresaro + Choose previously used address + Elektu la jam uzitan adreson + + + This is a normal payment. + Tio estas normala pago. - Alt+A Alt+A - Paste address from clipboard - Algluu adreson de tondejo + Alglui adreson el tondejo - Alt+P Alt+P - - Remove this recipient - Forigu ĉi tiun ricevanton + Remove this entry + Forigu ĉi tiun enskribon - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + Mesaĝo: + + + This is a verified payment request. + + Enter a label for this address to add it to the list of used addresses + Tajpu etikedon por tiu ĉi adreso por aldoni ĝin al la listo de uzitaj adresoj + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + Pagi Al: + + + Memo: + Memorando: + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. + Ne sistemfermu ĝis ĉi tiu fenestro malaperas. + SignVerifyMessageDialog - Signatures - Sign / Verify a Message - + Subskriboj - Subskribi / Kontroli mesaĝon - &Sign Message - + &Subskribi Mesaĝon - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. - + Vi povas subskribi mesaĝon per viaj adresoj, por pravigi ke vi estas la posedanto de tiuj adresoj. Atentu, ke vi ne subskriu ion neprecizan, ĉar trompisto povus ruzi kontraŭ vi kaj ŝteli vian identecon. Subskribu nur plene detaligitaj deklaroj pri kiuj vi konsentas. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - + La adreso por subskribi la mesaĝon (ekz. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book - + Choose previously used address + Elektu la jam uzitan adreson - - Alt+A Alt+A - Paste address from clipboard - Algluu adreson de tondejo + Alglui adreson de tondejo - Alt+P Alt+P - Enter the message you want to sign here - + Tajpu la mesaĝon, kiun vi volas sendi, cîi tie - Signature - + Subskribo - Copy the current signature to the system clipboard - + Kopii la aktualan subskribon al la tondejo - Sign the message to prove you own this Myriadcoin address - + Subskribi la mesaĝon por pravigi, ke vi estas la posedanto de tiu Bitmon-adreso - Sign &Message - + Subskribi &Mesaĝon - Reset all sign message fields - + Reagordigi ĉiujn prisubskribajn kampojn - - Clear &All - + &Forigi Ĉion - &Verify Message - + &Kontroli Mesaĝon - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. - + Enmeti la subskriban adreson, la mesaĝon (kune kun ĉiu linisalto, spaceto, taboj, ktp. precize) kaj la subskribon ĉi sube por kontroli la mesaĝon. Atentu, ke vi ne komprenu per la subskribo pli ol la enhavo de la mesaĝo mem, por eviti homo-en-la-mezo-atakon. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - + La adreso per kio oni subskribis la mesaĝon (ekz. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address - + Kontroli la mesaĝon por pravigi, ke ĝi ja estas subskribita per la specifa Bitmon-adreso - Verify &Message - + Kontroli &Mesaĝon - Reset all verify message fields - + Reagordigi ĉiujn prikontrolajn kampojn - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - + Enigi Bitmon-adreson (ekz. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature - + Klaku "Subskribi Mesaĝon" por krei subskribon - - Enter Myriadcoin signature - - - - - The entered address is invalid. - + La adreso, kiun vi enmetis, estas nevalida. - - - - Please check the address and try again. - + Bonvolu kontroli la adreson kaj reprovi. - - The entered address does not refer to a key. - + La adreso, kiun vi enmetis, referencas neniun ŝlosilon. - Wallet unlock was cancelled. - + Malŝloso de monujo estas nuligita. - Private key for the entered address is not available. - + La privata ŝlosilo por la enigita adreso ne disponeblas. - Message signing failed. - + Subskribo de mesaĝo fiaskis. - Message signed. - + Mesaĝo estas subskribita. - The signature could not be decoded. - + Ne eblis malĉifri la subskribon. - - Please check the signature and try again. - + Bonvolu kontroli la subskribon kaj reprovu. - The signature did not match the message digest. - + La subskribo ne kongruis kun la mesaĝ-kompilaĵo. - Message verification failed. - + Kontrolo de mesaĝo malsukcesis. - Message verified. - + Mesaĝo sukcese kontrolita. SplashScreen - - The Myriadcoin developers - + Myriadcoin Core + Kerno de Bitmono + + + The Myriadcoin Core developers + La programistoj de Bitmona Kerno - [testnet] - + [testnet] + + + + TrafficGraphWidget + + KB/s + KB/s TransactionDesc - Open until %1 + Malferma ĝis %1 + + + conflicted - %1/offline - + %1/senkonekte - %1/unconfirmed - %1/nekonfirmita + %1/nekonfirmite - %1 confirmations %1 konfirmoj - Status - + Stato - , broadcast through %n node(s) - + , elsendita(j) tra %n nodo, elsendita(j) tra %n nodoj - Date Dato - Source - + Fonto - Generated - + Kreita - - From - + De - - - To - + Al - - own address - + propra adreso - label - + etikedo - - - - - Credit - + Kredito - matures in %n more block(s) - + maturiĝos post %n blokomaturiĝos post %n blokoj - not accepted - + ne akceptita - - - - Debit - + Debeto - Transaction fee - + Krompago - Net amount - + Neta sumo - Message - + Mesaĝo - Comment - + Komento - Transaction ID - + Transakcia ID - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - + Merchant + Vendisto + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Kreitaj moneroj devas esti maturaj je %1 blokoj antaŭ ol eblas elspezi ilin. Kiam vi generis tiun ĉi blokon, ĝi estis elsendita al la reto por aldono al la blokĉeno. Se tiu aldono malsukcesas, ĝia stato ŝanĝiĝos al "neakceptita" kaj ne eblos elspezi ĝin. Tio estas malofta, sed povas okazi se alia bloko estas kreita je preskaŭ la sama momento kiel la via. - Debug information - + Sencimigaj informoj - Transaction - + Transakcio - Inputs - + Enigoj - Amount Sumo - true - + vera - false - + malvera - , has not been successfully broadcast yet , ankoraŭ ne elsendita sukcese - Open for %n more block(s) - + Malferma dum ankoraŭ %n blokoMalferma dum ankoraŭ %n blokoj - unknown nekonata @@ -1826,468 +2288,392 @@ Address: %4 TransactionDescDialog - Transaction details Transakciaj detaloj - This pane shows a detailed description of the transaction - + Tiu ĉi panelo montras detalan priskribon de la transakcio TransactionTableModel - Date Dato - Type Tipo - Address Adreso - Amount Sumo + + Immature (%1 confirmations, will be available after %2) + + - Open for %n more block(s) - + Malferma dum ankoraŭ %n blokoMalferma dum ankoraŭ %n blokoj - Open until %1 - + Malferma ĝis %1 - - Offline (%1 confirmations) - - - - - Unconfirmed (%1 of %2 confirmations) - - - - Confirmed (%1 confirmations) - - - - - Mined balance will be available when it matures in %n more block(s) - + Konfirmita (%1 konfirmoj) - This block was not received by any other nodes and will probably not be accepted! - + Tiun ĉi blokon ne ricevis ajna alia nodo, kaj ĝi verŝajne ne akceptiĝos! - Generated but not accepted + Kreita sed ne akceptita + + + Offline + Senkonekte + + + Unconfirmed + Nekonfirmita + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted - Received with Ricevita kun - Received from Ricevita de - Sent to Sendita al - Payment to yourself Pago al vi mem - Mined Minita - (n/a) - + neaplikebla - Transaction status. Hover over this field to show number of confirmations. - + Transakcia stato. Ŝvebi super tiu ĉi kampo por montri la nombron de konfirmoj. - Date and time that the transaction was received. - + Dato kaj horo kiam la transakcio alvenis. - Type of transaction. - Transakcia tipo. + Tipo de transakcio. - Destination address of transaction. - + Celadreso de la transakcio. - Amount removed from or added to balance. - + Sumo elprenita de aŭ aldonita al la saldo. TransactionView - - All Ĉiuj - Today Hodiaŭ - This week - + Ĉi-semajne - This month - + Ĉi-monate - Last month - + Pasintmonate - This year - + Ĉi-jare - Range... - + Intervalo... - Received with Ricevita kun - Sent to Sendita al - To yourself Al vi mem - Mined Minita - Other - + Aliaj - Enter address or label to search - + Tajpu adreson aŭ etikedon por serĉi - Min amount - + Minimuma sumo - Copy address - Kopiu adreson + Kopii adreson - Copy label - + Kopii etikedon - Copy amount - + Kopii sumon - Copy transaction ID - + Kopii transakcian ID-on - Edit label - Redaktu etikedon + Redakti etikedon - Show transaction details + Montri detalojn de transakcio + + + Export Transaction History - - Export Transaction Data + Exporting Failed + + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + + + + The transaction history was successfully saved to %1. - Comma separated file (*.csv) - Diskoma dosiero (*.csv) + Perkome disigita dosiero (*.csv) - Confirmed Konfirmita - Date Dato - Type Tipo - Label Etikedo - Address Adreso - Amount Sumo - ID - + ID - - Error exporting - Eraro dum eksportado - - - - Could not write to file %1. - Ne eblis skribi al dosiero %1. - - - Range: - + Intervalo: - to + al + + + + WalletFrame + + No wallet has been loaded. WalletModel - Send Coins - + Sendi Bitmonon WalletView - &Export - + &Eksporti - Export the data in the current tab to a file - + Eksporti la datumojn el la aktuala langeto al dosiero - Backup Wallet - + Krei sekurkopion de monujo - Wallet Data (*.dat) - + Monuj-datumoj (*.dat) - Backup Failed + Malsukcesis sekurkopio + + + There was an error trying to save the wallet data to %1. - - There was an error trying to save the wallet data to the new location. + The wallet data was successfully saved to %1. - Backup Successful - - - - - The wallet data was successfully saved to the new location. - + Sukcesis krei sekurkopion bitcoin-core - - Myriadcoin version - Myriadcoin-a versio - - - Usage: - + Uzado: - - Send command to -server or myriadcoind - - - - List commands - Listigu instrukciojn + Listigi komandojn - Get help for a command - + Vidigi helpon pri iu komando - Options: - Opcioj: + Agordoj: - Specify configuration file (default: myriadcoin.conf) - + Specifi konfiguran dosieron (defaŭlte: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) - + Specifi pid-dosieron (defaŭlte: myriadcoind.pid) - Specify data directory - + Specifi dosieron por datumoj - - Set database cache size in megabytes (default: 25) - - - - Listen for connections on <port> (default: 8333 or testnet: 18333) - + Aŭskulti al <port> por konektoj (defaŭlte: 8333 aŭ testnet: 18333) - Maintain at most <n> connections to peers (default: 125) - + Subteni maksimume <n> konektojn al samtavolanoj (defaŭlte: 125) - Connect to a node to retrieve peer addresses, and disconnect - + Konekti al nodo por ricevi adresojn de samtavolanoj, kaj malkonekti - Specify your own public address - + Specifi vian propran publikan adreson - Threshold for disconnecting misbehaving peers (default: 100) - + Sojlo por malkonekti misagantajn samtavolanojn (defaŭlte: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - + Nombro da sekundoj por rifuzi rekonekton de misagantaj samtavolanoj (defaŭlte: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s - + Eraro okazis dum estigo de RPC-pordo %u por aŭskulti per IPv4: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) - + Aŭskulti al <port> por JSON-RPC-konektoj (defaŭlte: 8332 aŭ testnet: 18332) - Accept command line and JSON-RPC commands + Akcepti komandojn JSON-RPC kaj el komandlinio + + + Myriadcoin Core RPC client version - Run in the background as a daemon and accept commands - + Ruli fone kiel demono kaj akcepti komandojn - Use the test network - + Uzi la test-reton - Accept connections from outside (default: 1 if no -proxy or -connect) - + Akcepti konektojn el ekstere (defaŭlte: 1 se ne estas -proxy nek -connect) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2299,619 +2685,705 @@ If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com - + %s, vi devas specifi rpcpassword en la konfigura dosiero: +%s +Estas konsilinde uzi tiun ĉi aleatore kreitan pasvorton: +rpcuser=myriadcoinrpc +rpcpassword=%s +(ne utilas al vi memorigi tiun ĉi pasvorton) +La salutnomo kaj la pasvorto estu nepre MALSAMAJ. +Se la dosiero ne ekzistas, kreu ĝin kun permeso "nur posedanto rajtas legi". +Estas konsilinde ankaŭ agordi alertnotify por ke vi ricevu avertojn pri eventualaj problemoj; +ekzemple: alertnotify=echo %%s | mail -s "Averto de Bitmono" admin@foo.com + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + Akcepteblaj ĉifroj (defaŭlte: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - + Eraro okazis dum estigo de RPC-pordo %u por aŭskulti per IPv6; retrodefaŭltas al IPv4: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 + Bindi al donita adreso kaj ĉiam aŭskulti per ĝi. Uzu la formaton [gastigo]:pordo por IPv6 + + + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + Ŝalti reĝimo de regresotestado, kiu uzas specialan ĉenon en kiu oni povas tuj solvi blokojn. La celo de tio estas regresotestilo kaj la kreado de aplikaĵoj. + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Eraro: la transakcio estas rifuzita. Tio povas okazi se iom da Bitmono en via monujo jam elspeziĝis (ekz. se vi uzis kopion de wallet.dat kies Bitmono jam elspeziĝis, sed ne estis markita kiel elspezita ĉi tie). - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! - + Eraro: tiu ĉi transakcio bezonas krompagon de almenaŭ %s pro la sumo, la komplekseco, aŭ la uzo de ĵus ricevita mono! - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + Plenumi komandon kiam monuja transakcio ŝanĝiĝas (%s en cmd anstataŭiĝas per TxID) + + + Fees smaller than this are considered zero fee (for transaction creation) (default: - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications + Tiu ĉi estas antaŭeldona testa versio - uzu laŭ via propra risko - ne uzu por minado aŭ por aplikaĵoj por vendistoj + + + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - + Averto: -paytxfee estas agordita per tre alta valoro! Tio estas la krompago, kion vi pagos se vi sendas la transakcion. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. - + Averto: Bonvolu kontroli, ke la horo kaj dato de via komputilo estas ĝuste agorditaj! Se via horloĝo malĝustas, Bitmono ne bone funkcios. + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + Averto: La reto ne tute konsentas! Kelkaj minantoj ŝajne spertas problemojn aktuale. + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + Averto: ŝajne ni ne tute konsentas kun niaj samtavolanoj! Eble vi devas ĝisdatigi vian klienton, aŭ eble aliaj nodoj faru same. - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Averto: okazis eraro dum lego de wallet.dat! Ĉiuj ŝlosiloj sukcese legiĝis, sed la transakciaj datumoj aŭ la adresaro eble mankas aŭ malĝustas. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + Averto: via wallet.dat estas difektita, sed la datumoj sukcese saviĝis! La originala wallet.dat estas nun konservita kiel wallet.{timestamp}.bak en %s; se via saldo aŭ transakcioj estas malĝustaj vi devus restaŭri per alia sekurkopio. + + + (default: 1) - + (default: wallet.dat) + + + + <category> can be: + <category> povas esti: + + Attempt to recover private keys from a corrupt wallet.dat - + Provo ripari privatajn ŝlosilojn el difektita wallet.dat + + + Myriadcoin Core Daemon + Bitmonakerna Demono - Block creation options: + Blok-kreaj agordaĵoj: + + + Clear list of wallet transactions (diagnostic tool; implies -rescan) - Connect only to the specified node(s) + Konekti nur al specifita(j) nodo(j) + + + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + Konekti al la JSON-RPC per <port> (defaŭlte: 8332 aŭ testnet: 18332) + + + Connection options: - Corrupted block database detected + Difektita blokdatumbazo trovita + + + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) - Discover own IP address (default: 1 when listening and no -externalip) + Malkovri la propran IP-adreson (defaŭlte: 1 dum aŭskultado sen -externalip) + + + Do not load the wallet and disable wallet RPC calls - Do you want to rebuild the block database now? - + Ĉu vi volas rekonstrui la blokdatumbazon nun? - Error initializing block database - + Eraro dum pravalorizado de blokdatumbazo - Error initializing wallet database environment %s! - + Eraro dum pravalorizado de monuj-datumbaza ĉirkaŭaĵo %s! - Error loading block database - + Eraro dum ŝargado de blokdatumbazo - Error opening block database - + Eraro dum malfermado de blokdatumbazo - Error: Disk space is low! - + Eraro: restas malmulte da diskospaco! - Error: Wallet locked, unable to create transaction! - + Eraro: monujo ŝlosita, ne eblas krei transakcion! - Error: system error: - + Eraro: sistema eraro: - Failed to listen on any port. Use -listen=0 if you want this. - + Ne sukcesis aŭskulti ajnan pordon. Uzu -listen=0 se tion vi volas. - Failed to read block info - + Malsukcesis legi blokinformojn - Failed to read block - + Malsukcesis legi blokon - Failed to sync block index - + Malsukcesis sinkronigi blokindekson - Failed to write block index - + Malsukcesis skribi blokindekson - Failed to write block info - + Malsukcesis skribi blokinformojn - Failed to write block - + Malsukcesis skribi blokon - Failed to write file info - + Malsukcesis skribi dosierinformojn - Failed to write to coin database - + Malsukcesis skribi Bitmon-datumbazon - Failed to write transaction index - + Malsukcesis skribi transakcian indekson - Failed to write undo data + Malsukcesis skribi malfarajn datumojn + + + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: - Find peers using DNS lookup (default: 1 unless -connect) + Trovi samtavolanojn per DNS-elserĉo (defaŭlte: 1 krom kaze de -connect) + + + Force safe mode (default: 0) - Generate coins (default: 0) - + Generi Bitmonon (defaŭlte: 0) - How many blocks to check at startup (default: 288, 0 = all) + Kiom da blokoj kontrolendas dum lanĉo (defaŭlte: 288, 0=ĉiuj) + + + If <category> is not supplied, output all debugging information. - - How thorough the block verification is (0-4, default: 3) + Importing... - + Incorrect or no genesis block found. Wrong datadir for network? + Geneza bloko aŭ netrovita aŭ neĝusta. Ĉu eble la datadir de la reto malĝustas? + + + Invalid -onion address: '%s' + Nevalida -onion-adreso: '%s' + + Not enough file descriptors available. + Nesufiĉa nombro de dosierpriskribiloj disponeblas. + + + Prepend debug output with timestamp (default: 1) + + + + RPC client options: - Rebuild block chain index from current blk000??.dat files + Rekontrui blokĉenan indekson el la aktualaj blk000??.dat dosieroj + + + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) - Set the number of threads to service RPC calls (default: 4) + Specifi la nombron de fadenoj por priatenti RPC-alvokojn (defaŭlte: 4) + + + Specify wallet file (within data directory) + Specifi monujan dosieron (ene de dosierujo por datumoj) + + + Spend unconfirmed change when sending transactions (default: 1) - + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + Uzado (malaktuala, uzu anstataŭe myriadcoin-cli): + + Verifying blocks... - + Kontrolado de blokoj... - Verifying wallet... + Kontrolado de monujo... + + + Wait for RPC server to start + Atendu por RPC-an servilo komenci + + + Wallet %s resides outside data directory %s + Monujo %s troviĝas ekster la dosierujo por datumoj %s + + + Wallet options: + Monujaj opcioj: + + + Warning: Deprecated argument -debugnet ignored, use -debug=net - + You need to rebuild the database using -reindex to change -txindex + Vi devas rekontrui la datumbazon kun -reindex por ŝanĝi -txindex + + Imports blocks from external blk000??.dat file + Importas blokojn el ekstera dosiero blk000??.dat + + + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + Plenumi komandon kiam rilata alerto riceviĝas, aŭ kiam ni vidas tre longan forkon (%s en cms anstataŭiĝas per mesaĝo) + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) - Information - + Informoj - - Invalid -tor address: '%s' - - - - Invalid amount for -minrelaytxfee=<amount>: '%s' - + Nevalida sumo por -minrelaytxfee=<amount>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' + Nevalida sumo por -mintxfee=<amount>: '%s' + + + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) - Maintain a full transaction index (default: 0) - + Varti kompletan transakcian indekton (defaŭlte: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - + Maksimuma po riceva bufro por konektoj, <n>*1000 bajtoj (defaŭlte: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - + Maksimuma po senda bufro por konektoj, <n>*1000 bajtoj (defaŭlte: 1000) - Only accept block chain matching built-in checkpoints (default: 1) - + Akcepti nur blokĉenon, kiu kongruas kun integritaj kontrolpunktoj (defaŭlte: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + Konekti nur la nodoj en la reto <net> (IPv4, IPv6 aŭ Tor) + + + Print block on startup, if found in block index - - Output extra debugging information. Implies all other -debug* options + Print block tree on startup (default: 0) - - Output extra network debugging information + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) - - Prepend debug output with timestamp + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + SSL-agordaĵoj: (vidu la vikio de Bitmono por instrukcioj pri agordado de SSL) + + + Send command to Myriadcoin Core - - Select the version of socks proxy to use (4-5, default: 5) - - - - Send trace/debug info to console instead of debug.log file - + Sendi spurajn/sencimigajn informojn al la konzolo anstataŭ al dosiero debug.log - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - Set minimum block size in bytes (default: 0) + Agordi minimuman grandon de blokoj je bajtoj (defaŭlte: 0) + + + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) - Shrink debug.log file on client startup (default: 1 when no -debug) - + Malpligrandigi la sencimigan protokol-dosieron kiam kliento lanĉiĝas (defaŭlte: 1 kiam mankas -debug) - Signing transaction failed - + Subskriba transakcio fiaskis - Specify connection timeout in milliseconds (default: 5000) + Specifi konektan tempolimon je milisekundoj (defaŭlte: 5000) + + + Start Myriadcoin Core Daemon - System error: - + Sistema eraro: - Transaction amount too small - + Transakcia sumo tro malgranda - Transaction amounts must be positive - + Transakcia sumo devas esti pozitiva - Transaction too large - + Transakcio estas tro granda - Use UPnP to map the listening port (default: 0) - + Uzi UPnP por mapi la aŭskultan pordon (defaŭlte: 0) - Use UPnP to map the listening port (default: 1 when listening) - + Uzi UPnP por mapi la aŭskultan pordon (defaŭlte: 1 dum aŭskultado) - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - Username for JSON-RPC connections - + Salutnomo por konektoj JSON-RPC - Warning - + Averto - Warning: This version is obsolete, upgrade required! + Averto: tiu ĉi versio estas eksdata. Vi bezonas ĝisdatigon! + + + Zapping all transactions from wallet... - - You need to rebuild the databases using -reindex to change -txindex + on startup - + version + versio + + wallet.dat corrupt, salvage failed - + wallet.dat estas difektita, riparo malsukcesis - Password for JSON-RPC connections - + Pasvorto por konektoj JSON-RPC - Allow JSON-RPC connections from specified IP address - + Permesi konektojn JSON-RPC de specifa IP-adreso - Send commands to node running on <ip> (default: 127.0.0.1) - + Sendi komandon al nodo ĉe <ip> (defaŭlte: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) - + Plenumi komandon kiam plej bona bloko ŝanĝiĝas (%s en cmd anstataŭiĝas per bloka haketaĵo) - Upgrade wallet to latest format - + Ĝisdatigi monujon al plej lasta formato - Set key pool size to <n> (default: 100) - + Agordi la grandon de la ŝlosilo-vico al <n> (defaŭlte: 100) - Rescan the block chain for missing wallet transactions - + Reskani la blokĉenon por mankantaj monujaj transakcioj - Use OpenSSL (https) for JSON-RPC connections - + Uzi OpenSSL (https) por konektoj JSON-RPC - Server certificate file (default: server.cert) - + Dosiero de servila atestilo (defaŭlte: server.cert) - Server private key (default: server.pem) - + Dosiero de servila privata ŝlosilo (defaŭlte: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - This help message - + Tiu ĉi helpmesaĝo - Unable to bind to %s on this computer (bind returned error %d, %s) - + Ne eblis bindi al %s en tiu ĉi komputilo (bind resendis eraron %d, %s) - - Connect through socks proxy - - - - Allow DNS lookups for -addnode, -seednode and -connect - + Permesi DNS-elserĉojn por -addnote, -seednote kaj -connect - Loading addresses... Ŝarĝante adresojn... - Error loading wallet.dat: Wallet corrupted - + Eraro dum ŝargado de wallet.dat: monujo difektita - Error loading wallet.dat: Wallet requires newer version of Myriadcoin - + Eraro dum ŝargo de wallet.dat: monujo bezonas pli novan version de Bitmono - Wallet needed to be rewritten: restart Myriadcoin to complete - + Monujo bezonas esti reskribita: relanĉu Bitmonon por finfari tion - Error loading wallet.dat - + Eraro dum ŝargado de wallet.dat - Invalid -proxy address: '%s' - + Nevalid adreso -proxy: '%s' - Unknown network specified in -onlynet: '%s' - + Nekonata reto specifita en -onlynet: '%s' - Unknown -socks proxy version requested: %i - + Nekonata versio de -socks petita: %i - Cannot resolve -bind address: '%s' - + Ne eblas trovi la adreson -bind: '%s' - Cannot resolve -externalip address: '%s' - + Ne eblas trovi la adreson -externalip: '%s' - Invalid amount for -paytxfee=<amount>: '%s' - + Nevalida sumo por -paytxfee=<amount>: '%s' - Invalid amount - + Nevalida sumo - Insufficient funds - + Nesufiĉa mono - Loading block index... Ŝarĝante blok-indekson... - Add a node to connect to and attempt to keep the connection open - + Aldoni nodon por alkonekti kaj provi daŭrigi la malferman konekton - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - Loading wallet... - Ŝarĝante monujon... + Ŝargado de monujo... - Cannot downgrade wallet - + Ne eblas malpromocii monujon - Cannot write default address - + Ne eblas skribi defaŭltan adreson - Rescanning... - + Reskanado... - Done loading - Ŝarĝado finitas + Ŝargado finiĝis - To use the %s option - Por uzi la opcion %s + Por uzi la agordon %s - Error Eraro - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. - + Vi devas agordi rpcpassword=<password> en la konfigura dosiero: +%s +Se la dosiero ne ekzistas, kreu ĝin kun permeso "nur posedanto rajtas legi". \ No newline at end of file diff --git a/src/qt/locale/bitcoin_es.ts b/src/qt/locale/bitcoin_es.ts index 4b57d383..1c08a49b 100644 --- a/src/qt/locale/bitcoin_es.ts +++ b/src/qt/locale/bitcoin_es.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - Acerca de Myriadcoin + About Myriadcoin Core + Acerca de Myriadcoin Core - - <b>Myriadcoin</b> version - Versión de <b>Myriadcoin</b> + <b>Myriadcoin Core</b> version + Versión de <b>Myriadcoin Core<b> - This is experimental software. @@ -31,153 +27,128 @@ el OpenSSL Toolkit (http://www.openssl.org/) y software criptográfico escrito p Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard. - Copyright Copyright - - The Myriadcoin developers - Los programadores Myriadcoin + The Myriadcoin Core developers + Los desarrolladores de Myriadcoin Core + + + (%1-bit) + (%1-bit) AddressBookPage - - Address Book - Libreta de direcciones - - - Double-click to edit address or label - Haga doble clic para editar una dirección o etiqueta + Haga doble clic para editar la etiqueta o dirección - Create a new address Crear una nueva dirección - + &New + Nuevo + + Copy the currently selected address to the system clipboard Copiar la dirección seleccionada al portapapeles del sistema - - &New Address - &Añadir dirección + &Copy + &Copiar - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Estas son sus direcciones Myriadcoin para recibir pagos. Puede utilizar una diferente por cada persona emisora para saber quién le está pagando. + C&lose + &Cerrar - &Copy Address &Copiar dirección - - Show &QR Code - Mostrar código &QR - - - - Sign a message to prove you own a Myriadcoin address - Firmar un mensaje para demostrar que se posee una dirección Myriadcoin - - - - Sign &Message - &Firmar mensaje - - - Delete the currently selected address from the list Borrar de la lista la dirección seleccionada - Export the data in the current tab to a file Exportar a un archivo los datos de esta pestaña - &Export &Exportar - - Verify a message to ensure it was signed with a specified Myriadcoin address - Verificar un mensaje para comprobar que fue firmado con la dirección Myriadcoin indicada - - - - &Verify Message - &Verificar mensaje - - - &Delete &Eliminar - - These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - Estas son sus direcciones Myriadcoin para enviar pagos. Compruebe siempre la cantidad y la dirección receptora antes de transferir monedas. + Choose the address to send coins to + Escoja la dirección a la que enviar myriadcoins + + + Choose the address to receive coins with + Escoja la dirección de la que recibir myriadcoins + + + C&hoose + &Escoger + + + Sending addresses + Direcciones de envío + + + Receiving addresses + Direcciones de recepción + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + Estas son sus direcciones Myriadcoin para enviar pagos. Compruebe siempre la cantidad y la dirección receptora antes de enviar myriadcoins. + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Estas son sus direcciones de Myriadcoin para recibir pagos. Se recomienda utilizar una nueva dirección de recepción para cada transacción. - Copy &Label Copiar &etiqueta - &Edit &Editar - - Send &Coins - Enviar &monedas + Export Address List + Exportar la lista de direcciones - - Export Address Book Data - Exportar datos de la libreta de direcciones - - - Comma separated file (*.csv) Archivos de columnas separadas por coma (*.csv) - - Error exporting - Error al exportar + Exporting Failed + Error exportando - - Could not write to file %1. - No se pudo escribir en el archivo %1. + There was an error trying to save the address list to %1. + Ha habido un error al intentar guardar los datos del monedero en %1. AddressTableModel - Label Etiqueta - Address Dirección - (no label) (sin etiqueta) @@ -185,140 +156,106 @@ Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard.
AskPassphraseDialog - Passphrase Dialog Diálogo de contraseña - Enter passphrase Introducir contraseña - New passphrase Nueva contraseña - Repeat new passphrase Repita la nueva contraseña - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Introduzca la nueva contraseña del monedero.<br/>Por favor elija una con <b>10 o más caracteres aleatorios</b> u <b>ocho o más palabras</b>. + Introduzca la nueva contraseña del monedero.<br/>Por favor elija una con <b>10 o más caracteres aleatorios</b>, u <b>ocho o más palabras</b>. - Encrypt wallet Cifrar el monedero - This operation needs your wallet passphrase to unlock the wallet. Esta operación requiere su contraseña para desbloquear el monedero. - Unlock wallet Desbloquear monedero - This operation needs your wallet passphrase to decrypt the wallet. Esta operación requiere su contraseña para descifrar el monedero. - Decrypt wallet Descifrar el monedero - Change passphrase Cambiar contraseña - Enter the old and new passphrase to the wallet. Introduzca la contraseña anterior del monedero y la nueva. - Confirm wallet encryption Confirmar cifrado del monedero - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! Atencion: ¡Si cifra su monedero y pierde la contraseña perderá <b>TODOS SUS MYRIADCOINS</b>!" - Are you sure you wish to encrypt your wallet? ¿Seguro que desea cifrar su monedero? - 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. IMPORTANTE: Cualquier copia de seguridad que haya realizado previamente de su archivo de monedero debe reemplazarse con el nuevo archivo de monedero cifrado. Por razones de seguridad, las copias de seguridad previas del archivo de monedero no cifradas serán inservibles en cuanto comience a usar el nuevo monedero cifrado. - - Warning: The Caps Lock key is on! Aviso: ¡La tecla de bloqueo de mayúsculas está activada! - - Wallet encrypted Monedero cifrado - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. Myriadcoin se cerrará para finalizar el proceso de cifrado. Recuerde que el cifrado de su monedero no puede proteger totalmente sus myriadcoins de robo por malware que infecte su sistema. - - - - Wallet encryption failed Ha fallado el cifrado del monedero - Wallet encryption failed due to an internal error. Your wallet was not encrypted. Ha fallado el cifrado del monedero debido a un error interno. El monedero no ha sido cifrado. - - The supplied passphrases do not match. Las contraseñas no coinciden. - Wallet unlock failed Ha fallado el desbloqueo del monedero - - - The passphrase entered for the wallet decryption was incorrect. La contraseña introducida para descifrar el monedero es incorrecta. - Wallet decryption failed Ha fallado el descifrado del monedero - Wallet passphrase was successfully changed. Se ha cambiado correctamente la contraseña del monedero. @@ -326,319 +263,286 @@ Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard.
BitcoinGUI - Sign &message... Firmar &mensaje... - Synchronizing with network... Sincronizando con la red… - &Overview &Vista general - + Node + Nodo + + Show general overview of wallet Mostrar vista general del monedero - &Transactions &Transacciones - Browse transaction history Examinar el historial de transacciones - - Edit the list of stored addresses and labels - Editar la lista de las direcciones y etiquetas almacenadas - - - - Show the list of addresses for receiving payments - Mostrar la lista de direcciones utilizadas para recibir pagos - - - E&xit &Salir - Quit application Salir de la aplicación - Show information about Myriadcoin Mostrar información acerca de Myriadcoin - About &Qt Acerca de &Qt - Show information about Qt Mostrar información acerca de Qt - &Options... &Opciones... - &Encrypt Wallet... &Cifrar monedero… - &Backup Wallet... - Copia de &respaldo del monedero... + &Guardar copia del monedero... - &Change Passphrase... &Cambiar la contraseña… - + &Sending addresses... + Direcciones de &envío... + + + &Receiving addresses... + Direcciones de &recepción... + + + Open &URI... + Abrir &URI... + + Importing blocks from disk... Importando bloques de disco... - Reindexing blocks on disk... Reindexando bloques en disco... - Send coins to a Myriadcoin address - Enviar monedas a una dirección Myriadcoin + Enviar myriadcoins a una dirección Myriadcoin - Modify configuration options for Myriadcoin Modificar las opciones de configuración de Myriadcoin - Backup wallet to another location Copia de seguridad del monedero en otra ubicación - Change the passphrase used for wallet encryption Cambiar la contraseña utilizada para el cifrado del monedero - &Debug window Ventana de &depuración - Open debugging and diagnostic console Abrir la consola de depuración y diagnóstico - &Verify message... &Verificar mensaje... - - Myriadcoin Myriadcoin - Wallet Monedero - &Send &Enviar - &Receive &Recibir - - &Addresses - &Direcciones - - - - &About Myriadcoin - &Acerca de Myriadcoin - - - &Show / Hide Mo&strar/ocultar - Show or hide the main Window Mostrar u ocultar la ventana principal - Encrypt the private keys that belong to your wallet Cifrar las claves privadas de su monedero - Sign messages with your Myriadcoin addresses to prove you own them Firmar mensajes con sus direcciones Myriadcoin para demostrar la propiedad - Verify messages to ensure they were signed with specified Myriadcoin addresses Verificar mensajes comprobando que están firmados con direcciones Myriadcoin concretas - &File &Archivo - &Settings &Configuración - &Help A&yuda - Tabs toolbar Barra de pestañas - - [testnet] [testnet] - + Myriadcoin Core + Myriadcoin Core + + + Request payments (generates QR codes and myriadcoin: URIs) + Solicitar pagos (genera codigo QR y URL's de Bitcoin) + + + &About Myriadcoin Core + &Acerca de Myriadcoin Core + + + Show the list of used sending addresses and labels + Mostrar la lista de direcciones de envío y etiquetas + + + Show the list of used receiving addresses and labels + Muestra la lista de direcciones de recepción y etiquetas + + + Open a myriadcoin: URI or payment request + Abrir un myriadcoin: URI o petición de pago + + + &Command-line options + &Opciones de consola de comandos + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + Muestra el mensaje de ayuda Myriadcoin Core para obtener una lista con las posibles opciones de la consola de comandos de Myriadcoin + + Myriadcoin client Cliente Myriadcoin - %n active connection(s) to Myriadcoin network %n conexión activa hacia la red Myriadcoin%n conexiones activas hacia la red Myriadcoin - No block source available... Ninguna fuente de bloques disponible ... - Processed %1 of %2 (estimated) blocks of transaction history. Se han procesado %1 de %2 bloques (estimados) del historial de transacciones. - Processed %1 blocks of transaction history. Procesados %1 bloques del historial de transacciones. - %n hour(s) %n hora%n horas - %n day(s) %n día%n días - %n week(s) %n semana%n semanas - - %1 behind - %1 atrás + %1 and %2 + %1 y %2 + + + %n year(s) + %n año%n años + + + %1 behind + %1 por detrás - Last received block was generated %1 ago. El último bloque recibido fue generado hace %1. - Transactions after this will not yet be visible. - Las transacciones posteriores a esta aún no están visibles. + Las transacciones posteriores aún no están visibles. - Error Error - Warning Aviso - Information Información - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - Esta transacción supera el límite de tamaño. Puede enviarla con una comisión de %1, destinada a los nodos que procesen su transacción para contribuir al mantenimiento de la red. ¿Desea pagar esta comisión? - - - Up to date Actualizado - Catching up... Actualizando... - - Confirm transaction fee - Confirme la tarifa de la transacción - - - Sent transaction Transacción enviada - Incoming transaction Transacción entrante - Date: %1 Amount: %2 Type: %3 @@ -651,29 +555,14 @@ Dirección: %4 - - - URI handling - Gestión de URI - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - ¡No se puede interpretar la URI! Esto puede deberse a una dirección Myriadcoin inválida o a parámetros de URI mal formados. - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> El monedero está <b>cifrado</b> y actualmente <b>desbloqueado</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> El monedero está <b>cifrado</b> y actualmente <b>bloqueado</b> - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. Ha ocurrido un error crítico. Myriadcoin ya no puede continuar con seguridad y se cerrará. @@ -681,329 +570,647 @@ Dirección: %4 ClientModel - Network Alert Alerta de red + + CoinControlDialog + + Coin Control Address Selection + Selección de direcciones bajo Coin Control + + + Quantity: + Cantidad: + + + Bytes: + Bytes: + + + Amount: + Cuantía: + + + Priority: + Prioridad: + + + Fee: + Tasa: + + + Low Output: + Envío pequeño: + + + After Fee: + Después de tasas: + + + Change: + Cambio: + + + (un)select all + (des)marcar todos + + + Tree mode + Modo árbol + + + List mode + Modo lista + + + Amount + Cantidad + + + Address + Dirección + + + Date + Fecha + + + Confirmations + Confirmaciones + + + Confirmed + Confirmado + + + Priority + Prioridad + + + Copy address + Copiar dirección + + + Copy label + Copiar etiqueta + + + Copy amount + Copiar cuantía + + + Copy transaction ID + Copiar identificador de transacción + + + Lock unspent + Bloquear lo no gastado + + + Unlock unspent + Desbloquear lo no gastado + + + Copy quantity + Copiar cantidad + + + Copy fee + Copiar donación + + + Copy after fee + Copiar después de aplicar donación + + + Copy bytes + Copiar bytes + + + Copy priority + Copiar prioridad + + + Copy low output + Copiar envío pequeño + + + Copy change + Copiar cambio + + + highest + lo más alto + + + higher + más alto + + + high + alto + + + medium-high + medio-alto + + + medium + medio + + + low-medium + bajo-medio + + + low + bajo + + + lower + más bajo + + + lowest + lo más bajo + + + (%1 locked) + (%1 bloqueado) + + + none + ninguna + + + Dust + Basura + + + yes + si + + + no + no + + + This label turns red, if the transaction size is greater than 1000 bytes. + Esta etiqueta se torna roja si el tamaño de la transación es mayor a 1000 bytes. + + + This means a fee of at least %1 per kB is required. + Esto implica que se requiere una tarifa de al menos %1 por kB + + + Can vary +/- 1 byte per input. + Puede variar +/- 1 byte por entrada. + + + Transactions with higher priority are more likely to get included into a block. + Las transacciones con alta prioridad son más propensas a ser incluidas dentro de un bloque. + + + This label turns red, if the priority is smaller than "medium". + Esta etiqueta se muestra en rojo si la prioridad es menor que "media". + + + This label turns red, if any recipient receives an amount smaller than %1. + Esta etiqueta se torna roja si cualquier destinatario recibe una cantidad menor a %1. + + + This means a fee of at least %1 is required. + Esto significa que se necesita una tarifa de al menos %1. + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + Cantidades por debajo de 0.546 veces la tasa serán mostradas como basura + + + This label turns red, if the change is smaller than %1. + Esta etiqueta se vuelve roja si el cambio es menor que %1 + + + (no label) + (sin etiqueta) + + + change from %1 (%2) + Enviar desde %1 (%2) + + + (change) + (cambio) + + EditAddressDialog - Edit Address Editar Dirección - &Label &Etiqueta - - The label associated with this address book entry - La etiqueta asociada con esta entrada en la libreta + The label associated with this address list entry + La etiqueta asociada con esta entrada de la lista de direcciones + + + The address associated with this address list entry. This can only be modified for sending addresses. + La dirección asociada con esta entrada de la lista de direcciones. Solo puede ser modificada para direcciones de envío. - &Address &Dirección - - The address associated with this address book entry. This can only be modified for sending addresses. - La dirección asociada con esta entrada en la guía. Solo puede ser modificada para direcciones de envío. - - - New receiving address - Nueva dirección para recibir + Nueva dirección de recepción - New sending address - Nueva dirección para enviar + Nueva dirección de envío - Edit receiving address Editar dirección de recepción - Edit sending address Editar dirección de envío - The entered address "%1" is already in the address book. La dirección introducida "%1" ya está presente en la libreta de direcciones. - The entered address "%1" is not a valid Myriadcoin address. La dirección introducida "%1" no es una dirección Myriadcoin válida. - Could not unlock wallet. No se pudo desbloquear el monedero. - New key generation failed. Ha fallado la generación de la nueva clave. - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt - Myriadcoin-Qt + A new data directory will be created. + Se creará un nuevo directorio de datos. + + + name + nombre + + + Directory already exists. Add %1 if you intend to create a new directory here. + El directorio ya existe. Añada %1 si pretende crear aquí un directorio nuevo. + + + Path already exists, and is not a directory. + La ruta ya existe y no es un directorio. + + + Cannot create data directory here. + No se puede crear un directorio de datos aquí. + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + Myriadcoin Core - Opciones de consola de comandos + + + Myriadcoin Core + Myriadcoin Core - version versión - Usage: Uso: - command-line options - opciones de la línea de órdenes + opciones de la consola de comandos - UI options Opciones GUI - Set language, for example "de_DE" (default: system locale) Establecer el idioma, por ejemplo, "es_ES" (predeterminado: configuración regional del sistema) - Start minimized Arrancar minimizado - + Set SSL root certificates for payment request (default: -system-) + Establecer los certificados raíz SSL para solicitudes de pago (predeterminado: -system-) + + Show splash screen on startup (default: 1) Mostrar pantalla de bienvenida en el inicio (predeterminado: 1) + + Choose data directory on startup (default: 0) + Elegir directorio de datos al iniciar (predeterminado: 0) + + + + Intro + + Welcome + Bienvenido + + + Welcome to Myriadcoin Core. + Bienvenido a Myriadcoin Core + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + Al ser la primera vez que se ejecuta el programa, puede elegir dónde almacenará sus datos Myriadcoin Core. + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + Myriadcoin Core va a descargar y guardar una copia de la cadena de bloques de Myriadcoin. Se almacenará al menos %1GB de datos en este directorio, que irá creciendo con el tiempo. El monedero se guardará también en este directorio. + + + Use the default data directory + Utilizar el directorio de datos predeterminado + + + Use a custom data directory: + Utilice un directorio de datos personalizado: + + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" can not be created. + Error: No puede crearse el directorio de datos especificado "%1". + + + Error + Error + + + GB of free space available + GB de espacio libre disponible + + + (of %1GB needed) + (de los %1GB necesarios) + + + + OpenURIDialog + + Open URI + Abrir URI... + + + Open payment request from URI or file + El pago requiere una URI o archivo + + + URI: + URI: + + + Select payment request file + Seleccione archivo de sulicitud de pago + + + Select payment request file to open + Abrir archivo de solicitud de pago + OptionsDialog - Options Opciones - &Main &Principal - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Tarifa de transacción opcional por kB que ayuda a asegurar que sus transacciones sean procesadas rápidamente. La mayoría de transacciones son de 1kB. - Pay transaction &fee Comisión de &transacciones - Automatically start Myriadcoin after logging in to the system. Iniciar Myriadcoin automáticamente al encender el sistema. - &Start Myriadcoin on system login &Iniciar Myriadcoin al iniciar el sistema - + Size of &database cache + Tamaño de cache de la &base de datos + + + MB + MB + + + Number of script &verification threads + Número de procesos de &verificación de scripts + + + Connect to the Myriadcoin network through a SOCKS proxy. + Conectarse a la red Myriadcoin a través de un proxy SOCKS. + + + &Connect through SOCKS proxy (default proxy): + &Conectarse a través de proxy SOCKS (proxy predeterminado): + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + Dirección IP del proxy (p. ej. IPv4: 127.0.0.1 / IPv6: ::1) + + + 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 |. + URLs de terceros (por ejemplo, un explorador de bloques) que aparecen en la pestaña de transacciones como items del menú contextual. El %s en la URL es reemplazado por el hash de la transacción. Se pueden separar múltiples URLs por una barra vertical |. + + + Third party transaction URLs + URLs de transacciones de terceros + + + Active command-line options that override above options: + Opciones activas de consola de comandos que tienen preferencia sobre las opciones antes mencionadas: + + Reset all client options to default. Restablecer todas las opciones del cliente a las predeterminadas. - &Reset Options &Restablecer opciones - &Network &Red - + (0 = auto, <0 = leave that many cores free) + (0 = automático, <0 = dejar libres ese número de núcleos) + + + W&allet + &Monedero + + + Expert + Experto + + + Enable coin &control features + Habilitar funcionalidad de &coin control + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + Si desactiva el gasto del cambio no confirmado, no se podrá usar el cambio de una transacción hasta que se alcance al menos una confirmación. Esto afecta también a cómo se calcula su saldo. + + + &Spend unconfirmed change + &Gastar cambio no confirmado + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. Abrir automáticamente el puerto del cliente Myriadcoin en el router. Esta opción solo funciona si el router admite UPnP y está activado. - Map port using &UPnP Mapear el puerto usando &UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - Conectar a la red Myriadcoin a través de un proxy SOCKS (ej. para conectar con la red Tor) - - - - &Connect through SOCKS proxy: - &Conectar a través de un proxy SOCKS: - - - Proxy &IP: Dirección &IP del proxy: - - IP address of the proxy (e.g. 127.0.0.1) - Dirección IP del proxy (ej. 127.0.0.1) - - - &Port: &Puerto: - Port of the proxy (e.g. 9050) Puerto del servidor proxy (ej. 9050) - SOCKS &Version: &Versión SOCKS: - SOCKS version of the proxy (e.g. 5) - Versión del proxy SOCKS (ej. 5) + Versión SOCKS del proxy (ej. 5) - &Window &Ventana - Show only a tray icon after minimizing the window. Minimizar la ventana a la bandeja de iconos del sistema. - &Minimize to the tray instead of the taskbar &Minimizar a la bandeja en vez de a la barra de tareas - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. - Minimizar en lugar de salir de la aplicación al cerrar la ventana.Cuando esta opción está activa, la aplicación solo se puede cerrar seleccionando Salir desde el menú. + Minimizar en lugar de salir de la aplicación al cerrar la ventana. Cuando esta opción está activa, la aplicación solo se puede cerrar seleccionando Salir desde el menú. - M&inimize on close M&inimizar al cerrar - &Display &Interfaz - User Interface &language: I&dioma de la interfaz de usuario - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. El idioma de la interfaz de usuario puede establecerse aquí. Este ajuste se aplicará cuando se reinicie Myriadcoin. - &Unit to show amounts in: Mostrar las cantidades en la &unidad: - Choose the default subdivision unit to show in the interface and when sending coins. - Elegir la subdivisión predeterminada para mostrar cantidades en la interfaz y cuando se envían monedas. + Elegir la subdivisión predeterminada para mostrar cantidades en la interfaz y cuando se envían myriadcoins. - Whether to show Myriadcoin addresses in the transaction list or not. Mostrar o no las direcciones Myriadcoin en la lista de transacciones. - &Display addresses in transaction list &Mostrar las direcciones en la lista de transacciones - + Whether to show coin control features or not. + Mostrar o no funcionalidad de Coin Control + + &OK &Aceptar - &Cancel &Cancelar - - &Apply - &Aplicar - - - default predeterminado - + none + ninguna + + Confirm options reset Confirme el restablecimiento de las opciones - - Some settings may require a client restart to take effect. - Algunas configuraciones pueden requerir un reinicio del cliente para que sean efectivas. + Client restart required to activate changes. + Se necesita reiniciar el cliente para activar los cambios. - - Do you want to proceed? - ¿Quiere proceder? + Client will be shutdown, do you want to proceed? + El cliente se cerrará. ¿Desea continuar? - - - Warning - Aviso + This change would require a client restart. + Este cambio exige el reinicio del cliente. - - - This setting will take effect after restarting Myriadcoin. - Esta configuración tendrá efecto tras reiniciar Myriadcoin. - - - The supplied proxy address is invalid. La dirección proxy indicada es inválida. @@ -1011,59 +1218,54 @@ Dirección: %4 OverviewPage - Form Desde - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. - La información mostrada puede estar desactualizada. Su monedero se sincroniza automáticamente con la red Myriadcoin después de que se haya establecido una conexión , pero este proceso aún no se ha completado. + La información mostrada puede estar desactualizada. Su monedero se sincroniza automáticamente con la red Myriadcoin después de que se haya establecido una conexión, pero este proceso aún no se ha completado. - - Balance: - Saldo: - - - - Unconfirmed: - No confirmado(s): - - - Wallet Monedero - + Available: + Disponible: + + + Your current spendable balance + Su balance actual gastable + + + Pending: + Pendiente: + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + Total de transacciones que deben ser confirmadas, y que no cuentan con el balance gastable necesario + + Immature: No disponible: - Mined balance that has not yet matured Saldo recién minado que aún no está disponible. - + Total: + Total: + + + Your current total balance + Su balance actual total + + <b>Recent transactions</b> <b>Movimientos recientes</b> - - Your current balance - Su saldo actual - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - Total de las transacciones que faltan por confirmar y que no contribuyen al saldo actual - - - - out of sync desincronizado @@ -1071,579 +1273,856 @@ Dirección: %4 PaymentServer - + URI handling + Gestión de URI + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + ¡No se puede interpretar la URI! Esto puede deberse a una dirección Myriadcoin inválida o a parámetros de URI mal formados. + + + Requested payment amount of %1 is too small (considered dust). + La cantidad del pago solicitado (%1) es demasiado pequeña (considerada polvo). + + + Payment request error + Error en petición de pago + + Cannot start myriadcoin: click-to-pay handler No se pudo iniciar myriadcoin: manejador de pago-al-clic + + Net manager warning + Advertencia del gestor de red + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + El proxy configurado no soporta el protocolo SOCKS5, el cual es requerido para pagos vía proxy. + + + Payment request fetch URL is invalid: %1 + La URL de obtención de la solicitud de pago es inválida: %1 + + + Payment request file handling + Procesado del archivo de solicitud de pago + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + ¡No se ha podido leer o procesar el archivo de solicitud de pago! Esto puede deberse a un archivo inválido de solicitud de pago. + + + Unverified payment requests to custom payment scripts are unsupported. + No están soportadas las peticiones inseguras a scripts de pago personalizados + + + Refund from %1 + Devolución de %1 + + + Error communicating with %1: %2 + Error en la comunicación con %1: %2 + + + Payment request can not be parsed or processed! + ¡La solicitud de pago no puede leerse ni procesarse! + + + Bad response from server %1 + Respuesta errónea del servidor %1 + + + Payment acknowledged + Pago aceptado + + + Network request error + Error en petición de red + - QRCodeDialog + QObject - - QR Code Dialog - Diálogo de códigos QR + Myriadcoin + Myriadcoin - - Request Payment - Solicitud de pago + Error: Specified data directory "%1" does not exist. + Error: El directorio de datos especificado "%1" no existe. - - Amount: - Cuantía: + Error: Cannot parse configuration file: %1. Only use key=value syntax. + Error: No se ha podido leer el archivo de configuración: %1. Debe utilizarse solamente la sintaxis clave=valor. - - Label: - Etiqueta: + Error: Invalid combination of -regtest and -testnet. + Error: Combinación no válida de -regtest y -testnet. - - Message: - Mensaje: + Myriadcoin Core didn't yet exit safely... + Myriadcoin core no se ha cerrado de forma segura todavía... - - &Save As... - &Guardar como... + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Introduzca una dirección Myriadcoin (ej. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + Guardar Imagen... - - Error encoding URI into QR Code. - Error al codificar la URI en el código QR. + &Copy Image + Copiar imagen - - The entered amount is invalid, please check. - La cantidad introducida es inválida. Compruébela, por favor. - - - - Resulting URI too long, try to reduce the text for label / message. - URI esultante demasiado larga. Intente reducir el texto de la etiqueta / mensaje. - - - Save QR Code Guardar código QR - - PNG Images (*.png) + PNG Image (*.png) Imágenes PNG (*.png) RPCConsole - Client name Nombre del cliente - - - - - - - - - - N/A N/D - Client version Versión del cliente - &Information &Información - + Debug window + Ventana de depuración + + + General + General + + Using OpenSSL version Utilizando la versión OpenSSL - Startup time Hora de inicio - Network Red - + Name + Nombre + + Number of connections Número de conexiones - - On testnet - En la red de pruebas - - - Block chain Cadena de bloques - Current number of blocks Número actual de bloques - Estimated total blocks Bloques totales estimados - Last block time Hora del último bloque - &Open &Abrir - - Command-line options - Opciones de la línea de órdenes - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - Mostrar el mensaje de ayuda de Myriadcoin-Qt que enumera las opciones disponibles de línea de órdenes para Myriadcoin. - - - - &Show - &Mostrar - - - &Console &Consola - + &Network Traffic + &Tráfico de Red + + + &Clear + &Vaciar + + + Totals + Total: + + + In: + Entrante: + + + Out: + Saliente: + + Build date Fecha de compilación - - Myriadcoin - Debug window - Myriadcoin - Ventana de depuración - - - - Myriadcoin Core - Núcleo de Myriadcoin - - - Debug log file Archivo de registro de depuración - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. Abrir el archivo de registro de depuración en el directorio actual de datos. Esto puede llevar varios segundos para archivos de registro grandes. - Clear console Borrar consola - Welcome to the Myriadcoin RPC console. Bienvenido a la consola RPC de Myriadcoin - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Use las flechas arriba y abajo para navegar por el historial y <b>Control+L</b> para limpiar la pantalla. + Use las flechas arriba y abajo para navegar por el historial y <b>Control+L</b> para vaciar la pantalla. - Type <b>help</b> for an overview of available commands. Escriba <b>help</b> para ver un resumen de los comandos disponibles. + + %1 B + %1 B + + + %1 KB + %1 KB + + + %1 MB + %1 MB + + + %1 GB + %1 GB + + + %1 m + %1 m + + + %1 h + %1 h + + + %1 h %2 m + %1 h %2 m + + + + ReceiveCoinsDialog + + &Amount: + Cantidad + + + &Label: + &Etiqueta: + + + &Message: + Mensaje: + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + Reutilizar una de las direcciones previamente usadas para recibir. Reutilizar direcciones tiene problemas de seguridad y privacidad. No lo uses a menos que antes regeneres una solicitud de pago. + + + R&euse an existing receiving address (not recommended) + R&eutilizar una dirección existente para recibir (no recomendado) + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + Un mensaje opcional para adjuntar a la solicitud de pago, que se muestra cuando se abre la solicitud. Nota: El mensaje no se enviará con el pago por la red Myriadcoin. + + + An optional label to associate with the new receiving address. + Etiqueta opcional para asociar con la nueva dirección de recepción. + + + Use this form to request payments. All fields are <b>optional</b>. + Utilice este formulario para solicitar pagos. Todos los campos son <b>opcionales</b>. + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + Para solicitar una cantidad opcional. Deje este vacío o cero para no solicitar una cantidad específica. + + + Clear all fields of the form. + Vaciar todos los campos del formulario. + + + Clear + Vaciar + + + Requested payments history + Historial de pagos solicitados + + + &Request payment + &Solicitar pago + + + Show the selected request (does the same as double clicking an entry) + Muestra la petición seleccionada (También doble clic) + + + Show + Mostrar + + + Remove the selected entries from the list + Borrar de la lista las direcciónes actualmente seleccionadas + + + Remove + Eliminar + + + Copy label + Copiar etiqueta + + + Copy message + Mensaje + + + Copy amount + Copiar cuantía + + + + ReceiveRequestDialog + + QR Code + Código QR + + + Copy &URI + Copiar &URI + + + Copy &Address + Copiar &Dirección + + + &Save Image... + Guardar Imagen... + + + Request payment to %1 + Solicitar pago a %1 + + + Payment information + Información de pago + + + URI + URI + + + Address + Dirección + + + Amount + Cantidad + + + Label + Etiqueta + + + Message + Mensaje + + + Resulting URI too long, try to reduce the text for label / message. + URI resultante demasiado larga. Intente reducir el texto de la etiqueta / mensaje. + + + Error encoding URI into QR Code. + Error al codificar la URI en el código QR. + + + + RecentRequestsTableModel + + Date + Fecha + + + Label + Etiqueta + + + Message + Mensaje + + + Amount + Cantidad + + + (no label) + (sin etiqueta) + + + (no message) + (Ningun mensaje) + + + (no amount) + (sin cantidad) + SendCoinsDialog - - - - - - - - Send Coins - Enviar monedas + Enviar myriadcoins + + + Coin Control Features + Características de Coin Control + + + Inputs... + Entradas... + + + automatically selected + Seleccionado automáticamente + + + Insufficient funds! + Fondos insuficientes! + + + Quantity: + Cantidad: + + + Bytes: + Bytes: + + + Amount: + Cuantía: + + + Priority: + Prioridad: + + + Fee: + Tasa: + + + Low Output: + Envío pequeño: + + + After Fee: + Después de tasas: + + + Change: + Cambio: + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + Si se marca esta opción pero la dirección de cambio está vacía o es inválida, el cambio se enviará a una nueva dirección recién generada. + + + Custom change address + Dirección propia - Send to multiple recipients at once - Enviar a multiples destinatarios de una vez + Enviar a múltiples destinatarios de una vez - Add &Recipient Añadir &destinatario - - Remove all transaction fields - Eliminar todos los campos de las transacciones + Clear all fields of the form. + Vaciar todos los campos del formulario - Clear &All - Limpiar &todo + Vaciar &todo - Balance: Saldo: - - 123.456 BTC - 123.456 BTC - - - Confirm the send action Confirmar el envío - S&end &Enviar - - <b>%1</b> to %2 (%3) - <b>%1</b> a %2 (%3) - - - Confirm send coins - Confirmar el envío de monedas + Confirmar el envío de myriadcoins - - Are you sure you want to send %1? - ¿Está seguro de que desea enviar %1? + %1 to %2 + %1 a %2 - - and - y + Copy quantity + Copiar cantidad + + + Copy amount + Copiar cuantía + + + Copy fee + Copiar donación + + + Copy after fee + Copiar después de aplicar donación + + + Copy bytes + Copiar bytes + + + Copy priority + Copiar prioridad + + + Copy low output + Copiar envío pequeño + + + Copy change + Copiar Cambio + + + Total Amount %1 (= %2) + Cuantía Total %1 (=%2) + + + or + o - The recipient address is not valid, please recheck. La dirección de recepción no es válida, compruébela de nuevo. - The amount to pay must be larger than 0. La cantidad por pagar tiene que ser mayor de 0. - The amount exceeds your balance. La cantidad sobrepasa su saldo. - The total exceeds your balance when the %1 transaction fee is included. El total sobrepasa su saldo cuando se incluye la tasa de envío de %1 - Duplicate address found, can only send to each address once per send operation. Se ha encontrado una dirección duplicada. Solo se puede enviar a cada dirección una vez por operación de envío. - - Error: Transaction creation failed! - Error: ¡Ha fallado la creación de la transacción! + Transaction creation failed! + ¡Ha fallado la creación de la transacción! - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Error: transacción rechazada. Puede haber ocurrido si alguna de las monedas ya estaba gastada o si ha usado una copia de wallet.dat y las monedas se gastaron en la copia pero no se han marcado así aquí. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + ¡La transacción fue rechazada! Esto puede haber ocurrido si alguno de los myriadcoins de su monedero ya estaba gastado o si ha usado una copia de wallet.dat y los myriadcoins estaban gastados en la copia pero no se habían marcado como gastados aqui. + + + Warning: Invalid Myriadcoin address + Alerta: Dirección de Myriadcoin inválida + + + (no label) + (sin etiqueta) + + + Warning: Unknown change address + Alerta: Dirección de Myriadcoin inválida + + + Are you sure you want to send? + ¿Está seguro que desea enviar? + + + added as transaction fee + añadido como comisión de transacción + + + Payment request expired + Petición de pago expirada + + + Invalid payment address %1 + Dirección de pago no válida %1 SendCoinsEntry - - Form - Envío - - - A&mount: Ca&ntidad: - Pay &To: &Pagar a: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) La dirección a la que enviar el pago (p. ej. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book Etiquete esta dirección para añadirla a la libreta - &Label: &Etiqueta: - - Choose address from address book - Elija una dirección de la libreta de direcciones + Choose previously used address + Escoger direcciones previamente usadas + + + This is a normal payment. + Esto es un pago ordinario. - Alt+A Alt+A - Paste address from clipboard Pegar dirección desde portapapeles - Alt+P Alt+P - - Remove this recipient - Eliminar destinatario + Remove this entry + Eliminar esta transacción - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Introduzca una dirección Myriadcoin (ej. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + Mensaje: + + + This is a verified payment request. + Esto es una petición de pago verificado. + + + Enter a label for this address to add it to the list of used addresses + Introduce una etiqueta para esta dirección para añadirla a la lista de direcciones utilizadas + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + Un mensaje que se adjuntó a la myriadcoin: URL que será almacenada con la transacción para su referencia. Nota: Este mensaje no se envía a través de la red Myriadcoin. + + + This is an unverified payment request. + Esto es una petición de pago no verificado. + + + Pay To: + Paga a: + + + Memo: + Memo: + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + Myriadcoin Core se está cerrando... + + + Do not shut down the computer until this window disappears. + No apague el equipo hasta que desaparezca esta ventana. SignVerifyMessageDialog - Signatures - Sign / Verify a Message Firmas - Firmar / verificar un mensaje - &Sign Message &Firmar mensaje - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. Puede firmar mensajes con sus direcciones para demostrar que las posee. Tenga cuidado de no firmar cualquier cosa vaga, ya que los ataques de phishing pueden tratar de engañarle para suplantar su identidad. Firme solo declaraciones totalmente detalladas con las que usted esté de acuerdo. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) La dirección con la que firmar el mensaje (ej. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book - Elija una dirección de la libreta de direcciones + Choose previously used address + Escoger dirección previamente usada - - Alt+A Alt+A - Paste address from clipboard Pegar dirección desde portapapeles - Alt+P Alt+P - Enter the message you want to sign here Introduzca el mensaje que desea firmar aquí - Signature Firma - Copy the current signature to the system clipboard Copiar la firma actual al portapapeles del sistema - Sign the message to prove you own this Myriadcoin address Firmar el mensaje para demostrar que se posee esta dirección Myriadcoin - Sign &Message Firmar &mensaje - Reset all sign message fields - Limpiar todos los campos de la firma de mensaje + Vaciar todos los campos de la firma de mensaje - - Clear &All - Limpiar &todo + Vaciar &todo - &Verify Message &Verificar mensaje - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Introduzca la dirección para la firma, el mensaje (asegurándose de copiar tal cual los saltos de línea, espacios, tabulaciones, etc.) y la firma a continuación para verificar el mensaje. Tenga cuidado de no asumir más información de lo que dice el propio mensaje firmado para evitar fraudes basados en ataques de tipo man-in-the-middle. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) La dirección con la que se firmó el mensaje (ej. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address Verificar el mensaje para comprobar que fue firmado con la dirección Myriadcoin indicada - Verify &Message Verificar &mensaje - Reset all verify message fields - Limpiar todos los campos de la verificación de mensaje + Vaciar todos los campos de la verificación de mensaje - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Introduzca una dirección Myriadcoin (ej. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature Haga clic en "Firmar mensaje" para generar la firma - - Enter Myriadcoin signature - Introduzca una firma Myriadcoin - - - - The entered address is invalid. La dirección introducida es inválida. - - - - Please check the address and try again. Verifique la dirección e inténtelo de nuevo. - - The entered address does not refer to a key. La dirección introducida no corresponde a una clave. - Wallet unlock was cancelled. Se ha cancelado el desbloqueo del monedero. - Private key for the entered address is not available. No se dispone de la clave privada para la dirección introducida. - Message signing failed. Ha fallado la firma del mensaje. - Message signed. Mensaje firmado. - The signature could not be decoded. No se puede decodificar la firma. - - Please check the signature and try again. Compruebe la firma e inténtelo de nuevo. - The signature did not match the message digest. La firma no coincide con el resumen del mensaje. - Message verification failed. La verificación del mensaje ha fallado. - Message verified. Mensaje verificado. @@ -1651,186 +2130,160 @@ Dirección: %4 SplashScreen - - The Myriadcoin developers - Los programadores Myriadcoin + Myriadcoin Core + Myriadcoin Core + + + The Myriadcoin Core developers + Los desarrolladores de Myriadcoin Core - [testnet] [testnet] + + TrafficGraphWidget + + KB/s + KB/s + + TransactionDesc - Open until %1 Abierto hasta %1 - + conflicted + en conflicto + + %1/offline %1/fuera de línea - %1/unconfirmed %1/no confirmado - %1 confirmations %1 confirmaciones - Status Estado - , broadcast through %n node(s) , transmitir a través de %n nodo, transmitir a través de %n nodos - Date Fecha - Source Fuente - Generated Generado - - From De - - - To Para - - own address dirección propia - label etiqueta - - - - - Credit Crédito - matures in %n more block(s) disponible en %n bloque másdisponible en %n bloques más - not accepted no aceptada - - - - Debit Débito - Transaction fee Comisión de transacción - Net amount Cantidad neta - Message Mensaje - Comment Comentario - Transaction ID Identificador de transacción - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Las monedas generadas deben esperar 120 bloques antes de que se puedan gastar. Cuando se generó este bloque, se emitió a la red para ser agregado a la cadena de bloques. Si no consigue incorporarse a la cadena, su estado cambiará a "no aceptado" y las monedas no se podrán gastar. Esto puede ocurrir ocasionalmente si otro nodo genera un bloque casi al mismo tiempo que el suyo. + Merchant + Vendedor + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Los myriadcoins generados deben madurar %1 bloques antes de que puedan gastarse. Cuando generó este bloque, se transmitió a la red para que se añadiera a la cadena de bloques. Si no consigue entrar en la cadena, su estado cambiará a "no aceptado" y ya no se podrá gastar. Esto puede ocurrir ocasionalmente si otro nodo genera un bloque a pocos segundos del suyo. - Debug information Información de depuración - Transaction Transacción - Inputs entradas - Amount Cantidad - true verdadero - false falso - , has not been successfully broadcast yet , todavía no se ha sido difundido satisfactoriamente - Open for %n more block(s) Abrir para %n bloque másAbrir para %n bloques más - unknown desconocido @@ -1838,12 +2291,10 @@ Dirección: %4 TransactionDescDialog - Transaction details Detalles de transacción - This pane shows a detailed description of the transaction Esta ventana muestra información detallada sobre la transacción @@ -1851,117 +2302,102 @@ Dirección: %4 TransactionTableModel - Date Fecha - Type Tipo - Address Dirección - Amount Cantidad + + Immature (%1 confirmations, will be available after %2) + No vencidos (%1 confirmaciones. Estarán disponibles al cabo de %2) + - Open for %n more block(s) Abrir para %n bloque másAbrir para %n bloques más - Open until %1 Abierto hasta %1 - - Offline (%1 confirmations) - Fuera de línea (%1 confirmaciones) - - - - Unconfirmed (%1 of %2 confirmations) - No confirmado (%1 de %2 confirmaciones) - - - Confirmed (%1 confirmations) Confirmado (%1 confirmaciones) - - - Mined balance will be available when it matures in %n more block(s) - El saldo recién minado estará disponible cuando venza el plazo en %n bloque másEl saldo recién minado estará disponible cuando venza el plazo en %n bloques más - - This block was not received by any other nodes and will probably not be accepted! Este bloque no ha sido recibido por otros nodos y probablemente no sea aceptado! - Generated but not accepted Generado pero no aceptado - + Offline + Sin conexión + + + Unconfirmed + Sin confirmar + + + Confirming (%1 of %2 recommended confirmations) + Confirmando (%1 de %2 confirmaciones recomendadas) + + + Conflicted + En conflicto + + Received with Recibido con - Received from Recibidos de - Sent to Enviado a - Payment to yourself Pago propio - Mined Minado - (n/a) (nd) - Transaction status. Hover over this field to show number of confirmations. Estado de transacción. Pasa el ratón sobre este campo para ver el número de confirmaciones. - Date and time that the transaction was received. Fecha y hora en que se recibió la transacción. - Type of transaction. Tipo de transacción. - Destination address of transaction. Dirección de destino de la transacción. - Amount removed from or added to balance. Cantidad retirada o añadida al saldo. @@ -1969,345 +2405,286 @@ Dirección: %4 TransactionView - - All Todo - Today Hoy - This week Esta semana - This month Este mes - Last month Mes pasado - This year Este año - Range... Rango... - Received with Recibido con - Sent to Enviado a - To yourself A usted mismo - Mined Minado - Other Otra - Enter address or label to search Introduzca una dirección o etiqueta que buscar - Min amount Cantidad mínima - Copy address Copiar dirección - Copy label Copiar etiqueta - Copy amount Copiar cuantía - Copy transaction ID Copiar identificador de transacción - Edit label Editar etiqueta - Show transaction details Mostrar detalles de la transacción - - Export Transaction Data - Exportar datos de la transacción + Export Transaction History + Exportar historial de transacciones + + + Exporting Failed + Error exportando + + + There was an error trying to save the transaction history to %1. + Ha habido un error al intentar guardar la transacción con %1. + + + Exporting Successful + Exportación finalizada + + + The transaction history was successfully saved to %1. + La transacción ha sido guardada en %1. - Comma separated file (*.csv) Archivos de columnas separadas por coma (*.csv) - Confirmed Confirmado - Date Fecha - Type Tipo - Label Etiqueta - Address Dirección - Amount Cantidad - ID ID - - Error exporting - Error exportando - - - - Could not write to file %1. - No se pudo escribir en el archivo %1. - - - Range: Rango: - to para + + WalletFrame + + No wallet has been loaded. + No se ha cargado ningún monedero + + WalletModel - Send Coins - Enviar monedas + Enviar myriadcoins WalletView - &Export &Exportar - Export the data in the current tab to a file Exportar a un archivo los datos de esta pestaña - Backup Wallet - Respaldo de monedero + Copia de seguridad del monedero - Wallet Data (*.dat) Datos de monedero (*.dat) - Backup Failed Ha fallado el respaldo - - There was an error trying to save the wallet data to the new location. - Se ha producido un error al intentar guardar los datos del monedero en la nueva ubicación. + There was an error trying to save the wallet data to %1. + Ha habido un error al intentar guardar los datos del monedero en %1. + + + The wallet data was successfully saved to %1. + Los datos del monedero se han guardado con éxito en %1. - Backup Successful - Se ha completado con éxito la copia de respaldo - - - - The wallet data was successfully saved to the new location. - Los datos del monedero se han guardado con éxito en la nueva ubicación. + Se ha completado la copia de seguridad del monedero bitcoin-core - - Myriadcoin version - Versión de Myriadcoin - - - Usage: Uso: - - Send command to -server or myriadcoind - Envíar comando a -server o myriadcoind - - - List commands Muestra comandos - Get help for a command Recibir ayuda para un comando - Options: Opciones: - Specify configuration file (default: myriadcoin.conf) Especificar archivo de configuración (predeterminado: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) - Especificar archivo pid (predeterminado: myriadcoin.pid) + Especificar archivo pid (predeterminado: bitcoin.pid) - Specify data directory Especificar directorio para los datos - - Set database cache size in megabytes (default: 25) - Establecer el tamaño de caché de la base de datos en megabytes (predeterminado: 25) - - - Listen for connections on <port> (default: 8333 or testnet: 18333) Escuchar conexiones en <puerto> (predeterminado: 8333 o testnet: 18333) - Maintain at most <n> connections to peers (default: 125) Mantener como máximo <n> conexiones a pares (predeterminado: 125) - Connect to a node to retrieve peer addresses, and disconnect Conectar a un nodo para obtener direcciones de pares y desconectar - Specify your own public address Especifique su propia dirección pública - Threshold for disconnecting misbehaving peers (default: 100) Umbral para la desconexión de pares con mal comportamiento (predeterminado: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Número de segundos en que se evita la reconexión de pares con mal comportamiento (predeterminado: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s Ha ocurrido un error al configurar el puerto RPC %u para escucha en IPv4: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) Escuchar conexiones JSON-RPC en <puerto> (predeterminado: 8332 o testnet:18332) - Accept command line and JSON-RPC commands Aceptar comandos consola y JSON-RPC - + Myriadcoin Core RPC client version + Versión del cliente RPC de Myriadcoin Core RPC + + Run in the background as a daemon and accept commands - Correr como demonio y aceptar comandos + Ejecutar en segundo plano como daemon y aceptar comandos - Use the test network Usar la red de pruebas - Accept connections from outside (default: 1 if no -proxy or -connect) Aceptar conexiones desde el exterior (predeterminado: 1 si no -proxy o -connect) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2332,622 +2709,695 @@ Por ejemplo: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + Cifrados aceptables (predeterminados: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s Ha ocurrido un error al configurar el puerto RPC %u para escuchar mediante IPv6. Recurriendo a IPv4: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 Vincular a la dirección dada y escuchar siempre en ella. Utilice la notación [host]:port para IPv6 - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. - No se puede bloquear el directorio de datos %s. Probablemente Myriadcoin ya se está ejecutando. + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + Limitar continuamente las transacciones gratuitas a <n>*1000 bytes por minuto (predeterminado:15) + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + Iniciar modo de prueba de regresión, el cuál utiliza una cadena especial en la cual los bloques pueden ser resueltos instantáneamente. Se utiliza para herramientas de prueba de regresión y desarrollo de aplicaciones. + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + Ingresar en el modo de prueba de regresión, que utiliza una cadena especial en la que los bloques se pueden resolver instantáneamente. + + + Error: Listening for incoming connections failed (listen returned error %d) + Error: Ha fallado la escucha de conexiones entrantes (listen ha devuelto el error %d) - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - ¡Error: se ha rechazado la transacción! Esto puede ocurrir si ya se han gastado algunas de las monedas del monedero, como ocurriría si hubiera hecho una copia de wallet.dat y se hubieran gastado monedas a partir de la copia, con lo que no se habrían marcado aquí como gastadas. + ¡Error: se ha rechazado la transacción! Esto puede ocurrir si ya se han gastado algunos de los myriadcoins del monedero, como ocurriría si hubiera hecho una copia de wallet.dat y se hubieran gastado myriadcoins a partir de la copia, con lo que no se habrían marcado aquí como gastados. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! - ¡Error: Esta transacción requiere una comisión de al menos %s debido a su monto, complejidad, o al uso de fondos recién recibidos! + ¡Error: Esta transacción requiere una comisión de al menos %s debido a su cantidad, complejidad, o al uso de fondos recién recibidos! - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - Ejecutar orden cuando se reciba un aviso relevante (%s en cmd se reemplazará por el mensaje) - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Ejecutar comando cuando una transacción del monedero cambia (%s en cmd se remplazará por TxID) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - Establecer el tamaño máximo de las transacciones de alta prioridad/comisión baja en bytes (predeterminado:27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + Las comisiones inferiores se consideran comisión cero (a efectos de creación de transacciones) (predeterminado: + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + Volcar la actividad de la base de datos de memoria al registro en disco cada <n> megabytes (predeterminado: 100) + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + Nivel de rigor en la verificación de bloques de -checkblocks (0-4; predeterminado: 3) + + + In this mode -genproclimit controls how many blocks are generated immediately. + En este modo -genproclimit controla cuántos bloques se generan de inmediato. + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + Establecer el número de hilos (threads) de verificación de scripts (entre %u y %d, 0 = automático, <0 = dejar libres ese número de núcleos; predeterminado: %d) + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + Establecer el límite de procesadores cuando está activada la generación (-1 = sin límite; predeterminado: -1) - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications Esta es una versión de pre-prueba - utilícela bajo su propio riesgo. No la utilice para usos comerciales o de minería. - + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + No se ha podido acceder a %s en esta máquina. Probablemente ya se está ejecutando Myriadcoin Core. + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + Usar proxy SOCKS5 distinto para comunicarse vía Tor de forma anónima (Predeterminado: -proxy) + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Aviso: ¡-paytxfee tiene un valor muy alto! Esta es la comisión que pagará si envía una transacción. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - Aviso: ¡Las transacciones mostradas pueden no ser correctas! Puede necesitar una actualización o bien otros nodos necesitan actualizarse. - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. Precaución: Por favor, ¡revise que la fecha y hora de su ordenador son correctas! Si su reloj está mal, Myriadcoin no funcionará correctamente. - + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + Atención: ¡Parece que la red no está totalmente de acuerdo! Algunos mineros están presentando inconvenientes. + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + Atención: ¡Parece que no estamos completamente de acuerdo con nuestros pares! Podría necesitar una actualización, u otros nodos podrían necesitarla. + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Aviso: ¡Error al leer wallet.dat! Todas las claves se han leído correctamente, pero podrían faltar o ser incorrectos los datos de transacciones o las entradas de la libreta de direcciones. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. Aviso: ¡Recuperados datos de wallet.dat corrupto! El wallet.dat original se ha guardado como wallet.{timestamp}.bak en %s; si hubiera errores en su saldo o transacciones, deberá restaurar una copia de seguridad. - + (default: 1) + (predeterminado: 1) + + + (default: wallet.dat) + (predeterminado: wallet.dat) + + + <category> can be: + <category> puede ser: + + Attempt to recover private keys from a corrupt wallet.dat Intento de recuperar claves privadas de un wallet.dat corrupto - + Myriadcoin Core Daemon + Myriadcoin Core Daemon (proceso independiente) + + Block creation options: Opciones de creación de bloques: - + Clear list of wallet transactions (diagnostic tool; implies -rescan) + Vaciar lista de transacciones del monedero (herramienta de diagnóstico; implica -rescan) + + Connect only to the specified node(s) Conectar sólo a los nodos (o nodo) especificados - + Connect through SOCKS proxy + Conectar a través de un proxy SOCKS + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + Conectar a JSON-RPC en <puerto> (predeterminado: 8332 o testnet: 18332) + + + Connection options: + Opciones de conexión: + + Corrupted block database detected Corrupción de base de datos de bloques detectada. - + Debugging/Testing options: + Opciones de depuración/pruebas: + + + Disable safemode, override a real safe mode event (default: 0) + Inhabilitar el modo seguro, no considerar un suceso real de modo seguro (predeterminado: 0) + + Discover own IP address (default: 1 when listening and no -externalip) Descubrir dirección IP propia (predeterminado: 1 al escuchar sin -externalip) - + Do not load the wallet and disable wallet RPC calls + No cargar el monedero y desactivar las llamadas RPC del monedero + + Do you want to rebuild the block database now? ¿Quieres reconstruir la base de datos de bloques ahora? - Error initializing block database Error al inicializar la base de datos de bloques - Error initializing wallet database environment %s! Error al inicializar el entorno de la base de datos del monedero %s - Error loading block database Error cargando base de datos de bloques - Error opening block database Error al abrir base de datos de bloques. - Error: Disk space is low! Error: ¡Espacio en disco bajo! - Error: Wallet locked, unable to create transaction! Error: ¡El monedero está bloqueado; no se puede crear la transacción! - Error: system error: Error: error de sistema: - Failed to listen on any port. Use -listen=0 if you want this. Ha fallado la escucha en todos los puertos. Use -listen=0 si desea esto. - Failed to read block info No se ha podido leer la información de bloque - Failed to read block No se ha podido leer el bloque - Failed to sync block index No se ha podido sincronizar el índice de bloques - Failed to write block index No se ha podido escribir en el índice de bloques - Failed to write block info No se ha podido escribir la información de bloques - Failed to write block No se ha podido escribir el bloque - Failed to write file info No se ha podido escribir la información de archivo - Failed to write to coin database - No se ha podido escribir en la base de datos de monedas + No se ha podido escribir en la base de datos de myriadcoins - Failed to write transaction index No se ha podido escribir en el índice de transacciones - Failed to write undo data No se han podido escribir los datos de deshacer - + Fee per kB to add to transactions you send + Donación por KB añadida a las transacciones que envíe + + + Fees smaller than this are considered zero fee (for relaying) (default: + Las comisiones inferiores se consideran comisión cero (a efectos de propagación) (predeterminado: + + Find peers using DNS lookup (default: 1 unless -connect) Encontrar pares mediante búsqueda de DNS (predeterminado: 1 salvo con -connect) - - Generate coins (default: 0) - Generar monedas (por defecto: 0) + Force safe mode (default: 0) + Forzar modo seguro (predeterminado: 0) + + + Generate coins (default: 0) + Generar myriadcoins (predeterminado: 0) - How many blocks to check at startup (default: 288, 0 = all) Cuántos bloques comprobar al iniciar (predeterminado: 288, 0 = todos) - - How thorough the block verification is (0-4, default: 3) - Como es de exhaustiva la verificación de bloques (0-4, por defecto 3) + If <category> is not supplied, output all debugging information. + Si no se proporciona <category>, mostrar toda la depuración + + + Importing... + Importando... + + + Incorrect or no genesis block found. Wrong datadir for network? + Incorrecto o bloque de génesis no encontrado. Datadir equivocada para la red? + + + Invalid -onion address: '%s' + Dirección -onion inválida: '%s' - Not enough file descriptors available. No hay suficientes descriptores de archivo disponibles. - + Prepend debug output with timestamp (default: 1) + Anteponer marca temporal a la información de depuración (predeterminado: 1) + + + RPC client options: + Opciones para cliente RPC: + + Rebuild block chain index from current blk000??.dat files Reconstruir el índice de la cadena de bloques a partir de los archivos blk000??.dat actuales - - Set the number of threads to service RPC calls (default: 4) - Establecer el número de hilos para atender las llamadas RPC (predeterminado: 4) + Select SOCKS version for -proxy (4 or 5, default: 5) + Seleccionar versión de SOCKS para -proxy (4 o 5, predeterminado: 5) + + + Set database cache size in megabytes (%d to %d, default: %d) + Asignar tamaño de cache en megabytes (entre %d y %d; predeterminado: %d) + + + Set maximum block size in bytes (default: %d) + Establecer tamaño máximo de bloque en bytes (predeterminado: %d) + + + Set the number of threads to service RPC calls (default: 4) + Establecer el número de procesos para atender las llamadas RPC (predeterminado: 4) + + + Specify wallet file (within data directory) + Especificar archivo de monedero (dentro del directorio de datos) + + + Spend unconfirmed change when sending transactions (default: 1) + Gastar cambio no confirmado al enviar transacciones (predeterminado: 1) + + + This is intended for regression testing tools and app development. + Esto afecta a las herramientas de prueba de regresión y al desarrollo informático de la aplicación. + + + Usage (deprecated, use myriadcoin-cli): + Uso (desaconsejado, usar myriadcoin-cli) - Verifying blocks... Verificando bloques... - Verifying wallet... Verificando monedero... - + Wait for RPC server to start + Espere a que se inicie el servidor RPC + + + Wallet %s resides outside data directory %s + El monedero %s se encuentra fuera del directorio de datos %s + + + Wallet options: + Opciones de monedero: + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + Aviso: Argumento -debugnet anticuado, utilice -debug=net + + + You need to rebuild the database using -reindex to change -txindex + Usted necesita reconstruir la base de datos utilizando -reindex para cambiar -txindex + + Imports blocks from external blk000??.dat file Importa los bloques desde un archivo blk000??.dat externo - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) - Configura el número de hilos para el script de verificación (hasta 16, 0 = auto, <0 = leave that many cores free, por fecto: 0) + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + No se ha podido bloquear el directorio de datos %s. Probablemente ya se está ejecutando Myriadcoin Core. + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + Ejecutar un comando cuando se reciba una alerta importante o cuando veamos un fork demasiado largo (%s en cmd se reemplazará por el mensaje) + + + Output debugging information (default: 0, supplying <category> is optional) + Mostrar información de depuración (predeterminado: 0, proporcionar <category> es opcional) + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + Establecer tamaño máximo de las transacciones de alta prioridad/baja comisión en bytes (predeterminado: %d) - Information Información - - Invalid -tor address: '%s' - Dirección -tor inválida: '%s' - - - Invalid amount for -minrelaytxfee=<amount>: '%s' - Inválido por el monto -minrelaytxfee=<amount>: '%s' + Cantidad inválida para -minrelaytxfee=<amount>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' - Inválido por el monto -mintxfee=<amount>: '%s' + Cantidad inválida para -mintxfee=<amount>: '%s' + + + Limit size of signature cache to <n> entries (default: 50000) + Limitar tamaño de la cache de firmas a <n> entradas (predeterminado: 50000) + + + Log transaction priority and fee per kB when mining blocks (default: 0) + Registrar en el log la prioridad de transacciones y la comisión por kB al minar bloques (predeterminado: 0) - Maintain a full transaction index (default: 0) Mantener índice de transacciones completo (predeterminado: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) Búfer de recepción máximo por conexión, <n>*1000 bytes (predeterminado: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) Búfer de recepción máximo por conexión, , <n>*1000 bytes (predeterminado: 1000) - Only accept block chain matching built-in checkpoints (default: 1) Aceptar solamente cadena de bloques que concuerde con los puntos de control internos (predeterminado: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Conectarse solo a nodos de la red <net> (IPv4, IPv6 o Tor) - - Output extra debugging information. Implies all other -debug* options - Mostrar información de depuración adicional. Implica todos los demás opciones -debug* + Print block on startup, if found in block index + Imprimir bloque al iniciar, si se encuentra en el índice de bloques - - Output extra network debugging information - Mostrar información de depuración adicional + Print block tree on startup (default: 0) + Imprimir árbol de bloques al iniciar (predeterminado: 0) - - Prepend debug output with timestamp - Anteponer marca temporal a la información de depuración + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + Opciones SSL de RPC: (véase la wiki de Myriadcoin para las instrucciones de instalación de SSL) - - SSL options: (see the Bitcoin Wiki for SSL setup instructions) - Opciones SSL: (ver la Bitcoin Wiki para instrucciones de configuración SSL) + RPC server options: + Opciones de servidor RPC: - - Select the version of socks proxy to use (4-5, default: 5) - Elija la versión del proxy socks a usar (4-5, predeterminado: 5) + Randomly drop 1 of every <n> network messages + Ignorar 1 de cada <n> mensajes de red al azar + + + Randomly fuzz 1 of every <n> network messages + Introducir datos fuzz en 1 de cada <n> mensajes de red al azar + + + Run a thread to flush wallet periodically (default: 1) + Ejecutar un hilo (thread) para limpiar de la memoria el monedero periódicamente (predeterminado: 1) + + + SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + Opciones SSL: (ver la Myriadcoin Wiki para instrucciones de configuración SSL) + + + Send command to Myriadcoin Core + Enviar orden a Myriadcoin Core - Send trace/debug info to console instead of debug.log file Enviar información de trazas/depuración a la consola en lugar de al archivo debug.log - - Send trace/debug info to debugger - Enviar información de trazas/depuración al depurador - - - - Set maximum block size in bytes (default: 250000) - Establecer tamaño máximo de bloque en bytes (predeterminado: 250000) - - - Set minimum block size in bytes (default: 0) Establecer tamaño mínimo de bloque en bytes (predeterminado: 0) - + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + Establece la opción DB_PRIVATE en el entorno de base de datos del monedero (predeterminado: 1) + + + Show all debugging options (usage: --help -help-debug) + Muestra todas las opciones de depuración (uso: --help -help-debug) + + + Show benchmark information (default: 0) + Mostrar información de benchmarking (predeterminado: 0) + + Shrink debug.log file on client startup (default: 1 when no -debug) Reducir el archivo debug.log al iniciar el cliente (predeterminado: 1 sin -debug) - Signing transaction failed Transacción falló - Specify connection timeout in milliseconds (default: 5000) Especificar el tiempo máximo de conexión en milisegundos (predeterminado: 5000) - + Start Myriadcoin Core Daemon + Iniciar Myriadcoin Core Daemon + + System error: Error de sistema: - Transaction amount too small - Monto de la transacción muy pequeño + Cantidad de la transacción demasiado pequeña - Transaction amounts must be positive - Montos de transacciones deben ser positivos + Las cantidades en las transacciones deben ser positivas - Transaction too large Transacción demasiado grande - Use UPnP to map the listening port (default: 0) Usar UPnP para asignar el puerto de escucha (predeterminado: 0) - Use UPnP to map the listening port (default: 1 when listening) Usar UPnP para asignar el puerto de escucha (predeterminado: 1 al escuchar) - - Use proxy to reach tor hidden services (default: same as -proxy) - Utilizar proxy para conectar a Tor servicios ocultos (predeterminado: igual que -proxy) - - - Username for JSON-RPC connections Nombre de usuario para las conexiones JSON-RPC - Warning Aviso - Warning: This version is obsolete, upgrade required! Aviso: Esta versión es obsoleta, actualización necesaria! - - You need to rebuild the databases using -reindex to change -txindex - Necesita reconstruir las bases de datos con la opción -reindex para modificar -txindex + Zapping all transactions from wallet... + Eliminando todas las transacciones del monedero... + + + on startup + al iniciar + + + version + versión - wallet.dat corrupt, salvage failed wallet.dat corrupto. Ha fallado la recuperación. - Password for JSON-RPC connections Contraseña para las conexiones JSON-RPC - Allow JSON-RPC connections from specified IP address Permitir conexiones JSON-RPC desde la dirección IP especificada - Send commands to node running on <ip> (default: 127.0.0.1) Enviar comando al nodo situado en <ip> (predeterminado: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) Ejecutar un comando cuando cambia el mejor bloque (%s en cmd se sustituye por el hash de bloque) - Upgrade wallet to latest format Actualizar el monedero al último formato - Set key pool size to <n> (default: 100) Ajustar el número de claves en reserva <n> (predeterminado: 100) - Rescan the block chain for missing wallet transactions Volver a examinar la cadena de bloques en busca de transacciones del monedero perdidas - Use OpenSSL (https) for JSON-RPC connections Usar OpenSSL (https) para las conexiones JSON-RPC - Server certificate file (default: server.cert) Certificado del servidor (predeterminado: server.cert) - Server private key (default: server.pem) Clave privada del servidor (predeterminado: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Cifrados aceptados (predeterminado: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - This help message Este mensaje de ayuda - Unable to bind to %s on this computer (bind returned error %d, %s) No es posible conectar con %s en este sistema (bind ha dado el error %d, %s) - - Connect through socks proxy - Conectar mediante proxy socks - - - Allow DNS lookups for -addnode, -seednode and -connect Permitir búsquedas DNS para -addnode, -seednode y -connect - Loading addresses... Cargando direcciones... - Error loading wallet.dat: Wallet corrupted Error al cargar wallet.dat: el monedero está dañado - Error loading wallet.dat: Wallet requires newer version of Myriadcoin Error al cargar wallet.dat: El monedero requiere una versión más reciente de Myriadcoin - Wallet needed to be rewritten: restart Myriadcoin to complete El monedero ha necesitado ser reescrito. Reinicie Myriadcoin para completar el proceso - Error loading wallet.dat Error al cargar wallet.dat - Invalid -proxy address: '%s' Dirección -proxy inválida: '%s' - Unknown network specified in -onlynet: '%s' La red especificada en -onlynet '%s' es desconocida - Unknown -socks proxy version requested: %i Solicitada versión de proxy -socks desconocida: %i - Cannot resolve -bind address: '%s' No se puede resolver la dirección de -bind: '%s' - Cannot resolve -externalip address: '%s' No se puede resolver la dirección de -externalip: '%s' - Invalid amount for -paytxfee=<amount>: '%s' Cantidad inválida para -paytxfee=<amount>: '%s' - Invalid amount Cuantía no válida - Insufficient funds Fondos insuficientes - Loading block index... Cargando el índice de bloques... - Add a node to connect to and attempt to keep the connection open Añadir un nodo al que conectarse y tratar de mantener la conexión abierta - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - No es posible conectar con %s en este sistema. Probablemente Myriadcoin ya está ejecutándose. - - - - Fee per KB to add to transactions you send - Tarifa por KB que añadir a las transacciones que envíe - - - Loading wallet... Cargando monedero... - Cannot downgrade wallet No se puede rebajar el monedero - Cannot write default address No se puede escribir la dirección predeterminada - Rescanning... Reexplorando... - Done loading Generado pero no aceptado - To use the %s option Para utilizar la opción %s - Error Error - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_es_CL.ts b/src/qt/locale/bitcoin_es_CL.ts index 647409c6..8093ad66 100644 --- a/src/qt/locale/bitcoin_es_CL.ts +++ b/src/qt/locale/bitcoin_es_CL.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - Sobre Myriadcoin + About Myriadcoin Core + - - <b>Myriadcoin</b> version - <b>Myriadcoin</b> - versión + <b>Myriadcoin Core</b> version + - This is experimental software. @@ -31,153 +27,128 @@ el OpenSSL Toolkit (http://www.openssl.org/), software criptográfico escrito po Eric Young (eay@cryptsoft.com) y UPnP software escrito por Thomas Bernard. - Copyright + Copyright + + + The Myriadcoin Core developers - - The Myriadcoin developers + (%1-bit) AddressBookPage - - Address Book - Guia de direcciones - - - Double-click to edit address or label Haz doble clic para editar una dirección o etiqueta - Create a new address Crea una nueva dirección - + &New + + + Copy the currently selected address to the system clipboard Copia la dirección seleccionada al portapapeles - - &New Address - &Nueva dirección + &Copy + - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Estas son tus direcciones Myriadcoin para recibir pagos. Puedes utilizar una diferente por cada persona emisora para saber quien te está pagando. + C&lose + - &Copy Address &Copia dirección - - Show &QR Code - Mostrar Código &QR - - - - Sign a message to prove you own a Myriadcoin address - Firmar un mensaje para provar que usted es dueño de esta dirección - - - - Sign &Message - Firmar Mensaje - - - Delete the currently selected address from the list - Export the data in the current tab to a file Exportar los datos de la pestaña actual a un archivo - &Export - - Verify a message to ensure it was signed with a specified Myriadcoin address - - - - - &Verify Message - - - - &Delete &Borrar - + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + Copy &Label Copia &etiqueta - &Edit &Editar - - Send &Coins + Export Address List - - Export Address Book Data - Exporta datos de la guia de direcciones - - - Comma separated file (*.csv) Archivos separados por coma (*.csv) - - Error exporting - Exportar errores + Exporting Failed + - - Could not write to file %1. - No se pudo escribir al archivo %1. + There was an error trying to save the address list to %1. + AddressTableModel - Label Etiqueta - Address Dirección - (no label) (sin etiqueta) @@ -185,140 +156,106 @@ Eric Young (eay@cryptsoft.com) y UPnP software escrito por Thomas Bernard. AskPassphraseDialog - Passphrase Dialog - Enter passphrase Introduce contraseña actual - New passphrase Nueva contraseña - Repeat new passphrase - Repite nueva contraseña: + Repite nueva contraseña - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Introduce la nueva contraseña para la billetera.<br/>Por favor utiliza un contraseña <b>de 10 o mas caracteres aleatorios</b>, u <b>ocho o mas palabras</b>. + Introduce la nueva contraseña para la billetera.<br/>Por favor utiliza un contraseña de<b>10 o más caracteres aleatorios</b>, u <b>ocho o más palabras</b>. - Encrypt wallet Codificar billetera - This operation needs your wallet passphrase to unlock the wallet. Esta operación necesita la contraseña para desbloquear la billetera. - Unlock wallet Desbloquea billetera - This operation needs your wallet passphrase to decrypt the wallet. Esta operación necesita la contraseña para decodificar la billetara. - Decrypt wallet Decodificar cartera - Change passphrase Cambia contraseña - Enter the old and new passphrase to the wallet. Introduce la contraseña anterior y la nueva de cartera - Confirm wallet encryption Confirma la codificación de cartera - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! Atención: ¡Si codificas tu billetera y pierdes la contraseña perderás <b>TODOS TUS MYRIADCOINS</b>! - Are you sure you wish to encrypt your wallet? ¿Seguro que quieres seguir codificando la billetera? - 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. - + IMPORTANTE: Cualquier versión anterior que hayas realizado de tu archivo de billetera será reemplazada por el nuevo archivo de billetera encriptado. Por razones de seguridad, los respaldos anteriores de los archivos de billetera se volverán inútiles en tanto comiences a usar la nueva billetera encriptada. - - Warning: The Caps Lock key is on! Precaucion: Mayúsculas Activadas - - Wallet encrypted Billetera codificada - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. Myriadcoin se cerrará para finalizar el proceso de encriptación. Recuerde que encriptar su billetera no protegera completatamente sus myriadcoins de ser robados por malware que infecte su computador - - - - Wallet encryption failed Falló la codificación de la billetera - Wallet encryption failed due to an internal error. Your wallet was not encrypted. La codificación de la billetera falló debido a un error interno. Tu billetera no ha sido codificada. - - The supplied passphrases do not match. Las contraseñas no coinciden. - Wallet unlock failed Ha fallado el desbloqueo de la billetera - - - The passphrase entered for the wallet decryption was incorrect. La contraseña introducida para decodificar la billetera es incorrecta. - Wallet decryption failed Ha fallado la decodificación de la billetera - Wallet passphrase was successfully changed. La contraseña de billetera ha sido cambiada con éxito. @@ -326,319 +263,286 @@ Eric Young (eay@cryptsoft.com) y UPnP software escrito por Thomas Bernard. BitcoinGUI - Sign &message... Firmar &Mensaje... - Synchronizing with network... Sincronizando con la red... - &Overview &Vista general - + Node + + + Show general overview of wallet Muestra una vista general de la billetera - &Transactions - &Transacciónes + &Transacciones - Browse transaction history Explora el historial de transacciónes - - Edit the list of stored addresses and labels - Edita la lista de direcciones y etiquetas almacenadas - - - - Show the list of addresses for receiving payments - Muestra la lista de direcciónes utilizadas para recibir pagos - - - E&xit &Salir - Quit application Salir del programa - Show information about Myriadcoin Muestra información acerca de Myriadcoin - About &Qt Acerca de - Show information about Qt Mostrar Información sobre QT - &Options... &Opciones - &Encrypt Wallet... &Codificar la billetera... - &Backup Wallet... &Respaldar billetera... - &Change Passphrase... &Cambiar la contraseña... - + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + Importing blocks from disk... - Reindexing blocks on disk... - + Cargando el index de bloques... - Send coins to a Myriadcoin address - Enviar monedas a una dirección myriadcoin + Enviar monedas a una dirección bitcoin - Modify configuration options for Myriadcoin - Modifica las opciones de configuración de myriadcoin + Modifica las opciones de configuración de bitcoin - Backup wallet to another location Respaldar billetera en otra ubicación - Change the passphrase used for wallet encryption Cambiar la contraseña utilizada para la codificación de la billetera - &Debug window - + Ventana &Debug - Open debugging and diagnostic console - + Abre consola de depuración y diagnóstico - &Verify message... - - Myriadcoin Myriadcoin - Wallet Cartera - &Send - &Receive - - &Addresses - - - - - &About Myriadcoin - &Sobre Myriadcoin - - - &Show / Hide &Mostrar/Ocultar - Show or hide the main Window - Encrypt the private keys that belong to your wallet - Sign messages with your Myriadcoin addresses to prove you own them - + Firmar un mensaje para provar que usted es dueño de esta dirección - Verify messages to ensure they were signed with specified Myriadcoin addresses - &File &Archivo - &Settings &Configuración - &Help &Ayuda - Tabs toolbar Barra de pestañas - - [testnet] [red-de-pruebas] - + Myriadcoin Core + + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + Myriadcoin client Cliente Myriadcoin - %n active connection(s) to Myriadcoin network %n conexión activa hacia la red Myriadcoin%n conexiones activas hacia la red Myriadcoin - No block source available... - Processed %1 of %2 (estimated) blocks of transaction history. - Processed %1 blocks of transaction history. - %n hour(s) - + %n hora%n horas - %n day(s) - + %n día%n días - %n week(s) + %n semana%n semanas + + + %1 and %2 + + + + %n year(s) - %1 behind - Last received block was generated %1 ago. - Transactions after this will not yet be visible. - Error - + Error - Warning - + Atención - Information - + Información - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - Up to date Actualizado - Catching up... Recuperando... - - Confirm transaction fee - - - - Sent transaction Transacción enviada - Incoming transaction Transacción entrante - Date: %1 Amount: %2 Type: %3 @@ -650,29 +554,14 @@ Tipo: %3 Dirección: %4 - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> La billetera esta <b>codificada</b> y actualmente <b>desbloqueda</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> La billetera esta <b>codificada</b> y actualmente <b>bloqueda</b> - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. @@ -680,330 +569,648 @@ Dirección: %4 ClientModel - Network Alert + Alerta de Red + + + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + + + + Bytes: + + + + Amount: + Cantidad: + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + Cantidad + + + Address + Dirección + + + Date + Fecha + + + Confirmations + + + + Confirmed + Confirmado + + + Priority + + + + Copy address + Copia dirección + + + Copy label + Copia etiqueta + + + Copy amount + Copiar Cantidad + + + Copy transaction ID + + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + + + + Dust + + + + yes + + + + no + + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + (sin etiqueta) + + + change from %1 (%2) + + + + (change) EditAddressDialog - Edit Address Editar dirección - &Label &Etiqueta - - The label associated with this address book entry - La etiqueta asociada con esta entrada de la libreta de direcciones + The label associated with this address list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + - &Address &Dirección - - The address associated with this address book entry. This can only be modified for sending addresses. - La dirección asociada con esta entrada en la libreta de direcciones. Solo puede ser modificada para direcciónes de envío. - - - New receiving address Nueva dirección para recibir - New sending address Nueva dirección para enviar - Edit receiving address Editar dirección de recepción - Edit sending address Editar dirección de envio - The entered address "%1" is already in the address book. La dirección introducida "%1" ya esta guardada en la libreta de direcciones. - The entered address "%1" is not a valid Myriadcoin address. La dirección introducida "%1" no es una dirección Myriadcoin valida. - Could not unlock wallet. No se pudo desbloquear la billetera. - New key generation failed. La generación de nueva clave falló. - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt + A new data directory will be created. + + + + name + Nombre + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core - version versión - Usage: Uso: - command-line options - UI options UI opciones - Set language, for example "de_DE" (default: system locale) - Start minimized Arranca minimizado - + Set SSL root certificates for payment request (default: -system-) + + + Show splash screen on startup (default: 1) + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" can not be created. + + + + Error + Error + + + GB of free space available + + + + (of %1GB needed) + + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open + + OptionsDialog - Options Opciones - &Main &Principal - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. - Pay transaction &fee Comisión de &transacciónes - Automatically start Myriadcoin after logging in to the system. Inicia Myriadcoin automáticamente despues de encender el computador - &Start Myriadcoin on system login &Inicia Myriadcoin al iniciar el sistema - - Reset all client options to default. + Size of &database cache - + MB + + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + + Reset all client options to default. + Reestablece todas las opciones. + + &Reset Options - &Network + &Red + + + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change - Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. Abre automáticamente el puerto del cliente Myriadcoin en el router. Esto funciona solo cuando tu router es compatible con UPnP y está habilitado. - Map port using &UPnP Direcciona el puerto usando &UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - Conecta a la red Myriadcoin a través de un proxy SOCKS (ej. cuando te conectas por la red Tor) - - - - &Connect through SOCKS proxy: - &Conecta a traves de un proxy SOCKS: - - - Proxy &IP: &IP Proxy: - - IP address of the proxy (e.g. 127.0.0.1) - Dirección IP del servidor proxy (ej. 127.0.0.1) - - - &Port: &Puerto: - Port of the proxy (e.g. 9050) Puerto del servidor proxy (ej. 9050) - SOCKS &Version: - SOCKS version of the proxy (e.g. 5) - &Window - Show only a tray icon after minimizing the window. Muestra solo un ícono en la bandeja después de minimizar la ventana - &Minimize to the tray instead of the taskbar &Minimiza a la bandeja en vez de la barra de tareas - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. Minimiza la ventana en lugar de salir del programa cuando la ventana se cierra. Cuando esta opción esta activa el programa solo se puede cerrar seleccionando Salir desde el menu. - M&inimize on close M&inimiza a la bandeja al cerrar - &Display &Mostrado - User Interface &language: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. - &Unit to show amounts in: &Unidad en la que mostrar cantitades: - Choose the default subdivision unit to show in the interface and when sending coins. Elige la subdivisión por defecto para mostrar cantidaded en la interfaz cuando se envien monedas - Whether to show Myriadcoin addresses in the transaction list or not. - &Display addresses in transaction list &Muestra direcciones en el listado de transaccioines - + Whether to show coin control features or not. + + + &OK - + &OK - &Cancel - + &Cancela - - &Apply - - - - default + predeterminado + + + none - Confirm options reset + Confirmar reestablecimiento de las opciones + + + Client restart required to activate changes. - - Some settings may require a client restart to take effect. + Client will be shutdown, do you want to proceed? - - Do you want to proceed? + This change would require a client restart. - - - Warning - Atención - - - - - This setting will take effect after restarting Myriadcoin. - - - - The supplied proxy address is invalid. @@ -1011,826 +1218,1072 @@ Dirección: %4 OverviewPage - Form Formulario - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. - - Balance: - Saldo: - - - - Unconfirmed: - No confirmados: - - - Wallet Cartera - + Available: + + + + Your current spendable balance + + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + + + Immature: - Mined balance that has not yet matured - + Total: + Total: + + + Your current total balance + + + <b>Recent transactions</b> <b>Transacciones recientes</b> - - Your current balance - Tu saldo actual - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - Total de transacciones que no han sido confirmadas aun, y que no cuentan para el saldo actual. - - - - out of sync - + desincronizado PaymentServer - + URI handling + + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + Cannot start myriadcoin: click-to-pay handler + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + Pago completado + + + Network request error + + - QRCodeDialog + QObject - - QR Code Dialog + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" does not exist. - - Request Payment - Solicitar Pago - - - - Amount: - Cantidad: - - - - Label: - Etiqueta - - - - Message: - Mensaje: - - - - &Save As... - &Guardar Como... - - - - Error encoding URI into QR Code. + Error: Cannot parse configuration file: %1. Only use key=value syntax. - - The entered amount is invalid, please check. + Error: Invalid combination of -regtest and -testnet. - - Resulting URI too long, try to reduce the text for label / message. + Myriadcoin Core didn't yet exit safely... - + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Introduce una dirección Myriadcoin (ej. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + Guardar imagen... + + + &Copy Image + Copiar Imagen + + Save QR Code - - PNG Images (*.png) - Imágenes PNG (*.png) + PNG Image (*.png) + RPCConsole - Client name - + Nombre del cliente - - - - - - - - - - N/A - + N/A - Client version - + Versión del Cliente - &Information + &Información + + + Debug window + + + + General - Using OpenSSL version - Startup time - + Tiempo de inicio - Network - + Red + + + Name + Nombre - Number of connections - + Número de conexiones - - On testnet - - - - Block chain - + Bloquea cadena - Current number of blocks - Estimated total blocks - Last block time - &Open - + &Abrir - - Command-line options - - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - - - - - &Show - - - - &Console + &Consola + + + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: - Build date - - Myriadcoin - Debug window - - - - - Myriadcoin Core - - - - Debug log file - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. - Clear console - + Limpiar Consola - Welcome to the Myriadcoin RPC console. - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Type <b>help</b> for an overview of available commands. + + %1 B + + + + %1 KB + + + + %1 MB + + + + %1 GB + + + + %1 m + + + + %1 h + + + + %1 h %2 m + + + + + ReceiveCoinsDialog + + &Amount: + + + + &Label: + &Etiqueta: + + + &Message: + &mensaje + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + + + + Clear + + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + + + + Remove the selected entries from the list + + + + Remove + + + + Copy label + Copia etiqueta + + + Copy message + + + + Copy amount + Copiar Cantidad + + + + ReceiveRequestDialog + + QR Code + Código QR + + + Copy &URI + + + + Copy &Address + &Copia dirección + + + &Save Image... + Guardar imagen... + + + Request payment to %1 + + + + Payment information + + + + URI + + + + Address + Dirección + + + Amount + Cantidad + + + Label + Etiqueta + + + Message + Mensaje + + + Resulting URI too long, try to reduce the text for label / message. + + + + Error encoding URI into QR Code. + + + + + RecentRequestsTableModel + + Date + Fecha + + + Label + Etiqueta + + + Message + Mensaje + + + Amount + Cantidad + + + (no label) + (sin etiqueta) + + + (no message) + + + + (no amount) + + SendCoinsDialog - - - - - - - - Send Coins Enviar monedas - + Coin Control Features + + + + Inputs... + + + + automatically selected + + + + Insufficient funds! + + + + Quantity: + + + + Bytes: + + + + Amount: + Cantidad: + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + Send to multiple recipients at once Enviar a múltiples destinatarios - Add &Recipient &Agrega destinatario - - Remove all transaction fields - Remover todos los campos de la transacción + Clear all fields of the form. + - Clear &All &Borra todos - Balance: Balance: - - 123.456 BTC - 123.456 BTC - - - Confirm the send action Confirma el envio - S&end &Envía - - <b>%1</b> to %2 (%3) - <b>%1</b> to %2 (%3) - - - Confirm send coins Confirmar el envio de monedas - - Are you sure you want to send %1? - Estas seguro que quieres enviar %1? + %1 to %2 + - - and - y + Copy quantity + + + + Copy amount + Copiar Cantidad + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + + + + or + - The recipient address is not valid, please recheck. La dirección de destinatarion no es valida, comprueba otra vez. - The amount to pay must be larger than 0. La cantidad por pagar tiene que ser mayor 0. - The amount exceeds your balance. La cantidad sobrepasa tu saldo. - The total exceeds your balance when the %1 transaction fee is included. El total sobrepasa tu saldo cuando se incluyen %1 como tasa de envio. - Duplicate address found, can only send to each address once per send operation. Tienes una dirección duplicada, solo puedes enviar a direcciónes individuales de una sola vez. - - Error: Transaction creation failed! + Transaction creation failed! - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Error: La transacción fue rechazada. Esto puede haber ocurrido si alguna de las monedas ya estaba gastada o si ha usado una copia de wallet.dat y las monedas se gastaron en la copia pero no se han marcado como gastadas aqui. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + + + + (no label) + (sin etiqueta) + + + Warning: Unknown change address + + + + Are you sure you want to send? + + + + added as transaction fee + + + + Payment request expired + + + + Invalid payment address %1 + SendCoinsEntry - - Form - Envio - - - A&mount: Cantidad: - Pay &To: &Pagar a: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - + La dirección donde enviar el pago (ej. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book Introduce una etiqueta a esta dirección para añadirla a tu guia - &Label: &Etiqueta: - - Choose address from address book - Elije dirección de la guia + Choose previously used address + + + + This is a normal payment. + - Alt+A Alt+A - Paste address from clipboard Pega dirección desde portapapeles - Alt+P Alt+P - - Remove this recipient - Elimina destinatario + Remove this entry + - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Introduce una dirección Myriadcoin (ej. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + Mensaje: + + + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. + SignVerifyMessageDialog - Signatures - Sign / Verify a Message - &Sign Message &Firmar Mensaje - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Introduce una dirección Myriadcoin (ej. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book - Elije dirección de la guia + Choose previously used address + - - Alt+A Alt+A - Paste address from clipboard Pega dirección desde portapapeles - Alt+P Alt+P - Enter the message you want to sign here Escriba el mensaje que desea firmar - Signature - + Firma - Copy the current signature to the system clipboard - Sign the message to prove you own this Myriadcoin address Firmar un mensjage para probar que usted es dueño de esta dirección - Sign &Message - + Firmar Mensaje - Reset all sign message fields - - Clear &All &Borra todos - &Verify Message - + &Firmar Mensaje - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Introduce una dirección Myriadcoin (ej. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address - Verify &Message - + &Firmar Mensaje - Reset all verify message fields - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Introduce una dirección Myriadcoin (ej. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature Click en "Firmar Mensage" para conseguir firma - - Enter Myriadcoin signature - - - - - The entered address is invalid. - + La dirección introducida "%1" no es una dirección Myriadcoin valida. - - - - Please check the address and try again. - + Por favor, revise la dirección Myriadcoin e inténtelo denuevo - - The entered address does not refer to a key. - Wallet unlock was cancelled. - + Ha fallado el desbloqueo de la billetera - Private key for the entered address is not available. - Message signing failed. - + Firma fallida - Message signed. - + Mensaje firmado - The signature could not be decoded. - - Please check the signature and try again. - The signature did not match the message digest. - Message verification failed. - Message verified. - + Mensaje comprobado SplashScreen - - The Myriadcoin developers + Myriadcoin Core + + + + The Myriadcoin Core developers - [testnet] [red-de-pruebas] + + TrafficGraphWidget + + KB/s + KB/s + + TransactionDesc - Open until %1 Abierto hasta %1 - + conflicted + + + %1/offline %1/fuera de linea - %1/unconfirmed %1/no confirmado - %1 confirmations %1 confirmaciónes - Status Estado - , broadcast through %n node(s) - Date Fecha - Source - Generated Generado - - From De - - - To - + A - - own address - + propia dirección - label etiqueta - - - - - Credit Credito - matures in %n more block(s) - not accepted no aceptada - - - - Debit Debito - Transaction fee Comisión transacción - Net amount Cantidad total - Message Mensaje - Comment Comentario - Transaction ID ID de Transacción - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Las monedas generadas deben esperar 120 bloques antes de ser gastadas. Cuando has generado este bloque se emitió a la red para ser agregado en la cadena de bloques. Si falla al incluirse en la cadena, cambiará a "no aceptado" y las monedas no se podrán gastar. Esto puede ocurrir ocasionalmente si otro nodo genera un bloque casi al mismo tiempo que el tuyo. + Merchant + + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + - Debug information - Transaction Transacción - Inputs - Amount Cantidad - true - false - , has not been successfully broadcast yet , no ha sido emitido satisfactoriamente todavía - Open for %n more block(s) - + Abierto para %n bloque másAbierto para %n bloques más - unknown desconocido @@ -1838,12 +2291,10 @@ Dirección: %4 TransactionDescDialog - Transaction details Detalles de transacción - This pane shows a detailed description of the transaction Esta ventana muestra información detallada sobre la transacción @@ -1851,117 +2302,102 @@ Dirección: %4 TransactionTableModel - Date Fecha - Type Tipo - Address Dirección - Amount Cantidad + + Immature (%1 confirmations, will be available after %2) + + - Open for %n more block(s) - + Abierto para &n bloque másAbierto para &n bloques más - Open until %1 Abierto hasta %1 - - Offline (%1 confirmations) - Fuera de linea (%1 confirmaciónes) - - - - Unconfirmed (%1 of %2 confirmations) - No confirmado (%1 de %2 confirmaciónes) - - - Confirmed (%1 confirmations) Confirmado (%1 confirmaciones) - - - Mined balance will be available when it matures in %n more block(s) - - - This block was not received by any other nodes and will probably not be accepted! Este bloque no ha sido recibido por otros nodos y probablemente no sea aceptado ! - Generated but not accepted Generado pero no acceptado - + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + Received with Recibido con - Received from Recibido de - Sent to Enviado a - Payment to yourself Pagar a usted mismo - Mined Minado - (n/a) (n/a) - Transaction status. Hover over this field to show number of confirmations. Estado de transacción. Pasa el raton sobre este campo para ver el numero de confirmaciónes. - Date and time that the transaction was received. Fecha y hora cuando se recibió la transaccion - Type of transaction. Tipo de transacción. - Destination address of transaction. Dirección de destino para la transacción - Amount removed from or added to balance. Cantidad restada o añadida al balance @@ -1969,176 +2405,156 @@ Dirección: %4 TransactionView - - All Todo - Today Hoy - This week Esta semana - This month Esta mes - Last month Mes pasado - This year Este año - Range... Rango... - Received with Recibido con - Sent to Enviado a - To yourself A ti mismo - Mined Minado - Other Otra - Enter address or label to search Introduce una dirección o etiqueta para buscar - Min amount Cantidad minima - Copy address Copia dirección - Copy label Copia etiqueta - Copy amount Copiar Cantidad - Copy transaction ID - Edit label Edita etiqueta - Show transaction details + Mostrar detalles de la transacción + + + Export Transaction History - - Export Transaction Data - Exportar datos de transacción + Exporting Failed + + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + + + + The transaction history was successfully saved to %1. + - Comma separated file (*.csv) Archivos separados por coma (*.csv) - Confirmed Confirmado - Date Fecha - Type Tipo - Label Etiqueta - Address Dirección - Amount Cantidad - ID ID - - Error exporting - Error exportando - - - - Could not write to file %1. - No se pudo escribir en el archivo %1. - - - Range: Rango: - to para + + WalletFrame + + No wallet has been loaded. + + + WalletModel - Send Coins Enviar monedas @@ -2146,170 +2562,130 @@ Dirección: %4 WalletView - &Export - Export the data in the current tab to a file Exportar los datos de la pestaña actual a un archivo - Backup Wallet - Wallet Data (*.dat) - Backup Failed - - There was an error trying to save the wallet data to the new location. + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. - Backup Successful - - - The wallet data was successfully saved to the new location. - - bitcoin-core - - Myriadcoin version - Versión Myriadcoin - - - Usage: Uso: - - Send command to -server or myriadcoind - Envia comando a myriadcoin lanzado con -server u myriadcoind - - - - List commands Muestra comandos - Get help for a command Recibir ayuda para un comando - Options: Opciones: - Specify configuration file (default: myriadcoin.conf) Especifica archivo de configuración (predeterminado: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) - Especifica archivo pid (predeterminado: myriadcoin.pid) + Especifica archivo pid (predeterminado: bitcoin.pid) - Specify data directory Especifica directorio para los datos - - Set database cache size in megabytes (default: 25) - - - - Listen for connections on <port> (default: 8333 or testnet: 18333) Escuchar por conecciones en <puerto> (Por defecto: 8333 o red de prueba: 18333) - Maintain at most <n> connections to peers (default: 125) Mantener al menos <n> conecciones por cliente (por defecto: 125) - Connect to a node to retrieve peer addresses, and disconnect - Specify your own public address - Threshold for disconnecting misbehaving peers (default: 100) Umbral de desconección de clientes con mal comportamiento (por defecto: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) Escucha conexiones JSON-RPC en el puerto <port> (predeterminado: 8332 or testnet: 18332) - Accept command line and JSON-RPC commands Aceptar comandos consola y JSON-RPC - + Myriadcoin Core RPC client version + + + Run in the background as a daemon and accept commands Correr como demonio y acepta comandos - Use the test network Usa la red de pruebas - Accept connections from outside (default: 1 if no -proxy or -connect) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2324,625 +2700,698 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications - + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Precaución: -paytxfee es muy alta. Esta es la comisión que pagarás si envias una transacción. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. Precaución: Por favor revise que la fecha y hora de tu ordenador son correctas. Si tu reloj está mal configurado Myriadcoin no funcionará correctamente. - + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + Attempt to recover private keys from a corrupt wallet.dat - + Myriadcoin Core Daemon + + + Block creation options: - + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + Connect only to the specified node(s) Conecta solo al nodo especificado - + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + Corrupted block database detected - + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + Discover own IP address (default: 1 when listening and no -externalip) - + Do not load the wallet and disable wallet RPC calls + + + Do you want to rebuild the block database now? - Error initializing block database - Error initializing wallet database environment %s! - Error loading block database - + Error cargando blkindex.dat - Error opening block database - Error: Disk space is low! - + Atención: Poco espacio en el disco duro - Error: Wallet locked, unable to create transaction! - Error: system error: - + Error: error de sistema: - Failed to listen on any port. Use -listen=0 if you want this. - Failed to read block info - + Falló la lectura de la información del bloque - Failed to read block - + Falló la lectura del bloque - Failed to sync block index - + Falló sincronización del índice del bloque - Failed to write block index - + Falló la escritura del bloque del índice - Failed to write block info - + Falló la escritura de la información del bloque - Failed to write block - + Falló la escritura del bloque - Failed to write file info - Failed to write to coin database - Failed to write transaction index - Failed to write undo data - + Fee per kB to add to transactions you send + Comisión por kB para adicionarla a las transacciones enviadas + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + Find peers using DNS lookup (default: 1 unless -connect) - + Force safe mode (default: 0) + + + Generate coins (default: 0) - How many blocks to check at startup (default: 288, 0 = all) - - How thorough the block verification is (0-4, default: 3) + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' - Not enough file descriptors available. - + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + Rebuild block chain index from current blk000??.dat files - + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + Set the number of threads to service RPC calls (default: 4) - + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + Verifying blocks... - Verifying wallet... - + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + + + Imports blocks from external blk000??.dat file + Importar bloques desde el archivo externo blk000??.dat + + + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) - Information - + Información - - Invalid -tor address: '%s' - Dirección -tor invalida: '%s' - - - Invalid amount for -minrelaytxfee=<amount>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' - + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + Maintain a full transaction index (default: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Only accept block chain matching built-in checkpoints (default: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - Output extra debugging information. Implies all other -debug* options - Adjuntar informacion extra de depuracion. Implies all other -debug* options - - - - Output extra network debugging information + Print block on startup, if found in block index - - Prepend debug output with timestamp - Anteponer salida de depuracion con marca de tiempo + Print block tree on startup (default: 0) + + + + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) Opciones SSL: (ver la Myriadcoin Wiki para instrucciones de configuración SSL) - - Select the version of socks proxy to use (4-5, default: 5) + Send command to Myriadcoin Core - Send trace/debug info to console instead of debug.log file Enviar informacion de seguimiento a la consola en vez del archivo debug.log - - Send trace/debug info to debugger - Enviar informacion de seguimiento al depurador - - - - Set maximum block size in bytes (default: 250000) - - - - Set minimum block size in bytes (default: 0) + Establezca el tamaño mínimo del bloque en bytes (por defecto: 0) + + + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) - Shrink debug.log file on client startup (default: 1 when no -debug) - Signing transaction failed - Specify connection timeout in milliseconds (default: 5000) Especifica tiempo de espera para conexion en milisegundos (predeterminado: 5000) - - System error: + Start Myriadcoin Core Daemon - + System error: + Error de sistema: + + Transaction amount too small - Transaction amounts must be positive - Transaction too large - Use UPnP to map the listening port (default: 0) Intenta usar UPnP para mapear el puerto de escucha (default: 0) - Use UPnP to map the listening port (default: 1 when listening) Intenta usar UPnP para mapear el puerto de escucha (default: 1 when listening) - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - Username for JSON-RPC connections Usuario para las conexiones JSON-RPC - Warning - + Atención - Warning: This version is obsolete, upgrade required! + Advertencia: Esta versión está obsoleta, se necesita actualizar! + + + Zapping all transactions from wallet... - - You need to rebuild the databases using -reindex to change -txindex + on startup - + version + versión + + wallet.dat corrupt, salvage failed - + wallet.dat corrompió, guardado fallido - Password for JSON-RPC connections Contraseña para las conexiones JSON-RPC - Allow JSON-RPC connections from specified IP address Permite conexiones JSON-RPC desde la dirección IP especificada - Send commands to node running on <ip> (default: 127.0.0.1) Envia comando al nodo situado en <ip> (predeterminado: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) - Upgrade wallet to latest format Actualizar billetera al formato actual - Set key pool size to <n> (default: 100) Ajusta el numero de claves en reserva <n> (predeterminado: 100) - Rescan the block chain for missing wallet transactions Rescanea la cadena de bloques para transacciones perdidas de la cartera - Use OpenSSL (https) for JSON-RPC connections Usa OpenSSL (https) para las conexiones JSON-RPC - Server certificate file (default: server.cert) Certificado del servidor (Predeterminado: server.cert) - Server private key (default: server.pem) Clave privada del servidor (Predeterminado: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Cifrados aceptados (Predeterminado: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - This help message Este mensaje de ayuda - Unable to bind to %s on this computer (bind returned error %d, %s) No es posible escuchar en el %s en este ordenador (bind returned error %d, %s) - - Connect through socks proxy - Conecta mediante proxy socks - - - Allow DNS lookups for -addnode, -seednode and -connect Permite búsqueda DNS para addnode y connect - Loading addresses... Cargando direcciónes... - Error loading wallet.dat: Wallet corrupted Error cargando wallet.dat: Billetera corrupta - Error loading wallet.dat: Wallet requires newer version of Myriadcoin Error cargando wallet.dat: Billetera necesita una vercion reciente de Myriadcoin - Wallet needed to be rewritten: restart Myriadcoin to complete La billetera necesita ser reescrita: reinicie Myriadcoin para completar - Error loading wallet.dat Error cargando wallet.dat - Invalid -proxy address: '%s' Dirección -proxy invalida: '%s' - Unknown network specified in -onlynet: '%s' - Unknown -socks proxy version requested: %i - Cannot resolve -bind address: '%s' - Cannot resolve -externalip address: '%s' - Invalid amount for -paytxfee=<amount>: '%s' Cantidad inválida para -paytxfee=<amount>: '%s' - Invalid amount Cantidad inválida - Insufficient funds Fondos insuficientes - Loading block index... Cargando el index de bloques... - Add a node to connect to and attempt to keep the connection open Agrega un nodo para conectarse and attempt to keep the connection open - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - No es posible escuchar en el %s en este ordenador. Probablemente Myriadcoin ya se está ejecutando. - - - - Fee per KB to add to transactions you send - Comisión por kB para adicionarla a las transacciones enviadas - - - Loading wallet... Cargando cartera... - Cannot downgrade wallet - Cannot write default address - Rescanning... Rescaneando... - Done loading Carga completa - To use the %s option - + Para utilizar la opción %s - Error Error - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_es_DO.ts b/src/qt/locale/bitcoin_es_DO.ts new file mode 100644 index 00000000..3b6651a4 --- /dev/null +++ b/src/qt/locale/bitcoin_es_DO.ts @@ -0,0 +1,3409 @@ + + + AboutDialog + + About Myriadcoin Core + Acerca del Núcleo de Myriadcoin + + + <b>Myriadcoin Core</b> version + Versión del <b>Núcleo de Bitcoin<b> + + + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. + +Este es un software experimental. + +Distribuido bajo la licencia MIT/X11, vea el archivo adjunto +COPYING o http://www.opensource.org/licenses/mit-license.php. + +Este producto incluye software desarrollado por OpenSSL Project para su uso en +el OpenSSL Toolkit (http://www.openssl.org/) y software criptográfico escrito por +Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard. + + + Copyright + Copyright + + + The Myriadcoin Core developers + Los desarrolladores del Núcleo de Myriadcoin + + + (%1-bit) + + + + + AddressBookPage + + Double-click to edit address or label + Haga doble clic para editar una dirección o etiqueta + + + Create a new address + Crear una nueva dirección + + + &New + Nuevo + + + Copy the currently selected address to the system clipboard + Copiar la dirección seleccionada al portapapeles del sistema + + + &Copy + &Copiar + + + C&lose + &Cerrar + + + &Copy Address + &Copiar dirección + + + Delete the currently selected address from the list + Borrar de la lista la dirección seleccionada + + + Export the data in the current tab to a file + Exportar a un archivo los datos de esta pestaña + + + &Export + &Exportar + + + &Delete + &Eliminar + + + Choose the address to send coins to + Escoja la dirección para enviar monedas + + + Choose the address to receive coins with + Escoja la dirección para recibir monedas + + + C&hoose + &Escoger + + + Sending addresses + Enviando dirección + + + Receiving addresses + Recibiendo dirección + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + Estas son sus direcciones Myriadcoin para enviar pagos. Compruebe siempre la cantidad y la dirección receptora antes de transferir monedas. + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Estas son sus direcciones de Myriadcoin para recibir pagos. Se recomienda utilizar una nueva dirección de recepción para cada transacción. + + + Copy &Label + Copiar &etiqueta + + + &Edit + &Editar + + + Export Address List + Exportar la lista de direcciones + + + Comma separated file (*.csv) + Archivos de columnas separadas por coma (*.csv) + + + Exporting Failed + Error exportando + + + There was an error trying to save the address list to %1. + + + + + AddressTableModel + + Label + Etiqueta + + + Address + Dirección + + + (no label) + (sin etiqueta) + + + + AskPassphraseDialog + + Passphrase Dialog + Diálogo de contraseña + + + Enter passphrase + Introducir contraseña + + + New passphrase + Nueva contraseña + + + Repeat new passphrase + Repita la nueva contraseña + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Introduzca la nueva contraseña de la cartera.<br/>Por favor elija una con <b>10 o más caracteres aleatorios</b>, u <b>ocho o más palabras</b>. + + + Encrypt wallet + Cifrar la cartera + + + This operation needs your wallet passphrase to unlock the wallet. + Esta operación requiere su contraseña para desbloquear la cartera + + + Unlock wallet + Desbloquear cartera + + + This operation needs your wallet passphrase to decrypt the wallet. + Esta operación requiere su contraseña para descifrar la cartera. + + + Decrypt wallet + Descifrar la certare + + + Change passphrase + Cambiar contraseña + + + Enter the old and new passphrase to the wallet. + Introduzca la contraseña anterior de la cartera y la nueva. + + + Confirm wallet encryption + Confirmar cifrado de la cartera + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! + Atencion: ¡Si cifra su monedero y pierde la contraseña perderá <b>TODOS SUS MYRIADCOINS</b>!" + + + Are you sure you wish to encrypt your wallet? + ¿Seguro que desea cifrar su monedero? + + + 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. + IMPORTANTE: Cualquier copia de seguridad que haya realizado previamente de su archivo de monedero debe reemplazarse con el nuevo archivo de monedero cifrado. Por razones de seguridad, las copias de seguridad previas del archivo de monedero no cifradas serán inservibles en cuanto comience a usar el nuevo monedero cifrado. + + + Warning: The Caps Lock key is on! + Aviso: ¡La tecla de bloqueo de mayúsculas está activada! + + + Wallet encrypted + Monedero cifrado + + + Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. + Myriadcoin se cerrará para finalizar el proceso de cifrado. Recuerde que el cifrado de su monedero no puede proteger totalmente sus myriadcoins de robo por malware que infecte su sistema. + + + Wallet encryption failed + Ha fallado el cifrado del monedero + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Ha fallado el cifrado del monedero debido a un error interno. El monedero no ha sido cifrado. + + + The supplied passphrases do not match. + Las contraseñas no coinciden. + + + Wallet unlock failed + Ha fallado el desbloqueo del monedero + + + The passphrase entered for the wallet decryption was incorrect. + La contraseña introducida para descifrar el monedero es incorrecta. + + + Wallet decryption failed + Ha fallado el descifrado del monedero + + + Wallet passphrase was successfully changed. + Se ha cambiado correctamente la contraseña del monedero. + + + + BitcoinGUI + + Sign &message... + Firmar &mensaje... + + + Synchronizing with network... + Sincronizando con la red… + + + &Overview + &Vista general + + + Node + Nodo + + + Show general overview of wallet + Mostrar vista general del monedero + + + &Transactions + &Transacciones + + + Browse transaction history + Examinar el historial de transacciones + + + E&xit + &Salir + + + Quit application + Salir de la aplicación + + + Show information about Myriadcoin + Mostrar información acerca de Myriadcoin + + + About &Qt + Acerca de &Qt + + + Show information about Qt + Mostrar información acerca de Qt + + + &Options... + &Opciones... + + + &Encrypt Wallet... + &Cifrar monedero… + + + &Backup Wallet... + Copia de &respaldo del monedero... + + + &Change Passphrase... + &Cambiar la contraseña… + + + &Sending addresses... + $Enviando dirección... + + + &Receiving addresses... + &Recibiendo dirección + + + Open &URI... + Abrir URI... + + + Importing blocks from disk... + Importando bloques de disco... + + + Reindexing blocks on disk... + Reindexando bloques en disco... + + + Send coins to a Myriadcoin address + Enviar monedas a una dirección Myriadcoin + + + Modify configuration options for Myriadcoin + Modificar las opciones de configuración de Myriadcoin + + + Backup wallet to another location + Copia de seguridad del monedero en otra ubicación + + + Change the passphrase used for wallet encryption + Cambiar la contraseña utilizada para el cifrado del monedero + + + &Debug window + Ventana de &depuración + + + Open debugging and diagnostic console + Abrir la consola de depuración y diagnóstico + + + &Verify message... + &Verificar mensaje... + + + Myriadcoin + Myriadcoin + + + Wallet + Monedero + + + &Send + &Enviar + + + &Receive + &Recibir + + + &Show / Hide + Mo&strar/ocultar + + + Show or hide the main Window + Mostrar u ocultar la ventana principal + + + Encrypt the private keys that belong to your wallet + Cifrar las claves privadas de su monedero + + + Sign messages with your Myriadcoin addresses to prove you own them + Firmar mensajes con sus direcciones Myriadcoin para demostrar la propiedad + + + Verify messages to ensure they were signed with specified Myriadcoin addresses + Verificar mensajes comprobando que están firmados con direcciones Myriadcoin concretas + + + &File + &Archivo + + + &Settings + &Configuración + + + &Help + A&yuda + + + Tabs toolbar + Barra de pestañas + + + [testnet] + [testnet] + + + Myriadcoin Core + Núcleo de Myriadcoin + + + Request payments (generates QR codes and myriadcoin: URIs) + Solicitar pagos (genera codigo QR y URL's de Bitcoin) + + + &About Myriadcoin Core + &Acerca del Núcleo de Myriadcoin + + + Show the list of used sending addresses and labels + Mostrar la lista de direcciones de envío y etiquetas + + + Show the list of used receiving addresses and labels + Muestra la lista de direcciones de recepción y etiquetas + + + Open a myriadcoin: URI or payment request + Abrir un myriadcoin: URI o petición de pago + + + &Command-line options + &Opciones de linea de comando + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + + Myriadcoin client + Cliente Myriadcoin + + + %n active connection(s) to Myriadcoin network + %n conexión activa hacia la red Myriadcoin%n conexiones activas hacia la red Myriadcoin + + + No block source available... + Ninguna fuente de bloques disponible ... + + + Processed %1 of %2 (estimated) blocks of transaction history. + Se han procesado %1 de %2 bloques (estimados) del historial de transacciones. + + + Processed %1 blocks of transaction history. + Procesados %1 bloques del historial de transacciones. + + + %n hour(s) + %n hora%n horas + + + %n day(s) + %n día%n días + + + %n week(s) + %n semana%n semanas + + + %1 and %2 + + + + %n year(s) + + + + %1 behind + %1 atrás + + + Last received block was generated %1 ago. + El último bloque recibido fue generado hace %1. + + + Transactions after this will not yet be visible. + Las transacciones posteriores aún no están visibles. + + + Error + Error + + + Warning + Aviso + + + Information + Información + + + Up to date + Actualizado + + + Catching up... + Actualizando... + + + Sent transaction + Transacción enviada + + + Incoming transaction + Transacción entrante + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + Fecha: %1 +Cantidad: %2 +Tipo: %3 +Dirección: %4 + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + El monedero está <b>cifrado</b> y actualmente <b>desbloqueado</b> + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + El monedero está <b>cifrado</b> y actualmente <b>bloqueado</b> + + + A fatal error occurred. Myriadcoin can no longer continue safely and will quit. + Ha ocurrido un error crítico. Myriadcoin ya no puede continuar con seguridad y se cerrará. + + + + ClientModel + + Network Alert + Alerta de red + + + + CoinControlDialog + + Coin Control Address Selection + Selección de la dirección de control de la moneda + + + Quantity: + Cantidad: + + + Bytes: + Bytes: + + + Amount: + Cuantía: + + + Priority: + Prioridad: + + + Fee: + Tasa: + + + Low Output: + Envío pequeño: + + + After Fee: + Después de tasas: + + + Change: + Cambio: + + + (un)select all + (des)selecciona todos + + + Tree mode + Modo arbol + + + List mode + Modo lista + + + Amount + Cantidad + + + Address + Dirección + + + Date + Fecha + + + Confirmations + Confirmaciones + + + Confirmed + Confirmado + + + Priority + Prioridad + + + Copy address + Copiar dirección + + + Copy label + Copiar etiqueta + + + Copy amount + Copiar cantidad + + + Copy transaction ID + Copiar identificador de transacción + + + Lock unspent + Bloquear lo no gastado + + + Unlock unspent + Desbloquear lo no gastado + + + Copy quantity + Copiar cantidad + + + Copy fee + Copiar donación + + + Copy after fee + Copiar después de aplicar donación + + + Copy bytes + Copiar bytes + + + Copy priority + Copiar prioridad + + + Copy low output + Copiar envío pequeño + + + Copy change + Copiar cambio + + + highest + lo más alto + + + higher + más alto + + + high + alto + + + medium-high + medio-alto + + + medium + medio + + + low-medium + bajo-medio + + + low + bajo + + + lower + más bajo + + + lowest + lo más bajo + + + (%1 locked) + (%1 bloqueado) + + + none + ninguno + + + Dust + Basura + + + yes + si + + + no + no + + + This label turns red, if the transaction size is greater than 1000 bytes. + Esta etiqueta se torna roja si el tamaño de la transación es mayor a 1000 bytes. + + + This means a fee of at least %1 per kB is required. + Esto implica que se requiere una tarifa de al menos %1 por kB + + + Can vary +/- 1 byte per input. + Puede variar +/- 1 byte por entrada. + + + Transactions with higher priority are more likely to get included into a block. + Las transacciones con alta prioridad son más propensas a ser incluidas dentro de un bloque. + + + This label turns red, if the priority is smaller than "medium". + Esta etiqueta se convierte en rojo, si la prioridad es menor que "medio". + + + This label turns red, if any recipient receives an amount smaller than %1. + Esta etiqueta se torna roja si cualquier destinatario recibe una cantidad menor a %1. + + + This means a fee of at least %1 is required. + Esto significa que se necesita una tarifa de al menos %1. + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + Cantidades por debajo de 0.546 veces la tasa serán mostradas como basura + + + This label turns red, if the change is smaller than %1. + Esta etiqueta se vuelve roja si la cantidad de monedas es menor a %1 + + + (no label) + (sin etiqueta) + + + change from %1 (%2) + Enviar desde %1 (%2) + + + (change) + (cambio) + + + + EditAddressDialog + + Edit Address + Editar Dirección + + + &Label + &Etiqueta + + + The label associated with this address list entry + La etiqueta asociada con esta entrada de la lista de direcciones + + + The address associated with this address list entry. This can only be modified for sending addresses. + La dirección asociada con esta entrada de la lista de direcciones. Solo puede ser modificada para direcciones de envío. + + + &Address + &Dirección + + + New receiving address + Nueva dirección de recepción + + + New sending address + Nueva dirección de envío + + + Edit receiving address + Editar dirección de recepción + + + Edit sending address + Editar dirección de envío + + + The entered address "%1" is already in the address book. + La dirección introducida "%1" ya está presente en la libreta de direcciones. + + + The entered address "%1" is not a valid Myriadcoin address. + La dirección introducida "%1" no es una dirección Myriadcoin válida. + + + Could not unlock wallet. + No se pudo desbloquear el monedero. + + + New key generation failed. + Ha fallado la generación de la nueva clave. + + + + FreespaceChecker + + A new data directory will be created. + Se creará un nuevo directorio de datos. + + + name + nombre + + + Directory already exists. Add %1 if you intend to create a new directory here. + El directorio ya existe. Añada %1 si pretende crear aquí un directorio nuevo. + + + Path already exists, and is not a directory. + La ruta ya existe y no es un directorio. + + + Cannot create data directory here. + No se puede crear un directorio de datos aquí. + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core + Núcleo de Myriadcoin + + + version + versión + + + Usage: + Uso: + + + command-line options + opciones de la línea de órdenes + + + UI options + Opciones GUI + + + Set language, for example "de_DE" (default: system locale) + Establecer el idioma, por ejemplo, "es_ES" (predeterminado: configuración regional del sistema) + + + Start minimized + Arrancar minimizado + + + Set SSL root certificates for payment request (default: -system-) + + + + Show splash screen on startup (default: 1) + Mostrar pantalla de bienvenida en el inicio (predeterminado: 1) + + + Choose data directory on startup (default: 0) + Elegir directorio de datos al iniciar (predeterminado: 0) + + + + Intro + + Welcome + Bienvenido + + + Welcome to Myriadcoin Core. + Bienvenido al Núcleo de Myriadcoin + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + Al ser la primera vez que se ejecuta el programa, puede elegir dónde almacenará sus datos Bitcoin-Qt. + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + Bitcoin-Qt va a descargar y guardar una copia de la cadena de bloques de Myriadcoin. Se almacenará al menos %1GB de datos en este directorio, que irá creciendo con el tiempo. El monedero se guardará también en este directorio. + + + Use the default data directory + Utilizar el directorio de datos predeterminado + + + Use a custom data directory: + Utilice un directorio de datos personalizado: + + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" can not be created. + Error: No puede crearse el directorio de datos especificado "%1". + + + Error + Error + + + GB of free space available + GB de espacio libre disponible + + + (of %1GB needed) + (de los %1GB necesarios) + + + + OpenURIDialog + + Open URI + Abrir URI... + + + Open payment request from URI or file + El pago requiere una URI o archivo + + + URI: + URI: + + + Select payment request file + Seleccione archivo de sulicitud de pago + + + Select payment request file to open + Abrir archivo de solicitud de pago + + + + OptionsDialog + + Options + Opciones + + + &Main + &Principal + + + Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. + Tarifa de transacción opcional por kB que ayuda a asegurar que sus transacciones sean procesadas rápidamente. La mayoría de transacciones son de 1kB. + + + Pay transaction &fee + Comisión de &transacciones + + + Automatically start Myriadcoin after logging in to the system. + Iniciar Myriadcoin automáticamente al encender el sistema. + + + &Start Myriadcoin on system login + &Iniciar Myriadcoin al iniciar el sistema + + + Size of &database cache + + + + MB + MB + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + Conéctese a la red Myriadcoin través de un proxy SOCKS. + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + Dirección IP del proxy (ej. IPv4: 127.0.0.1 / IPv6: ::1) + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + + Reset all client options to default. + Restablecer todas las opciones del cliente a las predeterminadas. + + + &Reset Options + &Restablecer opciones + + + &Network + &Red + + + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + Experto + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. + Abrir automáticamente el puerto del cliente Myriadcoin en el router. Esta opción solo funciona si el router admite UPnP y está activado. + + + Map port using &UPnP + Mapear el puerto usando &UPnP + + + Proxy &IP: + Dirección &IP del proxy: + + + &Port: + &Puerto: + + + Port of the proxy (e.g. 9050) + Puerto del servidor proxy (ej. 9050) + + + SOCKS &Version: + &Versión SOCKS: + + + SOCKS version of the proxy (e.g. 5) + Versión del proxy SOCKS (ej. 5) + + + &Window + &Ventana + + + Show only a tray icon after minimizing the window. + Minimizar la ventana a la bandeja de iconos del sistema. + + + &Minimize to the tray instead of the taskbar + &Minimizar a la bandeja en vez de a la barra de tareas + + + Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. + Minimizar en lugar de salir de la aplicación al cerrar la ventana. Cuando esta opción está activa, la aplicación solo se puede cerrar seleccionando Salir desde el menú. + + + M&inimize on close + M&inimizar al cerrar + + + &Display + &Interfaz + + + User Interface &language: + I&dioma de la interfaz de usuario + + + The user interface language can be set here. This setting will take effect after restarting Myriadcoin. + El idioma de la interfaz de usuario puede establecerse aquí. Este ajuste se aplicará cuando se reinicie Myriadcoin. + + + &Unit to show amounts in: + Mostrar las cantidades en la &unidad: + + + Choose the default subdivision unit to show in the interface and when sending coins. + Elegir la subdivisión predeterminada para mostrar cantidades en la interfaz y cuando se envían monedas. + + + Whether to show Myriadcoin addresses in the transaction list or not. + Mostrar o no las direcciones Myriadcoin en la lista de transacciones. + + + &Display addresses in transaction list + &Mostrar las direcciones en la lista de transacciones + + + Whether to show coin control features or not. + Mostrar o no características de control de moneda + + + &OK + &Aceptar + + + &Cancel + &Cancelar + + + default + predeterminado + + + none + Ninguna + + + Confirm options reset + Confirme el restablecimiento de las opciones + + + Client restart required to activate changes. + Reinicio del cliente para activar cambios. + + + Client will be shutdown, do you want to proceed? + + + + This change would require a client restart. + Este cambio requiere reinicio por parte del cliente. + + + The supplied proxy address is invalid. + La dirección proxy indicada es inválida. + + + + OverviewPage + + Form + Desde + + + The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. + La información mostrada puede estar desactualizada. Su monedero se sincroniza automáticamente con la red Myriadcoin después de que se haya establecido una conexión, pero este proceso aún no se ha completado. + + + Wallet + Monedero + + + Available: + + + + Your current spendable balance + Su balance actual gastable + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + Total de transacciones que deben ser confirmadas, y que no cuentan con el balance gastable necesario + + + Immature: + No disponible: + + + Mined balance that has not yet matured + Saldo recién minado que aún no está disponible. + + + Total: + Total: + + + Your current total balance + Su balance actual total + + + <b>Recent transactions</b> + <b>Movimientos recientes</b> + + + out of sync + desincronizado + + + + PaymentServer + + URI handling + Gestión de URI + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + ¡No se puede interpretar la URI! Esto puede deberse a una dirección Myriadcoin inválida o a parámetros de URI mal formados. + + + Requested payment amount of %1 is too small (considered dust). + La cantidad del pago solicitado (%1) es demasiado pequeña (considerada polvo). + + + Payment request error + Error en petición de pago + + + Cannot start myriadcoin: click-to-pay handler + No se pudo iniciar myriadcoin: manejador de pago-al-clic + + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + No están soportadas las peticiones inseguras a scripts de pago personalizados + + + Refund from %1 + Devolución de %1 + + + Error communicating with %1: %2 + Error en la comunicación con %1: %2 + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + Respuesta errónea del servidor %1 + + + Payment acknowledged + Pago aceptado + + + Network request error + Error en petición de red + + + + QObject + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" does not exist. + Error: El directorio de datos especificado "%1" no existe. + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + + + + Error: Invalid combination of -regtest and -testnet. + Error: Combinación no válida de -regtest y -testnet. + + + Myriadcoin Core didn't yet exit safely... + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Introduzca una dirección Myriadcoin (ej. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + Guardar Imagen... + + + &Copy Image + Copiar imagen + + + Save QR Code + Guardar código QR + + + PNG Image (*.png) + Imágenes PNG (*.png) + + + + RPCConsole + + Client name + Nombre del cliente + + + N/A + N/D + + + Client version + Versión del cliente + + + &Information + &Información + + + Debug window + Ventana de depuración + + + General + General + + + Using OpenSSL version + Utilizando la versión OpenSSL + + + Startup time + Hora de inicio + + + Network + Red + + + Name + Nombre + + + Number of connections + Número de conexiones + + + Block chain + Cadena de bloques + + + Current number of blocks + Número actual de bloques + + + Estimated total blocks + Bloques totales estimados + + + Last block time + Hora del último bloque + + + &Open + &Abrir + + + &Console + &Consola + + + &Network Traffic + &Tráfico de Red + + + &Clear + &Limpiar + + + Totals + Total: + + + In: + Dentro: + + + Out: + Fuera: + + + Build date + Fecha de compilación + + + Debug log file + Archivo de registro de depuración + + + Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. + Abrir el archivo de registro de depuración en el directorio actual de datos. Esto puede llevar varios segundos para archivos de registro grandes. + + + Clear console + Borrar consola + + + Welcome to the Myriadcoin RPC console. + Bienvenido a la consola RPC de Myriadcoin + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + Use las flechas arriba y abajo para navegar por el historial y <b>Control+L</b> para limpiar la pantalla. + + + Type <b>help</b> for an overview of available commands. + Escriba <b>help</b> para ver un resumen de los comandos disponibles. + + + %1 B + %1 B + + + %1 KB + %1 KB + + + %1 MB + %1 MB + + + %1 GB + %1 GB + + + %1 m + %1 m + + + %1 h + %1 h + + + %1 h %2 m + %1 h %2 m + + + + ReceiveCoinsDialog + + &Amount: + Cantidad + + + &Label: + &Etiqueta: + + + &Message: + Mensaje: + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + Reutilizar una de las direcciones previamente usadas para recibir. Reutilizar direcciones tiene problemas de seguridad y privacidad. No lo uses a menos que antes regeneres una solicitud de pago. + + + R&euse an existing receiving address (not recommended) + R&eutilizar una dirección existente para recibir (no recomendado) + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + Limpiar todos los campos del formulario. + + + Clear + Limpiar + + + Requested payments history + + + + &Request payment + &Solicitar pago + + + Show the selected request (does the same as double clicking an entry) + Muestra la petición seleccionada (También doble clic) + + + Show + Mostrar + + + Remove the selected entries from the list + Borrar de la lista las direcciónes actualmente seleccionadas + + + Remove + Eliminar + + + Copy label + Copiar etiqueta + + + Copy message + + + + Copy amount + Copiar cantidad + + + + ReceiveRequestDialog + + QR Code + Código QR + + + Copy &URI + Copiar &URI + + + Copy &Address + Copiar &Dirección + + + &Save Image... + Guardar Imagen... + + + Request payment to %1 + Solicitar pago a %1 + + + Payment information + Información de pago + + + URI + URI + + + Address + Dirección + + + Amount + Cantidad + + + Label + Etiqueta + + + Message + Mensaje + + + Resulting URI too long, try to reduce the text for label / message. + URI resultante demasiado larga. Intente reducir el texto de la etiqueta / mensaje. + + + Error encoding URI into QR Code. + Error al codificar la URI en el código QR. + + + + RecentRequestsTableModel + + Date + Fecha + + + Label + Etiqueta + + + Message + Mensaje + + + Amount + Cantidad + + + (no label) + (sin etiqueta) + + + (no message) + (Ningun mensaje) + + + (no amount) + + + + + SendCoinsDialog + + Send Coins + Enviar monedas + + + Coin Control Features + Características de control de la moneda + + + Inputs... + Entradas... + + + automatically selected + Seleccionado automaticamente + + + Insufficient funds! + Fondos insuficientes! + + + Quantity: + Cantidad: + + + Bytes: + Bytes: + + + Amount: + Cuantía: + + + Priority: + Prioridad: + + + Fee: + Tasa: + + + Low Output: + Envío pequeño: + + + After Fee: + Después de tasas: + + + Change: + Cambio: + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + Al activarse, si la dirección esta vacía o es inválida, las monedas serán enviadas a una nueva dirección generada. + + + Custom change address + Dirección propia + + + Send to multiple recipients at once + Enviar a múltiples destinatarios de una vez + + + Add &Recipient + Añadir &destinatario + + + Clear all fields of the form. + Limpiar todos los campos del formulario + + + Clear &All + Limpiar &todo + + + Balance: + Saldo: + + + Confirm the send action + Confirmar el envío + + + S&end + &Enviar + + + Confirm send coins + Confirmar el envío de monedas + + + %1 to %2 + %1 a %2 + + + Copy quantity + Copiar cantidad + + + Copy amount + Copiar cuantía + + + Copy fee + Copiar donación + + + Copy after fee + Copiar después de aplicar donación + + + Copy bytes + Copiar bytes + + + Copy priority + Copiar prioridad + + + Copy low output + Copiar envío pequeño + + + Copy change + Copiar Cambio + + + Total Amount %1 (= %2) + Cuantía Total %1 (=%2) + + + or + o + + + The recipient address is not valid, please recheck. + La dirección de recepción no es válida, compruébela de nuevo. + + + The amount to pay must be larger than 0. + La cantidad por pagar tiene que ser mayor de 0. + + + The amount exceeds your balance. + La cantidad sobrepasa su saldo. + + + The total exceeds your balance when the %1 transaction fee is included. + El total sobrepasa su saldo cuando se incluye la tasa de envío de %1 + + + Duplicate address found, can only send to each address once per send operation. + Se ha encontrado una dirección duplicada. Solo se puede enviar a cada dirección una vez por operación de envío. + + + Transaction creation failed! + ¡Ha fallado la creación de la transacción! + + + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + La transacción fue rechazada. Esto puede haber ocurrido si alguna de las monedas ya estaba gastada o si ha usado una copia de wallet.dat y las monedas se gastaron en la copia pero no se han marcado como gastadas aqui. + + + Warning: Invalid Myriadcoin address + Alerta: Dirección de Myriadcoin inválida + + + (no label) + (sin etiqueta) + + + Warning: Unknown change address + Alerta: Dirección de Myriadcoin inválida + + + Are you sure you want to send? + ¿Está seguro que desea enviar? + + + added as transaction fee + añadido como comisión de transacción + + + Payment request expired + Petición de pago expirada + + + Invalid payment address %1 + Dirección de pago no válida %1 + + + + SendCoinsEntry + + A&mount: + Ca&ntidad: + + + Pay &To: + &Pagar a: + + + The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + La dirección a la que enviar el pago (p. ej. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + Enter a label for this address to add it to your address book + Etiquete esta dirección para añadirla a la libreta + + + &Label: + &Etiqueta: + + + Choose previously used address + Escoger direcciones previamente usadas + + + This is a normal payment. + Esto es un pago ordinario. + + + Alt+A + Alt+A + + + Paste address from clipboard + Pegar dirección desde portapapeles + + + Alt+P + Alt+P + + + Remove this entry + Eliminar esta transacción + + + Message: + + + + This is a verified payment request. + Esto es una petición de pago verificado. + + + Enter a label for this address to add it to the list of used addresses + Introduce una etiqueta para esta dirección para añadirla a la lista de direcciones utilizadas + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + Esto es una petición de pago no verificado. + + + Pay To: + Paga a: + + + Memo: + Memo: + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. + + + + + SignVerifyMessageDialog + + Signatures - Sign / Verify a Message + Firmas - Firmar / verificar un mensaje + + + &Sign Message + &Firmar mensaje + + + You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. + Puede firmar mensajes con sus direcciones para demostrar que las posee. Tenga cuidado de no firmar cualquier cosa vaga, ya que los ataques de phishing pueden tratar de engañarle para suplantar su identidad. Firme solo declaraciones totalmente detalladas con las que usted esté de acuerdo. + + + The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + La dirección con la que firmar el mensaje (ej. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + Choose previously used address + Escoger dirección previamente usada + + + Alt+A + Alt+A + + + Paste address from clipboard + Pegar dirección desde portapapeles + + + Alt+P + Alt+P + + + Enter the message you want to sign here + Introduzca el mensaje que desea firmar aquí + + + Signature + Firma + + + Copy the current signature to the system clipboard + Copiar la firma actual al portapapeles del sistema + + + Sign the message to prove you own this Myriadcoin address + Firmar el mensaje para demostrar que se posee esta dirección Myriadcoin + + + Sign &Message + Firmar &mensaje + + + Reset all sign message fields + Limpiar todos los campos de la firma de mensaje + + + Clear &All + Limpiar &todo + + + &Verify Message + &Verificar mensaje + + + Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. + Introduzca la dirección para la firma, el mensaje (asegurándose de copiar tal cual los saltos de línea, espacios, tabulaciones, etc.) y la firma a continuación para verificar el mensaje. Tenga cuidado de no asumir más información de lo que dice el propio mensaje firmado para evitar fraudes basados en ataques de tipo man-in-the-middle. + + + The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + La dirección con la que se firmó el mensaje (ej. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + Verify the message to ensure it was signed with the specified Myriadcoin address + Verificar el mensaje para comprobar que fue firmado con la dirección Myriadcoin indicada + + + Verify &Message + Verificar &mensaje + + + Reset all verify message fields + Limpiar todos los campos de la verificación de mensaje + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Introduzca una dirección Myriadcoin (ej. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + Click "Sign Message" to generate signature + Haga clic en "Firmar mensaje" para generar la firma + + + The entered address is invalid. + La dirección introducida es inválida. + + + Please check the address and try again. + Verifique la dirección e inténtelo de nuevo. + + + The entered address does not refer to a key. + La dirección introducida no corresponde a una clave. + + + Wallet unlock was cancelled. + Se ha cancelado el desbloqueo del monedero. + + + Private key for the entered address is not available. + No se dispone de la clave privada para la dirección introducida. + + + Message signing failed. + Ha fallado la firma del mensaje. + + + Message signed. + Mensaje firmado. + + + The signature could not be decoded. + No se puede decodificar la firma. + + + Please check the signature and try again. + Compruebe la firma e inténtelo de nuevo. + + + The signature did not match the message digest. + La firma no coincide con el resumen del mensaje. + + + Message verification failed. + La verificación del mensaje ha fallado. + + + Message verified. + Mensaje verificado. + + + + SplashScreen + + Myriadcoin Core + Núcleo de Myriadcoin + + + The Myriadcoin Core developers + Los desarrolladores del Núcleo de Myriadcoin + + + [testnet] + [testnet] + + + + TrafficGraphWidget + + KB/s + KB/s + + + + TransactionDesc + + Open until %1 + Abierto hasta %1 + + + conflicted + + + + %1/offline + %1/fuera de línea + + + %1/unconfirmed + %1/no confirmado + + + %1 confirmations + %1 confirmaciones + + + Status + Estado + + + , broadcast through %n node(s) + , transmitir a través de %n nodo, transmitir a través de %n nodos + + + Date + Fecha + + + Source + Fuente + + + Generated + Generado + + + From + De + + + To + Para + + + own address + dirección propia + + + label + etiqueta + + + Credit + Crédito + + + matures in %n more block(s) + disponible en %n bloque másdisponible en %n bloques más + + + not accepted + no aceptada + + + Debit + Débito + + + Transaction fee + Comisión de transacción + + + Net amount + Cantidad neta + + + Message + Mensaje + + + Comment + Comentario + + + Transaction ID + Identificador de transacción + + + Merchant + Vendedor + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Las monedas generadas deben madurar %1 bloques antes de que puedan ser gastadas. Una vez que generas este bloque, es propagado por la red para ser añadido a la cadena de bloques. Si falla el intento de meterse en la cadena, su estado cambiará a "no aceptado" y ya no se puede gastar. Esto puede ocurrir ocasionalmente si otro nodo genera un bloque a pocos segundos del tuyo. + + + Debug information + Información de depuración + + + Transaction + Transacción + + + Inputs + entradas + + + Amount + Cantidad + + + true + verdadero + + + false + falso + + + , has not been successfully broadcast yet + , todavía no se ha sido difundido satisfactoriamente + + + Open for %n more block(s) + Abrir para %n bloque másAbrir para %n bloques más + + + unknown + desconocido + + + + TransactionDescDialog + + Transaction details + Detalles de transacción + + + This pane shows a detailed description of the transaction + Esta ventana muestra información detallada sobre la transacción + + + + TransactionTableModel + + Date + Fecha + + + Type + Tipo + + + Address + Dirección + + + Amount + Cantidad + + + Immature (%1 confirmations, will be available after %2) + + + + Open for %n more block(s) + Abrir para %n bloque másAbrir para %n bloques más + + + Open until %1 + Abierto hasta %1 + + + Confirmed (%1 confirmations) + Confirmado (%1 confirmaciones) + + + This block was not received by any other nodes and will probably not be accepted! + Este bloque no ha sido recibido por otros nodos y probablemente no sea aceptado! + + + Generated but not accepted + Generado pero no aceptado + + + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + + Received with + Recibido con + + + Received from + Recibidos de + + + Sent to + Enviado a + + + Payment to yourself + Pago propio + + + Mined + Minado + + + (n/a) + (nd) + + + Transaction status. Hover over this field to show number of confirmations. + Estado de transacción. Pasa el ratón sobre este campo para ver el número de confirmaciones. + + + Date and time that the transaction was received. + Fecha y hora en que se recibió la transacción. + + + Type of transaction. + Tipo de transacción. + + + Destination address of transaction. + Dirección de destino de la transacción. + + + Amount removed from or added to balance. + Cantidad retirada o añadida al saldo. + + + + TransactionView + + All + Todo + + + Today + Hoy + + + This week + Esta semana + + + This month + Este mes + + + Last month + Mes pasado + + + This year + Este año + + + Range... + Rango... + + + Received with + Recibido con + + + Sent to + Enviado a + + + To yourself + A usted mismo + + + Mined + Minado + + + Other + Otra + + + Enter address or label to search + Introduzca una dirección o etiqueta que buscar + + + Min amount + Cantidad mínima + + + Copy address + Copiar dirección + + + Copy label + Copiar etiqueta + + + Copy amount + Copiar cuantía + + + Copy transaction ID + Copiar identificador de transacción + + + Edit label + Editar etiqueta + + + Show transaction details + Mostrar detalles de la transacción + + + Export Transaction History + Exportar historial de transacciones + + + Exporting Failed + Error exportando + + + There was an error trying to save the transaction history to %1. + Ha habido un error al intentar guardar la transacción con %1. + + + Exporting Successful + Exportación finalizada + + + The transaction history was successfully saved to %1. + La transacción ha sido guardada en %1. + + + Comma separated file (*.csv) + Archivos de columnas separadas por coma (*.csv) + + + Confirmed + Confirmado + + + Date + Fecha + + + Type + Tipo + + + Label + Etiqueta + + + Address + Dirección + + + Amount + Cantidad + + + ID + ID + + + Range: + Rango: + + + to + para + + + + WalletFrame + + No wallet has been loaded. + No se ha cargado ningún monedero + + + + WalletModel + + Send Coins + Enviar monedas + + + + WalletView + + &Export + &Exportar + + + Export the data in the current tab to a file + Exportar a un archivo los datos de esta pestaña + + + Backup Wallet + Respaldo de monedero + + + Wallet Data (*.dat) + Datos de monedero (*.dat) + + + Backup Failed + Ha fallado el respaldo + + + There was an error trying to save the wallet data to %1. + Ha habido un error al intentar guardar los datos del monedero en %1. + + + The wallet data was successfully saved to %1. + Los datos del monedero se han guardado con éxito en %1. + + + Backup Successful + Se ha completado con éxito la copia de respaldo + + + + bitcoin-core + + Usage: + Uso: + + + List commands + Muestra comandos + + + + Get help for a command + Recibir ayuda para un comando + + + + Options: + Opciones: + + + + Specify configuration file (default: myriadcoin.conf) + Especificar archivo de configuración (predeterminado: myriadcoin.conf) + + + + Specify pid file (default: myriadcoind.pid) + Especificar archivo pid (predeterminado: bitcoin.pid) + + + + Specify data directory + Especificar directorio para los datos + + + Listen for connections on <port> (default: 8333 or testnet: 18333) + Escuchar conexiones en <puerto> (predeterminado: 8333 o testnet: 18333) + + + Maintain at most <n> connections to peers (default: 125) + Mantener como máximo <n> conexiones a pares (predeterminado: 125) + + + Connect to a node to retrieve peer addresses, and disconnect + Conectar a un nodo para obtener direcciones de pares y desconectar + + + Specify your own public address + Especifique su propia dirección pública + + + Threshold for disconnecting misbehaving peers (default: 100) + Umbral para la desconexión de pares con mal comportamiento (predeterminado: 100) + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + Número de segundos en que se evita la reconexión de pares con mal comportamiento (predeterminado: 86400) + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + Ha ocurrido un error al configurar el puerto RPC %u para escucha en IPv4: %s + + + Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) + Escuchar conexiones JSON-RPC en <puerto> (predeterminado: 8332 o testnet:18332) + + + Accept command line and JSON-RPC commands + Aceptar comandos consola y JSON-RPC + + + + Myriadcoin Core RPC client version + + + + Run in the background as a daemon and accept commands + Ejecutar en segundo plano como daemon y aceptar comandos + + + + Use the test network + Usar la red de pruebas + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + Aceptar conexiones desde el exterior (predeterminado: 1 si no -proxy o -connect) + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=myriadcoinrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com + + %s, debe establecer un valor rpcpassword en el archivo de configuración: +%s +Se recomienda utilizar la siguiente contraseña aleatoria: +rpcuser=myriadcoinrpc +rpcpassword=%s +(no es necesario recordar esta contraseña) +El nombre de usuario y la contraseña DEBEN NO ser iguales. +Si el archivo no existe, créelo con permisos de archivo de solo lectura. +Se recomienda también establecer alertnotify para recibir notificaciones de problemas. +Por ejemplo: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + Cifradores aceptables (por defecto: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + Ha ocurrido un error al configurar el puerto RPC %u para escuchar mediante IPv6. Recurriendo a IPv4: %s + + + Bind to given address and always listen on it. Use [host]:port notation for IPv6 + Vincular a la dirección dada y escuchar siempre en ella. Utilice la notación [host]:port para IPv6 + + + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + Iniciar modo de prueba de regresión, el cuál utiliza una cadena especial en la cual los bloques pueden ser resueltos instantáneamente. Se utiliza para herramientas de prueba de regresión y desarrollo de aplicaciones. + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) + + + + Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + ¡Error: se ha rechazado la transacción! Esto puede ocurrir si ya se han gastado algunas de las monedas del monedero, como ocurriría si hubiera hecho una copia de wallet.dat y se hubieran gastado monedas a partir de la copia, con lo que no se habrían marcado aquí como gastadas. + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! + ¡Error: Esta transacción requiere una comisión de al menos %s debido a su monto, complejidad, o al uso de fondos recién recibidos! + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + Ejecutar comando cuando una transacción del monedero cambia (%s en cmd se remplazará por TxID) + + + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + + + + This is a pre-release test build - use at your own risk - do not use for mining or merchant applications + Esta es una versión de pre-prueba - utilícela bajo su propio riesgo. No la utilice para usos comerciales o de minería. + + + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + Usar distintos proxys SOCKS5 para comunicarse vía Tor de forma anónima (Por defecto: -proxy) + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + Aviso: ¡-paytxfee tiene un valor muy alto! Esta es la comisión que pagará si envía una transacción. + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. + Precaución: Por favor, ¡revise que la fecha y hora de su ordenador son correctas! Si su reloj está mal, Myriadcoin no funcionará correctamente. + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + Atención: ¡Parece que la red no está totalmente de acuerdo! Algunos mineros están presentando inconvenientes. + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + Atención: ¡Parece que no estamos completamente de acuerdo con nuestros pares! Podría necesitar una actualización, u otros nodos podrían necesitarla. + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + Aviso: ¡Error al leer wallet.dat! Todas las claves se han leído correctamente, pero podrían faltar o ser incorrectos los datos de transacciones o las entradas de la libreta de direcciones. + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + Aviso: ¡Recuperados datos de wallet.dat corrupto! El wallet.dat original se ha guardado como wallet.{timestamp}.bak en %s; si hubiera errores en su saldo o transacciones, deberá restaurar una copia de seguridad. + + + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + <category> puede ser: + + + Attempt to recover private keys from a corrupt wallet.dat + Intento de recuperar claves privadas de un wallet.dat corrupto + + + Myriadcoin Core Daemon + Proceso Bitcoin-QT + + + Block creation options: + Opciones de creación de bloques: + + + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + + Connect only to the specified node(s) + Conectar sólo a los nodos (o nodo) especificados + + + Connect through SOCKS proxy + Conectar a través de un proxy SOCKS + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + Conectar a JSON-RPC en <puerto> (predeterminado: 8332 o testnet: 18332) + + + Connection options: + + + + Corrupted block database detected + Corrupción de base de datos de bloques detectada. + + + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + + Discover own IP address (default: 1 when listening and no -externalip) + Descubrir dirección IP propia (predeterminado: 1 al escuchar sin -externalip) + + + Do not load the wallet and disable wallet RPC calls + + + + Do you want to rebuild the block database now? + ¿Quieres reconstruir la base de datos de bloques ahora? + + + Error initializing block database + Error al inicializar la base de datos de bloques + + + Error initializing wallet database environment %s! + Error al inicializar el entorno de la base de datos del monedero %s + + + Error loading block database + Error cargando base de datos de bloques + + + Error opening block database + Error al abrir base de datos de bloques. + + + Error: Disk space is low! + Error: ¡Espacio en disco bajo! + + + Error: Wallet locked, unable to create transaction! + Error: ¡El monedero está bloqueado; no se puede crear la transacción! + + + Error: system error: + Error: error de sistema: + + + Failed to listen on any port. Use -listen=0 if you want this. + Ha fallado la escucha en todos los puertos. Use -listen=0 si desea esto. + + + Failed to read block info + No se ha podido leer la información de bloque + + + Failed to read block + No se ha podido leer el bloque + + + Failed to sync block index + No se ha podido sincronizar el índice de bloques + + + Failed to write block index + No se ha podido escribir en el índice de bloques + + + Failed to write block info + No se ha podido escribir la información de bloques + + + Failed to write block + No se ha podido escribir el bloque + + + Failed to write file info + No se ha podido escribir la información de archivo + + + Failed to write to coin database + No se ha podido escribir en la base de datos de monedas + + + Failed to write transaction index + No se ha podido escribir en el índice de transacciones + + + Failed to write undo data + No se han podido escribir los datos de deshacer + + + Fee per kB to add to transactions you send + Donación por KB añadida a las transacciones que envíe + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + + Find peers using DNS lookup (default: 1 unless -connect) + Encontrar pares mediante búsqueda de DNS (predeterminado: 1 salvo con -connect) + + + Force safe mode (default: 0) + + + + Generate coins (default: 0) + Generar monedas (por defecto: 0) + + + How many blocks to check at startup (default: 288, 0 = all) + Cuántos bloques comprobar al iniciar (predeterminado: 288, 0 = todos) + + + If <category> is not supplied, output all debugging information. + Si no se proporciona <category>, mostrar toda la depuración + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + Incorrecto o bloque de génesis no encontrado. Datadir equivocada para la red? + + + Invalid -onion address: '%s' + Dirección -onion inválida: '%s' + + + Not enough file descriptors available. + No hay suficientes descriptores de archivo disponibles. + + + Prepend debug output with timestamp (default: 1) + Anteponer marca temporal a la información de depuración (por defecto: 1) + + + RPC client options: + Opciones para cliente RPC: + + + Rebuild block chain index from current blk000??.dat files + Reconstruir el índice de la cadena de bloques a partir de los archivos blk000??.dat actuales + + + Select SOCKS version for -proxy (4 or 5, default: 5) + Seleccionar version de SOCKS para -proxy (4 o 5, por defecto: 5) + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + Establecer tamaño máximo de bloque en bytes (por defecto: %d) + + + Set the number of threads to service RPC calls (default: 4) + Establecer el número de hilos para atender las llamadas RPC (predeterminado: 4) + + + Specify wallet file (within data directory) + Especificar archivo de monedero (dentro del directorio de datos) + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + Uso (desaconsejado, usar myriadcoin-cli) + + + Verifying blocks... + Verificando bloques... + + + Verifying wallet... + Verificando monedero... + + + Wait for RPC server to start + Espere a que se inicie el servidor RPC + + + Wallet %s resides outside data directory %s + El monedero %s se encuentra fuera del directorio de datos %s + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + Aviso: Argumento -debugnet anticuado, utilice -debug=net + + + You need to rebuild the database using -reindex to change -txindex + Usted necesita reconstruir la base de datos utilizando -reindex para cambiar -txindex + + + Imports blocks from external blk000??.dat file + Importa los bloques desde un archivo blk000??.dat externo + + + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + Ejecutar un comando cuando se reciba una alerta importante o cuando veamos un fork demasiado largo (%s en cmd se reemplazará por el mensaje) + + + Output debugging information (default: 0, supplying <category> is optional) + Mostrar depuración (por defecto: 0, proporcionar <category> es opcional) + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + Establecer tamaño máximo de las transacciones de alta prioridad/comisión baja en bytes (por defecto: %d) + + + Information + Información + + + Invalid amount for -minrelaytxfee=<amount>: '%s' + Inválido por el monto -minrelaytxfee=<amount>: '%s' + + + Invalid amount for -mintxfee=<amount>: '%s' + Inválido por el monto -mintxfee=<amount>: '%s' + + + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + + Maintain a full transaction index (default: 0) + Mantener índice de transacciones completo (predeterminado: 0) + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + Búfer de recepción máximo por conexión, <n>*1000 bytes (predeterminado: 5000) + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + Búfer de recepción máximo por conexión, , <n>*1000 bytes (predeterminado: 1000) + + + Only accept block chain matching built-in checkpoints (default: 1) + Aceptar solamente cadena de bloques que concuerde con los puntos de control internos (predeterminado: 1) + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + Conectarse solo a nodos de la red <net> (IPv4, IPv6 o Tor) + + + Print block on startup, if found in block index + + + + Print block tree on startup (default: 0) + + + + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + + + + SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + Opciones SSL: (ver la Myriadcoin Wiki para instrucciones de configuración SSL) + + + Send command to Myriadcoin Core + + + + Send trace/debug info to console instead of debug.log file + Enviar información de trazas/depuración a la consola en lugar de al archivo debug.log + + + Set minimum block size in bytes (default: 0) + Establecer tamaño mínimo de bloque en bytes (predeterminado: 0) + + + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + Reducir el archivo debug.log al iniciar el cliente (predeterminado: 1 sin -debug) + + + Signing transaction failed + Transacción falló + + + Specify connection timeout in milliseconds (default: 5000) + Especificar el tiempo máximo de conexión en milisegundos (predeterminado: 5000) + + + Start Myriadcoin Core Daemon + + + + System error: + Error de sistema: + + + Transaction amount too small + Monto de la transacción muy pequeño + + + Transaction amounts must be positive + Montos de transacciones deben ser positivos + + + Transaction too large + Transacción demasiado grande + + + Use UPnP to map the listening port (default: 0) + Usar UPnP para asignar el puerto de escucha (predeterminado: 0) + + + Use UPnP to map the listening port (default: 1 when listening) + Usar UPnP para asignar el puerto de escucha (predeterminado: 1 al escuchar) + + + Username for JSON-RPC connections + Nombre de usuario para las conexiones JSON-RPC + + + + Warning + Aviso + + + Warning: This version is obsolete, upgrade required! + Aviso: Esta versión es obsoleta, actualización necesaria! + + + Zapping all transactions from wallet... + + + + on startup + + + + version + versión + + + wallet.dat corrupt, salvage failed + wallet.dat corrupto. Ha fallado la recuperación. + + + Password for JSON-RPC connections + Contraseña para las conexiones JSON-RPC + + + + Allow JSON-RPC connections from specified IP address + Permitir conexiones JSON-RPC desde la dirección IP especificada + + + + Send commands to node running on <ip> (default: 127.0.0.1) + Enviar comando al nodo situado en <ip> (predeterminado: 127.0.0.1) + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + Ejecutar un comando cuando cambia el mejor bloque (%s en cmd se sustituye por el hash de bloque) + + + Upgrade wallet to latest format + Actualizar el monedero al último formato + + + Set key pool size to <n> (default: 100) + Ajustar el número de claves en reserva <n> (predeterminado: 100) + + + + Rescan the block chain for missing wallet transactions + Volver a examinar la cadena de bloques en busca de transacciones del monedero perdidas + + + Use OpenSSL (https) for JSON-RPC connections + Usar OpenSSL (https) para las conexiones JSON-RPC + + + + Server certificate file (default: server.cert) + Certificado del servidor (predeterminado: server.cert) + + + + Server private key (default: server.pem) + Clave privada del servidor (predeterminado: server.pem) + + + + This help message + Este mensaje de ayuda + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + No es posible conectar con %s en este sistema (bind ha dado el error %d, %s) + + + Allow DNS lookups for -addnode, -seednode and -connect + Permitir búsquedas DNS para -addnode, -seednode y -connect + + + Loading addresses... + Cargando direcciones... + + + Error loading wallet.dat: Wallet corrupted + Error al cargar wallet.dat: el monedero está dañado + + + Error loading wallet.dat: Wallet requires newer version of Myriadcoin + Error al cargar wallet.dat: El monedero requiere una versión más reciente de Myriadcoin + + + Wallet needed to be rewritten: restart Myriadcoin to complete + El monedero ha necesitado ser reescrito. Reinicie Myriadcoin para completar el proceso + + + Error loading wallet.dat + Error al cargar wallet.dat + + + Invalid -proxy address: '%s' + Dirección -proxy inválida: '%s' + + + Unknown network specified in -onlynet: '%s' + La red especificada en -onlynet '%s' es desconocida + + + Unknown -socks proxy version requested: %i + Solicitada versión de proxy -socks desconocida: %i + + + Cannot resolve -bind address: '%s' + No se puede resolver la dirección de -bind: '%s' + + + Cannot resolve -externalip address: '%s' + No se puede resolver la dirección de -externalip: '%s' + + + Invalid amount for -paytxfee=<amount>: '%s' + Cantidad inválida para -paytxfee=<amount>: '%s' + + + Invalid amount + Cuantía no válida + + + Insufficient funds + Fondos insuficientes + + + Loading block index... + Cargando el índice de bloques... + + + Add a node to connect to and attempt to keep the connection open + Añadir un nodo al que conectarse y tratar de mantener la conexión abierta + + + Loading wallet... + Cargando monedero... + + + Cannot downgrade wallet + No se puede rebajar el monedero + + + Cannot write default address + No se puede escribir la dirección predeterminada + + + Rescanning... + Reexplorando... + + + Done loading + Generado pero no aceptado + + + To use the %s option + Para utilizar la opción %s + + + Error + Error + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + Tiene que establecer rpcpassword=<contraseña> en el fichero de configuración: ⏎ +%s ⏎ +Si el archivo no existe, créelo con permiso de lectura solamente del propietario. + + + \ No newline at end of file diff --git a/src/qt/locale/bitcoin_es_MX.ts b/src/qt/locale/bitcoin_es_MX.ts new file mode 100644 index 00000000..3e0fb9a1 --- /dev/null +++ b/src/qt/locale/bitcoin_es_MX.ts @@ -0,0 +1,3368 @@ + + + AboutDialog + + About Myriadcoin Core + + + + <b>Myriadcoin Core</b> version + + + + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. + + + + Copyright + + + + The Myriadcoin Core developers + El nucleo de Myriadcoin de desarrolladores + + + (%1-bit) + + + + + AddressBookPage + + Double-click to edit address or label + Haga doble clic para editar el domicilio o la etiqueta + + + Create a new address + Crear una dirección nueva + + + &New + + + + Copy the currently selected address to the system clipboard + Copiar el domicilio seleccionado al portapapeles del sistema + + + &Copy + + + + C&lose + + + + &Copy Address + + + + Delete the currently selected address from the list + + + + Export the data in the current tab to a file + + + + &Export + + + + &Delete + &Borrar + + + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + + Copy &Label + + + + &Edit + + + + Export Address List + + + + Comma separated file (*.csv) + Archivo separado por comas (*.CSV) + + + Exporting Failed + Fallo en la exportación + + + There was an error trying to save the address list to %1. + Ocurrio un error al intentar guardar la lista de direccione en %1 + + + + AddressTableModel + + Label + Etiqueta + + + Address + Domicilio + + + (no label) + (sin etiqueta) + + + + AskPassphraseDialog + + Passphrase Dialog + + + + Enter passphrase + Ingrese la contraseña + + + New passphrase + Nueva contraseña + + + Repeat new passphrase + Repita la nueva contraseña + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Ingrese la nueva contraseña a la cartera<br/>Por favor use una contraseña de<b>10 o más caracteres aleatorios</b> o <b>ocho o más palabras</b>. + + + Encrypt wallet + Cartera encriptada. + + + This operation needs your wallet passphrase to unlock the wallet. + Esta operación necesita la contraseña de su cartera para desbloquear su cartera. + + + Unlock wallet + Desbloquear cartera. + + + This operation needs your wallet passphrase to decrypt the wallet. + Esta operación necesita la contraseña de su cartera para desencriptar su cartera. + + + Decrypt wallet + Desencriptar la cartera + + + Change passphrase + Cambiar contraseña + + + Enter the old and new passphrase to the wallet. + Ingrese la antugüa y nueva contraseña de la cartera + + + Confirm wallet encryption + Confirmar la encriptación de cartera + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! + + + + Are you sure you wish to encrypt your wallet? + + + + 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. + + + + Warning: The Caps Lock key is on! + + + + Wallet encrypted + Cartera encriptada + + + Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. + + + + Wallet encryption failed + La encriptación de la cartera falló + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + La encriptación de la cartera falló debido a un error interno. Su cartera no fue encriptada. + + + The supplied passphrases do not match. + Las contraseñas dadas no coinciden + + + Wallet unlock failed + El desbloqueo de la cartera Fallo + + + The passphrase entered for the wallet decryption was incorrect. + La contraseña ingresada para la des encriptación de la cartera es incorrecto + + + Wallet decryption failed + La desencriptación de la cartera fallo + + + Wallet passphrase was successfully changed. + + + + + BitcoinGUI + + Sign &message... + + + + Synchronizing with network... + Sincronizando con la red... + + + &Overview + &Vista previa + + + Node + + + + Show general overview of wallet + Mostrar la vista previa general de la cartera + + + &Transactions + &Transacciones + + + Browse transaction history + Explorar el historial de transacciones + + + E&xit + S&alir + + + Quit application + Salir de la aplicación + + + Show information about Myriadcoin + Mostrar información acerca de Myriadcoin + + + About &Qt + + + + Show information about Qt + + + + &Options... + &Opciones + + + &Encrypt Wallet... + + + + &Backup Wallet... + + + + &Change Passphrase... + + + + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + + Importing blocks from disk... + + + + Reindexing blocks on disk... + + + + Send coins to a Myriadcoin address + + + + Modify configuration options for Myriadcoin + + + + Backup wallet to another location + + + + Change the passphrase used for wallet encryption + Cambiar la contraseña usada para la encriptación de la cartera + + + &Debug window + + + + Open debugging and diagnostic console + + + + &Verify message... + + + + Myriadcoin + + + + Wallet + + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your Myriadcoin addresses to prove you own them + + + + Verify messages to ensure they were signed with specified Myriadcoin addresses + + + + &File + &Archivo + + + &Settings + &Configuraciones + + + &Help + &Ayuda + + + Tabs toolbar + Pestañas + + + [testnet] + + + + Myriadcoin Core + nucleo Myriadcoin + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + opciones de la &Linea de comandos + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + Mostrar mensaje de ayuda del nucleo de Myriadcoin para optener una lista con los posibles comandos de Myriadcoin + + + Myriadcoin client + + + + %n active connection(s) to Myriadcoin network + %n Activar conexión a la red de Myriadcoin%n Activar conexiones a la red de Myriadcoin + + + No block source available... + + + + Processed %1 of %2 (estimated) blocks of transaction history. + + + + Processed %1 blocks of transaction history. + + + + %n hour(s) + + + + %n day(s) + + + + %n week(s) + + + + %1 and %2 + + + + %n year(s) + + + + %1 behind + + + + Last received block was generated %1 ago. + + + + Transactions after this will not yet be visible. + + + + Error + + + + Warning + + + + Information + + + + Up to date + Actualizado al dia + + + Catching up... + Resiviendo... + + + Sent transaction + Enviar Transacción + + + Incoming transaction + Transacción entrante + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + La cartera esta <b>encriptada</b> y <b>desbloqueada</b> actualmente + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + La cartera esta <b>encriptada</b> y <b>bloqueada</b> actualmente + + + A fatal error occurred. Myriadcoin can no longer continue safely and will quit. + + + + + ClientModel + + Network Alert + + + + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + + + + Bytes: + Bytes: + + + Amount: + Monto: + + + Priority: + Prioridad: + + + Fee: + Cuota: + + + Low Output: + + + + After Fee: + + + + Change: + + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + Monto + + + Address + Domicilio + + + Date + Fecha + + + Confirmations + + + + Confirmed + Confirmado + + + Priority + + + + Copy address + Copiar dirección + + + Copy label + Copiar capa + + + Copy amount + copiar monto + + + Copy transaction ID + + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + copiar cantidad + + + Copy fee + copiar cuota + + + Copy after fee + copiar despues de cuota + + + Copy bytes + copiar bytes + + + Copy priority + copiar prioridad + + + Copy low output + + + + Copy change + copiar cambio + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + + + + Dust + + + + yes + + + + no + + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + (sin etiqueta) + + + change from %1 (%2) + + + + (change) + + + + + EditAddressDialog + + Edit Address + Editar dirección + + + &Label + &Etiqueta + + + The label associated with this address list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + + + + &Address + &Dirección + + + New receiving address + Nueva dirección de entregas + + + New sending address + Nueva dirección de entregas + + + Edit receiving address + Editar dirección de entregas + + + Edit sending address + Editar dirección de envios + + + The entered address "%1" is already in the address book. + El domicilio ingresado "%1" ya existe en la libreta de direcciones + + + The entered address "%1" is not a valid Myriadcoin address. + + + + Could not unlock wallet. + No se puede desbloquear la cartera + + + New key generation failed. + La generación de la nueva clave fallo + + + + FreespaceChecker + + A new data directory will be created. + + + + name + + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + Opciones de lineas de comando del nucleo de Myriadcoin + + + Myriadcoin Core + nucleo Myriadcoin + + + version + Versión + + + Usage: + Uso: + + + command-line options + Opciones de comando de lineas + + + UI options + Opciones de interfaz + + + Set language, for example "de_DE" (default: system locale) + Definir idioma, por ejemplo "de_DE" (por defecto: Sistema local) + + + Start minimized + Iniciar minimizado + + + Set SSL root certificates for payment request (default: -system-) + + + + Show splash screen on startup (default: 1) + Mostrar pantalla de arraque al iniciar (por defecto: 1) + + + Choose data directory on startup (default: 0) + Escojer el directorio de información al iniciar (por defecto : 0) + + + + Intro + + Welcome + + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + + + + Error: Specified data directory "%1" can not be created. + + + + Error + + + + GB of free space available + + + + (of %1GB needed) + + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open + + + + + OptionsDialog + + Options + Opciones + + + &Main + + + + Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. + + + + Pay transaction &fee + + + + Automatically start Myriadcoin after logging in to the system. + + + + &Start Myriadcoin on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + Activar las opciones de linea de comando que sobre escriben las siguientes opciones: + + + Reset all client options to default. + + + + &Reset Options + + + + &Network + + + + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. + + + + Map port using &UPnP + + + + Proxy &IP: + + + + &Port: + + + + Port of the proxy (e.g. 9050) + + + + SOCKS &Version: + + + + SOCKS version of the proxy (e.g. 5) + + + + &Window + + + + Show only a tray icon after minimizing the window. + + + + &Minimize to the tray instead of the taskbar + + + + Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. + + + + M&inimize on close + + + + &Display + + + + User Interface &language: + + + + The user interface language can be set here. This setting will take effect after restarting Myriadcoin. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show Myriadcoin addresses in the transaction list or not. + + + + &Display addresses in transaction list + + + + Whether to show coin control features or not. + + + + &OK + + + + &Cancel + + + + default + + + + none + + + + Confirm options reset + + + + Client restart required to activate changes. + + + + Client will be shutdown, do you want to proceed? + + + + This change would require a client restart. + + + + The supplied proxy address is invalid. + + + + + OverviewPage + + Form + Formulario + + + The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. + + + + Wallet + + + + Available: + + + + Your current spendable balance + + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + + + + Immature: + + + + Mined balance that has not yet matured + + + + Total: + + + + Your current total balance + + + + <b>Recent transactions</b> + <b>Transacciones recientes</b> + + + out of sync + + + + + PaymentServer + + URI handling + + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start myriadcoin: click-to-pay handler + + + + Net manager warning + advertencia del administrador de red. + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + Tu active proxy no soporta SOCKS5, el cual es requerido para solicitud de pago via proxy. + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + + + + Network request error + + + + + QObject + + Myriadcoin + + + + Error: Specified data directory "%1" does not exist. + + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + + + + Error: Invalid combination of -regtest and -testnet. + + + + Myriadcoin Core didn't yet exit safely... + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Ingrese una direccion Myriadcoin (ejem. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + + + + &Copy Image + + + + Save QR Code + + + + PNG Image (*.png) + + + + + RPCConsole + + Client name + + + + N/A + + + + Client version + + + + &Information + + + + Debug window + + + + General + + + + Using OpenSSL version + + + + Startup time + + + + Network + + + + Name + + + + Number of connections + + + + Block chain + + + + Current number of blocks + + + + Estimated total blocks + + + + Last block time + + + + &Open + + + + &Console + + + + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + + Build date + + + + Debug log file + + + + Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the Myriadcoin RPC console. + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + Type <b>help</b> for an overview of available commands. + + + + %1 B + + + + %1 KB + + + + %1 MB + + + + %1 GB + + + + %1 m + + + + %1 h + + + + %1 h %2 m + + + + + ReceiveCoinsDialog + + &Amount: + + + + &Label: + &Etiqueta + + + &Message: + + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + Mensaje opcional para agregar a la solicitud de pago, el cual será mostrado cuando la solicitud este abierta. Nota: El mensaje no se manda con el pago a travéz de la red de Myriadcoin. + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + Use este formulario para la solicitud de pagos. Todos los campos son <b>opcionales</b> + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + Monto opcional a solicitar. Dejarlo vacion o en cero no solicita un monto especifico. + + + Clear all fields of the form. + + + + Clear + + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + + + + Remove the selected entries from the list + + + + Remove + + + + Copy label + Copiar capa + + + Copy message + + + + Copy amount + copiar monto + + + + ReceiveRequestDialog + + QR Code + + + + Copy &URI + + + + Copy &Address + + + + &Save Image... + + + + Request payment to %1 + + + + Payment information + + + + URI + + + + Address + Domicilio + + + Amount + Monto + + + Label + Etiqueta + + + Message + + + + Resulting URI too long, try to reduce the text for label / message. + + + + Error encoding URI into QR Code. + + + + + RecentRequestsTableModel + + Date + Fecha + + + Label + Etiqueta + + + Message + + + + Amount + Monto + + + (no label) + (sin etiqueta) + + + (no message) + + + + (no amount) + + + + + SendCoinsDialog + + Send Coins + Mandar monedas + + + Coin Control Features + + + + Inputs... + + + + automatically selected + + + + Insufficient funds! + + + + Quantity: + + + + Bytes: + Bytes: + + + Amount: + Monto: + + + Priority: + Prioridad: + + + Fee: + Cuota: + + + Low Output: + + + + After Fee: + + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + + Send to multiple recipients at once + Enviar a múltiples receptores a la vez + + + Add &Recipient + + + + Clear all fields of the form. + + + + Clear &All + + + + Balance: + Saldo: + + + Confirm the send action + Confirme la acción de enviar + + + S&end + + + + Confirm send coins + Confirme para mandar monedas + + + %1 to %2 + + + + Copy quantity + copiar cantidad + + + Copy amount + copiar monto + + + Copy fee + copiar cuota + + + Copy after fee + copiar despues de cuota + + + Copy bytes + copiar bytes + + + Copy priority + copiar prioridad + + + Copy low output + + + + Copy change + copiar cambio + + + Total Amount %1 (= %2) + Monto total %1(=%2) + + + or + o + + + The recipient address is not valid, please recheck. + + + + The amount to pay must be larger than 0. + El monto a pagar debe ser mayor a 0 + + + The amount exceeds your balance. + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + Duplicate address found, can only send to each address once per send operation. + + + + Transaction creation failed! + ¡La creación de transacion falló! + + + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + ¡La transación fue rechazada! Esto puede ocurrir si algunas de tus monedas en tu cartera han sido gastadas, al igual que si usas una cartera copiada y la monedas fueron gastadas en la copia pero no se marcaron como gastadas. + + + Warning: Invalid Myriadcoin address + Advertencia: Dirección de Myriadcoin invalida + + + (no label) + (sin etiqueta) + + + Warning: Unknown change address + Advertencia: Cambio de dirección desconocido + + + Are you sure you want to send? + + + + added as transaction fee + + + + Payment request expired + + + + Invalid payment address %1 + + + + + SendCoinsEntry + + A&mount: + M&onto + + + Pay &To: + Pagar &a: + + + The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Enter a label for this address to add it to your address book + Ingrese una etiqueta para esta dirección para agregarlo en su libreta de direcciones. + + + &Label: + &Etiqueta + + + Choose previously used address + + + + This is a normal payment. + Este es un pago normal + + + Alt+A + Alt+A + + + Paste address from clipboard + Pegar dirección del portapapeles + + + Alt+P + Alt+P + + + Remove this entry + Quitar esta entrada + + + Message: + Mensaje: + + + This is a verified payment request. + Esta es una verificación de solicituda de pago. + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + Esta es una solicitud de pago no verificada. + + + Pay To: + Pago para: + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + Apagando el nucleo de Myriadcoin... + + + Do not shut down the computer until this window disappears. + No apague su computadora hasta que esta ventana desaparesca. + + + + SignVerifyMessageDialog + + Signatures - Sign / Verify a Message + + + + &Sign Message + + + + You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. + + + + The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Choose previously used address + + + + Alt+A + Alt+A + + + Paste address from clipboard + Pegar dirección del portapapeles + + + Alt+P + Alt+P + + + Enter the message you want to sign here + + + + Signature + + + + Copy the current signature to the system clipboard + + + + Sign the message to prove you own this Myriadcoin address + + + + Sign &Message + + + + Reset all sign message fields + + + + Clear &All + + + + &Verify Message + + + + Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. + + + + The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Verify the message to ensure it was signed with the specified Myriadcoin address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Ingrese una direccion Myriadcoin (ejem. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + Click "Sign Message" to generate signature + + + + The entered address is invalid. + + + + Please check the address and try again. + + + + The entered address does not refer to a key. + + + + Wallet unlock was cancelled. + + + + Private key for the entered address is not available. + + + + Message signing failed. + + + + Message signed. + + + + The signature could not be decoded. + + + + Please check the signature and try again. + + + + The signature did not match the message digest. + + + + Message verification failed. + + + + Message verified. + + + + + SplashScreen + + Myriadcoin Core + nucleo Myriadcoin + + + The Myriadcoin Core developers + El nucleo de Myriadcoin de desarrolladores + + + [testnet] + + + + + TrafficGraphWidget + + KB/s + + + + + TransactionDesc + + Open until %1 + Abrir hasta %1 + + + conflicted + + + + %1/offline + + + + %1/unconfirmed + %1/No confirmado + + + %1 confirmations + %1 confirmaciones + + + Status + + + + , broadcast through %n node(s) + + + + Date + Fecha + + + Source + + + + Generated + + + + From + + + + To + + + + own address + + + + label + + + + Credit + + + + matures in %n more block(s) + + + + not accepted + + + + Debit + + + + Transaction fee + + + + Net amount + + + + Message + + + + Comment + + + + Transaction ID + + + + Merchant + + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + Debug information + + + + Transaction + + + + Inputs + + + + Amount + Monto + + + true + + + + false + + + + , has not been successfully broadcast yet + , no ha sido transmitido aun + + + Open for %n more block(s) + + + + unknown + desconocido + + + + TransactionDescDialog + + Transaction details + Detalles de la transacción + + + This pane shows a detailed description of the transaction + Este panel muestras una descripción detallada de la transacción + + + + TransactionTableModel + + Date + Fecha + + + Type + Tipo + + + Address + Domicilio + + + Amount + Monto + + + Immature (%1 confirmations, will be available after %2) + + + + Open for %n more block(s) + + + + Open until %1 + Abrir hasta %1 + + + Confirmed (%1 confirmations) + Confimado (%1 confirmaciones) + + + This block was not received by any other nodes and will probably not be accepted! + Este bloque no fue recibido por ningun nodo y probablemente no fue aceptado ! + + + Generated but not accepted + Generado pero no aprovado + + + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + + Received with + Recivido con + + + Received from + + + + Sent to + Enviar a + + + Payment to yourself + Pagar a si mismo + + + Mined + Minado + + + (n/a) + (n/a) + + + Transaction status. Hover over this field to show number of confirmations. + + + + Date and time that the transaction was received. + Fecha y hora en que la transacción fue recibida + + + Type of transaction. + Escriba una transacción + + + Destination address of transaction. + Direccion del destinatario de la transacción + + + Amount removed from or added to balance. + Cantidad removida del saldo o agregada + + + + TransactionView + + All + Todo + + + Today + Hoy + + + This week + Esta semana + + + This month + Este mes + + + Last month + El mes pasado + + + This year + Este año + + + Range... + + + + Received with + Recivido con + + + Sent to + Enviar a + + + To yourself + Para ti mismo + + + Mined + Minado + + + Other + Otro + + + Enter address or label to search + Ingrese dirección o capa a buscar + + + Min amount + Monto minimo + + + Copy address + Copiar dirección + + + Copy label + Copiar capa + + + Copy amount + copiar monto + + + Copy transaction ID + + + + Edit label + Editar capa + + + Show transaction details + + + + Export Transaction History + Exportar el historial de transacción + + + Exporting Failed + Fallo en la exportación + + + There was an error trying to save the transaction history to %1. + Ocurrio un error intentando guardar el historial de transaciones a %1 + + + Exporting Successful + Exportacion satisfactoria + + + The transaction history was successfully saved to %1. + el historial de transaciones ha sido guardado exitosamente en 1% + + + Comma separated file (*.csv) + Arhchivo separado por comas (*.CSV) + + + Confirmed + Confirmado + + + Date + Fecha + + + Type + Tipo + + + Label + Etiqueta + + + Address + Domicilio + + + Amount + Monto + + + ID + ID + + + Range: + + + + to + Para + + + + WalletFrame + + No wallet has been loaded. + No se há cargado la cartera. + + + + WalletModel + + Send Coins + Mandar monedas + + + + WalletView + + &Export + + + + Export the data in the current tab to a file + + + + Backup Wallet + + + + Wallet Data (*.dat) + + + + Backup Failed + + + + There was an error trying to save the wallet data to %1. + Ocurrio un error tratando de guardar la información de la cartera %1 + + + The wallet data was successfully saved to %1. + La información de la cartera fué guardada exitosamente a 1% + + + Backup Successful + + + + + bitcoin-core + + Usage: + Uso: + + + List commands + Lista de comandos + + + Get help for a command + + + + Options: + + + + Specify configuration file (default: myriadcoin.conf) + + + + Specify pid file (default: myriadcoind.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 8333 or testnet: 18333) + + + + Maintain at most <n> connections to peers (default: 125) + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + Specify your own public address + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) + + + + Accept command line and JSON-RPC commands + + + + Myriadcoin Core RPC client version + + + + Run in the background as a daemon and accept commands + + + + Use the test network + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=myriadcoinrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + Bind to given address and always listen on it. Use [host]:port notation for IPv6 + + + + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) + + + + Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + + + + This is a pre-release test build - use at your own risk - do not use for mining or merchant applications + + + + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. + + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + <categoria> puede ser: + + + Attempt to recover private keys from a corrupt wallet.dat + + + + Myriadcoin Core Daemon + + + + Block creation options: + + + + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + + Connect only to the specified node(s) + + + + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + + Corrupted block database detected + + + + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + Do not load the wallet and disable wallet RPC calls + + + + Do you want to rebuild the block database now? + + + + Error initializing block database + + + + Error initializing wallet database environment %s! + + + + Error loading block database + + + + Error opening block database + + + + Error: Disk space is low! + + + + Error: Wallet locked, unable to create transaction! + + + + Error: system error: + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + Failed to read block info + + + + Failed to read block + + + + Failed to sync block index + + + + Failed to write block index + + + + Failed to write block info + + + + Failed to write block + + + + Failed to write file info + + + + Failed to write to coin database + + + + Failed to write transaction index + + + + Failed to write undo data + + + + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + + Find peers using DNS lookup (default: 1 unless -connect) + + + + Force safe mode (default: 0) + + + + Generate coins (default: 0) + + + + How many blocks to check at startup (default: 288, 0 = all) + + + + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' + + + + Not enough file descriptors available. + + + + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + + Rebuild block chain index from current blk000??.dat files + + + + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + + Set the number of threads to service RPC calls (default: 4) + + + + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + + Verifying blocks... + + + + Verifying wallet... + + + + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + Opciones de cartera: + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + + + + Imports blocks from external blk000??.dat file + + + + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + + + + Information + + + + Invalid amount for -minrelaytxfee=<amount>: '%s' + + + + Invalid amount for -mintxfee=<amount>: '%s' + + + + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + + Maintain a full transaction index (default: 0) + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + Only accept block chain matching built-in checkpoints (default: 1) + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + Print block on startup, if found in block index + + + + Print block tree on startup (default: 0) + + + + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + + + + SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + Send command to Myriadcoin Core + + + + Send trace/debug info to console instead of debug.log file + + + + Set minimum block size in bytes (default: 0) + + + + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + Signing transaction failed + + + + Specify connection timeout in milliseconds (default: 5000) + + + + Start Myriadcoin Core Daemon + + + + System error: + + + + Transaction amount too small + + + + Transaction amounts must be positive + + + + Transaction too large + + + + Use UPnP to map the listening port (default: 0) + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + Username for JSON-RPC connections + + + + Warning + + + + Warning: This version is obsolete, upgrade required! + + + + Zapping all transactions from wallet... + + + + on startup + + + + version + Versión + + + wallet.dat corrupt, salvage failed + + + + Password for JSON-RPC connections + + + + Allow JSON-RPC connections from specified IP address + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + Upgrade wallet to latest format + + + + Set key pool size to <n> (default: 100) + + + + Rescan the block chain for missing wallet transactions + + + + Use OpenSSL (https) for JSON-RPC connections + + + + Server certificate file (default: server.cert) + + + + Server private key (default: server.pem) + + + + This help message + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + Loading addresses... + Cargando direcciones... + + + Error loading wallet.dat: Wallet corrupted + + + + Error loading wallet.dat: Wallet requires newer version of Myriadcoin + + + + Wallet needed to be rewritten: restart Myriadcoin to complete + + + + Error loading wallet.dat + + + + Invalid -proxy address: '%s' + + + + Unknown network specified in -onlynet: '%s' + + + + Unknown -socks proxy version requested: %i + + + + Cannot resolve -bind address: '%s' + + + + Cannot resolve -externalip address: '%s' + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + Invalid amount + + + + Insufficient funds + + + + Loading block index... + Cargando indice de bloques... + + + Add a node to connect to and attempt to keep the connection open + + + + Loading wallet... + Cargando billetera... + + + Cannot downgrade wallet + + + + Cannot write default address + + + + Rescanning... + + + + Done loading + Carga completa + + + To use the %s option + + + + Error + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + \ No newline at end of file diff --git a/src/qt/locale/bitcoin_es_UY.ts b/src/qt/locale/bitcoin_es_UY.ts new file mode 100644 index 00000000..3d60c7e3 --- /dev/null +++ b/src/qt/locale/bitcoin_es_UY.ts @@ -0,0 +1,3368 @@ + + + AboutDialog + + About Myriadcoin Core + + + + <b>Myriadcoin Core</b> version + + + + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. + + + + Copyright + + + + The Myriadcoin Core developers + + + + (%1-bit) + + + + + AddressBookPage + + Double-click to edit address or label + Doble clic para editar etiqueta o dirección + + + Create a new address + Crear una nueva dirección + + + &New + + + + Copy the currently selected address to the system clipboard + Copia la dirección seleccionada al portapapeles del sistema + + + &Copy + + + + C&lose + + + + &Copy Address + + + + Delete the currently selected address from the list + + + + Export the data in the current tab to a file + + + + &Export + + + + &Delete + &Borrar + + + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + + Copy &Label + + + + &Edit + + + + Export Address List + + + + Comma separated file (*.csv) + Archivos separados por coma (*.csv) + + + Exporting Failed + + + + There was an error trying to save the address list to %1. + + + + + AddressTableModel + + Label + Etiqueta + + + Address + Direccion + + + (no label) + (Sin etiqueta) + + + + AskPassphraseDialog + + Passphrase Dialog + + + + Enter passphrase + Escriba la contraseña + + + New passphrase + Nueva contraseña + + + Repeat new passphrase + Repetir nueva contraseña + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Introduzca la nueva contraseña para el monedero. <br/> Utilice una contraseña de <b> 10 o más caracteres al azar </ b>, o <b> ocho o más palabras </ b>. + + + Encrypt wallet + Monedero cifrado + + + This operation needs your wallet passphrase to unlock the wallet. + Esta operacion necesita la contraseña del monedero para desbloquear el mismo + + + Unlock wallet + Monedero destrabado + + + This operation needs your wallet passphrase to decrypt the wallet. + Esta operacion necesita la contraseña del monedero para descifrar el mismo + + + Decrypt wallet + Monedero descifrado + + + Change passphrase + Cambiar contraseña + + + Enter the old and new passphrase to the wallet. + Ingrese la contraseña anterior y la nueva de acceso a el monedero + + + Confirm wallet encryption + Confirme el cifrado del monedero + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! + + + + Are you sure you wish to encrypt your wallet? + + + + 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. + + + + Warning: The Caps Lock key is on! + + + + Wallet encrypted + Monedero cifrado + + + Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. + + + + Wallet encryption failed + Fallo en el cifrado del monedero + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Fallo en el cifrado del monedero a causa de un error interno. Su monedero no esta cifrado + + + The supplied passphrases do not match. + Las contraseñas suministradas no coinciden. + + + Wallet unlock failed + Fallo en el desbloqueo del mondero + + + The passphrase entered for the wallet decryption was incorrect. + La contraseña introducida para el descifrado del monedero es incorrecta. + + + Wallet decryption failed + Fallo en el descifrado del monedero + + + Wallet passphrase was successfully changed. + + + + + BitcoinGUI + + Sign &message... + + + + Synchronizing with network... + Sincronizando con la red... + + + &Overview + &Vista previa + + + Node + + + + Show general overview of wallet + Mostrar descripción general del monedero + + + &Transactions + &transaciones + + + Browse transaction history + Buscar en el historial de transacciones + + + E&xit + + + + Quit application + Salir de la aplicacion + + + Show information about Myriadcoin + Mostrar informacion sobre Myriadcoin + + + About &Qt + + + + Show information about Qt + + + + &Options... + &Opciones... + + + &Encrypt Wallet... + + + + &Backup Wallet... + + + + &Change Passphrase... + + + + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + + Importing blocks from disk... + + + + Reindexing blocks on disk... + + + + Send coins to a Myriadcoin address + + + + Modify configuration options for Myriadcoin + + + + Backup wallet to another location + + + + Change the passphrase used for wallet encryption + Cambie la clave utilizada para el cifrado del monedero + + + &Debug window + + + + Open debugging and diagnostic console + + + + &Verify message... + + + + Myriadcoin + + + + Wallet + + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your Myriadcoin addresses to prove you own them + + + + Verify messages to ensure they were signed with specified Myriadcoin addresses + + + + &File + &Archivo + + + &Settings + &Configuracion + + + &Help + &Ayuda + + + Tabs toolbar + Barra de herramientas + + + [testnet] + [prueba_de_red] + + + Myriadcoin Core + + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + + Myriadcoin client + + + + %n active connection(s) to Myriadcoin network + %n conexión activa a la red Myriadcoin %n conexiones activas a la red Myriadcoin + + + No block source available... + + + + Processed %1 of %2 (estimated) blocks of transaction history. + + + + Processed %1 blocks of transaction history. + + + + %n hour(s) + + + + %n day(s) + + + + %n week(s) + + + + %1 and %2 + + + + %n year(s) + + + + %1 behind + + + + Last received block was generated %1 ago. + + + + Transactions after this will not yet be visible. + + + + Error + + + + Warning + + + + Information + + + + Up to date + A la fecha + + + Catching up... + Ponerse al dia... + + + Sent transaction + Transaccion enviada + + + Incoming transaction + Transacción entrante + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + El Monedero esta <b>cifrado</b> y actualmente <b>desbloqueado</b> + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + El Monedero esta <b>cifrado</b> y actualmente <b>bloqueado</b> + + + A fatal error occurred. Myriadcoin can no longer continue safely and will quit. + + + + + ClientModel + + Network Alert + + + + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + + + + Address + Direccion + + + Date + Fecha + + + Confirmations + + + + Confirmed + + + + Priority + + + + Copy address + + + + Copy label + + + + Copy amount + + + + Copy transaction ID + + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + + + + Dust + + + + yes + + + + no + + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + (Sin etiqueta) + + + change from %1 (%2) + + + + (change) + + + + + EditAddressDialog + + Edit Address + Editar dirección + + + &Label + &Etiqueta + + + The label associated with this address list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + + + + &Address + &Direccion + + + New receiving address + Nueva dirección de recepción + + + New sending address + Nueva dirección de envío + + + Edit receiving address + Editar dirección de recepcion + + + Edit sending address + Editar dirección de envío + + + The entered address "%1" is already in the address book. + La dirección introducida "% 1" ya está en la libreta de direcciones. + + + The entered address "%1" is not a valid Myriadcoin address. + + + + Could not unlock wallet. + No se puede abrir el monedero. + + + New key generation failed. + Fallo en la nueva clave generada. + + + + FreespaceChecker + + A new data directory will be created. + + + + name + + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core + + + + version + + + + Usage: + + + + command-line options + + + + UI options + + + + Set language, for example "de_DE" (default: system locale) + + + + Start minimized + + + + Set SSL root certificates for payment request (default: -system-) + + + + Show splash screen on startup (default: 1) + + + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + + + + Error: Specified data directory "%1" can not be created. + + + + Error + + + + GB of free space available + + + + (of %1GB needed) + + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open + + + + + OptionsDialog + + Options + Opciones + + + &Main + + + + Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. + + + + Pay transaction &fee + + + + Automatically start Myriadcoin after logging in to the system. + + + + &Start Myriadcoin on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + + Reset all client options to default. + + + + &Reset Options + + + + &Network + + + + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. + + + + Map port using &UPnP + + + + Proxy &IP: + + + + &Port: + + + + Port of the proxy (e.g. 9050) + + + + SOCKS &Version: + + + + SOCKS version of the proxy (e.g. 5) + + + + &Window + + + + Show only a tray icon after minimizing the window. + + + + &Minimize to the tray instead of the taskbar + + + + Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. + + + + M&inimize on close + + + + &Display + + + + User Interface &language: + + + + The user interface language can be set here. This setting will take effect after restarting Myriadcoin. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show Myriadcoin addresses in the transaction list or not. + + + + &Display addresses in transaction list + + + + Whether to show coin control features or not. + + + + &OK + + + + &Cancel + + + + default + + + + none + + + + Confirm options reset + + + + Client restart required to activate changes. + + + + Client will be shutdown, do you want to proceed? + + + + This change would require a client restart. + + + + The supplied proxy address is invalid. + + + + + OverviewPage + + Form + Formulario + + + The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. + + + + Wallet + + + + Available: + + + + Your current spendable balance + + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + + + + Immature: + + + + Mined balance that has not yet matured + + + + Total: + + + + Your current total balance + + + + <b>Recent transactions</b> + <b>Transacciones recientes</b> + + + out of sync + + + + + PaymentServer + + URI handling + + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start myriadcoin: click-to-pay handler + + + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + + + + Network request error + + + + + QObject + + Myriadcoin + + + + Error: Specified data directory "%1" does not exist. + + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + + + + Error: Invalid combination of -regtest and -testnet. + + + + Myriadcoin Core didn't yet exit safely... + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + + QRImageWidget + + &Save Image... + + + + &Copy Image + + + + Save QR Code + + + + PNG Image (*.png) + + + + + RPCConsole + + Client name + + + + N/A + + + + Client version + + + + &Information + + + + Debug window + + + + General + + + + Using OpenSSL version + + + + Startup time + + + + Network + + + + Name + + + + Number of connections + + + + Block chain + + + + Current number of blocks + + + + Estimated total blocks + + + + Last block time + + + + &Open + + + + &Console + + + + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + + Build date + + + + Debug log file + + + + Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the Myriadcoin RPC console. + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + Type <b>help</b> for an overview of available commands. + + + + %1 B + + + + %1 KB + + + + %1 MB + + + + %1 GB + + + + %1 m + + + + %1 h + + + + %1 h %2 m + + + + + ReceiveCoinsDialog + + &Amount: + + + + &Label: + &Etiqueta: + + + &Message: + + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + + + + Clear + + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + + + + Remove the selected entries from the list + + + + Remove + + + + Copy label + + + + Copy message + + + + Copy amount + + + + + ReceiveRequestDialog + + QR Code + + + + Copy &URI + + + + Copy &Address + + + + &Save Image... + + + + Request payment to %1 + + + + Payment information + + + + URI + + + + Address + Direccion + + + Amount + + + + Label + Etiqueta + + + Message + + + + Resulting URI too long, try to reduce the text for label / message. + + + + Error encoding URI into QR Code. + + + + + RecentRequestsTableModel + + Date + Fecha + + + Label + Etiqueta + + + Message + + + + Amount + + + + (no label) + (Sin etiqueta) + + + (no message) + + + + (no amount) + + + + + SendCoinsDialog + + Send Coins + Enviar monedas + + + Coin Control Features + + + + Inputs... + + + + automatically selected + + + + Insufficient funds! + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + + Send to multiple recipients at once + Enviar a varios destinatarios a la vez + + + Add &Recipient + + + + Clear all fields of the form. + + + + Clear &All + + + + Balance: + Balance: + + + Confirm the send action + Confirmar el envío + + + S&end + + + + Confirm send coins + Confirmar el envio de monedas + + + %1 to %2 + + + + Copy quantity + + + + Copy amount + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + + + + or + + + + The recipient address is not valid, please recheck. + + + + The amount to pay must be larger than 0. + La cantidad a pagar debe ser mayor que 0. + + + The amount exceeds your balance. + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + Duplicate address found, can only send to each address once per send operation. + + + + Transaction creation failed! + + + + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + + + + (no label) + (Sin etiqueta) + + + Warning: Unknown change address + + + + Are you sure you want to send? + + + + added as transaction fee + + + + Payment request expired + + + + Invalid payment address %1 + + + + + SendCoinsEntry + + A&mount: + A&Monto: + + + Pay &To: + Pagar &A: + + + The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Enter a label for this address to add it to your address book + Introduzca una etiqueta para esta dirección para añadirla a su libreta de direcciones + + + &Label: + &Etiqueta: + + + Choose previously used address + + + + This is a normal payment. + + + + Alt+A + Alt+A + + + Paste address from clipboard + Pegar la dirección desde el portapapeles + + + Alt+P + Alt+P + + + Remove this entry + + + + Message: + + + + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. + + + + + SignVerifyMessageDialog + + Signatures - Sign / Verify a Message + + + + &Sign Message + + + + You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. + + + + The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Choose previously used address + + + + Alt+A + Alt+A + + + Paste address from clipboard + Pegar la dirección desde el portapapeles + + + Alt+P + Alt+P + + + Enter the message you want to sign here + + + + Signature + + + + Copy the current signature to the system clipboard + + + + Sign the message to prove you own this Myriadcoin address + + + + Sign &Message + + + + Reset all sign message fields + + + + Clear &All + + + + &Verify Message + + + + Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. + + + + The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Verify the message to ensure it was signed with the specified Myriadcoin address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Click "Sign Message" to generate signature + + + + The entered address is invalid. + + + + Please check the address and try again. + + + + The entered address does not refer to a key. + + + + Wallet unlock was cancelled. + + + + Private key for the entered address is not available. + + + + Message signing failed. + + + + Message signed. + + + + The signature could not be decoded. + + + + Please check the signature and try again. + + + + The signature did not match the message digest. + + + + Message verification failed. + + + + Message verified. + + + + + SplashScreen + + Myriadcoin Core + + + + The Myriadcoin Core developers + + + + [testnet] + [prueba_de_red] + + + + TrafficGraphWidget + + KB/s + + + + + TransactionDesc + + Open until %1 + Abrir hasta %1 + + + conflicted + + + + %1/offline + + + + %1/unconfirmed + + + + %1 confirmations + + + + Status + + + + , broadcast through %n node(s) + + + + Date + Fecha + + + Source + + + + Generated + + + + From + + + + To + + + + own address + + + + label + + + + Credit + + + + matures in %n more block(s) + + + + not accepted + + + + Debit + + + + Transaction fee + + + + Net amount + + + + Message + + + + Comment + + + + Transaction ID + + + + Merchant + + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + Debug information + + + + Transaction + + + + Inputs + + + + Amount + + + + true + + + + false + + + + , has not been successfully broadcast yet + + + + Open for %n more block(s) + + + + unknown + desconocido + + + + TransactionDescDialog + + Transaction details + + + + This pane shows a detailed description of the transaction + + + + + TransactionTableModel + + Date + Fecha + + + Type + + + + Address + Direccion + + + Amount + + + + Immature (%1 confirmations, will be available after %2) + + + + Open for %n more block(s) + + + + Open until %1 + Abrir hasta %1 + + + Confirmed (%1 confirmations) + + + + This block was not received by any other nodes and will probably not be accepted! + + + + Generated but not accepted + + + + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + + Received with + + + + Received from + + + + Sent to + + + + Payment to yourself + + + + Mined + + + + (n/a) + + + + Transaction status. Hover over this field to show number of confirmations. + + + + Date and time that the transaction was received. + + + + Type of transaction. + + + + Destination address of transaction. + + + + Amount removed from or added to balance. + + + + + TransactionView + + All + + + + Today + + + + This week + + + + This month + + + + Last month + + + + This year + + + + Range... + + + + Received with + + + + Sent to + + + + To yourself + + + + Mined + + + + Other + + + + Enter address or label to search + + + + Min amount + + + + Copy address + + + + Copy label + + + + Copy amount + + + + Copy transaction ID + + + + Edit label + + + + Show transaction details + + + + Export Transaction History + + + + Exporting Failed + + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + + + + The transaction history was successfully saved to %1. + + + + Comma separated file (*.csv) + Archivos separados por coma (*.csv) + + + Confirmed + + + + Date + Fecha + + + Type + + + + Label + Etiqueta + + + Address + Direccion + + + Amount + + + + ID + + + + Range: + + + + to + + + + + WalletFrame + + No wallet has been loaded. + + + + + WalletModel + + Send Coins + Enviar monedas + + + + WalletView + + &Export + + + + Export the data in the current tab to a file + + + + Backup Wallet + + + + Wallet Data (*.dat) + + + + Backup Failed + + + + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. + + + + Backup Successful + + + + + bitcoin-core + + Usage: + + + + List commands + + + + Get help for a command + + + + Options: + + + + Specify configuration file (default: myriadcoin.conf) + + + + Specify pid file (default: myriadcoind.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 8333 or testnet: 18333) + + + + Maintain at most <n> connections to peers (default: 125) + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + Specify your own public address + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) + + + + Accept command line and JSON-RPC commands + + + + Myriadcoin Core RPC client version + + + + Run in the background as a daemon and accept commands + + + + Use the test network + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=myriadcoinrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + Bind to given address and always listen on it. Use [host]:port notation for IPv6 + + + + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) + + + + Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + + + + This is a pre-release test build - use at your own risk - do not use for mining or merchant applications + + + + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. + + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + Myriadcoin Core Daemon + + + + Block creation options: + + + + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + + Connect only to the specified node(s) + + + + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + + Corrupted block database detected + + + + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + Do not load the wallet and disable wallet RPC calls + + + + Do you want to rebuild the block database now? + + + + Error initializing block database + + + + Error initializing wallet database environment %s! + + + + Error loading block database + + + + Error opening block database + + + + Error: Disk space is low! + + + + Error: Wallet locked, unable to create transaction! + + + + Error: system error: + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + Failed to read block info + + + + Failed to read block + + + + Failed to sync block index + + + + Failed to write block index + + + + Failed to write block info + + + + Failed to write block + + + + Failed to write file info + + + + Failed to write to coin database + + + + Failed to write transaction index + + + + Failed to write undo data + + + + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + + Find peers using DNS lookup (default: 1 unless -connect) + + + + Force safe mode (default: 0) + + + + Generate coins (default: 0) + + + + How many blocks to check at startup (default: 288, 0 = all) + + + + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' + + + + Not enough file descriptors available. + + + + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + + Rebuild block chain index from current blk000??.dat files + + + + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + + Set the number of threads to service RPC calls (default: 4) + + + + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + + Verifying blocks... + + + + Verifying wallet... + + + + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + + + + Imports blocks from external blk000??.dat file + + + + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + + + + Information + + + + Invalid amount for -minrelaytxfee=<amount>: '%s' + + + + Invalid amount for -mintxfee=<amount>: '%s' + + + + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + + Maintain a full transaction index (default: 0) + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + Only accept block chain matching built-in checkpoints (default: 1) + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + Print block on startup, if found in block index + + + + Print block tree on startup (default: 0) + + + + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + + + + SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + Send command to Myriadcoin Core + + + + Send trace/debug info to console instead of debug.log file + + + + Set minimum block size in bytes (default: 0) + + + + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + Signing transaction failed + + + + Specify connection timeout in milliseconds (default: 5000) + + + + Start Myriadcoin Core Daemon + + + + System error: + + + + Transaction amount too small + + + + Transaction amounts must be positive + + + + Transaction too large + + + + Use UPnP to map the listening port (default: 0) + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + Username for JSON-RPC connections + + + + Warning + + + + Warning: This version is obsolete, upgrade required! + + + + Zapping all transactions from wallet... + + + + on startup + + + + version + + + + wallet.dat corrupt, salvage failed + + + + Password for JSON-RPC connections + + + + Allow JSON-RPC connections from specified IP address + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + Upgrade wallet to latest format + + + + Set key pool size to <n> (default: 100) + + + + Rescan the block chain for missing wallet transactions + + + + Use OpenSSL (https) for JSON-RPC connections + + + + Server certificate file (default: server.cert) + + + + Server private key (default: server.pem) + + + + This help message + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + Loading addresses... + + + + Error loading wallet.dat: Wallet corrupted + + + + Error loading wallet.dat: Wallet requires newer version of Myriadcoin + + + + Wallet needed to be rewritten: restart Myriadcoin to complete + + + + Error loading wallet.dat + + + + Invalid -proxy address: '%s' + + + + Unknown network specified in -onlynet: '%s' + + + + Unknown -socks proxy version requested: %i + + + + Cannot resolve -bind address: '%s' + + + + Cannot resolve -externalip address: '%s' + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + Invalid amount + + + + Insufficient funds + + + + Loading block index... + + + + Add a node to connect to and attempt to keep the connection open + + + + Loading wallet... + + + + Cannot downgrade wallet + + + + Cannot write default address + + + + Rescanning... + + + + Done loading + + + + To use the %s option + + + + Error + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + \ No newline at end of file diff --git a/src/qt/locale/bitcoin_et.ts b/src/qt/locale/bitcoin_et.ts index 9b1890f0..28125d9d 100644 --- a/src/qt/locale/bitcoin_et.ts +++ b/src/qt/locale/bitcoin_et.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - Myriadcoinist + About Myriadcoin Core + - - <b>Myriadcoin</b> version - <b>Myriadcoini</b> versioon + <b>Myriadcoin Core</b> version + - This is experimental software. @@ -28,153 +24,128 @@ Levitatud MIT/X11 tarkvara litsentsi all, vaata kaasasolevat faili COPYING või Toode sisaldab OpenSSL Projekti all toodetud tarkvara, mis on kasutamiseks OpenSSL Toolkitis (http://www.openssl.org/) ja Eric Young'i poolt loodud krüptograafilist tarkvara (eay@cryptsoft.com) ning Thomas Bernard'i loodud UPnP tarkvara. - Copyright Autoriõigus - - The Myriadcoin developers + The Myriadcoin Core developers + + + + (%1-bit) AddressBookPage - - Address Book - Aadressiraamat - - - Double-click to edit address or label Topeltklõps aadressi või märgise muutmiseks - Create a new address Loo uus aadress - + &New + + + Copy the currently selected address to the system clipboard Kopeeri märgistatud aadress vahemällu - - &New Address - &Uus aadress + &Copy + - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Maksete saamiseks kasutatavad Myriadcoini aadressid. Maksjate paremaks jälgimiseks võib igaühele anda erineva. + C&lose + - &Copy Address &Aadressi kopeerimine - - Show &QR Code - Kuva %QR kood - - - - Sign a message to prove you own a Myriadcoin address - Allkirjasta sõnum, et tõestada Bitconi aadressi olemasolu. - - - - Sign &Message - Allkirjasta &Sõnum - - - Delete the currently selected address from the list Kustuta märgistatud aadress loetelust - Export the data in the current tab to a file - &Export - - Verify a message to ensure it was signed with a specified Myriadcoin address - Kinnita sõnum tõestamaks selle allkirjastatust määratud Myriadcoini aadressiga. - - - - &Verify Message - &Kinnita Sõnum - - - &Delete &Kustuta - - These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - Need on sinu Myriadcoini aadressid maksete saatmiseks. Müntide saatmisel kontrolli alati summat ning saaja aadressi. + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + Need on sinu Bitcoini aadressid maksete saatmiseks. Müntide saatmisel kontrolli alati summat ning saaja aadressi. + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + - Copy &Label &Märgise kopeerimine - &Edit &Muuda - - Send &Coins - Saada &Münte + Export Address List + - - Export Address Book Data - Ekspordi Aadressiraamat - - - Comma separated file (*.csv) Komaeraldatud fail (*.csv) - - Error exporting - Viga eksportimisel + Exporting Failed + - - Could not write to file %1. - Tõrge faili kirjutamisel %1. + There was an error trying to save the address list to %1. + AddressTableModel - Label Silt - Address Aadress - (no label) (silti pole) @@ -182,140 +153,106 @@ Toode sisaldab OpenSSL Projekti all toodetud tarkvara, mis on kasutamiseks OpenS AskPassphraseDialog - Passphrase Dialog Salafraasi dialoog - Enter passphrase Sisesta salafraas - New passphrase Uus salafraas - Repeat new passphrase Korda salafraasi - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. Sisesta rahakotile uus salafraas.<br/>Palun kasuta salafraasina <b>vähemalt 10 tähte/numbrit/sümbolit</b>, või <b>vähemalt 8 sõna</b>. - Encrypt wallet Krüpteeri rahakott - This operation needs your wallet passphrase to unlock the wallet. See toiming nõuab sinu rahakoti salafraasi. - Unlock wallet Tee rahakott lukust lahti. - This operation needs your wallet passphrase to decrypt the wallet. See toiming nõuab sinu rahakoti salafraasi. - Decrypt wallet Dekrüpteeri rahakott. - Change passphrase Muuda salafraasi - Enter the old and new passphrase to the wallet. Sisesta rahakoti vana ning uus salafraas. - Confirm wallet encryption Kinnita rahakoti krüpteering - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! Hoiatus: Kui sa kaotad oma, rahakoti krüpteerimisel kasutatud, salafraasi, siis <b>KAOTAD KA KÕIK OMA MYRIADCOINID</b>! - Are you sure you wish to encrypt your wallet? Kas soovid oma rahakoti krüpteerida? - 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. TÄHTIS: Kõik varasemad rahakoti varundfailid tuleks üle kirjutada äsja loodud krüpteeritud rahakoti failiga. Turvakaalutlustel tühistatakse krüpteerimata rahakoti failid alates uue, krüpteeritud rahakoti, kasutusele võtust. - - Warning: The Caps Lock key is on! Hoiatus: Caps Lock on sisse lülitatud! - - Wallet encrypted Rahakott krüpteeritud - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. - Myriadcoin sulgub krüpteeringu lõpetamiseks. Pea meeles, et rahakoti krüpteerimine ei välista myriadcoinide vargust, kui sinu arvuti on nakatunud pahavaraga. + Myriadcoin sulgub krüpteeringu lõpetamiseks. Pea meeles, et rahakoti krüpteerimine ei välista bitcoinide vargust, kui sinu arvuti on nakatunud pahavaraga. - - - - Wallet encryption failed Tõrge rahakoti krüpteerimisel - Wallet encryption failed due to an internal error. Your wallet was not encrypted. Rahakoti krüpteering ebaõnnestus tõrke tõttu. Sinu rahakotti ei krüpteeritud. - - The supplied passphrases do not match. Salafraasid ei kattu. - Wallet unlock failed Rahakoti avamine ebaõnnestus - - - The passphrase entered for the wallet decryption was incorrect. Rahakoti salafraas ei ole õige. - Wallet decryption failed Rahakoti dekrüpteerimine ei õnnestunud - Wallet passphrase was successfully changed. Rahakoti salafraasi muutmine õnnestus. @@ -323,319 +260,286 @@ Toode sisaldab OpenSSL Projekti all toodetud tarkvara, mis on kasutamiseks OpenS BitcoinGUI - Sign &message... Signeeri &sõnum - Synchronizing with network... Võrgusünkimine... - &Overview &Ülevaade - + Node + + + Show general overview of wallet Kuva rahakoti üld-ülevaade - &Transactions &Tehingud - Browse transaction history Sirvi tehingute ajalugu - - Edit the list of stored addresses and labels - Salvestatud aadresside ja märgiste loetelu muutmine - - - - Show the list of addresses for receiving payments - Kuva saadud maksete aadresside loetelu - - - E&xit V&älju - Quit application Väljumine - Show information about Myriadcoin - Kuva info Myriadcoini kohta + Kuva info Bitcoini kohta - About &Qt Teave &Qt kohta - Show information about Qt Kuva Qt kohta käiv info - &Options... &Valikud... - &Encrypt Wallet... &Krüpteeri Rahakott - &Backup Wallet... &Varunda Rahakott - &Change Passphrase... &Salafraasi muutmine - + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + Importing blocks from disk... Impordi blokid kettalt... - Reindexing blocks on disk... Kettal olevate blokkide re-indekseerimine... - Send coins to a Myriadcoin address - Saada münte Myriadcoini aadressile + Saada münte Bitcoini aadressile - Modify configuration options for Myriadcoin - Muuda Myriadcoini seadeid + Muuda Bitcoini seadeid - Backup wallet to another location Varunda rahakott teise asukohta - Change the passphrase used for wallet encryption Rahakoti krüpteerimise salafraasi muutmine - &Debug window &Debugimise aken - Open debugging and diagnostic console Ava debugimise ja diagnostika konsool - &Verify message... &Kontrolli sõnumit... - - Myriadcoin Myriadcoin - Wallet Rahakott - &Send &Saada - &Receive &Saama - - &Addresses - &Aadressid - - - - &About Myriadcoin - %Myriadcoinist - - - &Show / Hide &Näita / Peida - Show or hide the main Window Näita või peida peaaken - Encrypt the private keys that belong to your wallet Krüpteeri oma rahakoti privaatvõtmed - Sign messages with your Myriadcoin addresses to prove you own them - Omandi tõestamiseks allkirjasta sõnumid oma Myriadcoini aadressiga + Omandi tõestamiseks allkirjasta sõnumid oma Bitcoini aadressiga - Verify messages to ensure they were signed with specified Myriadcoin addresses - Kinnita sõnumid kindlustamaks et need allkirjastati määratud Myriadcoini aadressiga + Kinnita sõnumid kindlustamaks et need allkirjastati määratud Bitcoini aadressiga - &File &Fail - &Settings &Seaded - &Help &Abi - Tabs toolbar Vahelehe tööriistariba - - [testnet] [testnet] - - Myriadcoin client - Myriadcoini klient - - - - %n active connection(s) to Myriadcoin network - %n aktiivne ühendus Myriadcoini võrku%n aktiivset ühendust Myriadcoini võrku + Myriadcoin Core + Bitcoini tuumik + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + + Myriadcoin client + Bitcoini klient + + + %n active connection(s) to Myriadcoin network + %n aktiivne ühendus Bitcoini võrku%n aktiivset ühendust Bitcoini võrku - No block source available... - Processed %1 of %2 (estimated) blocks of transaction history. Protsessitud %1 (arvutuslikult) tehingu ajaloo blokki %2-st. - Processed %1 blocks of transaction history. Protsessitud %1 tehingute ajaloo blokki. - %n hour(s) %n tund%n tundi - %n day(s) %n päev%n päeva - %n week(s) %n nädal%n nädalat - + %1 and %2 + + + + %n year(s) + + + %1 behind %1 maas - Last received block was generated %1 ago. Viimane saabunud blokk loodi %1 tagasi. - Transactions after this will not yet be visible. Peale seda ei ole tehingud veel nähtavad. - Error Tõrge - Warning Hoiatus - Information Informatsioon - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - See tehing ületab mahupiirangu. Saatmine on võimalik %1, node'idele ning võrgustiku toetuseks, makstava lisatasu eest. Kas nõustud lisatasuga? - - - Up to date Ajakohane - Catching up... Jõuan... - - Confirm transaction fee - Kinnita tehingu tasu - - - Sent transaction Saadetud tehing - Incoming transaction Sisenev tehing - Date: %1 Amount: %2 Type: %3 @@ -647,29 +551,14 @@ Tüüp: %3⏎ Aadress: %4⏎ - - - URI handling - URI käsitsemine - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - URI ei suudeta parsida. Põhjuseks võib olla kehtetu Myriadcoini aadress või vigased URI parameetrid. - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> Rahakott on <b>krüpteeritud</b> ning hetkel <b>avatud</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> Rahakott on <b>krüpteeritud</b> ning hetkel <b>suletud</b> - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. Ilmnes kriitiline tõrge. Myriadcoin suletakse turvakaalutluste tõttu. @@ -677,329 +566,647 @@ Aadress: %4⏎ ClientModel - Network Alert Võrgu Häire + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + + + + Bytes: + + + + Amount: + Summa: + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + Kogus + + + Address + Aadress + + + Date + Kuupäev + + + Confirmations + + + + Confirmed + Kinnitatud + + + Priority + + + + Copy address + Aadressi kopeerimine + + + Copy label + Märgise kopeerimine + + + Copy amount + Kopeeri summa + + + Copy transaction ID + Kopeeri tehingu ID + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + + + + Dust + + + + yes + + + + no + + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + (silti pole) + + + change from %1 (%2) + + + + (change) + + + EditAddressDialog - Edit Address Muuda aadressi - &Label &Märgis - - The label associated with this address book entry - Selle aadressiraamatu kirjega seotud märgis + The label associated with this address list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + - &Address &Aadress - - The address associated with this address book entry. This can only be modified for sending addresses. - Selle aadressiraamatu kirjega seotud aadress. Võimalik muuta ainult aadresside saatmiseks. - - - New receiving address Uus sissetulev aadress - New sending address Uus väljaminev aadress - Edit receiving address Sissetulevate aadresside muutmine - Edit sending address Väljaminevate aadresside muutmine - The entered address "%1" is already in the address book. Selline aadress on juba olemas: "%1" - The entered address "%1" is not a valid Myriadcoin address. - Sisestatud aadress "%1" ei ole Myriadcoinis kehtiv. + Sisestatud aadress "%1" ei ole Bitcoinis kehtiv. - Could not unlock wallet. Rahakotti ei avatud - New key generation failed. Tõrge uue võtme loomisel. - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt - Myriadcoini-Qt + A new data directory will be created. + + + + name + + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core + Bitcoini tuumik - version versioon - Usage: Kasutus: - command-line options käsurea valikud - UI options UI valikud - Set language, for example "de_DE" (default: system locale) Keele valik, nt "ee_ET" (vaikeväärtus: system locale) - Start minimized Käivitu tegumiribale - + Set SSL root certificates for payment request (default: -system-) + + + Show splash screen on startup (default: 1) Käivitamisel teabeakna kuvamine (vaikeväärtus: 1) + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" can not be created. + + + + Error + + + + GB of free space available + + + + (of %1GB needed) + + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open + + OptionsDialog - Options Valikud - &Main %Peamine - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. - Pay transaction &fee Tasu tehingu &fee - Automatically start Myriadcoin after logging in to the system. Käivita Myriadcoin süsteemi logimisel. - &Start Myriadcoin on system login &Start Myriadcoin sisselogimisel - + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + Reset all client options to default. Taasta kõik klientprogrammi seadete vaikeväärtused. - &Reset Options &Lähtesta valikud - &Network &Võrk - - Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. - Myriadcoini kliendi pordi automaatne avamine ruuteris. Toimib, kui sinu ruuter aktsepteerib UPnP ühendust. + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. + Bitcoini kliendi pordi automaatne avamine ruuteris. Toimib, kui sinu ruuter aktsepteerib UPnP ühendust. - Map port using &UPnP Suuna port &UPnP kaudu - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - Kasuta Myriadcoini võrgustikku ühendumiseks SOCKS turva proxy't (nt Tor'i kasutamisel). - - - - &Connect through SOCKS proxy: - %Connect läbi turva proxi: - - - Proxy &IP: Proxi &IP: - - IP address of the proxy (e.g. 127.0.0.1) - Proxi IP (nt 127.0.0.1) - - - &Port: &Port: - Port of the proxy (e.g. 9050) Proxi port (nt 9050) - SOCKS &Version: Turva proxi SOCKS &Version: - SOCKS version of the proxy (e.g. 5) Turva proxi SOCKS versioon (nt 5) - &Window &Aken - Show only a tray icon after minimizing the window. Minimeeri systray alale. - &Minimize to the tray instead of the taskbar &Minimeeri systray alale - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. Sulgemise asemel minimeeri aken. Selle valiku tegemisel suletakse programm Menüüst "Välju" käsuga. - M&inimize on close M&inimeeri sulgemisel - &Display &Kuva - User Interface &language: Kasutajaliidese &keel: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. - Kasutajaliidese keele valimise koht. Valik rakendub Myriadcoini käivitamisel. + Kasutajaliidese keele valimise koht. Valik rakendub Bitcoini käivitamisel. - &Unit to show amounts in: Summade kuvamise &Unit: - Choose the default subdivision unit to show in the interface and when sending coins. Vali liideses ning müntide saatmisel kuvatav vaikimisi alajaotus. - Whether to show Myriadcoin addresses in the transaction list or not. - Kuvada Myriadcoini aadress tehingute loetelus või mitte. + Kuvada Bitcoini aadress tehingute loetelus või mitte. - &Display addresses in transaction list Tehingute loetelu &Display aadress - + Whether to show coin control features or not. + + + &OK &OK - &Cancel &Katkesta - - &Apply - &Rakenda - - - default vaikeväärtus - + none + + + Confirm options reset Kinnita valikute algseadistamine - - Some settings may require a client restart to take effect. - Mõned seadete muudatused rakenduvad programmi käivitumisel. + Client restart required to activate changes. + - - Do you want to proceed? - Kas soovid jätkata? + Client will be shutdown, do you want to proceed? + - - - Warning - Hoiatus + This change would require a client restart. + - - - This setting will take effect after restarting Myriadcoin. - Tehtud valik rakendub Myriadcoini käivitamisel. - - - The supplied proxy address is invalid. Sisestatud kehtetu proxy aadress. @@ -1007,59 +1214,54 @@ Aadress: %4⏎ OverviewPage - Form Vorm - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. Kuvatav info ei pruugi olla ajakohane. Ühenduse loomisel süngitakse sinu rahakott automaatselt Bitconi võrgustikuga, kuid see toiming on hetkel lõpetamata. - - Balance: - Jääk: - - - - Unconfirmed: - Kinnitamata: - - - Wallet Rahakott - + Available: + + + + Your current spendable balance + + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + + + Immature: Ebaküps: - Mined balance that has not yet matured Mitte aegunud mine'itud jääk - + Total: + + + + Your current total balance + + + <b>Recent transactions</b> <b>Uuesti saadetud tehingud</b> - - Your current balance - Sinu jääk hetkel - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - Kinnitamata tehingud kokku. Ei kajastu hetke jäägis - - - - out of sync sünkimata @@ -1067,579 +1269,856 @@ Aadress: %4⏎ PaymentServer - + URI handling + URI käsitsemine + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + URI ei suudeta parsida. Põhjuseks võib olla kehtetu Bitcoini aadress või vigased URI parameetrid. + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + Cannot start myriadcoin: click-to-pay handler Myriadcoin ei käivitu: vajuta-maksa toiming + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + + + + Network request error + + - QRCodeDialog + QObject - - QR Code Dialog - QR koodi dialoog + Myriadcoin + Myriadcoin - - Request Payment - Makse taotlus + Error: Specified data directory "%1" does not exist. + - - Amount: - Summa: + Error: Cannot parse configuration file: %1. Only use key=value syntax. + - - Label: - Märgis: + Error: Invalid combination of -regtest and -testnet. + - - Message: - Sõnum: + Myriadcoin Core didn't yet exit safely... + - - &Save As... - &Salvesta nimega... + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Sisesta Bitcoini aadress (nt: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + - - Error encoding URI into QR Code. - Tõrge URI'st QR koodi loomisel + &Copy Image + - - The entered amount is invalid, please check. - Sisestatud summa on vale, palun kontrolli. - - - - Resulting URI too long, try to reduce the text for label / message. - Tulemuseks on liiga pikk URL, püüa lühendada märgise/teate teksti. - - - Save QR Code Salvesta QR kood - - PNG Images (*.png) - PNG pildifail (*.png) + PNG Image (*.png) + RPCConsole - Client name Kliendi nimi - - - - - - - - - - N/A N/A - Client version Kliendi versioon - &Information &Informatsioon - + Debug window + + + + General + + + Using OpenSSL version Kasutan OpenSSL versiooni - Startup time Käivitamise hetk - Network Võrgustik - + Name + + + Number of connections Ühenduste arv - - On testnet - Testnetis - - - Block chain Ploki jada - Current number of blocks Plokkide hetkearv - Estimated total blocks Ligikaudne plokkide kogus - Last block time Viimane ploki aeg - &Open &Ava - - Command-line options - Käsurea valikud - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - Näita kehtivate käsurea valikute kuvamiseks Myriadcoini-Qt abiteksti - - - - &Show - &Kuva - - - &Console &Konsool - + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + Build date Valmistusaeg - - Myriadcoin - Debug window - Myriadcoin - debugimise aken - - - - Myriadcoin Core - Myriadcoini tuumik - - - Debug log file Debugimise logifail - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. - Ava Myriadcoini logifail praegusest andmekaustast. Toiminguks võib kuluda kuni mõni sekund. + Ava Bitcoini logifail praegusest andmekaustast. Toiminguks võib kuluda kuni mõni sekund. - Clear console Puhasta konsool - Welcome to the Myriadcoin RPC console. - Teretulemast Myriadcoini RPC konsooli. + Teretulemast Bitcoini RPC konsooli. - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. Ajaloo sirvimiseks kasuta üles ja alla nooli, ekraani puhastamiseks <b>Ctrl-L</b>. - Type <b>help</b> for an overview of available commands. Ülevaateks võimalikest käsklustest trüki <b>help</b>. + + %1 B + + + + %1 KB + + + + %1 MB + + + + %1 GB + + + + %1 m + + + + %1 h + + + + %1 h %2 m + + + + + ReceiveCoinsDialog + + &Amount: + + + + &Label: + &Märgis + + + &Message: + + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + + + + Clear + + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + + + + Remove the selected entries from the list + + + + Remove + + + + Copy label + Märgise kopeerimine + + + Copy message + + + + Copy amount + Kopeeri summa + + + + ReceiveRequestDialog + + QR Code + + + + Copy &URI + + + + Copy &Address + + + + &Save Image... + + + + Request payment to %1 + + + + Payment information + + + + URI + + + + Address + Aadress + + + Amount + Kogus + + + Label + Silt + + + Message + Sõnum + + + Resulting URI too long, try to reduce the text for label / message. + Tulemuseks on liiga pikk URL, püüa lühendada märgise/teate teksti. + + + Error encoding URI into QR Code. + Tõrge URI'st QR koodi loomisel + + + + RecentRequestsTableModel + + Date + Kuupäev + + + Label + Silt + + + Message + Sõnum + + + Amount + Kogus + + + (no label) + (silti pole) + + + (no message) + + + + (no amount) + + SendCoinsDialog - - - - - - - - Send Coins Müntide saatmine - + Coin Control Features + + + + Inputs... + + + + automatically selected + + + + Insufficient funds! + + + + Quantity: + + + + Bytes: + + + + Amount: + Summa: + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + Send to multiple recipients at once Saatmine mitmele korraga - Add &Recipient Lisa &Saaja - - Remove all transaction fields - Eemalda kõik tehingu väljad + Clear all fields of the form. + - Clear &All Puhasta &Kõik - Balance: Jääk: - - 123.456 BTC - 123,456 BTC - - - Confirm the send action Saatmise kinnitamine - S&end S&aada - - <b>%1</b> to %2 (%3) - <b>%1</b> kuni %2 (%3) - - - Confirm send coins Müntide saatmise kinnitamine - - Are you sure you want to send %1? - Soovid kindlasti saata %1? + %1 to %2 + - - and - ja + Copy quantity + + + + Copy amount + Kopeeri summa + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + + + + or + - The recipient address is not valid, please recheck. Saaja aadress ei ole kehtiv, palun kontrolli. - The amount to pay must be larger than 0. Makstav summa peab olema suurem kui 0. - The amount exceeds your balance. Summa ületab jäägi. - The total exceeds your balance when the %1 transaction fee is included. Summa koos tehingu tasuga %1 ületab sinu jääki. - Duplicate address found, can only send to each address once per send operation. Ühe saatmisega topelt-adressaati olla ei tohi. - - Error: Transaction creation failed! - Tõrge: Tehingu loomine ebaõnnestus! + Transaction creation failed! + - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Viga: Tehingust keelduti. Nt rahakoti koopia kasutamisel võivad selle põhjustada juba kulutatud mündid. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + + + + (no label) + (silti pole) + + + Warning: Unknown change address + + + + Are you sure you want to send? + + + + added as transaction fee + + + + Payment request expired + + + + Invalid payment address %1 + SendCoinsEntry - - Form - Vorm - - - A&mount: S&umma: - Pay &To: Maksa &: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Tehingu saaja aadress (nt: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book Aadressiraamatusse sisestamiseks märgista aadress - &Label: &Märgis - - Choose address from address book - Vali saaja aadressiraamatust + Choose previously used address + + + + This is a normal payment. + - Alt+A Alt+A - Paste address from clipboard Kleebi aadress vahemälust - Alt+P Alt+P - - Remove this recipient - Saaja eemaldamine + Remove this entry + - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Sisesta Myriadcoini aadress (nt: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + Sõnum: + + + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. + SignVerifyMessageDialog - Signatures - Sign / Verify a Message Signatuurid - Allkirjasta / Kinnita Sõnum - &Sign Message &Allkirjastamise teade - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. Omandiõigsuse tõestamiseks saad sõnumeid allkirjastada oma aadressiga. Ettevaatust petturitega, kes üritavad saada sinu allkirja endale saada. Allkirjasta ainult korralikult täidetud avaldusi, millega nõustud. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Sõnumi signeerimise aadress (nt: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book - Vali aadress aadressiraamatust + Choose previously used address + - - Alt+A Alt+A - Paste address from clipboard Kleebi aadress vahemälust - Alt+P Alt+P - Enter the message you want to sign here Sisesta siia allkirjastamise sõnum - Signature Signatuur - Copy the current signature to the system clipboard Kopeeri praegune signatuur vahemällu - Sign the message to prove you own this Myriadcoin address - Allkirjasta sõnum Myriadcoini aadressi sulle kuulumise tõestamiseks + Allkirjasta sõnum Bitcoini aadressi sulle kuulumise tõestamiseks - Sign &Message Allkirjasta &Sõnum - Reset all sign message fields Tühjenda kõik sõnumi allkirjastamise väljad - - Clear &All Puhasta &Kõik - &Verify Message &Kinnita Sõnum - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Kinnitamiseks sisesta allkirjastamise aadress, sõnum (kindlasti kopeeri täpselt ka reavahetused, tühikud, tabulaatorid jms) ning allolev signatuur. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Aadress, millega sõnum allkirjastati (nt: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address - Kinnita sõnum tõestamaks selle allkirjastatust määratud Myriadcoini aadressiga. + Kinnita sõnum tõestamaks selle allkirjastatust määratud Bitcoini aadressiga. - Verify &Message Kinnita &Sõnum - Reset all verify message fields Tühjenda kõik sõnumi kinnitamise väljad - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Sisesta Myriadcoini aadress (nt: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Sisesta Bitcoini aadress (nt: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature Signatuuri genereerimiseks vajuta "Allkirjasta Sõnum" - - Enter Myriadcoin signature - Sisesta Myriadcoini allkiri - - - - The entered address is invalid. Sisestatud aadress ei kehti. - - - - Please check the address and try again. Palun kontrolli aadressi ning proovi uuesti. - - The entered address does not refer to a key. Sisestatud aadress ei viita võtmele. - Wallet unlock was cancelled. Rahakoti avamine katkestati. - Private key for the entered address is not available. Sisestatud aadressi privaatvõti ei ole saadaval. - Message signing failed. Sõnumi signeerimine ebaõnnestus. - Message signed. Sõnum signeeritud. - The signature could not be decoded. Signatuuri ei õnnestunud dekodeerida. - - Please check the signature and try again. Palun kontrolli signatuuri ning proovi uuesti. - The signature did not match the message digest. Signatuur ei kattunud sõnumi kokkuvõttega. - Message verification failed. Sõnumi kontroll ebaõnnestus. - Message verified. Sõnum kontrollitud. @@ -1647,186 +2126,160 @@ Aadress: %4⏎ SplashScreen - - The Myriadcoin developers + Myriadcoin Core + Bitcoini tuumik + + + The Myriadcoin Core developers - [testnet] + + TrafficGraphWidget + + KB/s + + + TransactionDesc - Open until %1 Avatud kuni %1 - + conflicted + + + %1/offline %/1offline'is - %1/unconfirmed %1/kinnitamata - %1 confirmations %1 kinnitust - Status Staatus - , broadcast through %n node(s) , levita läbi %n node'i, levita läbi %n node'i - Date Kuupäev - Source Allikas - Generated Genereeritud - - From Saatja - - - To Saaja - - own address oma aadress - label märgis - - - - - Credit Krediit - matures in %n more block(s) aegub %n bloki pärastaegub %n bloki pärast - not accepted mitte aktsepteeritud - - - - Debit Deebet - Transaction fee Tehingu tasu - Net amount Neto summa - Message Sõnum - Comment Kommentaar - Transaction ID Tehingu ID - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Enne, kui loodud münte saab kulutama asuda, peavad need läbima 120 blokki. Kui sina selle bloki lõid, levitati see, bloki jadasse ühendamiseks, võrgustikku. Kui jadasse ühendamine ei õnnestu, muudetakse tema staatus "keeldutud" olekusse ning seda ei saa kulutada. Selline olukord võib juhtuda, kui mõni teine node loob bloki sinuga samal ajal. + Merchant + + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + - Debug information Debug'imise info - Transaction Tehing - Inputs Sisendid - Amount Kogus - true õige - false vale - , has not been successfully broadcast yet , veel esitlemata - Open for %n more block(s) Avaneb %n bloki pärastAvaneb %n bloki pärast - unknown tundmatu @@ -1834,12 +2287,10 @@ Aadress: %4⏎ TransactionDescDialog - Transaction details Tehingu üksikasjad - This pane shows a detailed description of the transaction Paan kuvab tehingu detailid @@ -1847,117 +2298,102 @@ Aadress: %4⏎ TransactionTableModel - Date Kuupäev - Type Tüüp - Address Aadress - Amount Kogus + + Immature (%1 confirmations, will be available after %2) + + - Open for %n more block(s) Avaneb %n bloki pärastAvaneb %n bloki pärast - Open until %1 Avatud kuni %1 - - Offline (%1 confirmations) - Ühenduseta (%1 kinnitust) - - - - Unconfirmed (%1 of %2 confirmations) - Kinnitamata (%1/%2 kinnitust) - - - Confirmed (%1 confirmations) Kinnitatud (%1 kinnitust) - - - Mined balance will be available when it matures in %n more block(s) - Mine'itud jääk muutub kättesaadavaks %n bloki läbimiselMine'itud jääk muutub kättesaadavaks %n bloki läbimisel - - This block was not received by any other nodes and will probably not be accepted! Antud klotsi pole saanud ükski osapool ning tõenäoliselt seda ei aktsepteerita! - Generated but not accepted Loodud, kuid aktsepteerimata - + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + Received with Saadud koos - Received from Kellelt saadud - Sent to Saadetud - Payment to yourself Makse iseendale - Mined Mine'itud - (n/a) (n/a) - Transaction status. Hover over this field to show number of confirmations. Tehingu staatus. Kinnituste arvu kuvamiseks liigu hiire noolega selle peale. - Date and time that the transaction was received. Tehingu saamise kuupäev ning kellaaeg. - Type of transaction. Tehingu tüüp. - Destination address of transaction. Tehingu saaja aadress. - Amount removed from or added to balance. Jäägile lisatud või eemaldatud summa. @@ -1965,176 +2401,156 @@ Aadress: %4⏎ TransactionView - - All Kõik - Today Täna - This week Jooksev nädal - This month Jooksev kuu - Last month Eelmine kuu - This year Jooksev aasta - Range... Ulatus... - Received with Saadud koos - Sent to Saadetud - To yourself Iseendale - Mined Mine'itud - Other Muu - Enter address or label to search Otsimiseks sisesta märgis või aadress - Min amount Vähim summa - Copy address Aadressi kopeerimine - Copy label Märgise kopeerimine - Copy amount Kopeeri summa - Copy transaction ID Kopeeri tehingu ID - Edit label Märgise muutmine - Show transaction details Kuva tehingu detailid - - Export Transaction Data - Tehinguandmete eksport + Export Transaction History + + + + Exporting Failed + + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + + + + The transaction history was successfully saved to %1. + - Comma separated file (*.csv) Komaeraldatud fail (*.csv) - Confirmed Kinnitatud - Date Kuupäev - Type Tüüp - Label Silt - Address Aadress - Amount Kogus - ID ID - - Error exporting - Viga eksportimisel - - - - Could not write to file %1. - Tõrge faili kirjutamisel %1. - - - Range: Ulatus: - to saaja + + WalletFrame + + No wallet has been loaded. + + + WalletModel - Send Coins @@ -2142,160 +2558,121 @@ Aadress: %4⏎ WalletView - &Export - Export the data in the current tab to a file - Backup Wallet Varundatud Rahakott - Wallet Data (*.dat) Rahakoti andmed (*.dat) - Backup Failed Varundamine nurjus - - There was an error trying to save the wallet data to the new location. - Rahakoti andmete uude kohta salvestamine nurjus. + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. + - Backup Successful Varundamine õnnestus - - - The wallet data was successfully saved to the new location. - Rahakoti andmete uude kohta salvestamine õnnestus. - bitcoin-core - - Myriadcoin version - Myriadcoini versioon - - - Usage: Kasutus: - - Send command to -server or myriadcoind - Saada käsklus -serverile või myriadcoindile - - - List commands Käskluste loetelu - Get help for a command Käskluste abiinfo - Options: Valikud: - Specify configuration file (default: myriadcoin.conf) Täpsusta sätete fail (vaikimisi: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) - Täpsusta PID fail (vaikimisi: myriadcoin.pid) + Täpsusta PID fail (vaikimisi: bitcoin.pid) - Specify data directory Täpsusta andmekataloog - - Set database cache size in megabytes (default: 25) - Sea andmebaasi vahemälu suurus MB (vaikeväärtus: 25) - - - Listen for connections on <port> (default: 8333 or testnet: 18333) Kuula ühendusi pordil <port> (vaikeväärtus: 8333 või testnet: 18333) - Maintain at most <n> connections to peers (default: 125) Säilita vähemalt <n> ühendust peeridega (vaikeväärtus: 125) - Connect to a node to retrieve peer addresses, and disconnect Peeri aadressi saamiseks ühendu korraks node'iga - Specify your own public address Täpsusta enda avalik aadress - Threshold for disconnecting misbehaving peers (default: 100) Ulakate peeride valulävi (vaikeväärtus: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Mitme sekundi pärast ulakad peerid tagasi võivad tulla (vaikeväärtus: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s RPC pordi %u kuulamiseks seadistamisel ilmnes viga IPv4'l: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) Kuula JSON-RPC ühendusel seda porti <port> (vaikeväärtus: 8332 või testnet: 18332) - Accept command line and JSON-RPC commands Luba käsurea ning JSON-RPC käsklusi - + Myriadcoin Core RPC client version + + + Run in the background as a daemon and accept commands Tööta taustal ning aktsepteeri käsklusi - Use the test network Testvõrgu kasutamine - Accept connections from outside (default: 1 if no -proxy or -connect) Luba välisühendusi (vaikeväärtus: 1 kui puudub -proxy või -connect) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2320,612 +2697,686 @@ nt: alertnotify=echo %%s | email -s "Myriadcoin Alert" admin@foo.com - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s RPC pordi %u kuulamiseks seadistamisel ilmnes viga IPv6'l, lülitumine tagasi IPv4'le : %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 Määratud aadressiga sidumine ning sellelt kuulamine. IPv6 jaoks kasuta vormingut [host]:port - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. - Ei suuda määrata ainuõigust andmekaustale %s. Tõenäolisel on Myriadcoin juba avatud. + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) + - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. Tõrge: Tehingust keelduti! Põhjuseks võib olla juba kulutatud mündid, nt kui wallet.dat fail koopias kulutatid mündid, kuid ei märgitud neid siin vastavalt. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! Tõrge: Selle tehingu jaoks on nõutav lisatasu vähemalt %s. Põhjuseks võib olla summa suurus, keerukus või hiljuti saadud summade kasutamine! - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - Käivita käsklus, kui saabub tähtis hoiatus (%s cmd's asendatakse sõnumiga) - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Käivita käsklus, kui rahakoti tehing muutub (%s cmd's muudetakse TxID'ks) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - Sea "kõrge tähtsusega"/"madala tehingu lisatasuga" tehingute maksimumsuurus baitides (vaikeväärtus: 27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications See on test-versioon - kasutamine omal riisikol - ära kasuta mining'uks ega kaupmeeste programmides - + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Hoiatus: -paytxfee on seatud väga kõrgeks! See on sinu poolt makstav tehingu lisatasu. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - Hoiatus: Kuvatavad tehingud ei pruugi olla korrektsed! Sina või node'id peate tegema uuenduse. - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. Hoiatus: Palun kontrolli oma arvuti kuupäeva/kellaaega! Kui arvuti kell on vale, siis Myriadcoin ei tööta korralikult - + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Hoiatus: ilmnes tõrge wallet.dat faili lugemisel! Võtmed on terved, kuid tehingu andmed või aadressiraamatu kirjed võivad olla kadunud või vigased. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. Hoiatus: toimus wallet.dat faili andmete päästmine! Originaal wallet.dat nimetati kaustas %s ümber wallet.{ajatempel}.bak'iks, jäägi või tehingute ebakõlade puhul tuleks teha backup'ist taastamine. - + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + Attempt to recover private keys from a corrupt wallet.dat Püüa vigasest wallet.dat failist taastada turvavõtmed - + Myriadcoin Core Daemon + + + Block creation options: Blokeeri loomise valikud: - + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + Connect only to the specified node(s) Ühendu ainult määratud node'i(de)ga - + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + Corrupted block database detected Tuvastati vigane bloki andmebaas - + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + Discover own IP address (default: 1 when listening and no -externalip) Leia oma IP aadress (vaikeväärtus: 1, kui kuulatakse ning puudub -externalip) - + Do not load the wallet and disable wallet RPC calls + + + Do you want to rebuild the block database now? Kas soovid bloki andmebaasi taastada? - Error initializing block database Tõrge bloki andmebaasi käivitamisel - Error initializing wallet database environment %s! Tõrge rahakoti keskkonna %s käivitamisel! - Error loading block database Tõrge bloki baasi lugemisel - Error opening block database Tõrge bloki andmebaasi avamisel - Error: Disk space is low! Tõrge: liiga vähe kettaruumi! - Error: Wallet locked, unable to create transaction! Tõrge: Rahakott on lukus, tehingu loomine ei ole võimalik! - Error: system error: Tõrge: süsteemi tõrge: - Failed to listen on any port. Use -listen=0 if you want this. Pordi kuulamine nurjus. Soovikorral kasuta -listen=0. - Failed to read block info Tõrge bloki sisu lugemisel - Failed to read block Bloki lugemine ebaõnnestus - Failed to sync block index Bloki indeksi sünkimine ebaõnnestus - Failed to write block index Bloki indeksi kirjutamine ebaõnnestus - Failed to write block info Bloki sisu kirjutamine ebaõnnestus - Failed to write block Tõrge bloki sisu kirjutamisel - Failed to write file info Tõrge faili info kirjutamisel - Failed to write to coin database Tõrge mündi andmebaasi kirjutamisel - Failed to write transaction index Tehingu indeksi kirjutamine ebaõnnestus - Failed to write undo data Tagasivõtmise andmete kirjutamine ebaõnnestus - + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + Find peers using DNS lookup (default: 1 unless -connect) Otsi DNS'i lookup'i kastavaid peere (vaikeväärtus: 1, kui mitte -connect) - + Force safe mode (default: 0) + + + Generate coins (default: 0) - How many blocks to check at startup (default: 288, 0 = all) Käivitamisel kontrollitavate blokkide arv (vaikeväärtus: 288, 0=kõik) - - How thorough the block verification is (0-4, default: 3) - Blokkide kontrollimise põhjalikkus (0-4, vaikeväärtus: 3) + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' + - Not enough file descriptors available. - + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + Rebuild block chain index from current blk000??.dat files Taasta bloki jada indeks blk000??.dat failist - + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + Set the number of threads to service RPC calls (default: 4) Määra RPC kõnede haldurite arv (vaikeväärtus: 4) - + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + Verifying blocks... Kontrollin blokke... - Verifying wallet... Kontrollin rahakotti... - + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + + + Imports blocks from external blk000??.dat file Impordi blokid välisest blk000??.dat failist - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) - Information Informatsioon - - Invalid -tor address: '%s' - Vigane -tor aadress: '%s' - - - Invalid amount for -minrelaytxfee=<amount>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' - + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + Maintain a full transaction index (default: 0) Säilita kogu tehingu indeks (vaikeväärtus: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) Maksimaalne saamise puhver -connection kohta , <n>*1000 baiti (vaikeväärtus: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) Maksimaalne saatmise puhver -connection kohta , <n>*1000 baiti (vaikeväärtus: 1000) - Only accept block chain matching built-in checkpoints (default: 1) Tunnusta ainult sisseehitatud turvapunktidele vastavaid bloki jadu (vaikeväärtus: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Ühenda ainult node'idega <net> võrgus (IPv4, IPv6 või Tor) - - Output extra debugging information. Implies all other -debug* options - Väljund lisa debug'imise infoks. Tuleneb kõikidest teistest -debug* valikutest + Print block on startup, if found in block index + - - Output extra network debugging information - Lisa võrgu debug'imise info väljund + Print block tree on startup (default: 0) + - - Prepend debug output with timestamp - Varusta debugi väljund ajatempliga + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) - SSL valikud: (vaata Myriadcoini Wikist või SSL sätete juhendist) + SSL valikud: (vaata Bitcoini Wikist või SSL sätete juhendist) - - Select the version of socks proxy to use (4-5, default: 5) - Vali turva proxi SOCKS versioon (4-5, vaikeväärtus: 5) + Send command to Myriadcoin Core + - Send trace/debug info to console instead of debug.log file Saada jälitus/debug, debug.log faili asemel, konsooli - - Send trace/debug info to debugger - Saada jälitus/debug info debuggerile - - - - Set maximum block size in bytes (default: 250000) - Sea maksimaalne bloki suurus baitides (vaikeväärtus: 250000) - - - Set minimum block size in bytes (default: 0) Sea minimaalne bloki suurus baitides (vaikeväärtus: 0) - + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + Shrink debug.log file on client startup (default: 1 when no -debug) Kahanda programmi käivitamisel debug.log faili (vaikeväärtus: 1, kui ei ole -debug) - Signing transaction failed - Specify connection timeout in milliseconds (default: 5000) Sea ühenduse timeout millisekundites (vaikeväärtus: 5000) - + Start Myriadcoin Core Daemon + + + System error: Süsteemi tõrge: - Transaction amount too small - Transaction amounts must be positive - Transaction too large - Use UPnP to map the listening port (default: 0) Kasuta kuulatava pordi määramiseks UPnP ühendust (vaikeväärtus: 0) - Use UPnP to map the listening port (default: 1 when listening) Kasuta kuulatava pordi määramiseks UPnP ühendust (vaikeväärtus: 1, kui kuulatakse) - - Use proxy to reach tor hidden services (default: same as -proxy) - Kasuta varjatud teenustele ligipääsuks proxy't (vaikeväärtus: sama, mis -proxy) - - - Username for JSON-RPC connections JSON-RPC ühenduste kasutajatunnus - Warning Hoiatus - Warning: This version is obsolete, upgrade required! Hoiatus: versioon on aegunud, uuendus on nõutav! - - You need to rebuild the databases using -reindex to change -txindex - Andmebaas tuleb taastada kasutades -reindex, et muuta -txindex + Zapping all transactions from wallet... + + + + on startup + + + + version + versioon - wallet.dat corrupt, salvage failed wallet.dat fail on katki, päästmine ebaõnnestus - Password for JSON-RPC connections JSON-RPC ühenduste salasõna - Allow JSON-RPC connections from specified IP address JSON-RPC ühenduste lubamine kindla IP pealt - Send commands to node running on <ip> (default: 127.0.0.1) Saada käsklusi node'ile IP'ga <ip> (vaikeväärtus: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) Käivita käsklus, kui parim plokk muutub (käskluse %s asendatakse ploki hash'iga) - Upgrade wallet to latest format Uuenda rahakott uusimasse vormingusse - Set key pool size to <n> (default: 100) Sea võtmete hulgaks <n> (vaikeväärtus: 100) - Rescan the block chain for missing wallet transactions Otsi ploki jadast rahakoti kadunud tehinguid - Use OpenSSL (https) for JSON-RPC connections Kasuta JSON-RPC ühenduste jaoks OpenSSL'i (https) - Server certificate file (default: server.cert) Serveri sertifikaadifail (vaikeväärtus: server.cert) - Server private key (default: server.pem) Serveri privaatvõti (vaikeväärtus: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Lubatud šiffrid (vaikeväärtus: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - This help message Käesolev abitekst - Unable to bind to %s on this computer (bind returned error %d, %s) Selle arvutiga ei ole võimalik siduda %s külge (katse nurjus %d, %s tõttu) - - Connect through socks proxy - Ühendu läbi turva proxi - - - Allow DNS lookups for -addnode, -seednode and -connect -addnode, -seednode ja -connect tohivad kasutada DNS lookup'i - Loading addresses... Aadresside laadimine... - Error loading wallet.dat: Wallet corrupted Viga wallet.dat käivitamisel. Vigane rahakkott - Error loading wallet.dat: Wallet requires newer version of Myriadcoin - Viga wallet.dat käivitamisel: Rahakott nõuab Myriadcoini uusimat versiooni + Viga wallet.dat käivitamisel: Rahakott nõuab Bitcoini uusimat versiooni - Wallet needed to be rewritten: restart Myriadcoin to complete Rahakott tuli ümberkirjutada: toimingu lõpetamiseks taaskäivita Myriadcoin - Error loading wallet.dat Viga wallet.dat käivitamisel - Invalid -proxy address: '%s' Vigane -proxi aadress: '%s' - Unknown network specified in -onlynet: '%s' Kirjeldatud tundmatu võrgustik -onlynet'is: '%s' - Unknown -socks proxy version requested: %i Küsitud tundmatu -socks proxi versioon: %i - Cannot resolve -bind address: '%s' Tundmatu -bind aadress: '%s' - Cannot resolve -externalip address: '%s' Tundmatu -externalip aadress: '%s' - Invalid amount for -paytxfee=<amount>: '%s' -paytxfee=<amount> jaoks vigane kogus: '%s' - Invalid amount Kehtetu summa - Insufficient funds Liiga suur summa - Loading block index... Klotside indeksi laadimine... - Add a node to connect to and attempt to keep the connection open Lisa node ning hoia ühendus avatud - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - %s'ga ei ole võimalik sellest arvutist siduda. Myriadcoin juba töötab. - - - - Fee per KB to add to transactions you send - Minu saadetavate tehingute lisatasu KB kohta - - - Loading wallet... Rahakoti laadimine... - Cannot downgrade wallet Rahakoti vanandamine ebaõnnestus - Cannot write default address Tõrge vaikimisi aadressi kirjutamisel - Rescanning... Üleskaneerimine... - Done loading Laetud - To use the %s option %s valiku kasutamine - Error Tõrge - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_eu_ES.ts b/src/qt/locale/bitcoin_eu_ES.ts index 5ba4a6d4..3f989c69 100644 --- a/src/qt/locale/bitcoin_eu_ES.ts +++ b/src/qt/locale/bitcoin_eu_ES.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - Myriadcoin-i buruz + About Myriadcoin Core + - - <b>Myriadcoin</b> version - <b>Myriadcoin</b> bertsioa + <b>Myriadcoin Core</b> version + - This is experimental software. @@ -23,153 +19,128 @@ This product includes software developed by the OpenSSL Project for use in the O - Copyright - - The Myriadcoin developers + The Myriadcoin Core developers + + + + (%1-bit) AddressBookPage - - Address Book - Helbide-liburua - - - Double-click to edit address or label Klik bikoitza helbidea edo etiketa editatzeko - Create a new address Sortu helbide berria - + &New + + + Copy the currently selected address to the system clipboard Kopiatu hautatutako helbidea sistemaren arbelera - - &New Address + &Copy - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + C&lose - &Copy Address - - Show &QR Code - Erakutsi &QR kodea - - - - Sign a message to prove you own a Myriadcoin address - - - - - Sign &Message - - - - Delete the currently selected address from the list - Export the data in the current tab to a file - &Export - - Verify a message to ensure it was signed with a specified Myriadcoin address - - - - - &Verify Message - - - - &Delete &Ezabatu - + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + Copy &Label - &Edit - - Send &Coins + Export Address List - - Export Address Book Data - Esportatu Helbide-liburuaren datuak - - - Comma separated file (*.csv) Komaz bereizitako artxiboa (*.csv) - - Error exporting - Errorea esportatzean + Exporting Failed + - - Could not write to file %1. - Ezin idatzi %1 artxiboan. + There was an error trying to save the address list to %1. + AddressTableModel - Label Etiketa - Address Helbidea - (no label) (etiketarik ez) @@ -177,140 +148,106 @@ This product includes software developed by the OpenSSL Project for use in the O AskPassphraseDialog - Passphrase Dialog - Enter passphrase Sartu pasahitza - New passphrase Pasahitz berria - Repeat new passphrase Errepikatu pasahitz berria - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. Sartu zorrorako pasahitz berria.<br/> Mesedez erabili <b>gutxienez ausazko 10 karaktere</b>, edo <b>gutxienez zortzi hitz</b> pasahitza osatzeko. - Encrypt wallet Enkriptatu zorroa - This operation needs your wallet passphrase to unlock the wallet. Eragiketa honek zorroaren pasahitza behar du zorroa desblokeatzeko. - Unlock wallet Desblokeatu zorroa - This operation needs your wallet passphrase to decrypt the wallet. Eragiketa honek zure zorroaren pasahitza behar du, zorroa desenkriptatzeko. - Decrypt wallet Desenkriptatu zorroa - Change passphrase Aldatu pasahitza - Enter the old and new passphrase to the wallet. Sartu zorroaren pasahitz zaharra eta berria. - Confirm wallet encryption Berretsi zorroaren enkriptazioa - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! - Are you sure you wish to encrypt your wallet? - 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. - - Warning: The Caps Lock key is on! - - Wallet encrypted Zorroa enkriptatuta - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. - - - - Wallet encryption failed Zorroaren enkriptazioak huts egin du - Wallet encryption failed due to an internal error. Your wallet was not encrypted. Zorroaren enkriptazioak huts egin du barne-errore baten ondorioz. Zure zorroa ez da enkriptatu. - - The supplied passphrases do not match. Eman dituzun pasahitzak ez datoz bat. - Wallet unlock failed Zorroaren desblokeoak huts egin du - - - The passphrase entered for the wallet decryption was incorrect. Zorroa desenkriptatzeko sartutako pasahitza okerra da. - Wallet decryption failed Zorroaren desenkriptazioak huts egin du - Wallet passphrase was successfully changed. @@ -318,319 +255,286 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - Sign &message... - Synchronizing with network... Sarearekin sinkronizatzen... - &Overview &Gainbegiratu - + Node + + + Show general overview of wallet Ikusi zorroaren begirada orokorra - &Transactions &Transakzioak - Browse transaction history Ikusi transakzioen historia - - Edit the list of stored addresses and labels - Editatu gordetako helbide eta etiketen zerrenda - - - - Show the list of addresses for receiving payments - Erakutsi ordainketak jasotzeko helbideen zerrenda - - - E&xit Irten - Quit application Irten aplikaziotik - Show information about Myriadcoin - Erakutsi Myriadcoin-i buruzko informazioa + Erakutsi Bitcoin-i buruzko informazioa - About &Qt &Qt-ari buruz - Show information about Qt - Erakutsi Myriadcoin-i buruzko informazioa + Erakutsi Bitcoin-i buruzko informazioa - &Options... &Aukerak... - &Encrypt Wallet... - &Backup Wallet... - &Change Passphrase... - + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + Importing blocks from disk... - Reindexing blocks on disk... - Send coins to a Myriadcoin address - Modify configuration options for Myriadcoin - Backup wallet to another location - Change the passphrase used for wallet encryption Aldatu zorroa enkriptatzeko erabilitako pasahitza - &Debug window - Open debugging and diagnostic console - &Verify message... - - Myriadcoin - Wallet - &Send - &Receive - - &Addresses - - - - - &About Myriadcoin - - - - &Show / Hide - Show or hide the main Window - Encrypt the private keys that belong to your wallet - Sign messages with your Myriadcoin addresses to prove you own them - Verify messages to ensure they were signed with specified Myriadcoin addresses - &File &Artxiboa - &Settings &Ezarpenak - &Help &Laguntza - Tabs toolbar Fitxen tresna-barra - - [testnet] [testnet] - + Myriadcoin Core + + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + Myriadcoin client - %n active connection(s) to Myriadcoin network - Konexio aktibo %n Myriadcoin-en sarera%n konexio aktibo Myriadcoin-en sarera + Konexio aktibo %n Bitcoin-en sarera%n konexio aktibo Bitcoin-en sarera - No block source available... - Processed %1 of %2 (estimated) blocks of transaction history. - Processed %1 blocks of transaction history. - %n hour(s) - %n day(s) - %n week(s) - + %1 and %2 + + + + %n year(s) + + + %1 behind - Last received block was generated %1 ago. - Transactions after this will not yet be visible. - Error - Warning - Information - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - Up to date Egunean - Catching up... Eguneratzen... - - Confirm transaction fee - - - - Sent transaction Bidalitako transakzioa - Incoming transaction Sarrerako transakzioa - Date: %1 Amount: %2 Type: %3 @@ -639,29 +543,14 @@ Address: %4 - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> Zorroa <b>enkriptatuta</b> eta <b>desblokeatuta</b> dago une honetan - Wallet is <b>encrypted</b> and currently <b>locked</b> Zorroa <b>enkriptatuta</b> eta <b>blokeatuta</b> dago une honetan - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. @@ -669,329 +558,647 @@ Address: %4 ClientModel - Network Alert + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + + + + Bytes: + + + + Amount: + Kopurua + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + Kopurua + + + Address + Helbidea + + + Date + Data + + + Confirmations + + + + Confirmed + + + + Priority + + + + Copy address + Kopiatu helbidea + + + Copy label + Kopiatu etiketa + + + Copy amount + + + + Copy transaction ID + + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + + + + Dust + + + + yes + + + + no + + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + (etiketarik ez) + + + change from %1 (%2) + + + + (change) + + + EditAddressDialog - Edit Address Editatu helbidea - &Label &Etiketa - - The label associated with this address book entry - Helbide-liburuko sarrera honekin lotutako etiketa + The label associated with this address list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + - &Address &Helbidea - - The address associated with this address book entry. This can only be modified for sending addresses. - Helbide-liburuko sarrera honekin lotutako helbidea. Bidaltzeko helbideeta soilik alda daiteke. - - - New receiving address Jasotzeko helbide berria - New sending address Bidaltzeko helbide berria - Edit receiving address Editatu jasotzeko helbidea - Edit sending address Editatu bidaltzeko helbidea - The entered address "%1" is already in the address book. Sartu berri den helbidea, "%1", helbide-liburuan dago jadanik. - The entered address "%1" is not a valid Myriadcoin address. - Could not unlock wallet. Ezin desblokeatu zorroa. - New key generation failed. Gako berriaren sorrerak huts egin du. - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt + A new data directory will be created. + + + + name + + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core - version - Usage: - command-line options - UI options - Set language, for example "de_DE" (default: system locale) - Start minimized - + Set SSL root certificates for payment request (default: -system-) + + + Show splash screen on startup (default: 1) + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + + + + Error: Specified data directory "%1" can not be created. + + + + Error + + + + GB of free space available + + + + (of %1GB needed) + + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open + + OptionsDialog - Options Aukerak - &Main - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. - Pay transaction &fee - Automatically start Myriadcoin after logging in to the system. - &Start Myriadcoin on system login - + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + Reset all client options to default. - &Reset Options - &Network - + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. - Map port using &UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - - - - - &Connect through SOCKS proxy: - - - - Proxy &IP: - - IP address of the proxy (e.g. 127.0.0.1) - - - - &Port: - Port of the proxy (e.g. 9050) - SOCKS &Version: - SOCKS version of the proxy (e.g. 5) - &Window - Show only a tray icon after minimizing the window. - &Minimize to the tray instead of the taskbar - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. - M&inimize on close - &Display - User Interface &language: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. - &Unit to show amounts in: - Choose the default subdivision unit to show in the interface and when sending coins. - Whether to show Myriadcoin addresses in the transaction list or not. - &Display addresses in transaction list - + Whether to show coin control features or not. + + + &OK - &Cancel - - &Apply - - - - default - + none + + + Confirm options reset - - Some settings may require a client restart to take effect. + Client restart required to activate changes. - - Do you want to proceed? + Client will be shutdown, do you want to proceed? - - - Warning + This change would require a client restart. - - - This setting will take effect after restarting Myriadcoin. - - - - The supplied proxy address is invalid. @@ -999,59 +1206,54 @@ Address: %4 OverviewPage - Form Inprimakia - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. - - Balance: - Saldoa: - - - - Unconfirmed: - Konfirmatu gabe: - - - Wallet - + Available: + + + + Your current spendable balance + + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + + + Immature: - Mined balance that has not yet matured - + Total: + + + + Your current total balance + + + <b>Recent transactions</b> <b>Azken transakzioak</b> - - Your current balance - Zure uneko saldoa - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - Oraindik konfirmatu gabe daudenez, uneko saldoab kontatu gabe dagoen transakzio kopurua - - - - out of sync @@ -1059,579 +1261,856 @@ Address: %4 PaymentServer - + URI handling + + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + Cannot start myriadcoin: click-to-pay handler + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + + + + Network request error + + - QRCodeDialog + QObject - - QR Code Dialog + Myriadcoin - - Request Payment + Error: Specified data directory "%1" does not exist. - - Amount: - Kopurua - - - - Label: - &Etiketa: - - - - Message: - Mezua - - - - &Save As... - Gorde honela... - - - - Error encoding URI into QR Code. + Error: Cannot parse configuration file: %1. Only use key=value syntax. - - The entered amount is invalid, please check. + Error: Invalid combination of -regtest and -testnet. - - Resulting URI too long, try to reduce the text for label / message. + Myriadcoin Core didn't yet exit safely... + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Sartu Bitocin helbide bat (adb.: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + + + + &Copy Image - Save QR Code - - PNG Images (*.png) + PNG Image (*.png) RPCConsole - Client name - - - - - - - - - - N/A - Client version - &Information - + Debug window + + + + General + + + Using OpenSSL version - Startup time - Network - + Name + + + Number of connections - - On testnet - - - - Block chain - Current number of blocks - Estimated total blocks - Last block time - &Open - - Command-line options - - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - - - - - &Show - - - - &Console - + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + Build date - - Myriadcoin - Debug window - - - - - Myriadcoin Core - - - - Debug log file - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. - Clear console - Welcome to the Myriadcoin RPC console. - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Type <b>help</b> for an overview of available commands. + + %1 B + + + + %1 KB + + + + %1 MB + + + + %1 GB + + + + %1 m + + + + %1 h + + + + %1 h %2 m + + + + + ReceiveCoinsDialog + + &Amount: + + + + &Label: + &Etiketa: + + + &Message: + + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + + + + Clear + + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + + + + Remove the selected entries from the list + + + + Remove + + + + Copy label + Kopiatu etiketa + + + Copy message + + + + Copy amount + + + + + ReceiveRequestDialog + + QR Code + + + + Copy &URI + + + + Copy &Address + + + + &Save Image... + + + + Request payment to %1 + + + + Payment information + + + + URI + + + + Address + Helbidea + + + Amount + Kopurua + + + Label + Etiketa + + + Message + + + + Resulting URI too long, try to reduce the text for label / message. + + + + Error encoding URI into QR Code. + + + + + RecentRequestsTableModel + + Date + Data + + + Label + Etiketa + + + Message + + + + Amount + Kopurua + + + (no label) + (etiketarik ez) + + + (no message) + + + + (no amount) + + SendCoinsDialog - - - - - - - - Send Coins Bidali txanponak - + Coin Control Features + + + + Inputs... + + + + automatically selected + + + + Insufficient funds! + + + + Quantity: + + + + Bytes: + + + + Amount: + Kopurua + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + Send to multiple recipients at once Bidali hainbat jasotzaileri batera - Add &Recipient - - Remove all transaction fields + Clear all fields of the form. - Clear &All - Balance: Saldoa: - - 123.456 BTC - 123.456 BTC - - - Confirm the send action Berretsi bidaltzeko ekintza - S&end - - <b>%1</b> to %2 (%3) - <b>%1</b> honi: %2 (%3) - - - Confirm send coins Berretsi txanponak bidaltzea - - Are you sure you want to send %1? - Ziur zaude %1 bidali nahi duzula? + %1 to %2 + - - and - eta + Copy quantity + + + + Copy amount + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + + + + or + - The recipient address is not valid, please recheck. - The amount to pay must be larger than 0. Ordaintzeko kopurua 0 baino handiagoa izan behar du. - The amount exceeds your balance. - The total exceeds your balance when the %1 transaction fee is included. - Duplicate address found, can only send to each address once per send operation. - - Error: Transaction creation failed! + Transaction creation failed! - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + + + + (no label) + (etiketarik ez) + + + Warning: Unknown change address + + + + Are you sure you want to send? + + + + added as transaction fee + + + + Payment request expired + + + + Invalid payment address %1 SendCoinsEntry - - Form - Inprimakia - - - A&mount: K&opurua: - Pay &To: Ordaindu &honi: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book Sartu etiketa bat helbide honetarako, eta gehitu zure helbide-liburuan - &Label: &Etiketa: - - Choose address from address book + Choose previously used address + + + + This is a normal payment. - Alt+A Alt+A - Paste address from clipboard Itsatsi helbidea arbeletik - Alt+P Alt+P - - Remove this recipient - Ezabatu jasotzaile hau + Remove this entry + - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Sartu Bitocin helbide bat (adb.: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + Mezua + + + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. + SignVerifyMessageDialog - Signatures - Sign / Verify a Message - &Sign Message - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book + Choose previously used address - - Alt+A Alt+A - Paste address from clipboard Itsatsi helbidea arbeletik - Alt+P Alt+P - Enter the message you want to sign here - Signature - Copy the current signature to the system clipboard - Sign the message to prove you own this Myriadcoin address - Sign &Message - Reset all sign message fields - - Clear &All - &Verify Message - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address - Verify &Message - Reset all verify message fields - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Sartu Bitocin helbide bat (adb.: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature - - Enter Myriadcoin signature - - - - - The entered address is invalid. - - - - Please check the address and try again. - - The entered address does not refer to a key. - Wallet unlock was cancelled. - Private key for the entered address is not available. - Message signing failed. - Message signed. - The signature could not be decoded. - - Please check the signature and try again. - The signature did not match the message digest. - Message verification failed. - Message verified. @@ -1639,186 +2118,160 @@ Address: %4 SplashScreen - - The Myriadcoin developers + Myriadcoin Core + + + + The Myriadcoin Core developers - [testnet] + + TrafficGraphWidget + + KB/s + + + TransactionDesc - Open until %1 Zabalik %1 arte - + conflicted + + + %1/offline - %1/unconfirmed %1/konfirmatu gabe - %1 confirmations %1 konfirmazioak - Status - , broadcast through %n node(s) - Date Data - Source - Generated - - From - - - To - - own address - label - - - - - Credit - matures in %n more block(s) - not accepted - - - - Debit - Transaction fee - Net amount - Message - Comment - Transaction ID - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Merchant + + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Debug information - Transaction - Inputs - Amount Kopurua - true - false - , has not been successfully broadcast yet , ez da arrakastaz emititu oraindik - Open for %n more block(s) - unknown ezezaguna @@ -1826,12 +2279,10 @@ Address: %4 TransactionDescDialog - Transaction details Transakzioaren xehetasunak - This pane shows a detailed description of the transaction Panel honek transakzioaren deskribapen xehea erakusten du @@ -1839,117 +2290,102 @@ Address: %4 TransactionTableModel - Date Data - Type Mota - Address Helbidea - Amount Kopurua + + Immature (%1 confirmations, will be available after %2) + + - Open for %n more block(s) - Open until %1 Zabalik %1 arte - - Offline (%1 confirmations) - Offline (%1 konfirmazio) - - - - Unconfirmed (%1 of %2 confirmations) - - - - Confirmed (%1 confirmations) Konfirmatuta (%1 konfirmazio) - - - Mined balance will be available when it matures in %n more block(s) - - - This block was not received by any other nodes and will probably not be accepted! Bloke hau ez du beste inongo nodorik jaso, eta seguruenik ez da onartuko! - Generated but not accepted Sortua, baina ez onartua - + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + Received with Jasoa honekin: - Received from - Sent to Honi bidalia: - Payment to yourself Ordainketa zeure buruari - Mined Bildua - (n/a) (n/a) - Transaction status. Hover over this field to show number of confirmations. Transakzioaren egoera. Pasatu sagua gainetik konfirmazio kopurua ikusteko. - Date and time that the transaction was received. Transakzioa jasotako data eta ordua. - Type of transaction. Transakzio mota. - Destination address of transaction. Transakzioaren xede-helbidea. - Amount removed from or added to balance. Saldoan kendu edo gehitutako kopurua. @@ -1957,176 +2393,156 @@ Address: %4 TransactionView - - All Denak - Today Gaur - This week Aste honetan - This month Hil honetan - Last month Azken hilean - This year Aurten - Range... Muga... - Received with Jasota honekin: - Sent to Hona bidalia: - To yourself Zeure buruari - Mined Bildua - Other Beste - Enter address or label to search Sartu bilatzeko helbide edo etiketa - Min amount Kopuru minimoa - Copy address Kopiatu helbidea - Copy label Kopiatu etiketa - Copy amount - Copy transaction ID - Edit label - Show transaction details - - Export Transaction Data - Transakzioaren xehetasunak + Export Transaction History + + + + Exporting Failed + + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + + + + The transaction history was successfully saved to %1. + - Comma separated file (*.csv) Komaz bereizitako artxiboa (*.csv) - Confirmed - Date Data - Type Mota - Label Etiketa - Address Helbidea - Amount Kopurua - ID - - Error exporting - Errorea esportatzean - - - - Could not write to file %1. - Ezin idatzi %1 artxiboan. - - - Range: - to + + WalletFrame + + No wallet has been loaded. + + + WalletModel - Send Coins @@ -2134,160 +2550,121 @@ Address: %4 WalletView - &Export - Export the data in the current tab to a file - Backup Wallet - Wallet Data (*.dat) - Backup Failed - - There was an error trying to save the wallet data to the new location. + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. - Backup Successful - - - The wallet data was successfully saved to the new location. - - bitcoin-core - - Myriadcoin version - Botcoin bertsioa - - - Usage: - - Send command to -server or myriadcoind - - - - List commands Komandoen lista - Get help for a command Laguntza komando batean - Options: Aukerak - Specify configuration file (default: myriadcoin.conf) Ezarpen fitxategia aukeratu (berezkoa: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) pid fitxategia aukeratu (berezkoa: myriadcoind.pid) - Specify data directory - - Set database cache size in megabytes (default: 25) - - - - Listen for connections on <port> (default: 8333 or testnet: 18333) - Maintain at most <n> connections to peers (default: 125) - Connect to a node to retrieve peer addresses, and disconnect - Specify your own public address - Threshold for disconnecting misbehaving peers (default: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) - Accept command line and JSON-RPC commands - + Myriadcoin Core RPC client version + + + Run in the background as a daemon and accept commands - Use the test network - Accept connections from outside (default: 1 if no -proxy or -connect) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2302,612 +2679,686 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications - + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. - + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + Attempt to recover private keys from a corrupt wallet.dat - + Myriadcoin Core Daemon + + + Block creation options: - + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + Connect only to the specified node(s) - + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + Corrupted block database detected - + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + Discover own IP address (default: 1 when listening and no -externalip) - + Do not load the wallet and disable wallet RPC calls + + + Do you want to rebuild the block database now? - Error initializing block database - Error initializing wallet database environment %s! - Error loading block database - Error opening block database - Error: Disk space is low! - Error: Wallet locked, unable to create transaction! - Error: system error: - Failed to listen on any port. Use -listen=0 if you want this. - Failed to read block info - Failed to read block - Failed to sync block index - Failed to write block index - Failed to write block info - Failed to write block - Failed to write file info - Failed to write to coin database - Failed to write transaction index - Failed to write undo data - + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + Find peers using DNS lookup (default: 1 unless -connect) - + Force safe mode (default: 0) + + + Generate coins (default: 0) - How many blocks to check at startup (default: 288, 0 = all) - - How thorough the block verification is (0-4, default: 3) + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' - Not enough file descriptors available. - + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + Rebuild block chain index from current blk000??.dat files - + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + Set the number of threads to service RPC calls (default: 4) - + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + Verifying blocks... - Verifying wallet... - + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + + + Imports blocks from external blk000??.dat file - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) - Information - - Invalid -tor address: '%s' - - - - Invalid amount for -minrelaytxfee=<amount>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' - + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + Maintain a full transaction index (default: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Only accept block chain matching built-in checkpoints (default: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - Output extra debugging information. Implies all other -debug* options + Print block on startup, if found in block index - - Output extra network debugging information + Print block tree on startup (default: 0) - - Prepend debug output with timestamp + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) - - Select the version of socks proxy to use (4-5, default: 5) + Send command to Myriadcoin Core - Send trace/debug info to console instead of debug.log file - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - Set minimum block size in bytes (default: 0) - + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + Shrink debug.log file on client startup (default: 1 when no -debug) - Signing transaction failed - Specify connection timeout in milliseconds (default: 5000) - + Start Myriadcoin Core Daemon + + + System error: - Transaction amount too small - Transaction amounts must be positive - Transaction too large - Use UPnP to map the listening port (default: 0) - Use UPnP to map the listening port (default: 1 when listening) - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - Username for JSON-RPC connections - Warning - Warning: This version is obsolete, upgrade required! - - You need to rebuild the databases using -reindex to change -txindex + Zapping all transactions from wallet... + + + + on startup + + + + version - wallet.dat corrupt, salvage failed - Password for JSON-RPC connections - Allow JSON-RPC connections from specified IP address - Send commands to node running on <ip> (default: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) - Upgrade wallet to latest format - Set key pool size to <n> (default: 100) - Rescan the block chain for missing wallet transactions - Use OpenSSL (https) for JSON-RPC connections - Server certificate file (default: server.cert) - Server private key (default: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - This help message Laguntza mezu hau - Unable to bind to %s on this computer (bind returned error %d, %s) - - Connect through socks proxy - - - - Allow DNS lookups for -addnode, -seednode and -connect - Loading addresses... - Error loading wallet.dat: Wallet corrupted - Error loading wallet.dat: Wallet requires newer version of Myriadcoin - Wallet needed to be rewritten: restart Myriadcoin to complete - Error loading wallet.dat - Invalid -proxy address: '%s' - Unknown network specified in -onlynet: '%s' - Unknown -socks proxy version requested: %i - Cannot resolve -bind address: '%s' - Cannot resolve -externalip address: '%s' - Invalid amount for -paytxfee=<amount>: '%s' - Invalid amount - Insufficient funds - Loading block index... - Add a node to connect to and attempt to keep the connection open - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - Loading wallet... - Cannot downgrade wallet - Cannot write default address - Rescanning... Birbilatzen... - Done loading Zamaketa amaitua - To use the %s option - Error - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_fa.ts b/src/qt/locale/bitcoin_fa.ts index 1b26bbf4..2a69d557 100644 --- a/src/qt/locale/bitcoin_fa.ts +++ b/src/qt/locale/bitcoin_fa.ts @@ -1,2300 +1,2674 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - در مورد Myriadcoin + About Myriadcoin Core + - - <b>Myriadcoin</b> version - نسخه Myriadcoin + <b>Myriadcoin Core</b> version + - This is experimental software. Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - ⏎ ⏎ این نسخه نرم افزار آزمایشی است⏎ ⏎ نرم افزار تحت لیسانس MIT/X11 منتشر شده است. به فایل coping یا آدرس http://www.opensource.org/licenses/mit-license.php. مراجعه شود⏎ ⏎ این محصول شامل نرم افزاری است که با OpenSSL برای استفاده از OpenSSL Toolkit (http://www.openssl.org/) و نرم افزار نوشته شده توسط اریک یانگ (eay@cryptsoft.com ) و UPnP توسط توماس برنارد طراحی شده است. + ⏎ ⏎ این یک نرم‌افزار آزمایشی است⏎ ⏎ نرم افزار تحت مجوز MIT/X11 منتشر شده است. پروندهٔ COPYING یا نشانی http://www.opensource.org/licenses/mit-license.php. را ببینید⏎ ⏎ این محصول شامل نرم‌افزار توسعه داده‌شده در پروژهٔ OpenSSL است. در این نرم‌افزار از OpenSSL Toolkit (http://www.openssl.org/) و نرم‌افزار رمزنگاری نوشته شده توسط اریک یانگ (eay@cryptsoft.com) و UPnP توسط توماس برنارد استفاده شده است. - Copyright + حق تألیف + + + The Myriadcoin Core developers - - The Myriadcoin developers + (%1-bit) AddressBookPage - - Address Book - فهرست آدرس - - - Double-click to edit address or label - برای ویرایش آدرس یا بر چسب دو بار کلیک کنید + برای ویرایش نشانی یا برچسب دوبار کلیک کنید - Create a new address - آدرس جدید ایجاد کنید + ایجاد نشانی جدید + + + &New + - Copy the currently selected address to the system clipboard - آدرس انتخاب شده در سیستم تخته رسم گیره دار کپی کنید + کپی نشانی انتخاب شده به حافظهٔ سیستم - - &New Address - آدرس جدید + &Copy + - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - این آدرسها، آدرسهای myriadcoin شما برای دریافت وجوه هستند. شما ممکن است آدرسهای متفاوت را به هر گیرنده اختصاص دهید که بتوانید مواردی که پرداخت می کنید را پیگیری نمایید + C&lose + - &Copy Address - کپی آدرس + &کپی نشانی - - Show &QR Code - نمایش &کد QR - - - - Sign a message to prove you own a Myriadcoin address - پیام را برای اثبات آدرس Myriadcoin خود امضا کنید - - - - Sign &Message - امضا و پیام - - - Delete the currently selected address from the list - آدرس انتخاب شده در سیستم تخته رسم گیره دا حذف + حذف نشانی انتخاب‌شده از لیست - Export the data in the current tab to a file - داده ها نوارِ جاری را به فایل انتقال دهید + خروجی گرفتن داده‌های برگهٔ فعلی به یک پرونده - &Export - + &صدور - - Verify a message to ensure it was signed with a specified Myriadcoin address - یک پیام را برای حصول اطمینان از ورود به سیستم با آدرس myriadcoin مشخص، شناسایی کنید - - - - &Verify Message - شناسایی پیام - - - &Delete - حذف + &حذف + + + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + - These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + این‌ها نشانی‌های بیت‌کوین شما برای ارسال وجود هستند. همیشه قبل از ارسال سکه‌ها، نشانی دریافت‌کننده و مقدار ارسالی را بررسی کنید. + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. - Copy &Label - کپی و برچسب گذاری + کپی و برچسب‌&گذاری - &Edit - ویرایش + &ویرایش - - Send &Coins + Export Address List - - Export Address Book Data - آدرس انتخاب شده در سیستم تخته رسم گیره دار کپی کنید - - - Comma separated file (*.csv) - Comma separated file (*.csv) + پروندهٔ نوع CSV جداشونده با کاما (*.csv) - - Error exporting - خطای صدور + Exporting Failed + - - Could not write to file %1. - تا فایل %1 نمی شود نوشت + There was an error trying to save the address list to %1. + AddressTableModel - Label - بر چسب + برچسب - Address آدرس - (no label) - بدون برچسب + (بدون برچسب) AskPassphraseDialog - Passphrase Dialog - دیالوگ Passphrase + پنجرهٔ گذرواژه - Enter passphrase - وارد عبارت عبور + گذرواژه را وارد کنید - New passphrase - عبارت عبور نو + گذرواژهٔ جدید - Repeat new passphrase - تکرار عبارت عبور نو + تکرار گذرواژهٔ جدید - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - وارد کنید..&lt;br/&gt عبارت عبور نو در پنجره - 10 یا بیشتر کاراکتورهای تصادفی استفاده کنید &lt;b&gt لطفا عبارت عبور + گذرواژهٔ جدید کیف پول خود را وارد کنید.<br/>لطفاً از گذرواژه‌ای با <b>حداقل ۱۰ حرف تصادفی</b>، یا <b>حداقل هشت کلمه</b> انتخاب کنید. - Encrypt wallet - رمز بندی پنجره + رمزنگاری کیف پول - This operation needs your wallet passphrase to unlock the wallet. - این عملیت نیاز عبارت عبور پنجره شما دارد برای رمز گشایی آن + انجام این عملیات نیازمند گذرواژهٔ کیف پول شما برای باز کردن قفل آن است. - Unlock wallet - تکرار عبارت عبور نو + باز کردن قفل کیف پول - This operation needs your wallet passphrase to decrypt the wallet. - این عملیت نیاز عبارت عبور شما دارد برای رمز بندی آن + انجام این عملیات نیازمند گذرواژهٔ کیف پول شما برای رمزگشایی کردن آن است. - Decrypt wallet - رمز بندی پنجره + رمزگشایی کیف پول - Change passphrase - تغییر عبارت عبور + تغییر گذرواژه - Enter the old and new passphrase to the wallet. - عبارت عبور نو و قدیم در پنجره وارد کنید + گذرواژهٔ قدیمی و جدید کیف پول را وارد کنید. - Confirm wallet encryption - تایید رمز گذاری + تأیید رمزنگاری کیف پول - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! - هشدار: اگر wallet رمزگذاری شود و شما passphrase را گم کنید شما همه اطلاعات myriadcoin را از دست خواهید داد. + هشدار: اگر کیف پول خود را رمزنگاری کنید و گذرواژه را فراموش کنید، <b>تمام دارایی بیت‌کوین خود را از دست خواهید داد</b>! - Are you sure you wish to encrypt your wallet? - آیا اطمینان دارید که می خواهید wallet رمزگذاری شود؟ + آیا مطمئن هستید که می‌خواهید کیف پول خود را رمزنگاری کنید؟ - 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. - + مهم: هر نسخهٔ پشتیبانی که تا کنون از کیف پول خود تهیه کرده‌اید، باید با کیف پول رمزنگاری شدهٔ جدید جایگزین شود. به دلایل امنیتی، پروندهٔ قدیمی کیف پول بدون رمزنگاری، تا زمانی که از کیف پول رمزنگاری‌شدهٔ جدید استفاده نکنید، غیرقابل استفاده خواهد بود. - - Warning: The Caps Lock key is on! - هشدار: Caps lock key روشن است + هشدار: کلید Caps Lock روشن است! - - Wallet encrypted - تغییر عبارت عبور + کیف پول رمزنگاری شد - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. - Biticon هم اکنون بسته می‌شود تا فرایند رمزگذاری را تمام کند. به خاطر داشته باشید که رمزگذاری کیف پولتان نمی‌تواند به طور کامل بیتیکون‌های شما را در برابر دزدیده شدن توسط بدافزارهایی که رایانه شما را آلوده می‌کنند، محافظت نماید. + بیت‌کوین هم اکنون بسته می‌شود تا فرایند رمزگذاری را تمام کند. به خاطر داشته باشید که رمزگذاری کردن کیف پول‌تان نمی‌تواند به طور کامل بیت‌کوین‌های شما را در برابر دزدیده شدن توسط بدافزارهایی که احتمالاً رایانهٔ شما را آلوده می‌کنند، محافظت نماید. - - - - Wallet encryption failed - عبارت عبور نو و قدیم در پنجره وارد کنید + رمزنگاری کیف پول با شکست مواجه شد - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - تنا موفق رمز بندی پنجره ناشی از خطای داخل شد. پنجره شما مرز بندی نشده است + رمزنگاری کیف پول بنا به یک خطای داخلی با شکست مواجه شد. کیف پول شما رمزنگاری نشد. - - The supplied passphrases do not match. - عبارت عبور عرضه تطابق نشد + گذرواژه‌های داده شده با هم تطابق ندارند. - Wallet unlock failed - نجره رمز گذار شد + بازگشایی قفل کیف‌پول با شکست مواجه شد - - - The passphrase entered for the wallet decryption was incorrect. - اموفق رمز بندی پنجر + گذرواژهٔ وارد شده برای رمزگشایی کیف پول نادرست بود. - Wallet decryption failed - ناموفق رمز بندی پنجره + رمزگشایی ناموفق کیف پول - Wallet passphrase was successfully changed. - wallet passphrase با موفقیت تغییر یافت + گذرواژهٔ کیف پول با موفقیت عوض شد. BitcoinGUI - Sign &message... - امضا و پیام + &امضای پیام... - Synchronizing with network... - همگام سازی با شبکه ... + همگام‌سازی با شبکه... - &Overview - بررسی اجمالی + &بررسی اجمالی + + + Node + - Show general overview of wallet - نمای کلی پنجره نشان بده + نمایش بررسی اجمالی کیف پول - &Transactions - &معاملات + &تراکنش‌ها - Browse transaction history - نمایش تاریخ معاملات + مرور تاریخچهٔ تراکنش‌ها - - Edit the list of stored addresses and labels - ویرایش لیست آدرسها و بر چسب های ذخیره ای - - - - Show the list of addresses for receiving payments - نمایش لیست آدرس ها برای در یافت پر داخت ها - - - E&xit - خروج + &خروج - Quit application - خروج از برنامه + خروج از برنامه - Show information about Myriadcoin - نمایش اطلاعات در مورد بیتکویین + نمایش اطلاعات در مورد بیت‌کوین - About &Qt - درباره &Qt + دربارهٔ &کیوت - Show information about Qt - نمایش اطلاعات درباره Qt + نمایش اطلاعات دربارهٔ کیوت - &Options... - تنظیمات... + &تنظیمات... - &Encrypt Wallet... - رمزگذاری wallet + &رمزنگاری کیف پول... - &Backup Wallet... - پشتیبان گیری از wallet + &پیشتیبان‌گیری از کیف پول... - &Change Passphrase... - تغییر Passphrase + &تغییر گذرواژه... + + + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + - Importing blocks from disk... - + دریافت بلوک‌ها از دیسک... - Reindexing blocks on disk... - + بازنشانی بلوک‌ها روی دیسک... - Send coins to a Myriadcoin address - سکه ها را به آدرس bitocin ارسال کن + ارسال وجه به نشانی بیت‌کوین - Modify configuration options for Myriadcoin - انتخابهای پیکربندی را برای myriadcoin اصلاح کن + تغییر و اصلاح تنظیمات پیکربندی بیت‌کوین - Backup wallet to another location - نسخه پیشتیبان wallet را به محل دیگر انتقال دهید + تهیهٔ پشتیبان از کیف پول در یک مکان دیگر - Change the passphrase used for wallet encryption - عبارت عبور رمز گشایی پنجره تغییر کنید + تغییر گذرواژهٔ مورد استفاده در رمزنگاری کیف پول - &Debug window - اشکال زدایی از صفحه + پنجرهٔ ا&شکال‌زدایی - Open debugging and diagnostic console - کنسول اشکال زدایی و تشخیص را باز کنید + باز کردن کنسول خطایابی و اشکال‌زدایی - &Verify message... - بازبینی پیام + با&زبینی پیام... - - Myriadcoin - یت کویین + بیت‌کوین - Wallet - wallet + کیف پول - &Send - + &ارسال - &Receive - + &دریافت - - &Addresses - - - - - &About Myriadcoin - در مورد myriadcoin - - - &Show / Hide &نمایش/ عدم نمایش - Show or hide the main Window - + نمایش یا مخفی‌کردن پنجرهٔ اصلی - Encrypt the private keys that belong to your wallet - + رمزنگاری کلیدهای خصوصی متعلق به کیف پول شما - Sign messages with your Myriadcoin addresses to prove you own them - + برای اثبات اینکه پیام‌ها به شما تعلق دارند، آن‌ها را با نشانی بیت‌کوین خود امضا کنید - Verify messages to ensure they were signed with specified Myriadcoin addresses - + برای حصول اطمینان از اینکه پیام با نشانی بیت‌کوین مشخص شده امضا است یا خیر، پیام را شناسایی کنید - &File - فایل + &فایل - &Settings - تنظیمات + &تنظیمات - &Help - کمک + &کمک‌رسانی - Tabs toolbar - نوار ابزار زبانه ها + نوارابزار برگه‌ها - - [testnet] - آزمایش شبکه + [شبکهٔ آزمایش] + + + Myriadcoin Core + هسته Myriadcoin + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + - Myriadcoin client - مشتری Myriadcoin + کلاینت بیت‌کوین - %n active connection(s) to Myriadcoin network - در صد ارتباطات فعال بیتکویین با شبکه %n + %n ارتباط فعال با شبکهٔ بیت‌کوین - No block source available... - + منبعی برای دریافت بلاک در دسترس نیست... - Processed %1 of %2 (estimated) blocks of transaction history. - + %1 بلاک از مجموع %2 بلاک (تخمینی) تاریخچهٔ تراکنش‌ها پردازش شده است. - Processed %1 blocks of transaction history. - + %1 بلاک از تاریخچهٔ تراکنش‌ها پردازش شده است. - %n hour(s) - + %n ساعت - %n day(s) - + %n روز - %n week(s) + %n هفته + + + %1 and %2 + + + + %n year(s) - %1 behind - + %1 عقب‌تر - Last received block was generated %1 ago. - + آخرین بلاک دریافتی %1 پیش ایجاد شده است. - Transactions after this will not yet be visible. - + تراکنش‌های بعد از این هنوز قابل مشاهده نیستند. - Error - + خطا - Warning - + هشدار - Information - + اطلاعات - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - Up to date - تا تاریخ + وضعیت به‌روز - Catching up... - ابتلا به بالا + به‌روز رسانی... - - Confirm transaction fee - هزینه تراکنش را تایید کنید - - - Sent transaction - معامله ارسال شده + تراکنش ارسال شد - Incoming transaction - معامله در یافت شده + تراکنش دریافت شد - Date: %1 Amount: %2 Type: %3 Address: %4 - تاریخ %1 -مبلغ%2 -نوع %3 -آدرس %4 + تاریخ: %1 +مبلغ: %2 +نوع: %3 +نشانی: %4 + - - - URI handling - مدیریت URI - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - URI قابل تحلیل نیست. این خطا ممکن است به دلیل ادرس MYRIADCOIN اشتباه یا پارامترهای اشتباه URI رخ داده باشد - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - زمایش شبکهه + کیف پول <b>رمزنگاری شده</b> است و هم‌اکنون <b>باز</b> است - Wallet is <b>encrypted</b> and currently <b>locked</b> - زمایش شبکه + کیف پول <b>رمزنگاری شده</b> است و هم‌اکنون <b>قفل</b> است - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. - خطا روی داده است. Myriadcoin نمی تواند بدون مشکل ادامه دهد و باید بسته شود + یک خطای مهلک اتفاق افتاده است. بیت‌کوین نمی‌تواند بدون مشکل به کار خود ادامه دهد و بسته خواهد شد. ClientModel - Network Alert پیام شبکه - EditAddressDialog + CoinControlDialog - - Edit Address - اصلاح آدرس + Coin Control Address Selection + - - &Label - بر چسب + Quantity: + - - The label associated with this address book entry - بر چسب با دفتر آدرس ورود مرتبط است + Bytes: + - - &Address - آدرس + Amount: + مبلغ: - - The address associated with this address book entry. This can only be modified for sending addresses. - آدرس با دفتر آدرس ورودی مرتبط است. این فقط در مورد آدرسهای ارسال شده است + Priority: + - - New receiving address - آدرس در یافت نو + Fee: + - - New sending address - آدرس ارسال نو + Low Output: + - - Edit receiving address - اصلاح آدرس در یافت + After Fee: + - - Edit sending address - اصلاح آدرس ارسال + Change: + - - The entered address "%1" is already in the address book. - %1آدرس وارد شده دیگر در دفتر آدرس است + (un)select all + - - The entered address "%1" is not a valid Myriadcoin address. - آدرس وارد شده %1 یک ادرس صحیح myriadcoin نیست + Tree mode + - - Could not unlock wallet. - رمز گشایی پنجره امکان پذیر نیست + List mode + - - New key generation failed. - کلید نسل جدید ناموفق است + Amount + مبلغ + + + Address + نشانی + + + Date + تاریخ + + + Confirmations + + + + Confirmed + تأیید شده + + + Priority + + + + Copy address + کپی نشانی + + + Copy label + کپی برچسب + + + Copy amount + کپی مقدار + + + Copy transaction ID + کپی شناسهٔ تراکنش + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + + + + Dust + + + + yes + + + + no + + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + (بدون برچسب) + + + change from %1 (%2) + + + + (change) + - GUIUtil::HelpMessageBox + EditAddressDialog - - - Myriadcoin-Qt - Myriadcoin-Qt + Edit Address + ویرایش نشانی + + + &Label + &برچسب + + + The label associated with this address list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + + + + &Address + &نشانی + + + New receiving address + نشانی دریافتی جدید + + + New sending address + نشانی ارسالی جدید + + + Edit receiving address + ویرایش نشانی دریافتی + + + Edit sending address + ویرایش نشانی ارسالی + + + The entered address "%1" is already in the address book. + نشانی وارد شده «%1» در حال حاضر در دفترچه وجود دارد. + + + The entered address "%1" is not a valid Myriadcoin address. + نشانی وارد شده «%1» یک نشانی معتبر بیت‌کوین نیست. + + + Could not unlock wallet. + نمی‌توان کیف پول را رمزگشایی کرد. + + + New key generation failed. + ایجاد کلید جدید با شکست مواجه شد. + + + + FreespaceChecker + + A new data directory will be created. + یک مسیر دادهٔ جدید ایجاد خواهد شد. + + + name + نام + + + Directory already exists. Add %1 if you intend to create a new directory here. + این پوشه در حال حاضر وجود دارد. اگر می‌خواهید یک دایرکتوری جدید در این‌جا ایجاد کنید، %1 را اضافه کنید. + + + Path already exists, and is not a directory. + مسیر داده شده موجود است و به یک پوشه اشاره نمی‌کند. + + + Cannot create data directory here. + نمی‌توان پوشهٔ داده در این‌جا ایجاد کرد. + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core + هسته Myriadcoin - version نسخه - Usage: - ستفاده : + استفاده: - command-line options - انتخابها برای خطوط دستور command line + گزینه‌های خط فرمان - UI options - انتخابهای UI + گزینه‌های رابط کاربری - Set language, for example "de_DE" (default: system locale) - زبان را تنظیم کنید برای مثال "de_DE" (پیش فرض: system locale) + زبان را تنظیم کنید؛ برای مثال «de_DE» (زبان پیش‌فرض محلی) - Start minimized - شروع حد اقل + اجرای برنامه به صورت کوچک‌شده + + + Set SSL root certificates for payment request (default: -system-) + - Show splash screen on startup (default: 1) - نمایش صفحه splash در STARTUP (پیش فرض:1) + نمایش پنجرهٔ خوشامدگویی در ابتدای اجرای برنامه (پیش‌فرض: 1) + + + Choose data directory on startup (default: 0) + انتخاب مسیر داده‌ها در ابتدای اجرای برنامه (پیش‌فرض: 0) + + + + Intro + + Welcome + خوش‌آمدید + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + استفاده از مسیر پیش‌فرض + + + Use a custom data directory: + استفاده از یک مسیر سفارشی: + + + Myriadcoin + بیت‌کوین + + + Error: Specified data directory "%1" can not be created. + خطا: نمی‌توان پوشه‌ای برای داده‌ها در «%1» ایجاد کرد. + + + Error + خطا + + + GB of free space available + گیگابات فضا موجود است + + + (of %1GB needed) + (از %1 گیگابایت فضای مورد نیاز) + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open + OptionsDialog - Options - اصلی + گزینه‌ها - &Main - اصلی + &عمومی - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. - + کارمزد اختیاریِ هر کیلوبایت برای انتقال سریع‌تر تراکنش. اکثر تراکنش‌ها ۱ کیلوبایتی هستند. - Pay transaction &fee - دستمزد&پر داخت معامله + پرداخت &کارمزد تراکنش - Automatically start Myriadcoin after logging in to the system. - در زمان ورود به سیستم به صورت خودکار myriadcoin را اجرا کن + اجرای خودکار بیت‌کوین در زمان ورود به سیستم. - &Start Myriadcoin on system login - اجرای myriadcoin در زمان ورود به سیستم + &اجرای بیت‌کوین با ورود به سیستم + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + - Reset all client options to default. - + بازنشانی تمام تنظیمات به پیش‌فرض. - &Reset Options + &بازنشانی تنظیمات + + + &Network + &شبکه + + + (0 = auto, <0 = leave that many cores free) - - &Network - شبکه + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + - Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. - اتوماتیک باز کردن بندر بیتکویین در روتر . این فقط در مواردی می باشد که روتر با کمک یو پ ن پ کار می کند + باز کردن خودکار درگاه شبکهٔ بیت‌کوین روی روترها. تنها زمانی کار می‌کند که روتر از پروتکل UPnP پشتیبانی کند و این پروتکل فعال باشد. - Map port using &UPnP - درگاه با استفاده از + نگاشت درگاه شبکه با استفاده از پروتکل &UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - اتصال به شبکه MYRIADCOIN از طریق پراکسی ساکس (برای مثال وقتی از طریق نرم افزار TOR متصل می شوید) - - - - &Connect through SOCKS proxy: - اتصال با پراکسی SOCKS - - - Proxy &IP: - پراکسی و آی.پی. + آ&ی‌پی پراکسی: - - IP address of the proxy (e.g. 127.0.0.1) - درس پروکسی - - - &Port: - درگاه + &درگاه: - Port of the proxy (e.g. 9050) درگاه پراکسی (مثال 9050) - SOCKS &Version: - SOCKS و نسخه + &نسخهٔ SOCKS: - SOCKS version of the proxy (e.g. 5) - نسخه SOCKS از پراکسی (مثال 5) + نسخهٔ پراکسی SOCKS (مثلاً 5) - &Window - صفحه + &پنجره - Show only a tray icon after minimizing the window. - tray icon را تنها بعد از کوچک کردن صفحه نمایش بده + تنها بعد از کوچک کردن پنجره، tray icon را نشان بده. - &Minimize to the tray instead of the taskbar - حد اقل رساندن در جای نوار ابزار ها + &کوچک کردن به سینی به‌جای نوار وظیفه - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. - حد اقل رساندن در جای خروج بر نامه وقتیکه پنجره بسته است.وقتیکه این فعال است برنامه خاموش می شود بعد از انتخاب دستور خاموش در منیو + مخفی کردن در نوار کناری به‌جای خروج هنگام بستن پنجره. زمانی که این گزینه فعال است، برنامه فقط با استفاده از گزینهٔ خروج در منو قابل بسته شدن است. - M&inimize on close - کوچک کردن صفحه در زمان بستن + کوچک کردن &در زمان بسته شدن - &Display - نمایش + &نمایش - User Interface &language: - میانجی کاربر و زبان + زبان &رابط کاربری: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. - زبان میانجی کاربر می تواند در اینجا تنظیم شود. این تنظیمات بعد از شروع دوباره RESTART در MYRIADCOIN اجرایی خواهند بود. + زبان رابط کاربر می‌تواند در این‌جا تنظیم شود. تنظیمات بعد از ظروع مجدد بیت‌کوین اعمال خواهد شد. - &Unit to show amounts in: - واحد برای نمایش میزان وجوه در: + &واحد نمایش مبالغ: - Choose the default subdivision unit to show in the interface and when sending coins. - بخش فرعی پیش فرض را برای نمایش میانجی و زمان ارسال سکه ها مشخص و انتخاب نمایید + انتخاب واحد پول مورد استفاده برای نمایش در پنجره‌ها و برای ارسال سکه. - Whether to show Myriadcoin addresses in the transaction list or not. - تا آدرسهای bITCOIN در فهرست تراکنش نمایش داده شوند یا نشوند. + نمایش یا عدم نمایش نشانی‌های بیت‌کوین در لیست تراکنش‌ها. - &Display addresses in transaction list - نمایش آدرسها در فهرست تراکنش + نمایش ن&شانی‌ها در فهرست تراکنش‌ها + + + Whether to show coin control features or not. + - &OK - تایید + &تأیید - &Cancel - رد + &لغو - - &Apply - انجام - - - default - پیش فرض + پیش‌فرض + + + none + - Confirm options reset + تأییدِ بازنشانی گزینه‌ها + + + Client restart required to activate changes. - - Some settings may require a client restart to take effect. + Client will be shutdown, do you want to proceed? - - Do you want to proceed? + This change would require a client restart. - - - Warning - هشدار - - - - - This setting will take effect after restarting Myriadcoin. - این تنظیمات پس از اجرای دوباره Myriadcoin اعمال می شوند - - - The supplied proxy address is invalid. - آدرس پراکسی داده شده صحیح نیست + آدرس پراکسی داده شده صحیح نیست. OverviewPage - Form - تراز + فرم - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. - اطلاعات نمایش داده شده روزآمد نیستند.wallet شما به صورت خودکار با شبکه myriadcoin بعد از برقراری اتصال روزآمد می شود اما این فرایند هنوز کامل نشده است. + اطلاعات نمایش‌داده شده ممکن است قدیمی باشند. بعد از این که یک اتصال با شبکه برقرار شد، کیف پول شما به‌صورت خودکار با شبکهٔ بیت‌کوین همگام‌سازی می‌شود. اما این روند هنوز کامل نشده است. - - Balance: - راز: - - - - Unconfirmed: - تایید نشده - - - Wallet - wallet + کیف پول + + + Available: + + + + Your current spendable balance + تراز علی‌الحساب شما + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + مجموع تراکنش‌هایی که هنوز تأیید نشده‌اند؛ و هنوز روی تراز علی‌الحساب اعمال نشده‌اند - Immature: - نابالغ + نارسیده: - Mined balance that has not yet matured - بالانس/تتمه حساب استخراج شده، نابالغ است /تکمیل نشده است + تراز استخراج شده از معدن که هنوز بالغ نشده است + + + Total: + جمع کل: + + + Your current total balance + تراز کل فعلی شما - <b>Recent transactions</b> - اخرین معاملات&lt + <b>تراکنش‌های اخیر</b> - - Your current balance - تزار جاری شما - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - تعداد معاملات که تایید شده ولی هنوز در تزار جاری شما بر شمار نرفته است - - - - out of sync - روزآمد نشده + ناهمگام PaymentServer - + URI handling + مدیریت URI + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + نشانی اینترنتی قابل تجزیه و تحلیل نیست! دلیل این وضعیت ممکن است یک نشانی نامعتبر بیت‌کوین و یا پارامترهای ناهنجار در URI بوده باشد. + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + Cannot start myriadcoin: click-to-pay handler + نمی‌توان بیت‌کوین را اجرا کرد: کنترل‌کنندهٔ کلیک-و-پرداخت + + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + + + + Network request error - QRCodeDialog + QObject - - QR Code Dialog - دیالوگ QR CODE + Myriadcoin + بیت‌کوین - - Request Payment - درخواست پرداخت + Error: Specified data directory "%1" does not exist. + خطا: پوشهٔ مشخص شده برای داده‌ها در «%1» وجود ندارد. - - Amount: - مقدار: + Error: Cannot parse configuration file: %1. Only use key=value syntax. + - - Label: - برچسب: + Error: Invalid combination of -regtest and -testnet. + - - Message: - پیام + Myriadcoin Core didn't yet exit safely... + - - &Save As... - &ذخیره به عنوان... + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + یک آدرس بیت‌کوین وارد کنید (مثلاً 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + - - Error encoding URI into QR Code. - خطا در زمان رمزدار کردن URI در کد QR + &Copy Image + - - The entered amount is invalid, please check. - میزان وجه وارد شده صحیح نیست، لطفا بررسی نمایید - - - - Resulting URI too long, try to reduce the text for label / message. - URI ذکر شده بسیار طولانی است، متن برچسب/پیام را کوتاه کنید - - - Save QR Code - ذخیره کد QR + ذخیرهٔ کد QR - - PNG Images (*.png) - تصاویر با فرمت PNG (*.png) + PNG Image (*.png) + RPCConsole - Client name - نام مشتری + نام کلاینت - - - - - - - - - - N/A - - + ناموجود - Client version - نسخه مشتری + نسخهٔ کلاینت - &Information - اطلاعات + &اطلاعات + + + Debug window + + + + General + - Using OpenSSL version - استفاده از نسخه OPENSSL + نسخهٔ OpenSSL استفاده شده - Startup time - زمان آغاز STARTUP + زمان آغاز به کار - Network شبکه - + Name + اسم + + Number of connections - تعداد اتصالات + تعداد ارتباطات - - On testnet - در testnetکها - - - Block chain - زنجیره بلاک + زنجیرهٔ بلوک‌ها - Current number of blocks - تعداد کنونی بلاکها + تعداد فعلی بلوک‌ها - Estimated total blocks - تعداد تخمینی بلاکها + تعداد تخمینی بلوک‌ها - Last block time - زمان آخرین بلاک + زمان آخرین بلوک - &Open - باز کردن + با&ز کردن - - Command-line options - گزینه های command-line - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - پیام راهنمای Myriadcoin-Qt را برای گرفتن فهرست گزینه های command-line نشان بده - - - - &Show - نمایش - - - &Console - کنسول + &کنسول + + + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + - Build date ساخت تاریخ - - Myriadcoin - Debug window - صفحه اشکال زدایی Myriadcoin - - - - Myriadcoin Core - هسته Myriadcoin - - - Debug log file فایلِ لاگِ اشکال زدایی - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. فایلِ لاگِ اشکال زدایی Myriadcoin را از دایرکتوری جاری داده ها باز کنید. این عملیات ممکن است برای فایلهای لاگِ حجیم طولانی شود. - Clear console پاکسازی کنسول - Welcome to the Myriadcoin RPC console. - به کنسول Myriadcoin RPC خوش آمدید + به کنسور RPC بیت‌کوین خوش آمدید. - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - دکمه های بالا و پایین برای مرور تاریخچه و Ctrl-L برای پاکسازی صفحه + دکمه‌های بالا و پایین برای پیمایش تاریخچه و <b>Ctrl-L</b> برای پاک کردن صفحه. - Type <b>help</b> for an overview of available commands. - با تایپ عبارت HELP دستورهای در دسترس را مرور خواهید کرد + برای نمایش یک مرور کلی از دستورات ممکن، عبارت <b>help</b> را بنویسید. + + + %1 B + + + + %1 KB + + + + %1 MB + + + + %1 GB + + + + %1 m + + + + %1 h + + + + %1 h %2 m + + + + + ReceiveCoinsDialog + + &Amount: + + + + &Label: + &برچسب: + + + &Message: + + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + + + + Clear + + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + + + + Remove the selected entries from the list + + + + Remove + + + + Copy label + کپی برچسب + + + Copy message + + + + Copy amount + کپی مقدار + + + + ReceiveRequestDialog + + QR Code + کد QR + + + Copy &URI + + + + Copy &Address + + + + &Save Image... + + + + Request payment to %1 + + + + Payment information + + + + URI + + + + Address + نشانی + + + Amount + مبلغ + + + Label + برچسب + + + Message + پیام + + + Resulting URI too long, try to reduce the text for label / message. + URL ایجاد شده خیلی طولانی است. سعی کنید طول برچسب و یا پیام را کمتر کنید. + + + Error encoding URI into QR Code. + خطا در تبدیل نشانی اینترنتی به صورت کد QR. + + + + RecentRequestsTableModel + + Date + تاریخ + + + Label + برچسب + + + Message + پیام + + + Amount + مبلغ + + + (no label) + (بدون برچسب) + + + (no message) + + + + (no amount) + SendCoinsDialog - - - - - - - - Send Coins - ارسال سکه ها + ارسال سکه - - Send to multiple recipients at once - ارسال چندین در یافت ها فورا - - - - Add &Recipient - اضافه کردن دریافت کننده - - - - Remove all transaction fields - پاک کردن تمام ستون‌های تراکنش - - - - Clear &All - پاکسازی همه - - - - Balance: - تزار : - - - - 123.456 BTC - 123.456 بتس - - - - Confirm the send action - عملیت دوم تایید کنید - - - - S&end - &;ارسال - - - - <b>%1</b> to %2 (%3) - (%3) تا <b>%1</b> درصد%2 - - - - Confirm send coins - ارسال سکه ها تایید کنید - - - - Are you sure you want to send %1? - %1شما متماینید که می خواهید 1% ارسال کنید ؟ - - - - and - و - - - - The recipient address is not valid, please recheck. - آدرس گیرنده نادرست است، لطفا دوباره بررسی کنید. - - - - The amount to pay must be larger than 0. - مبلغ پر داخت باید از 0 بیشتر باشد - - - - The amount exceeds your balance. - میزان وجه از بالانس/تتمه حساب شما بیشتر است - - - - The total exceeds your balance when the %1 transaction fee is included. - کل میزان وجه از بالانس/تتمه حساب شما بیشتر می شود وقتی %1 هزینه تراکنش نیز به ین میزان افزوده می شود - - - - Duplicate address found, can only send to each address once per send operation. - آدرس تکراری یافت شده است، در زمان انجام عملیات به هر آدرس تنها یکبار می توانید اطلاعات ارسال کنید - - - - Error: Transaction creation failed! + Coin Control Features - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - خطا: تراکنش تایید نشد. این پیام زمانی روی می دهد که مقداری از سکه های WALLET شما استفاده شده اند برای مثال اگر شما از WALLET.DAT استفاده کرده اید، ممکن است سکه ها استفاده شده باشند اما در اینجا نمایش داده نشوند + Inputs... + + + + automatically selected + + + + Insufficient funds! + + + + Quantity: + + + + Bytes: + + + + Amount: + مبلغ: + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + + Send to multiple recipients at once + ارسال به چند دریافت‌کنندهٔ به‌طور همزمان + + + Add &Recipient + &دریافت‌کنندهٔ جدید + + + Clear all fields of the form. + + + + Clear &All + پاکسازی &همه + + + Balance: + تزار: + + + Confirm the send action + عملیات ارسال را تأیید کنید + + + S&end + &ارسال + + + Confirm send coins + ارسال سکه را تأیید کنید + + + %1 to %2 + + + + Copy quantity + + + + Copy amount + کپی مقدار + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + + + + or + + + + The recipient address is not valid, please recheck. + نشانی گیرنده معتبر نیست؛ لطفا دوباره بررسی کنید. + + + The amount to pay must be larger than 0. + مبلغ پرداخت باید بیشتر از ۰ باشد. + + + The amount exceeds your balance. + میزان پرداخت از تراز شما بیشتر است. + + + The total exceeds your balance when the %1 transaction fee is included. + با احتساب هزینهٔ %1 برای هر تراکنش، مجموع میزان پرداختی از مبلغ تراز شما بیشتر می‌شود. + + + Duplicate address found, can only send to each address once per send operation. + یک نشانی تکراری پیدا شد. در هر عملیات ارسال، به هر نشانی فقط مبلغ می‌توان ارسال کرد. + + + Transaction creation failed! + + + + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + + + + (no label) + (بدون برچسب) + + + Warning: Unknown change address + + + + Are you sure you want to send? + + + + added as transaction fee + + + + Payment request expired + + + + Invalid payment address %1 + SendCoinsEntry - - Form - تراز - - - A&mount: A&مبلغ : - Pay &To: - به&پر داخت : + پرداخ&ت به: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + نشانی مقصد برای پرداخت (مثلاً 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + Enter a label for this address to add it to your address book + برای این نشانی یک برچسب وارد کنید تا در دفترچهٔ آدرس ذخیره شود + + + &Label: + &برچسب: + + + Choose previously used address - - - Enter a label for this address to add it to your address book - برای آدرس بر پسب وارد کنید که در دفتر آدرس اضافه شود + This is a normal payment. + - - &Label: - &بر چسب - - - - Choose address from address book - اآدرسن ازدفتر آدرس انتخاب کنید - - - Alt+A Alt+A - Paste address from clipboard - آدرس از تخته رسم گیره دار پست کنید + چسباندن نشانی از حافظهٔ سیستم - Alt+P Alt+P - - Remove this recipient - بر داشتن این در یافت کننده + Remove this entry + - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - آدرس بیتکویین وارد کنید (bijvoorbeeld: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + پیام: + + + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. + SignVerifyMessageDialog - Signatures - Sign / Verify a Message - امضا - امضا کردن /شناسایی یک پیام + امضاها - امضا / تأیید یک پیام - &Sign Message - &امضای پیام + ا&مضای پیام - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. - شما می توانید پیامها را با آدرس خودتان امضا نمایید تا ثابت شود متعلق به شما هستند. مواظب باشید تا چیزی که بدان مطمئن نیستنید را امضا نکنید زیرا حملات فیشینگ در زمان ورود شما به سیستم فریبنده هستند. تنها مواردی را که حاوی اطلاعات دقیق و قابل قبول برای شما هستند را امضا کنید + برای احراز اینکه پیام‌ها از جانب شما هستند، می‌توانید آن‌ها را با نشانی خودتان امضا کنید. مراقب باشید چیزی که بدان اطمینان ندارید را امضا نکنید زیرا حملات فیشینگ ممکن است بخواهند از.پیامی با امضای شما سوءاستفاده کنند. تنها مواردی را که حاوی اطلاعات دقیق و قابل قبول برای شما هستند امضا کنید. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - آدرس برای امضا کردن پیام با (برای مثال 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + نشانی مورد استفاده برای امضا کردن پیام (برای مثال 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book - یک آدرس را از فهرست آدرسها انتخاب کنید + Choose previously used address + - - Alt+A Alt+A - Paste address from clipboard - آدرس از تخته رسم گیره دار پست کنید + چسباندن نشانی از حافظهٔ سیستم - Alt+P Alt+P - Enter the message you want to sign here پیامی را که می‌خواهید امضا کنید در اینجا وارد کنید - Signature - + امضا - Copy the current signature to the system clipboard - این امضا را در system clipboard کپی کن + امضای فعلی را به حافظهٔ سیستم کپی کن - Sign the message to prove you own this Myriadcoin address - پیام را برای اثبات آدرس MYRIADCOIN خود امضا کنید + برای اثبات تعلق این نشانی به شما، پیام را امضا کنید - Sign &Message - + ا&مضای پیام - Reset all sign message fields - تنظیم دوباره تمامی فیلدهای پیام + بازنشانی تمام فیلدهای پیام - - Clear &All - پاکسازی همه + پاک &کردن همه - &Verify Message - تایید پیام + &شناسایی پیام - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. - آدرس/پیام خود را وارد کنید (مطمئن شوید که فاصله بین خطوط، فاصله ها، تب ها و ... را دقیقا کپی می کنید) و سپس امضا کنید تا پیام تایید شود. مراقب باشید که پیام را بیشتر از مطالب درون امضا مطالعه نمایید تا فریب شخص سوم/دزدان اینترنتی را نخورید. + برای شناسایی پیام، نشانیِ امضا کننده و متن پیام را وارد کنید. (مطمئن شوید که فاصله‌ها، تب‌ها و خطوط را عیناً کپی می‌کنید.) مراقب باشید در امضا چیزی بیشتر از آنچه در پیام می‌بینید وجود نداشته باشد تا فریب دزدان اینترنتی و حملات از نوع MITM را نخورید. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - آدرس برای امضا کردن پیام با (برای مثال 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + نشانی مورد استفاده برای امضا کردن پیام (برای مثال 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address - پیام را برای اطمنان از ورود به سیستم با آدرس MYRIADCOIN مشخص خود،تایید کنید + برای حصول اطمینان از اینکه پیام با نشانی بیت‌کوین مشخص شده امضا است یا خیر، پیام را شناسایی کنید - Verify &Message - + &شناسایی پیام - Reset all verify message fields - تنظیم دوباره تمامی فیلدهای پیام تایید شده + بازنشانی تمام فیلدهای پیام - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - آدرس بیتکویین وارد کنید (bijvoorbeeld: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + یک نشانی بیت‌کوین وارد کنید (مثلاً 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature - با کلیک بر "امضای پیام" شما یک امضای جدید درست می کنید + برای ایجاد یک امضای جدید روی «امضای پیام» کلیک کنید - - Enter Myriadcoin signature - امضای BITOCOIN خود را وارد کنید - - - - The entered address is invalid. - آدرس وارد شده صحیح نیست + نشانی وارد شده نامعتبر است. - - - - Please check the address and try again. - اطفا آدرس را بررسی کرده و دوباره امتحان کنید + لطفاً نشانی را بررسی کنید و دوباره تلاش کنید. - - The entered address does not refer to a key. - آدرس وارد شده با کلید وارد شده مرتبط نیست + نشانی وارد شده به هیچ کلیدی اشاره نمی‌کند. - Wallet unlock was cancelled. - قفل کردن wallet انجام نشد + عملیات باز کرن قفل کیف پول لغو شد. - Private key for the entered address is not available. - کلید شخصی برای آدرس وارد شده در دسترس نیست + کلید خصوصی برای نشانی وارد شده در دسترس نیست. - Message signing failed. - پیام امضا کردن انجام نشد + امضای پیام با شکست مواجه شد. - Message signed. - پیام امضا شد + پیام امضا شد. - The signature could not be decoded. - امضا نمی تواند رمزگشایی شود + امضا نمی‌تواند کدگشایی شود. - - Please check the signature and try again. - لطفا امضا را بررسی و دوباره تلاش نمایید + لطفاً امضا را بررسی نموده و دوباره تلاش کنید. - The signature did not match the message digest. - امضا با تحلیلِ پیام مطابقت ندارد + امضا با خلاصهٔ پیام مطابقت ندارد. - Message verification failed. - عملیات شناسایی پیام انجام نشد + شناسایی پیام با شکست مواجه شد. - Message verified. - پیام شناسایی شد + پیام شناسایی شد. SplashScreen - - The Myriadcoin developers + Myriadcoin Core + هسته Myriadcoin + + + The Myriadcoin Core developers - [testnet] آزمایش شبکه + + TrafficGraphWidget + + KB/s + + + TransactionDesc - Open until %1 - باز کردن تا%1 + باز تا %1 + + + conflicted + - %1/offline - %1 آفلاین + %1/آفلاین - %1/unconfirmed - %1 تایید نشده + %1/تأیید نشده - %1 confirmations - ایید %1 + %1 تأییدیه - Status وضعیت - , broadcast through %n node(s) - انتشار از طریق n% گره -انتشار از طریق %n گره + ، پخش از طریق %n گره - Date - تاریخ + تاریخ - Source منبع - Generated تولید شده - - From فرستنده - - - To گیرنده - - own address آدرس شما - label برچسب - - - - - Credit - بدهی + بدهی - matures in %n more block(s) - بلوغ در n% از بیشتر بلاکها -بلوغ در %n از بیشتر بلاکها + بلوغ در %n بلوک دیگر - not accepted - غیرقابل قبول + پذیرفته نشد - - - - Debit اعتبار - Transaction fee - هزینه تراکنش + هزینهٔ تراکنش - Net amount - هزینه خالص + مبلغ خالص - Message پیام - Comment نظر - Transaction ID - شناسه کاربری برای تراکنش + شناسهٔ تراکنش - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - سکه های ایجاد شده باید 120 بلاک را قبل از استفاده بالغ کنند. در هنگام ایجاد بلاک، آن بلاک در شبکه منتشر می شود تا به زنجیره بلاکها بپیوندد. اگر در زنجیره قرار نگیرد، پیام وضعیت به غیرقابل قبول تغییر می بپیابد و قابل استفاده نیست. این مورد معمولا زمانی پیش می آید که گره دیگری به طور همزمان بلاکی را با فاصل چند ثانیه ای از شما ایجاد کند. + Merchant + + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + - Debug information - اشکال زدایی طلاعات + اطلاعات اشکال‌زدایی - Transaction تراکنش - Inputs - درونداد + ورودی‌ها - Amount مبلغ - true - صحیح + درست - false نادرست - , has not been successfully broadcast yet - هنوز با مو فقیت ارسال نشده + ، هنوز با موفقیت ارسال نشده - Open for %n more block(s) - + باز برای %n بلوک دیگر - unknown - مشخص نیست + ناشناس TransactionDescDialog - Transaction details - جزییات معاملات + جزئیات تراکنش - This pane shows a detailed description of the transaction - در این قاب شیشه توصیف دقیق معامله نشان می شود + این پانل شامل توصیف کاملی از جزئیات تراکنش است TransactionTableModel - Date تاریخ - Type نوع - Address - ایل جدا + نشانی - Amount مبلغ + + Immature (%1 confirmations, will be available after %2) + + - Open for %n more block(s) - + باز برای %n بلوک دیگر - Open until %1 - از شده تا 1%1 + باز شده تا %1 - - Offline (%1 confirmations) - افلایین (%1) - - - - Unconfirmed (%1 of %2 confirmations) - تایید نشده (%1/%2) - - - Confirmed (%1 confirmations) - تایید شده (%1) - - - - Mined balance will be available when it matures in %n more block(s) - بالانس/تتمه حساب استخراج شده زمانی که %n از بیشتر بلاکها بالغ شدند در دسترس خواهد بود -بالانس/تتمه حساب استخراج شده زمانی که n% از بیشتر بلاکها بالغ شدند در دسترس خواهد بود + تأیید شده (%1 تأییدیه) - This block was not received by any other nodes and will probably not be accepted! - این بلوک از دیگر گره ها در یافت نشده بدین دلیل شاید قابل قابول نیست + این بلوک از هیچ همتای دیگری دریافت نشده است و احتمال می‌رود پذیرفته نشود! - Generated but not accepted تولید شده ولی قبول نشده - + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + Received with - در یافت با : + دریافت‌شده با - Received from - دریافتی از + دریافت‌شده از - Sent to - ارسال به : + ارسال‌شده به - Payment to yourself پر داخت به خودتان - Mined - استخراج + استخراج‌شده - (n/a) - (کاربرد ندارد) + (ناموجود) - Transaction status. Hover over this field to show number of confirmations. - وضعیت معالمه . عرصه که تعداد تایید نشان می دهد + وضعیت تراکنش. نشانگر را روی این فیلد نگه دارید تا تعداد تأییدیه‌ها نشان داده شود. - Date and time that the transaction was received. - تاریخ و ساعت در یافت معامله + تاریخ و ساعت دریافت تراکنش. - Type of transaction. - نوع معاملات + نوع تراکنش. - Destination address of transaction. - آدرس مقصود معاملات + نشانی مقصد تراکنش. - Amount removed from or added to balance. - مبلغ از تزار شما خارج یا وارد شده + مبلغ کسر شده و یا اضافه شده به تراز. TransactionView - - All همه - Today امروز - This week این هفته - This month این ماه - Last month ماه گذشته - This year امسال - Range... - محدوده + محدوده... - Received with - در یافت با + دریافت‌شده با - Sent to ارسال به - To yourself - به خودتان + به خودتان - Mined - استخراج + استخراج‌شده - Other - یگر + دیگر - Enter address or label to search برای جست‌‌وجو نشانی یا برچسب را وارد کنید - Min amount - حد اقل مبلغ + مبلغ حداقل - Copy address - کپی آدرس + کپی نشانی - Copy label - کپی بر چسب + کپی برچسب - Copy amount - روگرفت مقدار + کپی مقدار - Copy transaction ID + کپی شناسهٔ تراکنش + + + Edit label + ویرایش برچسب + + + Show transaction details + نمایش جزئیات تراکنش + + + Export Transaction History - - Edit label - اصلاح بر چسب + Exporting Failed + - - Show transaction details - جزئیات تراکنش را نمایش بده + There was an error trying to save the transaction history to %1. + - - Export Transaction Data - صادرات تاریخ معامله + Exporting Successful + + + + The transaction history was successfully saved to %1. + - Comma separated file (*.csv) - Comma فایل جدا + پروندهٔ نوع CSV جداشونده با کاما (*.csv) - Confirmed - تایید شده + تأیید شده - Date - تاریخ + تاریخ - Type - نوع + نوع - Label - ر چسب + برچسب - Address - ایل جدا + نشانی - Amount مبلغ - ID - آی دی + شناسه - - Error exporting - خطای صادرت - - - - Could not write to file %1. - تا فایل %1 نمی شود نوشت - - - Range: - >محدوده + محدوده: - to به + + WalletFrame + + No wallet has been loaded. + + + WalletModel - Send Coins - ارسال سکه ها + ارسال وجه WalletView - &Export - + &صدور - Export the data in the current tab to a file داده ها نوارِ جاری را به فایل انتقال دهید - Backup Wallet - + نسخهٔ پشتیبان کیف پول - Wallet Data (*.dat) - + دادهٔ کیف پول (*.dat) - Backup Failed + خطا در پشتیبان‌گیری + + + There was an error trying to save the wallet data to %1. - - There was an error trying to save the wallet data to the new location. + The wallet data was successfully saved to %1. - Backup Successful - - - - - The wallet data was successfully saved to the new location. - + پشتیبان‌گیری موفق bitcoin-core - - Myriadcoin version - سخه بیتکویین - - - Usage: - ستفاده : + استفاده: - - Send command to -server or myriadcoind - ارسال فرمان به سرور یا باتکویین - - - List commands - لیست فومان ها + نمایش لیست فرمان‌ها - Get help for a command - کمک برای فرمان + راهنمایی در مورد یک دستور - Options: - تنظیمات + گزینه‌ها: - Specify configuration file (default: myriadcoin.conf) - (: myriadcoin.confپیش فرض: )فایل تنظیمی خاص + مشخص کردن فایل پیکربندی (پیش‌فرض: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) - (myriadcoind.pidپیش فرض : ) فایل پید خاص + مشخص کردن فایل شناسهٔ پردازش - pid - (پیش‌فرض: bitcoin.pid) - Specify data directory - دایرکتور اطلاعاتی خاص + مشخص کردن دایرکتوری داده‌ها - - Set database cache size in megabytes (default: 25) - سایز کَش بانک داده را بر حسب مگابایت تنظیم کنید (پیش فرض:25) - - - Listen for connections on <port> (default: 8333 or testnet: 18333) - برای اتصالات به <port> (پیش‌فرض: 8333 یا تست‌نت: 18333) گوش کنید + پذیرش اتصالات روی پورت <port> (پیش‌فرض: 8833 یا شبکهٔ آزمایشی: 18333) - Maintain at most <n> connections to peers (default: 125) - حداکثر <n> اتصال با همکاران برقرار داشته باشید (پیش‌فرض: 125) + حداکثر <n> اتصال با همتایان برقرار شود (پیش‌فرض: ۱۲۵) - Connect to a node to retrieve peer addresses, and disconnect - اتصال به گره برای دریافت آدرسهای قرینه و قطع اتصال + اتصال به یک گره برای دریافت آدرس‌های همتا و قطع اتصال پس از اتمام عملیات - Specify your own public address - آدرس عمومی خود را ذکر کنید + آدرس عمومی خود را مشخص کنید - Threshold for disconnecting misbehaving peers (default: 100) - آستانه برای قطع ارتباط با همکاران بدرفتار (پیش‌فرض: 100) + حد آستانه برای قطع ارتباط با همتایان بدرفتار (پیش‌فرض: ۱۰۰) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - مدت زمان به ثانیه برای جلوگیری از همکاران بدرفتار برای اتصال دوباره (پیش‌فرض: 86400) + مدت زمان جلوگیری از اتصال مجدد همتایان بدرفتار، به ثانیه (پیش‌فرض: ۸۴۶۰۰) - An error occurred while setting up the RPC port %u for listening on IPv4: %s - در زمان تنظیم درگاه RPX %u در فهرست کردن %s اشکالی رخ داده است + هنگام تنظیم پورت RPC %u برای گوش دادن روی IPv4 خطایی رخ داده است: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) - ( 8332پیش فرض :) &lt;poort&gt; JSON-RPC شنوایی برای ارتباطات + پورت مورد شنود برای اتصالات JSON-RPC (پیش‌فرض: 8332 برای شبکهٔ تست 18332) - Accept command line and JSON-RPC commands - JSON-RPC قابل فرمانها و + پذیرش دستورات خط فرمان و دستورات JSON-RPC + + + Myriadcoin Core RPC client version + - Run in the background as a daemon and accept commands - اجرای در پس زمینه به عنوان شبح و قبول فرمان ها + اجرا در پشت زمینه به‌صورت یک سرویس و پذیرش دستورات - Use the test network - استفاده شبکه آزمایش + استفاده از شبکهٔ آزمایش - Accept connections from outside (default: 1 if no -proxy or -connect) پذیرش اتصالات از بیرون (پیش فرض:1 بدون پراکسی یا اتصال) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2309,612 +2683,686 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 + مقید به نشانی داده شده باشید و همیشه از آن پیروی کنید. از نشانه گذاری استاندار IPv6 به صورت Host]:Port] استفاده کنید. + + + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + تراکنش پذیرفته نیست! این خطا ممکن است در حالتی رخ داده باشد که مقداری از سکه های شما در کیف پولتان از جایی دیگر، همانند یک کپی از کیف پول اصلی اتان، خرج شده باشد اما در کیف پول اصلی اتان به عنوان مبلغ خرج شده، نشانه گذاری نشده باشد. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! - + خطا: این تراکنش به علت میزان وجه، دشواری، و یا استفاده از وجوه دریافتی اخیر نیازمند کارمزد به مبلغ حداقل %s است. - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + هنگامی که یک تراکنش در کیف پولی رخ می دهد، دستور را اجرا کن(%s در دستورات بوسیله ی TxID جایگزین می شود) + + + Fees smaller than this are considered zero fee (for transaction creation) (default: - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - حجم حداکثر تراکنشهای با/کم اهمیت را به بایت تنظیم کنید (پیش فرض:27000) + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications + این یک نسخه ی آزمایشی است - با مسئولیت خودتان از آن استفاده کنید - آن را در معدن و بازرگانی بکار نگیرید. + + + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - هشدار:paytxfee بسیار بالا تعریف شده است! این هزینه تراکنش است که باید در زمان ارسال تراکنش بپردازید + هشدار: مبلغ paytxfee بسیار بالایی تنظیم شده است! این مبلغ هزینه‌ای است که شما برای تراکنش‌ها پرداخت می‌کنید. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - هشدار: تراکنش نمایش داده شده ممکن است صحیح نباشد! شما/یا یکی از گره ها به روزآمد سازی نیاز دارید - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. هشدار: لطفا زمان و تاریخ رایانه خود را تصحیح نمایید! اگر ساعت رایانه شما اشتباه باشد myriadcoin ممکن است صحیح کار نکند - + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + Attempt to recover private keys from a corrupt wallet.dat - + Myriadcoin Core Daemon + + + Block creation options: بستن گزینه ایجاد - + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + Connect only to the specified node(s) تنها در گره (های) مشخص شده متصل شوید - - Corrupted block database detected + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + + Corrupted block database detected + یک پایگاه داده ی بلوک خراب یافت شد + + + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) - Discover own IP address (default: 1 when listening and no -externalip) آدرس آی.پی. خود را شناسایی کنید (پیش فرض:1 در زمان when listening وno -externalip) - + Do not load the wallet and disable wallet RPC calls + + + Do you want to rebuild the block database now? - + آیا مایلید که اکنون پایگاه داده ی بلوک را بازسازی کنید؟ - Error initializing block database - + خطا در آماده سازی پایگاه داده ی بلوک - Error initializing wallet database environment %s! - Error loading block database - + خطا در بارگذاری پایگاه داده ها - Error opening block database - + خطا در بازگشایی پایگاه داده ی بلوک - Error: Disk space is low! - Error: Wallet locked, unable to create transaction! - Error: system error: - + خطا: خطای سامانه: - Failed to listen on any port. Use -listen=0 if you want this. شنیدن هر گونه درگاه انجام پذیر نیست. ازlisten=0 برای اینکار استفاده کیند. - Failed to read block info - + خواندن اطلاعات بلوک با شکست مواجه شد - Failed to read block - + خواندن بلوک با شکست مواجه شد - Failed to sync block index - + همگام سازی فهرست بلوک با شکست مواجه شد - Failed to write block index - + نوشتن فهرست بلوک با شکست مواجه شد - Failed to write block info - + نوشتن اطلاعات بلوک با شکست مواجه شد - Failed to write block - + نوشتن بلوک با شکست مواجه شد - Failed to write file info - + نوشتن اطلاعات پرونده با شکست مواجه شد - Failed to write to coin database - + نوشتن اطلاعات در پایگاه داده ی سکه ها با شکست مواجه شد - Failed to write transaction index - + نوشتن فهرست تراکنش ها با شکست مواجه شد - Failed to write undo data + عملیات بازگشت دادن اطلاعات با شکست مواجه شدن + + + Fee per kB to add to transactions you send + نرخ هر کیلوبایت برای اضافه کردن به تراکنش‌هایی که می‌فرستید + + + Fees smaller than this are considered zero fee (for relaying) (default: - Find peers using DNS lookup (default: 1 unless -connect) قرینه ها را برای جستجوی DNS بیاب (پیش فرض: 1 مگر در زمان اتصال) - + Force safe mode (default: 0) + + + Generate coins (default: 0) - How many blocks to check at startup (default: 288, 0 = all) + چند بلوک نیاز است که در ابتدای راه اندازی بررسی شوند(پیش فرض:288 ،0=همه) + + + If <category> is not supplied, output all debugging information. - - How thorough the block verification is (0-4, default: 3) + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' - Not enough file descriptors available. - + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + Rebuild block chain index from current blk000??.dat files - + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + Set the number of threads to service RPC calls (default: 4) - + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + Verifying blocks... - + در حال بازبینی بلوک ها... - Verifying wallet... + در حال بازبینی کیف پول... + + + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex - Imports blocks from external blk000??.dat file - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) - Information - + اطلاعات - - Invalid -tor address: '%s' - آدرس نرم افزار تور غلط است %s - - - Invalid amount for -minrelaytxfee=<amount>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' - + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + Maintain a full transaction index (default: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) حداکثر بافر دریافت شده بر اساس اتصال <n>* 1000 بایت (پیش فرض:5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) حداکثر بافر دریافت شده بر اساس اتصال <n>* 1000 بایت (پیش فرض:1000) - Only accept block chain matching built-in checkpoints (default: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) تنها =به گره ها در شبکه متصا شوید <net> (IPv4, IPv6 or Tor) - - Output extra debugging information. Implies all other -debug* options - برونداد اطلاعات اشکال زدایی اضافی. گزینه های اشکال زدایی دیگر رفع شدند + Print block on startup, if found in block index + - - Output extra network debugging information - برونداد اطلاعات اشکال زدایی اضافی برای شبکه + Print block tree on startup (default: 0) + - - Prepend debug output with timestamp - به خروجی اشکال‌زدایی برچسب زمان بزنید + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) - گزینه ssl (به ویکیmyriadcoin برای راهنمای راه اندازی ssl مراجعه شود) + گزینه ssl (به ویکیbitcoin برای راهنمای راه اندازی ssl مراجعه شود) - - Select the version of socks proxy to use (4-5, default: 5) - نسخه ای از پراکسی ساکس را برای استفاده انتخاب کنید (4-5 پیش فرض:5) + Send command to Myriadcoin Core + - Send trace/debug info to console instead of debug.log file اطلاعات ردگیری/اشکال‌زدایی را به جای فایل لاگ اشکال‌زدایی به کنسول بفرستید - - Send trace/debug info to debugger - اطلاعات ردگیری/اشکال‌زدایی را به اشکال‌زدا بفرستید - - - - Set maximum block size in bytes (default: 250000) - حداکثر سایز بلاک بر اساس بایت تنظیم شود (پیش فرض: 250000) - - - Set minimum block size in bytes (default: 0) حداقل سایز بلاک بر اساس بایت تنظیم شود (پیش فرض: 0) - + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + Shrink debug.log file on client startup (default: 1 when no -debug) فایل debug.log را در startup مشتری کوچک کن (پیش فرض:1 اگر اشکال زدایی روی نداد) - Signing transaction failed - Specify connection timeout in milliseconds (default: 5000) (میلی ثانیه )فاصله ارتباط خاص - - System error: + Start Myriadcoin Core Daemon - + System error: + خطای سامانه + + Transaction amount too small - Transaction amounts must be positive - Transaction too large - Use UPnP to map the listening port (default: 0) از UPnP برای شناسایی درگاه شنیداری استفاده کنید (پیش فرض:0) - Use UPnP to map the listening port (default: 1 when listening) از UPnP برای شناسایی درگاه شنیداری استفاده کنید (پیش فرض:1 در زمان شنیدن) - - Use proxy to reach tor hidden services (default: same as -proxy) - برای دستیابی به سرویس مخفیانه نرم افزار تور از پراکسی استفاده کنید (پیش فرض:same as -proxy) - - - Username for JSON-RPC connections JSON-RPC شناسه برای ارتباطات - Warning - + هشدار - Warning: This version is obsolete, upgrade required! هشدار: این نسخه قدیمی است، روزآمدسازی مورد نیاز است - - You need to rebuild the databases using -reindex to change -txindex + Zapping all transactions from wallet... - + on startup + + + + version + نسخه + + wallet.dat corrupt, salvage failed - Password for JSON-RPC connections JSON-RPC عبارت عبور برای ارتباطات - Allow JSON-RPC connections from specified IP address از آدرس آی پی خاص JSON-RPC قبول ارتباطات - Send commands to node running on <ip> (default: 127.0.0.1) (127.0.0.1پیش فرض: ) &lt;ip&gt; دادن فرمانها برای استفاده گره ها روی - Execute command when the best block changes (%s in cmd is replaced by block hash) زمانی که بهترین بلاک تغییر کرد، دستور را اجرا کن (%s در cmd با block hash جایگزین شده است) - Upgrade wallet to latest format wallet را به جدیدترین فرمت روزآمد کنید - Set key pool size to <n> (default: 100) (100پیش فرض:)&lt;n&gt; گذاشتن اندازه کلید روی - Rescan the block chain for missing wallet transactions اسکان مجدد زنجیر بلوکها برای گم والت معامله - Use OpenSSL (https) for JSON-RPC connections JSON-RPCبرای ارتباطات استفاده کنید OpenSSL (https) - Server certificate file (default: server.cert) (server.certپیش فرض: )گواهی نامه سرور - Server private key (default: server.pem) (server.pemپیش فرض: ) کلید خصوصی سرور - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - رمز های قابل قبول( TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - This help message پیام کمکی - Unable to bind to %s on this computer (bind returned error %d, %s) امکان اتصال به %s از این رایانه وجود ندارد ( bind returned error %d, %s) - - Connect through socks proxy - اتصال از طریق پراکسی ساکس - - - Allow DNS lookups for -addnode, -seednode and -connect به DNS اجازه بده تا برای addnode ، seednode و اتصال جستجو کند - Loading addresses... بار گیری آدرس ها - Error loading wallet.dat: Wallet corrupted خطا در بارگیری wallet.dat: کیف پول خراب شده است - Error loading wallet.dat: Wallet requires newer version of Myriadcoin خطا در بارگیری wallet.dat: کیف پول به ویرایش جدیدتری از Biticon نیاز دارد - Wallet needed to be rewritten: restart Myriadcoin to complete سلام - Error loading wallet.dat خطا در بارگیری wallet.dat - Invalid -proxy address: '%s' آدرس پراکسی اشتباه %s - Unknown network specified in -onlynet: '%s' شبکه مشخص شده غیرقابل شناسایی در onlynet: '%s' - Unknown -socks proxy version requested: %i نسخه پراکسی ساکس غیرقابل شناسایی درخواست شده است: %i - Cannot resolve -bind address: '%s' آدرس قابل اتصال- شناسایی نیست %s - Cannot resolve -externalip address: '%s' آدرس خارجی قابل اتصال- شناسایی نیست %s - Invalid amount for -paytxfee=<amount>: '%s' میزان وجه اشتباه برای paytxfee=<میزان وجه>: %s - Invalid amount میزان وجه اشتباه - Insufficient funds بود جه نا کافی - Loading block index... بار گیری شاخص بلوک - Add a node to connect to and attempt to keep the connection open به اتصال یک گره اضافه کنید و اتصال را باز نگاه دارید - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - اتصال به %s از این رایانه امکان پذیر نیست. Myriadcoin احتمالا در حال اجراست. - - - - Fee per KB to add to transactions you send - پر داجت برای هر کیلو بیت برای اضافه به معامله ارسال - - - Loading wallet... بار گیری والت - Cannot downgrade wallet امکان تنزل نسخه در wallet وجود ندارد - Cannot write default address آدرس پیش فرض قابل ذخیره نیست - Rescanning... اسکان مجدد - Done loading بار گیری انجام شده است - To use the %s option برای استفاده از %s از انتخابات - Error خطا - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_fa_IR.ts b/src/qt/locale/bitcoin_fa_IR.ts index ca58853a..d5eb58ef 100644 --- a/src/qt/locale/bitcoin_fa_IR.ts +++ b/src/qt/locale/bitcoin_fa_IR.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - در مورد بیتکویین + About Myriadcoin Core + - - <b>Myriadcoin</b> version - <b>Myriadcoin</b> version + <b>Myriadcoin Core</b> version + - This is experimental software. @@ -23,153 +19,128 @@ This product includes software developed by the OpenSSL Project for use in the O - Copyright - - The Myriadcoin developers + The Myriadcoin Core developers + + + + (%1-bit) AddressBookPage - - Address Book - دفترچه آدرس - - - Double-click to edit address or label - برای ویرایش آدرس/برچسب دوبار کلیک نمایید + برای ویرایش حساب و یا برچسب دوبار کلیک نمایید - Create a new address - یک آدرس جدید بسازید + گشایش حسابی جدید - - Copy the currently selected address to the system clipboard - آدرس انتخاب شده را در کلیپ بوردِ سیستم کپی کنید - - - - &New Address - و آدرس جدید - - - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + &New + + + + Copy the currently selected address to the system clipboard + کپی کردن حساب انتخاب شده به حافظه سیستم - کلیپ بورد + + + &Copy + + + + C&lose - &Copy Address و کپی آدرس - - Show &QR Code - نشان و کد QR - - - - Sign a message to prove you own a Myriadcoin address - - - - - Sign &Message - - - - Delete the currently selected address from the list - Export the data in the current tab to a file صدور داده نوار جاری به یک فایل - &Export - - Verify a message to ensure it was signed with a specified Myriadcoin address - - - - - &Verify Message - - - - &Delete و حذف - + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + Copy &Label کپی و برچسب - &Edit و ویرایش - - Send &Coins + Export Address List - - Export Address Book Data - انتقال اطلاعات دفترچه آدرس - - - Comma separated file (*.csv) سی.اس.وی. (فایل جداگانه دستوری) - - Error exporting - صدور پیام خطا + Exporting Failed + - - Could not write to file %1. - قابل کپی در فایل نیست %1 + There was an error trying to save the address list to %1. + AddressTableModel - Label برچسب - Address - آدرس + حساب - (no label) (برچسب ندارد) @@ -177,140 +148,106 @@ This product includes software developed by the OpenSSL Project for use in the O AskPassphraseDialog - Passphrase Dialog - Enter passphrase رمز/پَس فرِیز را وارد کنید - New passphrase رمز/پَس فرِیز جدید را وارد کنید - Repeat new passphrase رمز/پَس فرِیز را دوباره وارد کنید - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. رمز/پَس فرِیز جدید را در wallet وارد کنید. برای انتخاب رمز/پَس فرِیز از 10 کاراکتر تصادفی یا بیشتر و یا هشت کلمه یا بیشتر استفاده کنید. - Encrypt wallet wallet را رمزگذاری کنید - This operation needs your wallet passphrase to unlock the wallet. برای انجام این عملکرد به رمز/پَس فرِیزِwallet نیاز است تا آن را از حالت قفل درآورد. - Unlock wallet باز کردن قفل wallet - This operation needs your wallet passphrase to decrypt the wallet. برای کشف رمز wallet، به رمز/پَس فرِیزِwallet نیاز است. - Decrypt wallet کشف رمز wallet - Change passphrase تغییر رمز/پَس فرِیز - Enter the old and new passphrase to the wallet. رمز/پَس فرِیزِ قدیم و جدید را در wallet وارد کنید - Confirm wallet encryption رمزگذاری wallet را تایید کنید - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! - Are you sure you wish to encrypt your wallet? - 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. - - Warning: The Caps Lock key is on! - - Wallet encrypted تایید رمزگذاری - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. Myriadcoin برای اتمام فرایند رمزگذاری بسته خواهد شد. به خاطر داشته باشید که رمزگذاری WALLET شما، کامپیوتر شما را از آلودگی به بدافزارها مصون نمی دارد. - - - - Wallet encryption failed رمزگذاری تایید نشد - Wallet encryption failed due to an internal error. Your wallet was not encrypted. رمزگذاری به علت خطای داخلی تایید نشد. wallet شما رمزگذاری نشد - - The supplied passphrases do not match. رمزهای/پَس فرِیزهایِ وارد شده با هم تطابق ندارند - Wallet unlock failed قفل wallet باز نشد - - - The passphrase entered for the wallet decryption was incorrect. رمزهای/پَس فرِیزهایِ وارد شده wallet برای کشف رمز اشتباه است. - Wallet decryption failed کشف رمز wallet انجام نشد - Wallet passphrase was successfully changed. @@ -318,320 +255,287 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - Sign &message... امضا و پیام - Synchronizing with network... به روز رسانی با شبکه... - &Overview و بازبینی - + Node + + + Show general overview of wallet نمای کلی از wallet را نشان بده - &Transactions و تراکنش - Browse transaction history تاریخچه تراکنش را باز کن - - Edit the list of stored addresses and labels - فهرست آدرسها و برچسبهای ذخیره شده را ویرایش کن - - - - Show the list of addresses for receiving payments - فهرست آدرسها را برای دریافت وجه نشان بده - - - E&xit خروج - Quit application از "درخواست نامه"/ application خارج شو - Show information about Myriadcoin اطلاعات در مورد Myriadcoin را نشان بده - About &Qt درباره و QT - Show information about Qt نمایش اطلاعات درباره QT - &Options... و انتخابها - &Encrypt Wallet... و رمزگذاری wallet - &Backup Wallet... و گرفتن نسخه پیشتیبان از wallet - &Change Passphrase... تغییر رمز/پَس فرِیز - + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + Importing blocks from disk... - Reindexing blocks on disk... - Send coins to a Myriadcoin address - Modify configuration options for Myriadcoin اصلاح انتخابها برای پیکربندی Myriadcoin - Backup wallet to another location گرفتن نسخه پیشتیبان در آدرسی دیگر - Change the passphrase used for wallet encryption رمز مربوط به رمزگذاریِ wallet را تغییر دهید - &Debug window - Open debugging and diagnostic console - &Verify message... - - Myriadcoin - myriadcoin + bitcoin - Wallet کیف پول - &Send - &Receive - - &Addresses - - - - - &About Myriadcoin - &در مورد بیتکویین - - - &Show / Hide &نمایش/ عدم نمایش و - Show or hide the main Window - Encrypt the private keys that belong to your wallet - Sign messages with your Myriadcoin addresses to prove you own them - Verify messages to ensure they were signed with specified Myriadcoin addresses - &File و فایل - &Settings و تنظیمات - &Help و راهنما - Tabs toolbar نوار ابزار - - [testnet] [testnet] - + Myriadcoin Core + + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + Myriadcoin client - مشتری myriadcoin + مشتری bitcoin - %n active connection(s) to Myriadcoin network - %n ارتباط فعال به شبکه Myriadcoin + %n ارتباط فعال به شبکه Bitcoin %n ارتباط فعال به شبکه Myriadcoin - No block source available... - Processed %1 of %2 (estimated) blocks of transaction history. - Processed %1 blocks of transaction history. - %n hour(s) - %n day(s) - %n week(s) - + %1 and %2 + + + + %n year(s) + + + %1 behind - Last received block was generated %1 ago. - Transactions after this will not yet be visible. - Error - + خطا - Warning - Information - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - Up to date روزآمد - Catching up... در حال روزآمد سازی.. - - Confirm transaction fee - - - - Sent transaction ارسال تراکنش - Incoming transaction تراکنش دریافتی - Date: %1 Amount: %2 Type: %3 @@ -641,29 +545,14 @@ Address: %4 - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> wallet رمزگذاری شد و در حال حاضر از حالت قفل در آمده است - Wallet is <b>encrypted</b> and currently <b>locked</b> wallet رمزگذاری شد و در حال حاضر قفل است - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. @@ -671,329 +560,648 @@ Address: %4 ClientModel - Network Alert هشدار شبکه - EditAddressDialog + CoinControlDialog - - Edit Address - ویرایش آدرسها + Coin Control Address Selection + + + + Quantity: + + + + Bytes: + + + + Amount: + میزان وجه: + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + میزان + + + Address + حساب + + + Date + تاریخ + + + Confirmations + + + + Confirmed + تایید شده + + + Priority + + + + Copy address + آدرس را کپی کنید + + + Copy label + برچسب را کپی کنید + + + Copy amount + میزان وجه کپی شود + + + Copy transaction ID + + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + + + + Dust + + + + yes + + + + no + + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + (برچسب ندارد) + + + change from %1 (%2) + + + + (change) + + + + + EditAddressDialog + + Edit Address + ویرایش حساب - &Label و برچسب - - The label associated with this address book entry - برچسب مربوط به این دفترچه آدرس + The label associated with this address list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + - &Address - و آدرس + حساب& - - The address associated with this address book entry. This can only be modified for sending addresses. - برچسب مربوط به این دفترچه آدرس و تنها ب - - - New receiving address - آدرسِ دریافت کننده جدید + حساب دریافت کننده جدید + - New sending address - آدرس ارسال کننده جدید + حساب ارسال کننده جدید - Edit receiving address - ویرایش آدرسِ دریافت کننده + ویرایش حساب دریافت کننده - Edit sending address - ویرایش آدرسِ ارسال کننده + ویرایش حساب ارسال کننده - The entered address "%1" is already in the address book. - آدرس وارد شده %1 قبلا به فهرست آدرسها اضافه شده بوده است. + حساب وارد شده «1%» از پیش در دفترچه حساب ها موجود است. - The entered address "%1" is not a valid Myriadcoin address. آدرس وارد شده "%1" یک آدرس صحیح برای myriadcoin نسشت - Could not unlock wallet. عدم توانیی برای قفل گشایی wallet - New key generation failed. عدم توانیی در ایجاد کلید جدید - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt + A new data directory will be created. + + + + name + + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core - version نسخه - Usage: میزان استفاده: - command-line options - UI options - Set language, for example "de_DE" (default: system locale) - Start minimized - + Set SSL root certificates for payment request (default: -system-) + + + Show splash screen on startup (default: 1) + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + bitcoin + + + Error: Specified data directory "%1" can not be created. + + + + Error + خطا + + + GB of free space available + + + + (of %1GB needed) + + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open + + OptionsDialog - Options انتخاب/آپشن - &Main - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. - Pay transaction &fee - Automatically start Myriadcoin after logging in to the system. - &Start Myriadcoin on system login - + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + Reset all client options to default. - &Reset Options - &Network - + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. - Map port using &UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - - - - - &Connect through SOCKS proxy: - - - - Proxy &IP: - - IP address of the proxy (e.g. 127.0.0.1) - - - - &Port: - Port of the proxy (e.g. 9050) - SOCKS &Version: - SOCKS version of the proxy (e.g. 5) - &Window - Show only a tray icon after minimizing the window. - &Minimize to the tray instead of the taskbar - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. - M&inimize on close - &Display - User Interface &language: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. - &Unit to show amounts in: - Choose the default subdivision unit to show in the interface and when sending coins. - Whether to show Myriadcoin addresses in the transaction list or not. - &Display addresses in transaction list و نمایش آدرسها در فهرست تراکنش - + Whether to show coin control features or not. + + + &OK و تایید - &Cancel و رد - - &Apply - و به کار گرفتن - - - default پیش فرض - + none + + + Confirm options reset - - Some settings may require a client restart to take effect. + Client restart required to activate changes. - - Do you want to proceed? + Client will be shutdown, do you want to proceed? - - - Warning + This change would require a client restart. - - - This setting will take effect after restarting Myriadcoin. - - - - The supplied proxy address is invalid. @@ -1001,59 +1209,54 @@ Address: %4 OverviewPage - Form فرم - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. اطلاعات نمایش داده شده ممکن است روزآمد نباشد. wallet شما به صورت خودکار بعد از برقراری اتصال با شبکه myriadcoin به روز می شود اما این فرایند هنوز تکمیل نشده است. - - Balance: - مانده حساب: - - - - Unconfirmed: - تایید نشده - - - Wallet کیف پول - + Available: + + + + Your current spendable balance + + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + + + Immature: - Mined balance that has not yet matured - + Total: + + + + Your current total balance + + + <b>Recent transactions</b> تراکنشهای اخیر - - Your current balance - مانده حساب جاری - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - تعداد تراکنشهایی که نیاز به تایید دارند و هنوز در مانده حساب جاری شما به حساب نیامده اند - - - - out of sync خارج از روزآمد سازی @@ -1061,580 +1264,856 @@ Address: %4 PaymentServer - + URI handling + + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + Cannot start myriadcoin: click-to-pay handler + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + + + + Network request error + + - QRCodeDialog + QObject - - QR Code Dialog + Myriadcoin + bitcoin + + + Error: Specified data directory "%1" does not exist. - - Request Payment - درخواست وجه - - - - Amount: - میزان وجه: - - - - Label: - برچسب: - - - - Message: - پیام: - - - - &Save As... - و ذخیره با عنوانِ... - - - - Error encoding URI into QR Code. + Error: Cannot parse configuration file: %1. Only use key=value syntax. - - The entered amount is invalid, please check. + Error: Invalid combination of -regtest and -testnet. - - Resulting URI too long, try to reduce the text for label / message. - متن وارد شده طولانی است، متنِ برچسب/پیام را کوتاه کنید + Myriadcoin Core didn't yet exit safely... + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + یک آدرس myriadcoin وارد کنید (مثال 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + + + + &Copy Image + - Save QR Code - - PNG Images (*.png) - تصاویر با فرمت PNG -(*.png) + PNG Image (*.png) + RPCConsole - Client name - + نام کنسول RPC - - - - - - - - - - N/A - Client version - + ویرایش کنسول RPC - &Information - + Debug window + + + + General + + + Using OpenSSL version - Startup time - Network + شبکه + + + Name - Number of connections - + تعداد اتصال - - On testnet - - - - Block chain - + زنجیره مجموعه تراکنش ها - Current number of blocks - + تعداد زنجیره های حاضر - Estimated total blocks - Last block time - &Open - - Command-line options - - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - - - - - &Show - - - - &Console - + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + Build date - - Myriadcoin - Debug window - - - - - Myriadcoin Core - - - - Debug log file - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. - Clear console - Welcome to the Myriadcoin RPC console. به کنسول آر.پی.سی. MYRIADCOIN خوش آمدید - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Type <b>help</b> for an overview of available commands. + + %1 B + + + + %1 KB + + + + %1 MB + + + + %1 GB + + + + %1 m + + + + %1 h + + + + %1 h %2 m + + + + + ReceiveCoinsDialog + + &Amount: + + + + &Label: + و برچسب + + + &Message: + + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + + + + Clear + + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + + + + Remove the selected entries from the list + + + + Remove + + + + Copy label + برچسب را کپی کنید + + + Copy message + + + + Copy amount + میزان وجه کپی شود + + + + ReceiveRequestDialog + + QR Code + + + + Copy &URI + + + + Copy &Address + + + + &Save Image... + + + + Request payment to %1 + + + + Payment information + + + + URI + + + + Address + حساب + + + Amount + میزان + + + Label + برچسب + + + Message + پیام + + + Resulting URI too long, try to reduce the text for label / message. + متن وارد شده طولانی است، متنِ برچسب/پیام را کوتاه کنید + + + Error encoding URI into QR Code. + خطای تبدیل URI به کد QR + + + + RecentRequestsTableModel + + Date + تاریخ + + + Label + برچسب + + + Message + پیام + + + Amount + میزان + + + (no label) + (برچسب ندارد) + + + (no message) + + + + (no amount) + + SendCoinsDialog - - - - - - - - Send Coins سکه های ارسالی - + Coin Control Features + + + + Inputs... + + + + automatically selected + + + + Insufficient funds! + + + + Quantity: + + + + Bytes: + + + + Amount: + میزان وجه: + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + Send to multiple recipients at once ارسال همزمان به گیرنده های متعدد - Add &Recipient - - Remove all transaction fields - تمامی فیلدهای تراکنش حذف شوند + Clear all fields of the form. + - Clear &All - Balance: مانده حساب: - - 123.456 BTC - 123.456 BTC - - - Confirm the send action تایید عملیات ارسال - S&end و ارسال - - <b>%1</b> to %2 (%3) - %1 به %2 (%3) - - - Confirm send coins - تایید ارسال سکه ها + تایید ارسال بیت کوین ها - - Are you sure you want to send %1? - شما مطمئن هستید که می خواهید %1 را ارسال کنید؟ + %1 to %2 + - - and - و + Copy quantity + + + + Copy amount + میزان وجه کپی شود + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + + + + or + - The recipient address is not valid, please recheck. - The amount to pay must be larger than 0. میزان پرداخت باید بیشتر از 0 باشد - The amount exceeds your balance. - + مقدار مورد نظر از مانده حساب بیشتر است. - The total exceeds your balance when the %1 transaction fee is included. - Duplicate address found, can only send to each address once per send operation. - - Error: Transaction creation failed! + Transaction creation failed! - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - خطا: تراکنش تایید نشد. این خطا ممکن است به این دلیل اتفاق بیافتد که سکه های wallet شما خرج شده باشند مثلا اگر wallet.dat را مپی کرده باشید و سکه های شما در آن کپی استفاده شده باشند اما در اینجا نمایش داده نشده اند. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + + + + (no label) + (برچسب ندارد) + + + Warning: Unknown change address + + + + Are you sure you want to send? + + + + added as transaction fee + + + + Payment request expired + + + + Invalid payment address %1 + SendCoinsEntry - - Form - فرم - - - A&mount: و میزان وجه - Pay &To: پرداخت و به چه کسی - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book یک برچسب برای این آدرس بنویسید تا به دفترچه آدرسهای شما اضافه شود - &Label: و برچسب - - Choose address from address book - آدرس از فهرست آدرس انتخاب کنید + Choose previously used address + + + + This is a normal payment. + - Alt+A Alt و A - Paste address from clipboard آدرس را بر کلیپ بورد کپی کنید - Alt+P Alt و P - - Remove this recipient - این گیرنده را حذف کن + Remove this entry + - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - یک آدرس myriadcoin وارد کنید (مثال 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + پیام: + + + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. + SignVerifyMessageDialog - Signatures - Sign / Verify a Message - &Sign Message و امضای پیام - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) یک آدرس myriadcoin وارد کنید (مثال 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book - آدرس از فهرست آدرس انتخاب کنید + Choose previously used address + - - Alt+A Alt و A - Paste address from clipboard آدرس را بر کلیپ بورد کپی کنید - Alt+P Alt و P - Enter the message you want to sign here - Signature - Copy the current signature to the system clipboard - Sign the message to prove you own this Myriadcoin address - Sign &Message - Reset all sign message fields - - Clear &All - &Verify Message - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) یک آدرس myriadcoin وارد کنید (مثال 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address - Verify &Message - Reset all verify message fields - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) یک آدرس myriadcoin وارد کنید (مثال 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature - - Enter Myriadcoin signature - - - - - The entered address is invalid. - - - - Please check the address and try again. - - The entered address does not refer to a key. - Wallet unlock was cancelled. - Private key for the entered address is not available. - Message signing failed. - Message signed. - The signature could not be decoded. - - Please check the signature and try again. - The signature did not match the message digest. - Message verification failed. - Message verified. @@ -1642,186 +2121,160 @@ Address: %4 SplashScreen - - The Myriadcoin developers + Myriadcoin Core + + + + The Myriadcoin Core developers - [testnet] [testnet] + + TrafficGraphWidget + + KB/s + + + TransactionDesc - Open until %1 باز کن تا %1 - + conflicted + + + %1/offline - %1/unconfirmed - %1 غیرقابل تایید + %1 / تایید نشده - %1 confirmations - %1 تاییدها + %1 تایید - Status - , broadcast through %n node(s) - Date تاریخ - Source - Generated - - From - - - To - - own address - label برچسب - - - - - Credit - matures in %n more block(s) - not accepted - - - - Debit - Transaction fee - Net amount - Message پیام - Comment - Transaction ID - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Merchant + + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Debug information - Transaction - Inputs - Amount میزان - true - false - , has not been successfully broadcast yet - تا به حال با موفقیت انتشار نیافته است + ، هنوز با موفقیت ارسال نگردیده است - Open for %n more block(s) - unknown ناشناس @@ -1829,12 +2282,10 @@ Address: %4 TransactionDescDialog - Transaction details جزئیات تراکنش - This pane shows a detailed description of the transaction این بخش جزئیات تراکنش را نشان می دهد @@ -1842,117 +2293,102 @@ Address: %4 TransactionTableModel - Date تاریخ - Type - نوع + گونه - Address آدرس - Amount میزان وجه + + Immature (%1 confirmations, will be available after %2) + + - Open for %n more block(s) - Open until %1 باز کن تا %1 - - Offline (%1 confirmations) - برون خطی (%1 تاییدها) - - - - Unconfirmed (%1 of %2 confirmations) - تایید نشده (%1 از %2 تاییدها) - - - Confirmed (%1 confirmations) تایید شده (%1 تاییدها) - - - Mined balance will be available when it matures in %n more block(s) - - - This block was not received by any other nodes and will probably not be accepted! این block توسط گره های دیگری دریافت نشده است و ممکن است قبول نشود - Generated but not accepted تولید شده اما قبول نشده است - + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + Received with قبول با - Received from دریافت شده از - Sent to ارسال به - Payment to yourself وجه برای شما - Mined استخراج شده - (n/a) خالی - Transaction status. Hover over this field to show number of confirmations. وضعیت تراکنش. با اشاره به این بخش تعداد تاییدها نمایش داده می شود - Date and time that the transaction was received. زمان و تاریخی که تراکنش دریافت شده است - Type of transaction. نوع تراکنش - Destination address of transaction. آدرس مقصد در تراکنش - Amount removed from or added to balance. میزان وجه کم شده یا اضافه شده به حساب @@ -1960,176 +2396,156 @@ Address: %4 TransactionView - - All همه - Today امروز - This week این هفته - This month این ماه - Last month ماه گذشته - This year این سال - Range... حدود.. - Received with دریافت با - Sent to ارسال به - To yourself به شما - Mined استخراج شده - Other دیگر - Enter address or label to search آدرس یا برچسب را برای جستجو وارد کنید - Min amount حداقل میزان وجه - Copy address آدرس را کپی کنید - Copy label برچسب را کپی کنید - Copy amount میزان وجه کپی شود - Copy transaction ID - Edit label برچسب را ویرایش کنید - Show transaction details - - Export Transaction Data - داده های تراکنش را صادر کنید + Export Transaction History + + + + Exporting Failed + + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + + + + The transaction history was successfully saved to %1. + - Comma separated file (*.csv) Comma separated file (*.csv) فایل جداگانه دستوری - Confirmed تایید شده - Date تاریخ - Type نوع - Label برچسب - Address آدرس - Amount میزان - ID شناسه کاربری - - Error exporting - خطا در ارسال - - - - Could not write to file %1. - قابل کپی به فایل نیست %1. - - - Range: دامنه: - to به + + WalletFrame + + No wallet has been loaded. + + + WalletModel - Send Coins سکه های ارسالی @@ -2137,160 +2553,121 @@ Address: %4 WalletView - &Export - Export the data in the current tab to a file صدور داده نوار جاری به یک فایل - Backup Wallet - Wallet Data (*.dat) - Backup Failed - - There was an error trying to save the wallet data to the new location. + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. - Backup Successful - - - The wallet data was successfully saved to the new location. - - bitcoin-core - - Myriadcoin version - نسخه myriadcoin - - - Usage: میزان استفاده: - - Send command to -server or myriadcoind - ارسال دستور به سرور یا myriadcoined - - - List commands فهرست دستورها - Get help for a command درخواست کمک برای یک دستور - Options: انتخابها: - Specify configuration file (default: myriadcoin.conf) فایل پیکربندیِ را مشخص کنید (پیش فرض: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) فایل pid را مشخص کنید (پیش فرض: myriadcoind.pid) - Specify data directory دایرکتوری داده را مشخص کن - - Set database cache size in megabytes (default: 25) - حافظه بانک داده را به مگابایت تنظیم کنید (پیش فرض: 25) - - - Listen for connections on <port> (default: 8333 or testnet: 18333) ارتباطات را در <PORT> بشنوید (پیش فرض: 8333 or testnet: 18333) - Maintain at most <n> connections to peers (default: 125) نگهداری <N> ارتباطات برای قرینه سازی (پیش فرض:125) - Connect to a node to retrieve peer addresses, and disconnect - Specify your own public address - Threshold for disconnecting misbehaving peers (default: 100) آستانه قطع برای قرینه سازی اشتباه (پیش فرض:100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) تعداد ثانیه ها برای اتصال دوباره قرینه های اشتباه (پیش فرض:86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) ارتباطاتِ JSON-RPC را در <port> گوش کنید (پیش فرض:8332) - Accept command line and JSON-RPC commands command line و JSON-RPC commands را قبول کنید - + Myriadcoin Core RPC client version + + + Run in the background as a daemon and accept commands به عنوان daemon بک گراند را اجرا کنید و دستورات را قبول نمایید - Use the test network از تستِ شبکه استفاده نمایید - Accept connections from outside (default: 1 if no -proxy or -connect) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2305,612 +2682,686 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications - + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. - + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + Attempt to recover private keys from a corrupt wallet.dat - + Myriadcoin Core Daemon + + + Block creation options: - + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + Connect only to the specified node(s) - + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + Corrupted block database detected - + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + Discover own IP address (default: 1 when listening and no -externalip) - + Do not load the wallet and disable wallet RPC calls + + + Do you want to rebuild the block database now? - Error initializing block database - Error initializing wallet database environment %s! - Error loading block database - Error opening block database - Error: Disk space is low! - Error: Wallet locked, unable to create transaction! - Error: system error: - Failed to listen on any port. Use -listen=0 if you want this. - Failed to read block info - Failed to read block - Failed to sync block index - Failed to write block index - Failed to write block info - Failed to write block - Failed to write file info - Failed to write to coin database - Failed to write transaction index - Failed to write undo data - + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + Find peers using DNS lookup (default: 1 unless -connect) - + Force safe mode (default: 0) + + + Generate coins (default: 0) - How many blocks to check at startup (default: 288, 0 = all) - - How thorough the block verification is (0-4, default: 3) + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' - Not enough file descriptors available. - + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + Rebuild block chain index from current blk000??.dat files - + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + Set the number of threads to service RPC calls (default: 4) - + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + Verifying blocks... - Verifying wallet... - + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + + + Imports blocks from external blk000??.dat file - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) - Information - - Invalid -tor address: '%s' - - - - Invalid amount for -minrelaytxfee=<amount>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' - + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + Maintain a full transaction index (default: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Only accept block chain matching built-in checkpoints (default: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - Output extra debugging information. Implies all other -debug* options + Print block on startup, if found in block index - - Output extra network debugging information + Print block tree on startup (default: 0) - - Prepend debug output with timestamp - برونداد اشکال زدایی با timestamp + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) - - Select the version of socks proxy to use (4-5, default: 5) + Send command to Myriadcoin Core - Send trace/debug info to console instead of debug.log file ارسال اطلاعات پیگیری/خطایابی به کنسول به جای ارسال به فایل debug.log - - Send trace/debug info to debugger - ارسال اطاعات خطایابی/پیگیری به سیستم خطایاب - - - - Set maximum block size in bytes (default: 250000) - - - - Set minimum block size in bytes (default: 0) - + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + Shrink debug.log file on client startup (default: 1 when no -debug) - Signing transaction failed - Specify connection timeout in milliseconds (default: 5000) تعیین مدت زمان وقفه (time out) به هزارم ثانیه - + Start Myriadcoin Core Daemon + + + System error: - Transaction amount too small - Transaction amounts must be positive - Transaction too large - Use UPnP to map the listening port (default: 0) - Use UPnP to map the listening port (default: 1 when listening) - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - Username for JSON-RPC connections شناسه کاربری برای ارتباطاتِ JSON-RPC - Warning - Warning: This version is obsolete, upgrade required! - - You need to rebuild the databases using -reindex to change -txindex + Zapping all transactions from wallet... - + on startup + + + + version + نسخه + + wallet.dat corrupt, salvage failed - Password for JSON-RPC connections رمز برای ارتباطاتِ JSON-RPC - Allow JSON-RPC connections from specified IP address ارتباطاتِ JSON-RPC را از آدرس آی.پی. مشخصی برقرار کنید. - Send commands to node running on <ip> (default: 127.0.0.1) دستورات را به گره اجرا شده در<ip> ارسال کنید (پیش فرض:127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) دستور را وقتی بهترین بلاک تغییر کرد اجرا کن (%s در دستور توسط block hash جایگزین شده است) - Upgrade wallet to latest format wallet را به جدیدترین نسخه روزآمد کنید - Set key pool size to <n> (default: 100) حجم key pool را به اندازه <n> تنظیم کنید (پیش فرض:100) - Rescan the block chain for missing wallet transactions زنجیره بلاک را برای تراکنش جا افتاده در WALLET دوباره اسکن کنید - Use OpenSSL (https) for JSON-RPC connections برای ارتباطاتِ JSON-RPC از OpenSSL (https) استفاده کنید - Server certificate file (default: server.cert) فایل certificate سرور (پیش فرض server.cert) - Server private key (default: server.pem) رمز اختصاصی سرور (پیش فرض: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - ciphers قابل قبول (پیش فرض: default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - This help message این پیام راهنما - Unable to bind to %s on this computer (bind returned error %d, %s) - - Connect through socks proxy - - - - Allow DNS lookups for -addnode, -seednode and -connect - Loading addresses... لود شدن آدرسها.. - Error loading wallet.dat: Wallet corrupted خطا در هنگام لود شدن wallet.dat: Wallet corrupted - Error loading wallet.dat: Wallet requires newer version of Myriadcoin - خطا در هنگام لود شدن wallet.dat. به نسخه جدید Myriadcoin برای wallet نیاز است. + خطا در هنگام لود شدن wallet.dat. به نسخه جدید Bitocin برای wallet نیاز است. - Wallet needed to be rewritten: restart Myriadcoin to complete wallet نیاز به بازنویسی دارد. Myriadcoin را برای تکمیل عملیات دوباره اجرا کنید. - Error loading wallet.dat خطا در هنگام لود شدن wallet.dat - Invalid -proxy address: '%s' - Unknown network specified in -onlynet: '%s' - Unknown -socks proxy version requested: %i - Cannot resolve -bind address: '%s' - Cannot resolve -externalip address: '%s' - Invalid amount for -paytxfee=<amount>: '%s' میزان اشتباه است for -paytxfee=<amount>: '%s' - Invalid amount میزان اشتباه است - Insufficient funds وجوه ناکافی - Loading block index... لود شدن نمایه بلاکها.. - Add a node to connect to and attempt to keep the connection open یک گره برای اتصال اضافه کنید و تلاش کنید تا اتصال را باز نگاه دارید - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - - - - - Fee per KB to add to transactions you send - هزینه بر اساس کیلو بایت برای اضافه شدن به تراکنشی که ارسال کرده اید - - - Loading wallet... wallet در حال لود شدن است... - Cannot downgrade wallet قابلیت برگشت به نسخه قبلی برای wallet امکان پذیر نیست - Cannot write default address آدرس پیش فرض قابل ذخیره نیست - Rescanning... اسکنِ دوباره... - Done loading اتمام لود شدن - To use the %s option برای استفاده از %s از اختیارات - Error خطا - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_fi.ts b/src/qt/locale/bitcoin_fi.ts index e942d1dc..dd8e8c7d 100644 --- a/src/qt/locale/bitcoin_fi.ts +++ b/src/qt/locale/bitcoin_fi.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - Tietoa Myriadcoinista + About Myriadcoin Core + Tietoja Myriadcoin Core - - <b>Myriadcoin</b> version - <b>Myriadcoin</b> versio + <b>Myriadcoin Core</b> version + <b>Myriadcoin Core</b> versio - This is experimental software. @@ -29,153 +25,128 @@ Tämä ohjelma sisältää OpenSSL projektin OpenSSL työkalupakin (http://www.o - Copyright Tekijänoikeus - - The Myriadcoin developers - + The Myriadcoin Core developers + Myriadcoin Core kehittäjät + + + (%1-bit) + (%1-bit) AddressBookPage - - Address Book - Osoitekirja - - - Double-click to edit address or label Kaksoisnapauta muokataksesi osoitetta tai nimeä - Create a new address Luo uusi osoite - + &New + &Uusi + + Copy the currently selected address to the system clipboard Kopioi valittu osoite leikepöydälle - - &New Address - &Uusi Osoite + &Copy + &Kopioi - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Nämä ovat Myriadcoin-osoitteesi joihin voit vastaanottaa maksuja. Voit haluta antaa jokaiselle maksajalle omansa, että pystyt seuraamaan keneltä maksut tulevat. + C&lose + &Sulje - &Copy Address &Kopioi Osoite - - Show &QR Code - Näytä &QR-koodi - - - - Sign a message to prove you own a Myriadcoin address - Allekirjoita viesti todistaaksesi, että omistat Myriadcoin-osoitteen - - - - Sign &Message - Allekirjoita &viesti - - - Delete the currently selected address from the list Poista valittu osoite listalta - Export the data in the current tab to a file Vie auki olevan välilehden tiedot tiedostoon - &Export - + &Vie... - - Verify a message to ensure it was signed with a specified Myriadcoin address - Tarkista viestin allekirjoitus varmistaaksesi, että se allekirjoitettiin tietyllä Myriadcoin-osoitteella - - - - &Verify Message - &Varmista viesti... - - - &Delete &Poista - - These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - + Choose the address to send coins to + Valitse osoite johon lähetetään kolikoita + + + Choose the address to receive coins with + Valitse osoite jolla vastaanotetaan kolikoita + + + C&hoose + &Valitse + + + Sending addresses + Lähettävä osoite + + + Receiving addresses + Vastaanottava osoite + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + Nämä ovat sinun Myriadcoin osoitteita maksujen lähetykseen. Tarkista aina rahan määrä ja vastaanottajan osoite ennenkuin lähetät kolikkoja. + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Nämä ovat sinun Bitcoin-osoitteesi suoritusten vastaanottamiseen. Suositellaan että annat uuden osoitteen kullekin rahansiirrolle - Copy &Label Kopioi &Nimi - &Edit &Muokkaa - - Send &Coins - Lähetä &Rahaa - - - - Export Address Book Data + Export Address List Vie osoitekirja - Comma separated file (*.csv) Comma separated file (*.csv) - - Error exporting - Virhe viedessä osoitekirjaa + Exporting Failed + Vienti epäonnistui - - Could not write to file %1. - Ei voida kirjoittaa tiedostoon %1. + There was an error trying to save the address list to %1. + Osoitelistan tallennuksessa tapahtui virhe tiedostoon %1. AddressTableModel - Label Nimi - Address Osoite - (no label) (ei nimeä) @@ -183,140 +154,106 @@ Tämä ohjelma sisältää OpenSSL projektin OpenSSL työkalupakin (http://www.o AskPassphraseDialog - Passphrase Dialog Tunnuslauseen Dialogi - Enter passphrase Kirjoita tunnuslause - New passphrase Uusi tunnuslause - Repeat new passphrase - Kiroita uusi tunnuslause uudelleen + Kirjoita uusi tunnuslause uudelleen - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. Anna lompakolle uusi tunnuslause.<br/>Käytä tunnuslausetta, jossa on ainakin <b>10 satunnaista mekkiä</b> tai <b>kahdeksan sanaa</b>. - Encrypt wallet Salaa lompakko - This operation needs your wallet passphrase to unlock the wallet. Tätä toimintoa varten sinun täytyy antaa lompakon tunnuslause sen avaamiseksi. - Unlock wallet Avaa lompakko - This operation needs your wallet passphrase to decrypt the wallet. Tätä toimintoa varten sinun täytyy antaa lompakon tunnuslause salauksen purkuun. - Decrypt wallet Pura lompakon salaus - Change passphrase Vaihda tunnuslause - Enter the old and new passphrase to the wallet. Anna vanha ja uusi tunnuslause. - Confirm wallet encryption Vahvista lompakon salaus - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! Varoitus: Jos salaat lompakkosi ja menetät tunnuslauseesi, <b>MENETÄT KAIKKI MYRIADCOINISI</b>! - Are you sure you wish to encrypt your wallet? Haluatko varmasti salata lompakkosi? - 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. TÄRKEÄÄ: Kaikki vanhat lompakon varmuuskopiot pitäisi korvata uusilla suojatuilla varmuuskopioilla. Turvallisuussyistä edelliset varmuuskopiot muuttuvat turhiksi, kun aloitat suojatun lompakon käytön. - - Warning: The Caps Lock key is on! Varoitus: Caps Lock on käytössä! - - Wallet encrypted Lompakko salattu - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. Myriadcoin sulkeutuu lopettaakseen salausprosessin. Muista, että salattukaan lompakko ei täysin suojaa sitä haittaohjelmien aiheuttamilta varkauksilta. - - - - Wallet encryption failed Lompakon salaus epäonnistui - Wallet encryption failed due to an internal error. Your wallet was not encrypted. Lompakon salaaminen epäonnistui sisäisen virheen vuoksi. Lompakkoasi ei salattu. - - The supplied passphrases do not match. Annetut tunnuslauseet eivät täsmää. - Wallet unlock failed Lompakon avaaminen epäonnistui. - - - The passphrase entered for the wallet decryption was incorrect. Annettu tunnuslause oli väärä. - Wallet decryption failed Lompakon salauksen purku epäonnistui. - Wallet passphrase was successfully changed. Lompakon tunnuslause vaihdettiin onnistuneesti. @@ -324,319 +261,286 @@ Tämä ohjelma sisältää OpenSSL projektin OpenSSL työkalupakin (http://www.o BitcoinGUI - Sign &message... &Allekirjoita viesti... - Synchronizing with network... Synkronoidaan verkon kanssa... - &Overview &Yleisnäkymä - + Node + Solmu + + Show general overview of wallet Lompakon tilanteen yleiskatsaus - &Transactions &Rahansiirrot - Browse transaction history Selaa rahansiirtohistoriaa - - Edit the list of stored addresses and labels - Muokkaa tallennettujen nimien ja osoitteiden listaa - - - - Show the list of addresses for receiving payments - Näytä Myriadcoinien vastaanottamiseen käytetyt osoitteet - - - E&xit L&opeta - Quit application Sulje ohjelma - Show information about Myriadcoin - Näytä tietoa Myriadcoin-projektista + Näytä tietoa Bitcoin-projektista - About &Qt Tietoja &Qt - Show information about Qt Näytä tietoja QT:ta - &Options... &Asetukset... - &Encrypt Wallet... &Salaa lompakko... - &Backup Wallet... &Varmuuskopioi Lompakko... - &Change Passphrase... &Vaihda Tunnuslause... - + &Sending addresses... + &Lähetysosoitteet... + + + &Receiving addresses... + &Vastaanotto-osoitteet... + + + Open &URI... + Avaa &URI... + + Importing blocks from disk... Tuodaan lohkoja levyltä - Reindexing blocks on disk... Ladataan lohkoindeksiä... - Send coins to a Myriadcoin address - Lähetä kolikoita Myriadcoin-osoitteeseen + Lähetä kolikoita Bitcoin-osoitteeseen - Modify configuration options for Myriadcoin - Muuta Myriadcoinin konfiguraatioasetuksia + Muuta Bitcoinin konfiguraatioasetuksia - Backup wallet to another location Varmuuskopioi lompakko toiseen sijaintiin - Change the passphrase used for wallet encryption Vaihda lompakon salaukseen käytettävä tunnuslause - &Debug window &Testausikkuna - Open debugging and diagnostic console Avaa debuggaus- ja diagnostiikkakonsoli - &Verify message... Varmista &viesti... - - Myriadcoin Myriadcoin - Wallet Lompakko - &Send &Lähetä - &Receive &Vastaanota - - &Addresses - &Osoitteet - - - - &About Myriadcoin - &Tietoa Myriadcoinista - - - &Show / Hide &Näytä / Piilota - Show or hide the main Window - Näytä tai piilota Myriadcoin-ikkuna + Näytä tai piilota Bitcoin-ikkuna - Encrypt the private keys that belong to your wallet Suojaa yksityiset avaimet, jotka kuuluvat lompakkoosi - Sign messages with your Myriadcoin addresses to prove you own them Allekirjoita viestisi omalla Myriadcoin -osoitteellasi todistaaksesi, että omistat ne - Verify messages to ensure they were signed with specified Myriadcoin addresses Varmista, että viestisi on allekirjoitettu määritetyllä Myriadcoin -osoitteella - &File &Tiedosto - &Settings &Asetukset - &Help &Apua - Tabs toolbar Välilehtipalkki - - [testnet] [testnet] - + Myriadcoin Core + Bitcoin-ydin + + + Request payments (generates QR codes and myriadcoin: URIs) + Pyydä maksuja (Luo QR koodit ja myriadcoin: URIt) + + + &About Myriadcoin Core + &Tietoja Myriadcoin Core + + + Show the list of used sending addresses and labels + Näytä lähettämiseen käytettyjen osoitteiden ja nimien lista + + + Show the list of used receiving addresses and labels + Näytä vastaanottamiseen käytettyjen osoitteiden ja nimien lista + + + Open a myriadcoin: URI or payment request + Avaa myriadcoin: URI tai maksupyyntö + + + &Command-line options + &Komentorivin valinnat + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + Näytä Myriadcoin Core ohjeet saadaksesi listan mahdollisista Bitcoinin komentorivivalinnoista + + Myriadcoin client - Myriadcoin-asiakas + Bitcoin-asiakas - %n active connection(s) to Myriadcoin network - %n aktiivinen yhteys Myriadcoin-verkkoon%n aktiivista yhteyttä Myriadcoin-verkkoon + %n aktiivinen yhteys Bitcoin-verkkoon%n aktiivista yhteyttä Bitcoin-verkkoon - No block source available... - + Lohkojen lähdettä ei saatavilla... - Processed %1 of %2 (estimated) blocks of transaction history. - + Käsitelty %1 of %2 (arviolta) rahansiirtohistorian lohkoa. - Processed %1 blocks of transaction history. Käsitelty %1 lohkoa rahansiirtohistoriasta - %n hour(s) %n tunti%n tuntia - %n day(s) - + %n päivä%n päivää - %n week(s) %n viikko%n viikkoa - - %1 behind - + %1 and %2 + %1 ja %2 + + + %n year(s) + %n vuosi%n vuotta + + + %1 behind + %1 jäljessä - Last received block was generated %1 ago. Viimeisin vastaanotettu lohko tuotettu %1. - Transactions after this will not yet be visible. - + Tämän jälkeiset rahansiirrot eivät ole vielä näkyvissä. - Error Virhe - Warning Varoitus - Information Tietoa - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - Up to date Rahansiirtohistoria on ajan tasalla - Catching up... Saavutetaan verkkoa... - - Confirm transaction fee - Vahvista maksukulu - - - Sent transaction Lähetetyt rahansiirrot - Incoming transaction Saapuva rahansiirto - Date: %1 Amount: %2 Type: %3 @@ -648,29 +552,14 @@ Tyyppi: %3 Osoite: %4 - - - URI handling - URI käsittely - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - URIa ei voitu jäsentää! Tämä voi johtua kelvottomasta Myriadcoin-osoitteesta tai virheellisistä URI parametreista. - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> Lompakko on <b>salattu</b> ja tällä hetkellä <b>avoinna</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> Lompakko on <b>salattu</b> ja tällä hetkellä <b>lukittuna</b> - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. Peruuttamaton virhe on tapahtunut. Myriadcoin ei voi enää jatkaa turvallisesti ja sammutetaan. @@ -678,329 +567,647 @@ Osoite: %4 ClientModel - Network Alert Verkkohälytys + + CoinControlDialog + + Coin Control Address Selection + Kolikkokontrollin osoitteen valinta + + + Quantity: + Määrä: + + + Bytes: + Tavuja: + + + Amount: + Määrä: + + + Priority: + Prioriteetti: + + + Fee: + Palkkio: + + + Low Output: + Pieni Tuotos + + + After Fee: + Palkkion jälkeen: + + + Change: + Vaihtoraha: + + + (un)select all + (epä)valitse kaikki + + + Tree mode + Puurakenne + + + List mode + Listarakenne + + + Amount + Määrä + + + Address + Osoite + + + Date + Aika + + + Confirmations + Vahvistuksia + + + Confirmed + Vahvistettu + + + Priority + Prioriteetti + + + Copy address + Kopioi osoite + + + Copy label + Kopioi nimi + + + Copy amount + Kopioi määrä + + + Copy transaction ID + Kopioi siirtotunnus + + + Lock unspent + Lukitse käyttämättömät + + + Unlock unspent + Avaa käyttämättömät + + + Copy quantity + Kopioi määrä + + + Copy fee + Kopioi palkkio + + + Copy after fee + Kopioi palkkion jälkeen + + + Copy bytes + Kopioi tavut + + + Copy priority + Kopioi prioriteetti + + + Copy low output + Kopioi pieni tuotos + + + Copy change + Kopioi vaihtoraha + + + highest + korkein + + + higher + korkeampi + + + high + korkea + + + medium-high + keski-korkea + + + medium + keskisuuri + + + low-medium + pieni-keskisuuri + + + low + pieni + + + lower + pienempi + + + lowest + pienin + + + (%1 locked) + (%1 lukittu) + + + none + ei mitään + + + Dust + Tomu + + + yes + kyllä + + + no + ei + + + This label turns red, if the transaction size is greater than 1000 bytes. + Tämä nimi muuttuu punaiseksi jos rahansiirron koko on suurempi kuin 1000 tavua + + + This means a fee of at least %1 per kB is required. + Tämä tarkoittaa että vähintään %1 per kB palkkio on pakollinen. + + + Can vary +/- 1 byte per input. + Voi vaihdella +/- 1 tavu per syöte + + + Transactions with higher priority are more likely to get included into a block. + Rahansiirrot korkeammalla prioriteetilla sisällytetään varmemmin lohkoon. + + + This label turns red, if the priority is smaller than "medium". + Tämä nimi muuttuu punaiseksi jos prioriteetti on pienempi kuin "keskisuuri". + + + This label turns red, if any recipient receives an amount smaller than %1. + Tämä nimi muuttuu punaiseksi jos vastaanottaja saa pienemmän määrän kuin %1 + + + This means a fee of at least %1 is required. + Tämä tarkoittaa että vähintään %1 palkkio on pakollinen. + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + Maksumäärät alle 0.546 kertaa vähimmäispalkkion näytetään tomuna. + + + This label turns red, if the change is smaller than %1. + Tämä nimi muuttuu punaiseksi jos vaihtoraha on alle %1. + + + (no label) + (ei nimeä) + + + change from %1 (%2) + Vaihda %1 (%2) + + + (change) + (vaihtoraha) + + EditAddressDialog - Edit Address Muokkaa osoitetta - &Label &Nimi - - The label associated with this address book entry + The label associated with this address list entry Tähän osoitteeseen liitetty nimi - + The address associated with this address list entry. This can only be modified for sending addresses. + Osoite liitettynä tähän osoitekirjan alkioon. Tämä voidaan muokata vain lähetysosoitteissa. + + &Address &Osoite - - The address associated with this address book entry. This can only be modified for sending addresses. - Osoite, joka liittyy tämän osoitekirjan merkintään. Tätä voidaan muuttaa vain lähtevissä osoitteissa. - - - New receiving address Uusi vastaanottava osoite - New sending address Uusi lähettävä osoite - Edit receiving address Muokkaa vastaanottajan osoitetta - Edit sending address Muokkaa lähtevää osoitetta - The entered address "%1" is already in the address book. Osoite "%1" on jo osoitekirjassa. - The entered address "%1" is not a valid Myriadcoin address. - Antamasi osoite "%1" ei ole validi Myriadcoin-osoite. + Antamasi osoite "%1" ei ole validi Bitcoin-osoite. - Could not unlock wallet. Lompakkoa ei voitu avata. - New key generation failed. Uuden avaimen luonti epäonnistui. - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt - Myriadcoin-Qt + A new data directory will be created. + Luodaan uusi kansio. + + + name + Nimi + + + Directory already exists. Add %1 if you intend to create a new directory here. + Hakemisto on jo olemassa. Lisää %1 jos tarkoitus on luoda hakemisto tänne. + + + Path already exists, and is not a directory. + Polku on jo olemassa, eikä se ole kansio. + + + Cannot create data directory here. + Ei voida luoda data-hakemistoa tänne. + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + Myriadcoin Core - Kometorivivalinnat + + + Myriadcoin Core + Bitcoin-ydin - version versio - Usage: Käyttö: - command-line options komentorivi parametrit - UI options Käyttöliittymäasetukset - Set language, for example "de_DE" (default: system locale) Set language, for example "de_DE" (default: system locale) - Start minimized Käynnistä pienennettynä - + Set SSL root certificates for payment request (default: -system-) + Aseta SSL root varmenne maksupyynnöille (oletus: -system-) + + Show splash screen on startup (default: 1) Näytä aloitusruutu käynnistettäessä (oletus: 1) + + Choose data directory on startup (default: 0) + Valitse data-hakemisto käynnistyksessä (oletus: 0) + + + + Intro + + Welcome + Tervetuloa + + + Welcome to Myriadcoin Core. + Tervetuloa Myriadcoin Core + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + Tämän on ensimmäinen kerta kun Myriadcoin Core on käynnistetty joten voit valita data-hakemiston paikan. + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + Myriadcoin Core lataa ja tallentaa kopion Bitcoinin lohkoketjusta. Vähintään %1GB dataa tullaan tallentamaan tähän hakemistoon ja tarve kasvaa ajan myötä. Lomakko tullaan myös tallentamaan tähän hakemistoon. + + + Use the default data directory + Käytä oletuskansiota + + + Use a custom data directory: + Määritä oma kansio: + + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" can not be created. + Virhe: Annettua data-hakemistoa "%1" ei voida luoda. + + + Error + Virhe + + + GB of free space available + GB vapaata tilaa + + + (of %1GB needed) + (tarvitaan %1GB) + + + + OpenURIDialog + + Open URI + Avaa URI + + + Open payment request from URI or file + Avaa maksupyyntö URI:sta tai tiedostosta + + + URI: + URI: + + + Select payment request file + Valitse maksupyynnön tiedosto + + + Select payment request file to open + Valitse maksypyynnön tiedosto avattavaksi + OptionsDialog - Options Asetukset - &Main &Yleiset - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. - + Valinnainen rahansiirtopalkkio per kB auttaa varmistamaan että rahansiirtosi prosessoidaan nopeasti. Useimmat rahansiirrot ovat alle 1 kB. - Pay transaction &fee Maksa rahansiirtopalkkio - Automatically start Myriadcoin after logging in to the system. Käynnistä Myriadcoin kirjautumisen yhteydessä. - &Start Myriadcoin on system login &Käynnistä Myriadcoin kirjautumisen yhteydessä - + Size of &database cache + &Tietokannan välimuistin koko + + + MB + MB + + + Number of script &verification threads + Script &varmistuksen threadien määrä + + + Connect to the Myriadcoin network through a SOCKS proxy. + Yhdistä Bitcoin-verkkoon SOCKS proxyn kautta. + + + &Connect through SOCKS proxy (default proxy): + &Yhdistä SOCKS proxyn kautta (oletus proxy): + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + IP osoite proxille (esim. IPv4: 127.0.0.1 / IPv6: ::1) + + + 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 |. + Ulkopuoliset URL-osoitteet (esim. block explorer,) jotka esiintyvät siirrot-välilehdellä valikossa. %s URL-osoitteessa korvataan siirtotunnuksella. Useampi URL-osoite on eroteltu pystyviivalla |. + + + Third party transaction URLs + Kolmannen osapuolen rahansiirto URL:t + + + Active command-line options that override above options: + Aktiiviset komentorivivalinnat jotka ohittavat ylläolevat valinnat: + + Reset all client options to default. - + Palauta kaikki asetukset takaisin alkuperäisiksi. - &Reset Options - + &Palauta asetukset - &Network &Verkko - - Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. - Avaa Myriadcoin-asiakasohjelman portti reitittimellä automaattisesti. Tämä toimii vain, jos reitittimesi tukee UPnP:tä ja se on käytössä. + (0 = auto, <0 = leave that many cores free) + (0 = auto, <0 = jätä näin monta ydintä vapaaksi) + + + W&allet + &Lompakko + + + Expert + Expertti + + + Enable coin &control features + Ota käytöön &Kolikkokontrolli-ominaisuudet + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + Jos poistat varmistamattomien vaihtorahojen käytön, rahansiirron vaihtorahaa ei voida käyttää ennen vähintään yhtä varmistusta. Tämä vaikuttaa myös kuinka taseesi lasketaan. + + + &Spend unconfirmed change + &Käytä varmistamattomia vaihtorahoja + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. + Avaa Bitcoin-asiakasohjelman portti reitittimellä automaattisesti. Tämä toimii vain, jos reitittimesi tukee UPnP:tä ja se on käytössä. - Map port using &UPnP Portin uudelleenohjaus &UPnP:llä - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - Ota yhteys Myriadcoin-verkkoon SOCKS-proxyn läpi (esimerkiksi kun haluat käyttää Tor-verkkoa). - - - - &Connect through SOCKS proxy: - &Ota yhteys SOCKS-proxyn kautta: - - - Proxy &IP: Proxyn &IP: - - IP address of the proxy (e.g. 127.0.0.1) - Välityspalvelimen IP-osoite (esim. 127.0.0.1) - - - &Port: &Portti - Port of the proxy (e.g. 9050) Proxyn Portti (esim. 9050) - SOCKS &Version: SOCKS &Versio: - SOCKS version of the proxy (e.g. 5) Proxyn SOCKS-versio (esim. 5) - &Window &Ikkuna - Show only a tray icon after minimizing the window. Näytä ainoastaan ilmaisinalueella ikkunan pienentämisen jälkeen. - &Minimize to the tray instead of the taskbar &Pienennä ilmaisinalueelle työkalurivin sijasta - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. - Ikkunaa suljettaessa vain pienentää Myriadcoin-ohjelman ikkunan lopettamatta itse ohjelmaa. Kun tämä asetus on valittuna, ohjelman voi sulkea vain valitsemalla Lopeta ohjelman valikosta. + Ikkunaa suljettaessa vain pienentää Bitcoin-ohjelman ikkunan lopettamatta itse ohjelmaa. Kun tämä asetus on valittuna, ohjelman voi sulkea vain valitsemalla Lopeta ohjelman valikosta. - M&inimize on close P&ienennä suljettaessa - &Display &Käyttöliittymä - User Interface &language: &Käyttöliittymän kieli - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. Tässä voit määritellä käyttöliittymän kielen. Muutokset astuvat voimaan seuraavan kerran, kun Myriadcoin käynnistetään. - &Unit to show amounts in: - Yksikkö jona myriadcoin-määrät näytetään + Yksikkö jona bitcoin-määrät näytetään - Choose the default subdivision unit to show in the interface and when sending coins. - Valitse mitä yksikköä käytetään ensisijaisesti myriadcoin-määrien näyttämiseen. + Valitse mitä yksikköä käytetään ensisijaisesti bitcoin-määrien näyttämiseen. - Whether to show Myriadcoin addresses in the transaction list or not. - Näytetäänkö Myriadcoin-osoitteet rahansiirrot listassa vai ei. + Näytetäänkö Bitcoin-osoitteet rahansiirrot listassa vai ei. - &Display addresses in transaction list &Näytä osoitteet rahansiirrot listassa - + Whether to show coin control features or not. + Näytetäänkö kolikkokontrollin ominaisuuksia vai ei + + &OK &OK - &Cancel &Peruuta - - &Apply - &Hyväksy - - - default oletus - + none + ei mitään + + Confirm options reset - + Varmista asetusten palautus - - Some settings may require a client restart to take effect. - + Client restart required to activate changes. + Ohjelman uudelleenkäynnistys aktivoi muutokset. - - Do you want to proceed? - + Client will be shutdown, do you want to proceed? + Ohjelma lopetetaan. Haluatko jatkaa? - - - Warning - Varoitus + This change would require a client restart. + Tämä muutos vaatii ohjelman uudelleenkäynnistyksen. - - - This setting will take effect after restarting Myriadcoin. - Tämä asetus astuu voimaan seuraavalla kerralla, kun Myriadcoin käynnistetään. - - - The supplied proxy address is invalid. Antamasi proxy-osoite on virheellinen. @@ -1008,59 +1215,54 @@ Osoite: %4 OverviewPage - Form Lomake - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. - Näytetyt tiedot eivät välttämättä ole ajantasalla. Lompakkosi synkronoituu Myriadcoin-verkon kanssa automaattisesti yhteyden muodostamisen jälkeen, mutta synkronointi on vielä meneillään. + Näytetyt tiedot eivät välttämättä ole ajantasalla. Lompakkosi synkronoituu Bitcoin-verkon kanssa automaattisesti yhteyden muodostamisen jälkeen, mutta synkronointi on vielä meneillään. - - Balance: - Saldo: - - - - Unconfirmed: - Vahvistamatta: - - - Wallet Lompakko - + Available: + Käytettävissä: + + + Your current spendable balance + Nykyinen käytettävissä oleva tase + + + Pending: + Odotetaan: + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + Varmistamattomien rahansiirtojen summa, jota ei lasketa käytettävissä olevaan taseeseen. + + Immature: Epäkypsää: - Mined balance that has not yet matured Louhittu saldo, joka ei ole vielä kypsynyt - + Total: + Yhteensä: + + + Your current total balance + Tililläsi tällä hetkellä olevien Bitcoinien määrä + + <b>Recent transactions</b> <b>Viimeisimmät rahansiirrot</b> - - Your current balance - Tililläsi tällä hetkellä olevien Myriadcoinien määrä - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - Niiden saapuvien rahansiirtojen määrä, joita Myriadcoin-verkko ei vielä ole ehtinyt vahvistaa ja siten eivät vielä näy saldossa. - - - - out of sync Ei ajan tasalla @@ -1068,579 +1270,856 @@ Osoite: %4 PaymentServer - + URI handling + URI käsittely + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + URIa ei voitu jäsentää! Tämä voi johtua kelvottomasta Bitcoin-osoitteesta tai virheellisistä URI parametreista. + + + Requested payment amount of %1 is too small (considered dust). + Maksupyyntö %1 on liian pieni (huomioidaan tomuna). + + + Payment request error + Maksupyyntövirhe + + Cannot start myriadcoin: click-to-pay handler - + Ei voida käynnistää myriadcoin: klikkaa-maksu käsittelijää + + + Net manager warning + Verkkohallinnan varoitus + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + Aktiivinen proxy ei tue SOCKS5, joka on pakollinen maksupyynnöissä proxyn kautta. + + + Payment request fetch URL is invalid: %1 + Maksupyynnön haku URL on virheellinen: %1 + + + Payment request file handling + Maksupyynnön tiedoston käsittely + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + Maksupyynnön tiedostoa ei voida lukea tai prosessoida! Tämä voi johtua virheellisestä maksupyyntötiedostosta. + + + Unverified payment requests to custom payment scripts are unsupported. + Varmistamattomia maksupyyntöjä kustomoituun maksupalveluun ei tueta. + + + Refund from %1 + Maksupalautus %1:sta + + + Error communicating with %1: %2 + Virhe kommunikoidessa %1n kanssa: %2 + + + Payment request can not be parsed or processed! + Maksupyyntöä ei voida jäsentää tai prosessoida! + + + Bad response from server %1 + Huono vastaus palvelimelta %1 + + + Payment acknowledged + Rahansiirto tunnistettu + + + Network request error + Tietoverkon pyyntövirhe - QRCodeDialog + QObject - - QR Code Dialog - QR-koodi Dialogi + Myriadcoin + Myriadcoin - - Request Payment - Vastaanota maksu + Error: Specified data directory "%1" does not exist. + Virhe: Annettu data-hakemisto "%1" ei ole olemassa. - - Amount: - Määrä: + Error: Cannot parse configuration file: %1. Only use key=value syntax. + Virhe: Ei voida jäsentää asetustiedostoa: %1. Käytä vain avain=arvo syntaksia. - - Label: - Tunniste: + Error: Invalid combination of -regtest and -testnet. + Virhe: Virheellinen yhdistelmä -regtest ja -testnet. - - Message: - Viesti: + Myriadcoin Core didn't yet exit safely... + Myriadcoin Core ei ole vielä sulkeutunut turvallisesti... - - &Save As... - &Tallenna nimellä... + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Anna Bitcoin-osoite (esim. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + &Tallenna kuva - - Error encoding URI into QR Code. - Virhe käännettäessä URI:a QR-koodiksi. + &Copy Image + &Kopioi kuva - - The entered amount is invalid, please check. - Syötetty määrä on virheellinen. Tarkista kirjoitusasu. - - - - Resulting URI too long, try to reduce the text for label / message. - Tuloksen URI liian pitkä, yritä lyhentää otsikon tekstiä / viestiä. - - - Save QR Code Tallenna QR-koodi - - PNG Images (*.png) - PNG kuvat (*png) + PNG Image (*.png) + PNG kuva (*.png) RPCConsole - Client name Pääteohjelman nimi - - - - - - - - - - N/A Ei saatavilla - Client version Pääteohjelman versio - &Information T&ietoa - + Debug window + &Debug-ikkuna + + + General + Yleinen + + Using OpenSSL version Käytössä oleva OpenSSL-versio - Startup time Käynnistysaika - Network Verkko - + Name + Nimi + + Number of connections Yhteyksien lukumäärä - - On testnet - Käyttää testiverkkoa - - - Block chain Lohkoketju - Current number of blocks Nykyinen Lohkojen määrä - Estimated total blocks Arvioitu lohkojen kokonaismäärä - Last block time Viimeisimmän lohkon aika - &Open &Avaa - - Command-line options - Komentorivi parametrit - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - Näytä Myriadcoin-Qt komentoriviparametrien ohjesivu, jossa on listattuna mahdolliset komentoriviparametrit. - - - - &Show - &Näytä - - - &Console &Konsoli - + &Network Traffic + &Verkkoliikenne + + + &Clear + &Tyhjennä + + + Totals + Yhteensä + + + In: + Sisään: + + + Out: + Ulos: + + Build date Kääntöpäiväys - - Myriadcoin - Debug window - Myriadcoin - Debug ikkuna - - - - Myriadcoin Core - Myriadcoin-ydin - - - Debug log file Debug lokitiedosto - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. Avaa lokitiedosto nykyisestä data-kansiosta. Tämä voi viedä useamman sekunnin, jos lokitiedosto on iso. - Clear console Tyhjennä konsoli - Welcome to the Myriadcoin RPC console. Tervetuloa Myriadcoin RPC konsoliin. - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. Ylös- ja alas-nuolet selaavat historiaa ja <b>Ctrl-L</b> tyhjentää ruudun. - Type <b>help</b> for an overview of available commands. Kirjoita <b>help</b> nähdäksesi yleiskatsauksen käytettävissä olevista komennoista. + + %1 B + %1 B + + + %1 KB + %1 KB + + + %1 MB + %1 MB + + + %1 GB + %1 GB + + + %1 m + %1 m + + + %1 h + %1 h + + + %1 h %2 m + %1 h %2 m + + + + ReceiveCoinsDialog + + &Amount: + &Määrä + + + &Label: + &Nimi: + + + &Message: + &Viesti: + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + Uudelleenkäytä yksi vanhoista vastaanotto-osoitteista. Uudelleenkäyttössä on turvallisuus- ja yksityisyysongelmia. Älä käytä tätä ellet ole uudelleenluomassa aikaisempaa maksupyyntöä. + + + R&euse an existing receiving address (not recommended) + &Uudelleenkäytä vastaanotto-osoitetta (ei suositella) + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + Valinnainen viesti liitetään maksupyyntöön ja näytetään avattaessa. Viestiä ei lähetetä Bitcoin-verkkoon. + + + An optional label to associate with the new receiving address. + Valinnainen nimi liitetään vastaanottavaan osoitteeseen. + + + Use this form to request payments. All fields are <b>optional</b>. + Käytä lomaketta maksupyyntöihin. Kaikki kentät ovat <b>valinnaisia</b>. + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + Valinnainen pyyntömäärä. Jätä tyhjäksi tai nollaksi jos et pyydä tiettyä määrää. + + + Clear all fields of the form. + Tyhjennä lomakkeen kaikki kentät. + + + Clear + Tyhjennä + + + Requested payments history + Pyydettyjen maksujen historia + + + &Request payment + &Vastaanota maksu + + + Show the selected request (does the same as double clicking an entry) + Näytä valittu pyyntö (sama toiminta kuin alkion tuplaklikkaus) + + + Show + Näytä + + + Remove the selected entries from the list + Poista valitut alkiot listasta + + + Remove + Poista + + + Copy label + Kopioi nimi + + + Copy message + Kopioi viesti + + + Copy amount + Kopioi määrä + + + + ReceiveRequestDialog + + QR Code + QR-koodi + + + Copy &URI + Kopioi &URI + + + Copy &Address + Kopioi &Osoite + + + &Save Image... + &Tallenna kuva + + + Request payment to %1 + Vastaanota maksu %1 + + + Payment information + Maksutiedot + + + URI + URI + + + Address + Osoite + + + Amount + Määrä + + + Label + Nimi + + + Message + Viesti + + + Resulting URI too long, try to reduce the text for label / message. + Tuloksen URI liian pitkä, yritä lyhentää otsikon tekstiä / viestiä. + + + Error encoding URI into QR Code. + Virhe käännettäessä URI:a QR-koodiksi. + + + + RecentRequestsTableModel + + Date + Aika + + + Label + Nimi + + + Message + Viesti + + + Amount + Määrä + + + (no label) + (ei nimeä) + + + (no message) + (ei viestiä) + + + (no amount) + (ei määrää) + SendCoinsDialog - - - - - - - - Send Coins - Lähetä Myriadcoineja + Lähetä Bitcoineja + + + Coin Control Features + Kolikkokontrolli ominaisuudet + + + Inputs... + Sisääntulot... + + + automatically selected + automaattisesti valitut + + + Insufficient funds! + Lompakon saldo ei riitä! + + + Quantity: + Määrä: + + + Bytes: + Tavuja: + + + Amount: + Määrä: + + + Priority: + Prioriteetti: + + + Fee: + Palkkio: + + + Low Output: + Pieni Tuotos + + + After Fee: + Palkkion jälkeen: + + + Change: + Vaihtoraha: + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + Jos tämä aktivoidaan mutta vaihtorahan osoite on tyhjä tai virheellinen, vaihtoraha tullaan lähettämään uuteen luotuun osoitteeseen. + + + Custom change address + Kustomoitu vaihtorahan osoite - Send to multiple recipients at once - Lähetä monelle vastaanottajalle + Lähetä usealla vastaanottajalle samanaikaisesti - Add &Recipient Lisää &Vastaanottaja - - Remove all transaction fields - Poista kaikki rahansiirtokentät + Clear all fields of the form. + Tyhjennä lomakkeen kaikki kentät - Clear &All &Tyhjennnä Kaikki - Balance: - Saldo: + Balanssi: - - 123.456 BTC - 123,456 BTC - - - Confirm the send action Vahvista lähetys - S&end &Lähetä - - <b>%1</b> to %2 (%3) - <b>%1</b> to %2 (%3) - - - Confirm send coins - Hyväksy Myriadcoinien lähettäminen + Hyväksy Bitcoinien lähettäminen - - Are you sure you want to send %1? - Haluatko varmasti lähettää %1? + %1 to %2 + %1 to %2 - - and - ja + Copy quantity + Kopioi määrä + + + Copy amount + Kopioi määrä + + + Copy fee + Kopioi palkkio + + + Copy after fee + Kopioi palkkion jälkeen + + + Copy bytes + Kopioi tavut + + + Copy priority + Kopioi prioriteetti + + + Copy low output + Kopioi pieni tuotos + + + Copy change + Kopioi vaihtoraha + + + Total Amount %1 (= %2) + Yhteensä %1 (= %2) + + + or + tai - The recipient address is not valid, please recheck. Vastaanottajan osoite on virheellinen. Tarkista osoite. - The amount to pay must be larger than 0. - Maksettavan summan tulee olla suurempi kuin 0 Myriadcoinia. + Maksettavan summan tulee olla suurempi kuin 0 Bitcoinia. - The amount exceeds your balance. Määrä ylittää käytettävissä olevan saldon. - The total exceeds your balance when the %1 transaction fee is included. Kokonaismäärä ylittää saldosi kun %1 maksukulu lisätään summaan. - Duplicate address found, can only send to each address once per send operation. Sama osoite toistuu useamman kerran. Samaan osoitteeseen voi lähettää vain kerran per maksu. - - Error: Transaction creation failed! - + Transaction creation failed! + Rahansiirron luonti epäonnistui! - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Virhe: Rahansiirto hylättiin. Tämä voi tapahtua jos jotkin myriadcoineistasi on jo käytetty, esimerkiksi jos olet käyttänyt kopiota wallet.dat-lompakkotiedostosta ja myriadcoinit on merkitty käytetyksi vain kopiossa. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Rahansiirto hylättiin! Tämä saattaa tapahtua jos lompakossa olevat kolikot on jo kulutettu, kuten jos käytät kopioita wallet.dat tiedostosta ja kolikot oli jos käytetty mutta ei merkattu täällä. + + + Warning: Invalid Myriadcoin address + Varoitus: Virheellinen Myriadcoin osoite + + + (no label) + (ei nimeä) + + + Warning: Unknown change address + Varoitus: Tuntematon vaihtorahan osoite + + + Are you sure you want to send? + Haluatko varmasti lähettää? + + + added as transaction fee + lisätty rahansiirtomaksuna + + + Payment request expired + Maksupyyntö vanhentui + + + Invalid payment address %1 + Virheellinen maksuosoite %1 SendCoinsEntry - - Form - Lomake - - - A&mount: M&äärä: - Pay &To: Maksun saaja: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - + Osoite, johon Bitcoinit lähetetään (esim. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book Anna nimi tälle osoitteelle, jos haluat lisätä sen osoitekirjaan - &Label: &Nimi: - - Choose address from address book - Valitse osoite osoitekirjasta + Choose previously used address + Valitse aikaisemmin käytetty osoite + + + This is a normal payment. + Tämä on normaali maksu. - Alt+A Alt+A - Paste address from clipboard Liitä osoite leikepöydältä - Alt+P Alt+P - - Remove this recipient - Poista + Remove this entry + Poista tämä alkio - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Anna Myriadcoin-osoite (esim. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + Viesti: + + + This is a verified payment request. + Tämä on varmistettu maksupyyntö. + + + Enter a label for this address to add it to the list of used addresses + Aseta nimi tälle osoitteelle lisätäksesi sen käytettyjen osoitteiden listalle. + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + Viesti joka liitettiin myriadcoin: URI:iin tallennetaan rahansiirtoon viitteeksi. Tätä viestiä ei lähetetä Bitcoin-verkkoon. + + + This is an unverified payment request. + Tämä on varmistamaton maksupyyntö + + + Pay To: + Saaja: + + + Memo: + Muistio: + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + Myriadcoin core sulkeutuu... + + + Do not shut down the computer until this window disappears. + Älä sammuta tietokonetta ennenkuin tämä ikkuna katoaa. SignVerifyMessageDialog - Signatures - Sign / Verify a Message Allekirjoitukset - Allekirjoita / Varmista viesti - &Sign Message &Allekirjoita viesti - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. Voit allekirjoittaa viestit omalla osoitteellasi todistaaksesi että omistat ne. Ole huolellinen, että et allekirjoita mitään epämääräistä, phishing-hyökkääjät voivat huijata sinua allekirjoittamaan luovuttamalla henkilöllisyytesi. Allekirjoita selvitys täysin yksityiskohtaisesti mihin olet sitoutunut. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Osoite, jolla viesti allekirjoitetaan (esimerkiksi 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book - Valitse osoite osoitekirjasta + Choose previously used address + Valitse aikaisemmin käytetty osoite - - Alt+A Alt+A - Paste address from clipboard Liitä osoite leikepöydältä - Alt+P Alt+P - Enter the message you want to sign here Kirjoita tähän viesti minkä haluat allekirjoittaa - Signature Allekirjoitus - Copy the current signature to the system clipboard Kopioi tämänhetkinen allekirjoitus leikepöydälle - Sign the message to prove you own this Myriadcoin address - Allekirjoita viesti todistaaksesi, että omistat tämän Myriadcoin-osoitteen + Allekirjoita viesti todistaaksesi, että omistat tämän Bitcoin-osoitteen - Sign &Message Allekirjoita &viesti - Reset all sign message fields Tyhjennä kaikki allekirjoita-viesti-kentät - - Clear &All &Tyhjennä Kaikki - &Verify Message &Varmista viesti - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Syötä allekirjoittava osoite, viesti ja allekirjoitus alla oleviin kenttiin varmistaaksesi allekirjoituksen aitouden. Varmista että kopioit kaikki kentät täsmälleen oikein, myös rivinvaihdot, välilyönnit, tabulaattorit, jne. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Osoite, jolla viesti allekirjoitettiin (esimerkiksi 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address - Tarkista viestin allekirjoitus varmistaaksesi, että se allekirjoitettiin tietyllä Myriadcoin-osoitteella + Tarkista viestin allekirjoitus varmistaaksesi, että se allekirjoitettiin tietyllä Bitcoin-osoitteella - Verify &Message - + Varmista &viesti... - Reset all verify message fields Tyhjennä kaikki varmista-viesti-kentät - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Anna Myriadcoin-osoite (esim. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Anna Bitcoin-osoite (esim. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature Klikkaa "Allekirjoita Viesti luodaksesi allekirjoituksen - - Enter Myriadcoin signature - Syötä Myriadcoin-allekirjoitus - - - - The entered address is invalid. Syötetty osoite on virheellinen. - - - - Please check the address and try again. Tarkista osoite ja yritä uudelleen. - - The entered address does not refer to a key. Syötetyn osoitteen avainta ei löydy. - Wallet unlock was cancelled. Lompakon avaaminen peruttiin. - Private key for the entered address is not available. Yksityistä avainta syötetylle osoitteelle ei ole saatavilla. - Message signing failed. Viestin allekirjoitus epäonnistui. - Message signed. Viesti allekirjoitettu. - The signature could not be decoded. Allekirjoitusta ei pystytty tulkitsemaan. - - Please check the signature and try again. Tarkista allekirjoitus ja yritä uudelleen. - The signature did not match the message digest. Allekirjoitus ei täsmää viestin tiivisteeseen. - Message verification failed. Viestin varmistus epäonnistui. - Message verified. Viesti varmistettu. @@ -1648,186 +2127,160 @@ Osoite: %4 SplashScreen - - The Myriadcoin developers - + Myriadcoin Core + Bitcoin-ydin + + + The Myriadcoin Core developers + Myriadcoin Core kehittäjät - [testnet] [testnet] + + TrafficGraphWidget + + KB/s + KB/s + + TransactionDesc - Open until %1 Avoinna %1 asti - + conflicted + ristiriitainen + + %1/offline %1/offline - %1/unconfirmed %1/vahvistamaton - %1 confirmations %1 vahvistusta - Status Tila - , broadcast through %n node(s) lähetetty %n noodin läpilähetetty %n noodin läpi - Date Päivämäärä - Source Lähde - Generated Generoitu - - From Lähettäjä - - - To Saaja - - own address oma osoite - label nimi - - - - - Credit Credit - matures in %n more block(s) kypsyy %n lohkon kuluttuakypsyy %n lohkon kuluttua - not accepted ei hyväksytty - - - - Debit Debit - Transaction fee Maksukulu - Net amount Netto määrä - Message Viesti - Comment Viesti - Transaction ID Siirtotunnus - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Generoitujen kolikoiden täytyy kypsyä 120 lohkon ajan ennen kuin ne voidaan lähettää. Kun loit tämän lohkon, se lähetettiin verkkoon lisättäväksi lohkoketjuun. Jos se ei päädy osaksi lohkoketjua, sen tila vaihtuu "ei hyväksytty" ja sitä ei voida lähettää. Näin voi joskus käydä, jos toinen noodi löytää lohkon muutamaa sekuntia ennen tai jälkeen sinun lohkosi löytymisen. + Merchant + Kauppias + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Luodut kolikot täytyy kypsyttää %1 lohkoa kunnes ne voidaan käyttää. Kun loit tämän lohkon, se lähetettiin verkkoon lisänä lohkoketjuun. Jos se epäonnistuu pääsemään ketjuun sen tila tulee muuttumaan "ei hyväksytty" ja sitä ei voida käyttää. Tämä voi ajoittain tapahtua kun toisen solmun lohko luodaan samanaikaisesti omasi kanssa. - Debug information Debug tiedot - Transaction Rahansiirto - Inputs Sisääntulot - Amount Määrä - true tosi - false epätosi - , has not been successfully broadcast yet , ei ole vielä onnistuneesti lähetetty - Open for %n more block(s) - + Avoinna %n lisälohkolleAvoinna %n lisälohkolle - unknown tuntematon @@ -1835,12 +2288,10 @@ Osoite: %4 TransactionDescDialog - Transaction details Rahansiirron yksityiskohdat - This pane shows a detailed description of the transaction Tämä ruutu näyttää yksityiskohtaisen tiedon rahansiirrosta @@ -1848,117 +2299,102 @@ Osoite: %4 TransactionTableModel - Date Päivämäärä - Type Laatu - Address Osoite - Amount Määrä + + Immature (%1 confirmations, will be available after %2) + Epäkypsä (%1 varmistusta, saatavilla %2 jälkeen) + - Open for %n more block(s) - + Avoinna %n lisälohkolleAvoinna %n lisälohkolle - Open until %1 Avoinna %1 asti - - Offline (%1 confirmations) - Ei yhteyttä verkkoon (%1 vahvistusta) - - - - Unconfirmed (%1 of %2 confirmations) - Vahvistamatta (%1/%2 vahvistusta) - - - Confirmed (%1 confirmations) Vahvistettu (%1 vahvistusta) - - - Mined balance will be available when it matures in %n more block(s) - Louhittu saldo on käytettävissä kun se kypsyy %n lohkon päästäLouhittu saldo on käytettävissä kun se kypsyy %n lohkon päästä - - This block was not received by any other nodes and will probably not be accepted! Tätä lohkoa ei vastaanotettu mistään muusta solmusta ja sitä ei mahdollisesti hyväksytä! - Generated but not accepted Generoitu mutta ei hyväksytty - + Offline + Offline + + + Unconfirmed + Varmistamaton + + + Confirming (%1 of %2 recommended confirmations) + Varmistetaan (%1 kehoitetusta %2 varmistuksesta) + + + Conflicted + Ristiriitainen + + Received with Vastaanotettu osoitteella - Received from Vastaanotettu - Sent to Saaja - Payment to yourself Maksu itsellesi - Mined Louhittu - (n/a) (ei saatavilla) - Transaction status. Hover over this field to show number of confirmations. Rahansiirron tila. Siirrä osoitin kentän päälle nähdäksesi vahvistusten lukumäärä. - Date and time that the transaction was received. Rahansiirron vastaanottamisen päivämäärä ja aika. - Type of transaction. Rahansiirron laatu. - Destination address of transaction. - Rahansiirron kohteen Myriadcoin-osoite + Rahansiirron kohteen Bitcoin-osoite - Amount removed from or added to balance. Saldoon lisätty tai siitä vähennetty määrä. @@ -1966,337 +2402,278 @@ Osoite: %4 TransactionView - - All Kaikki - Today Tänään - This week Tällä viikolla - This month Tässä kuussa - Last month Viime kuussa - This year Tänä vuonna - Range... Alue... - Received with Vastaanotettu osoitteella - Sent to Saaja - To yourself Itsellesi - Mined Louhittu - Other Muu - Enter address or label to search Anna etsittävä osoite tai tunniste - Min amount Minimimäärä - Copy address Kopioi osoite - Copy label Kopioi nimi - Copy amount Kopioi määrä - Copy transaction ID - + Kopioi siirtotunnus - Edit label Muokkaa nimeä - Show transaction details Näytä rahansiirron yksityiskohdat - - Export Transaction Data - Vie rahansiirron tiedot + Export Transaction History + Vie rahansiirtohistoria + + + Exporting Failed + Vienti epäonnistui + + + There was an error trying to save the transaction history to %1. + Rahansiirron historian tallentamisessa tapahtui virhe paikkaan %1. + + + Exporting Successful + Vienti onnistui + + + The transaction history was successfully saved to %1. + Rahansiirron historia tallennettiin onnistuneesti paikkaan %1. - Comma separated file (*.csv) Comma separated file (*.csv) - Confirmed Vahvistettu - Date Aika - Type Laatu - Label Nimi - Address Osoite - Amount Määrä - ID ID - - Error exporting - Virhe tietojen viennissä - - - - Could not write to file %1. - Ei voida kirjoittaa tiedostoon %1. - - - Range: Alue: - to kenelle + + WalletFrame + + No wallet has been loaded. + Lomakkoa ei ole ladattu. + + WalletModel - Send Coins - Lähetä Myriadcoineja + Lähetä Bitcoineja WalletView - &Export - + &Vie... - Export the data in the current tab to a file Vie auki olevan välilehden tiedot tiedostoon - Backup Wallet - + Varmuuskopioi lompakko - Wallet Data (*.dat) - + Lompakkodata (*.dat) - Backup Failed - + Varmuuskopio epäonnistui - - There was an error trying to save the wallet data to the new location. - + There was an error trying to save the wallet data to %1. + Lompakon tallennuksessa tapahtui virhe %1. + + + The wallet data was successfully saved to %1. + Lompakko tallennettiin onnistuneesti tiedostoon %1. - Backup Successful Varmuuskopio Onnistui - - - The wallet data was successfully saved to the new location. - - bitcoin-core - - Myriadcoin version - Myriadcoinin versio - - - Usage: Käyttö: - - Send command to -server or myriadcoind - Lähetä käsky palvelimelle tai myriadcoind:lle - - - List commands Lista komennoista - Get help for a command Hanki apua käskyyn - Options: Asetukset: - Specify configuration file (default: myriadcoin.conf) Määritä asetustiedosto (oletus: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) - Määritä pid-tiedosto (oletus: myriadcoin.pid) + Määritä pid-tiedosto (oletus: bitcoin.pid) - Specify data directory Määritä data-hakemisto - - Set database cache size in megabytes (default: 25) - Aseta tietokannan välimuistin koko megatavuina (oletus: 25) - - - Listen for connections on <port> (default: 8333 or testnet: 18333) Kuuntele yhteyksiä portista <port> (oletus: 8333 tai testnet: 18333) - Maintain at most <n> connections to peers (default: 125) Pidä enintään <n> yhteyttä verkkoihin (oletus: 125) - Connect to a node to retrieve peer addresses, and disconnect Yhdistä noodiin hakeaksesi naapurien osoitteet ja katkaise yhteys - Specify your own public address Määritä julkinen osoitteesi - Threshold for disconnecting misbehaving peers (default: 100) Kynnysarvo aikakatkaisulle heikosti toimiville verkoille (oletus: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Sekuntien määrä, kuinka kauan uudelleenkytkeydytään verkkoihin (oletus: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s Virhe valmisteltaessa RPC-portin %u avaamista kuunneltavaksi: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) Kuuntele JSON-RPC -yhteyksiä portista <port> (oletus: 8332 or testnet: 18332) - Accept command line and JSON-RPC commands Hyväksy merkkipohjaiset- ja JSON-RPC-käskyt - + Myriadcoin Core RPC client version + Myriadcoin Core RPC asiakasversio + + Run in the background as a daemon and accept commands Aja taustalla daemonina ja hyväksy komennot - Use the test network Käytä test -verkkoa - Accept connections from outside (default: 1 if no -proxy or -connect) Hyväksy yhteyksiä ulkopuolelta (vakioasetus: 1 jos -proxy tai -connect ei määritelty) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2308,616 +2685,699 @@ If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com - + %s, sinun tulee asettaa rpcpassword asetustietostossa: +%s +Suositellaan että käytät allaolevaa satunnaista salasanaa: +rpcuser=myriadcoinrpc +rpcpassword=%s +(sinun ei tarvitse muistaa tätä salasanaa) +Tämän tunnuksen ja salasanan TULEE OLLA sama. +Jos tiedostoa ei ole, luo se vain omistajan-luku-oikeudella. +Suositellaan asettaa alertnotify jotta saat tietoa ongelmista; +esimerkiksi: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + Hyväksytyt koodit (oletus: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s Virhe ilmennyt asetettaessa RPC-porttia %u IPv6:n kuuntelemiseksi, palataan takaisin IPv4:ään %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 - + Kytkeydy annettuun osoitteeseen ja pidä linja aina auki. Käytä [host]:portin merkintätapaa IPv6:lle. - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. - + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + Yhtäaikaisesti rajaa vapaat rahansiirrot <n>*1000 tavua per minuutti (oletus: 15) + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + Aloita regressio testimoodi joka käyttää erikoisketjua missä lohkot voidaan ratkaista välittömästi. Tämä on tarkoitettu regressiotestien työkaluksi ja ohjelman kehittämiseen. + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + Aloita regression testimoodi joka käyttää erikoisketjua jossa lohkoja voidaan ratkaista välittömästi. + + + Error: Listening for incoming connections failed (listen returned error %d) + Virhe: Odottaessa sisääntulevia yhteyksiä epäonnistui (listen palautti virheen %d) - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Virhe: Rahansiirto hylättiin! Tämä saattaa tapahtua jos jotkut kolikot lompakossa on jo käytetty. Esimerkiksi jos kopioit wallet.dat tiedoston ja kolikot on käytetty mutta ei merkattu täällä. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! - + Virhe: Tämä rahansiirto vaatii rahansiirtopalkkion vähintään %s johtuen sen määrästä, monimutkaisuudesta tai hiljattain vastaanotettujen summien käytöstä - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - + Suorita käsky kun lompakossa rahansiirto muuttuu (%s cmd on vaihdettu TxID kanssa) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - Aseta suurin korkean prioriteetin / matalan palkkion siirron koko tavuissa (vakioasetus: 27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + Tätä pienemmät palkkiot huomioidaan tyhjäksi (rahansiirron luonnissa) (oletus: + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + Aja tietokannan toimet muistivarannosta kovalevylogiin joka <n> megatavu (oletus: 100) + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + Kuinka vaativa lohkonvarmistus -checkblocks on (0-4, oletus: 3) + + + In this mode -genproclimit controls how many blocks are generated immediately. + Tässä moodissa -genproclimit ohjaa kuinka monta lohkoa luodaan välittömästi. + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + Aseta script varmistuksen threadien lukumäärä (%u - %d, 0= auto, <0 = jätä näin monta ydintä vapaaksi, oletus: %d) + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + Aseta prosessorin raja kun luonti on päällä (-1 = rajoittamaton, oletus: -1) - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications - + Tämä on esi-julkaistu testiversio - Käytä omalla riskillä - Ei saa käytää louhimiseen tai kauppasovelluksiin. + + + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + Ei voida yhdistää %s tässä tietokoneessa. Myriadcoin Core on luultavasti jo käynnissä. + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + Käytä erillistä SOCKS5 proxya tavoittaaksesi vertaiset Tor palvelun kautta (oletus: -proxy) - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Varoitus: -paytxfee on asetettu erittäin korkeaksi! Tämä on maksukulu jonka tulet maksamaan kun lähetät siirron. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - Varoitus: Näytetyt siirrot eivät välttämättä pidä paikkaansa! Sinun tai toisten noodien voi olla tarpeen asentaa päivitys. - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. Varoitus: Tarkista että tietokoneesi kellonaika ja päivämäärä ovat paikkansapitäviä! Myriadcoin ei toimi oikein väärällä päivämäärällä ja/tai kellonajalla. - + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + Varoitus: Tietoverkko ei ole sovussa! Luohijat näyttävät kokevan virhetilanteita. + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + Varoitus: Olemme vertaisverkon kanssa ristiriidassa! Sinun tulee päivittää tai toisten solmujen tulee päivitää. + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Varoitus: virhe luettaessa wallet.dat-lompakkotiedostoa. Kaikki avaimet luettiin onnistuneesti, mutta siirtohistoria tai osoitekirja saattavat olla kadonneet tai virheellisiä. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - + Varoitus: wallet.dat -lompakkotiedosto on korruptoitunut, tiedot pelastettu. Alkuperäinen wallet.dat -lompakkotiedosto on tallennettu wallet.{timestamp}.bak kansioon %s; jos balanssisi tai siirtohistoria on virheellinen, sinun tulisi palauttaa lompakkotiedosto varmuuskopiosta. + + + (default: 1) + (oletus: 1) + + + (default: wallet.dat) + (oletus: wallet.dat) + + + <category> can be: + <category> voi olla: - Attempt to recover private keys from a corrupt wallet.dat - + Yritetään palauttaa privaattiavaimia korruptoituneesta wallet.dat -lompakkotiedostosta + + + Myriadcoin Core Daemon + Myriadcoin Core taustapalvelin - Block creation options: Lohkon luonnin asetukset: - + Clear list of wallet transactions (diagnostic tool; implies -rescan) + Tyhjennä lompakon rahansiirtojen lista (diagnostiikka työkalu; olettaa -rescan) + + Connect only to the specified node(s) Yhidstä ainoastaan määrättyihin noodeihin - - Corrupted block database detected - + Connect through SOCKS proxy + Yhdistä SOCKS proxin kautta + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + Yhdistä JSON-RPC portissa <port> (oletus: 8332 tai testnet: 18332) + + + Connection options: + Yhteyden valinnat: + + + Corrupted block database detected + Vioittunut lohkotietokanta havaittu + + + Debugging/Testing options: + Debuggaus/Testauksen valinnat: + + + Disable safemode, override a real safe mode event (default: 0) + Poista safemode, ohita oikea turvallinen mooditapahtuma (oletus: 0) - Discover own IP address (default: 1 when listening and no -externalip) Hae oma IP osoite (vakioasetus: 1 kun kuuntelemassa ja ei -externalip) - + Do not load the wallet and disable wallet RPC calls + Älä lataa lompakkoa ja poista lompakon RPC kutsut + + Do you want to rebuild the block database now? - + Haluatko uudelleenrakentaa lohkotietokannan nyt? - Error initializing block database - + Virhe alustaessa lohkotietokantaa - Error initializing wallet database environment %s! - + Virhe alustaessa lompakon tietokantaympäristöä %s! - Error loading block database - + Virhe avattaessa lohkoketjua - Error opening block database Virhe avattaessa lohkoindeksiä - Error: Disk space is low! Varoitus: Levytila on vähissä! - Error: Wallet locked, unable to create transaction! - + Virhe: Lompakko on lukittu, rahansiirtoa ei voida luoda - Error: system error: Virhe: Järjestelmävirhe - Failed to listen on any port. Use -listen=0 if you want this. Ei onnistuttu kuuntelemaan missään portissa. Käytä -listen=0 jos haluat tätä. - Failed to read block info - + Lohkotietojen luku epäonnistui - Failed to read block - + Lohkon luku epäonnistui - Failed to sync block index - + Lohkoindeksin synkronointi epäonnistui - Failed to write block index - + Lohkoindeksin kirjoitus epäonnistui - Failed to write block info - + Lohkotiedon kirjoitus epäonnistui - Failed to write block Lohkon kirjoitus epäonnistui - Failed to write file info - + Tiedoston tietojen kirjoitus epäonnistui - Failed to write to coin database - + Kolikkotietokannan kirjoitus epäonnistui - Failed to write transaction index - + Rahasiirtojen indeksin kirjoitus epäonnistui - Failed to write undo data - + Palautustiedon kirjoitus epäonnistui + + + Fee per kB to add to transactions you send + palkkio per kB lisätty lähettämiisi rahansiirtoihin + + + Fees smaller than this are considered zero fee (for relaying) (default: + Tätä pienemmät palkkiot huomioidaan tyhjäksi (välittämisessä) (oletus: - Find peers using DNS lookup (default: 1 unless -connect) Hae naapureita DNS hauilla (vakioasetus: 1 paitsi jos -connect) - + Force safe mode (default: 0) + Pakota safe moodi (oletus: 0) + + Generate coins (default: 0) - + Generoi kolikoita (vakio: 0) - How many blocks to check at startup (default: 288, 0 = all) - + Kuinka monta lohkoa tarkistetaan käynnistettäessä (oletus: 288, 0 = kaikki) - - How thorough the block verification is (0-4, default: 3) - + If <category> is not supplied, output all debugging information. + Jos <kategoria> ei annettu, tulosta kaikki debuggaustieto. + + + Importing... + Tuodaan... + + + Incorrect or no genesis block found. Wrong datadir for network? + Virheellinen tai olematon alkulohko löydetty. Väärä data-hakemisto verkolle? + + + Invalid -onion address: '%s' + Virheellinen -onion osoite: '%s' - Not enough file descriptors available. - + Ei tarpeeksi tiedostomerkintöjä vapaana. + + + Prepend debug output with timestamp (default: 1) + Lisää aikamerkki debug tulosteen eteen (oletus: 1) + + + RPC client options: + RPC asiakas valinnat: - Rebuild block chain index from current blk000??.dat files - + Uudelleenrakenna lohkoketjuindeksi nykyisistä blk000??.dat tiedostoista + + + Select SOCKS version for -proxy (4 or 5, default: 5) + Valitse SOCKS versio -proxy:lle (4 tai 5, oletus: 5) + + + Set database cache size in megabytes (%d to %d, default: %d) + Aseta tietokannan välimuistin koko megatavuissa (%d - %d, oletus: %d + + + Set maximum block size in bytes (default: %d) + Aseta lohkon maksimikoko tavuissa (oletus: %d) - Set the number of threads to service RPC calls (default: 4) - + Aseta threadien lukumäärä RPC kutsuille (oletus: 4) + + + Specify wallet file (within data directory) + Aseta lompakkotiedosto (data-hakemiston sisällä) + + + Spend unconfirmed change when sending transactions (default: 1) + Käytä varmistamattomia vaihtorahoja lähetettäessä rahansiirtoja (oletus: 1) + + + This is intended for regression testing tools and app development. + Tämä on tarkoitettu regression testityökaluille ja ohjelman kehittämiseen. + + + Usage (deprecated, use myriadcoin-cli): + Käyttö (vanhentunut, käytä myriadcoin-cli): - Verifying blocks... - + Varmistetaan lohkoja... - Verifying wallet... - + Varmistetaan lompakko... + + + Wait for RPC server to start + Odota RPC palvelimen käynnistystä + + + Wallet %s resides outside data directory %s + Lompakko %s sijaitsee data-hakemiston ulkopuolella %s + + + Wallet options: + Lompakon valinnat: + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + Varoitus: Vanhentunut argumentti -debugnet sivutettu, käytä debug=net + + + You need to rebuild the database using -reindex to change -txindex + Sinun tulee uudelleenrakentaa tietokanta käyttäen -reindex vaihtaen -txindex - Imports blocks from external blk000??.dat file Tuodaan lohkoja ulkoisesta blk000??.dat tiedostosta - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) - + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + Ei voida lukita data-hakemistoa %s. Myriadcoin Core on luultavasti jo käynnissä. + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + Aja komento kun olennainen hälytys vastaanotetaan tai nähdään todella pitkä haara (%s komennossa korvataan viestillä) + + + Output debugging information (default: 0, supplying <category> is optional) + Tulosta debuggaustieto (oletus: 0, annettu <kategoria> valinnainen) + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + Aseta maksimikoko korkea prioriteetti/pieni palkkio rahansiirtoihin tavuissa (oletus: %d) - Information Tietoa - - Invalid -tor address: '%s' - Virheellinen -tor osoite '%s' - - - Invalid amount for -minrelaytxfee=<amount>: '%s' - + Virheellinen määrä -minrelaytxfee=<amount>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' - + Virheellinen määrä -mintxfee=<amount>: '%s' + + + Limit size of signature cache to <n> entries (default: 50000) + Rajaa allekirjoituksen välimuistin koko <n> alkioon (oletus: 50000) + + + Log transaction priority and fee per kB when mining blocks (default: 0) + Kirjaa rahansiirron prioriteetti ja palkkio per kB kun louhitaan lohkoja (oletus: 0) - Maintain a full transaction index (default: 0) - + Ylläpidä täydellistä rahasiirtojen indeksiä (oletus: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) Suurin vastaanottopuskuri yksittäiselle yhteydelle, <n>*1000 tavua (vakioasetus: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) Suurin lähetyspuskuri yksittäiselle yhteydelle, <n>*1000 tavua (vakioasetus: 1000) - Only accept block chain matching built-in checkpoints (default: 1) - + Hyväksy vain lohkoketjua vastaavat sisäänrakennetut varmistuspisteet (Oletus: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Yhdistä vain noodeihin verkossa <net> (IPv4, IPv6 tai Tor) - - Output extra debugging information. Implies all other -debug* options - Tulosta enemmän debug tietoa. Aktivoi kaikki -debug* asetukset + Print block on startup, if found in block index + Tulosta lohko käynnistyksessä jos löydetään lohkoindeksistä - - Output extra network debugging information - Tulosta lisää verkkoyhteys debug tietoa + Print block tree on startup (default: 0) + Tulosta lohkopuu käynnistyksessä (oletus: 0) - - Prepend debug output with timestamp - Lisää debuggaustiedon tulostukseen aikaleima + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + RPC SSL valinnat: (katso Myriadcoin Wikistä SSL-asennuksen ohjeet) + + + RPC server options: + RPC-palvelimen valinnat: + + + Randomly drop 1 of every <n> network messages + Satunnaisesti pudota 1 joka <n> verkkoviestistä + + + Randomly fuzz 1 of every <n> network messages + Satunnaisesti sekoita 1 joka <n> verkkoviestistä + + + Run a thread to flush wallet periodically (default: 1) + Aja threadi jossa tallennetaan lompakko ajoittain (oletus: 1) - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) SSL asetukset (katso Myriadcoin Wikistä tarkemmat SSL ohjeet) - - Select the version of socks proxy to use (4-5, default: 5) - Valitse käytettävän SOCKS-proxyn versio (4-5, vakioasetus: 5) + Send command to Myriadcoin Core + Lähetä komento Myriadcoin Coreen - Send trace/debug info to console instead of debug.log file Lähetä jäljitys/debug-tieto konsoliin, debug.log-tiedoston sijaan - - Send trace/debug info to debugger - Lähetä jäljitys/debug-tieto debuggeriin - - - - Set maximum block size in bytes (default: 250000) - Aseta suurin lohkon koko tavuissa (vakioasetus: 250000) - - - Set minimum block size in bytes (default: 0) Asetan pienin lohkon koko tavuissa (vakioasetus: 0) - + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + Asettaa DB_PRIVATE lipun lompakon tietokantaympäristössä (oletus: 1) + + + Show all debugging options (usage: --help -help-debug) + Näytä kaikki debuggaus valinnat: (käyttö: --help -help-debug) + + + Show benchmark information (default: 0) + Näytä suorituskykytietoja (oletus: 0) + + Shrink debug.log file on client startup (default: 1 when no -debug) Pienennä debug.log tiedosto käynnistyksen yhteydessä (vakioasetus: 1 kun ei -debug) - Signing transaction failed - + Siirron vahvistus epäonnistui - Specify connection timeout in milliseconds (default: 5000) Määritä yhteyden aikakataisu millisekunneissa (vakioasetus: 5000) - + Start Myriadcoin Core Daemon + Käynnistä Myriadcoin Core taustapalvelin + + System error: Järjestelmävirhe: - Transaction amount too small - + Siirtosumma liian pieni - Transaction amounts must be positive - + Siirtosumman tulee olla positiivinen - Transaction too large - + Siirtosumma liian iso - Use UPnP to map the listening port (default: 0) Käytä UPnP:tä kuunneltavan portin avaamiseen (vakioasetus: 0) - Use UPnP to map the listening port (default: 1 when listening) Käytä UPnP:tä kuunneltavan portin avaamiseen (vakioasetus: 1 kun kuuntelemassa) - - Use proxy to reach tor hidden services (default: same as -proxy) - Käytä proxyä tor yhteyksien avaamiseen (vakioasetus: sama kuin -proxy) - - - Username for JSON-RPC connections Käyttäjätunnus JSON-RPC-yhteyksille - Warning Varoitus - Warning: This version is obsolete, upgrade required! Varoitus: Tämä versio on vanhentunut, päivitys tarpeen! - - You need to rebuild the databases using -reindex to change -txindex - + Zapping all transactions from wallet... + Tyhjennetään kaikki rahansiirrot lompakosta.... + + + on startup + käynnistyksessä + + + version + versio - wallet.dat corrupt, salvage failed - + wallet.dat -lompakkotiedosto korruptoitunut, korjaaminen epäonnistui - Password for JSON-RPC connections Salasana JSON-RPC-yhteyksille - Allow JSON-RPC connections from specified IP address Salli JSON-RPC yhteydet tietystä ip-osoitteesta - Send commands to node running on <ip> (default: 127.0.0.1) Lähetä käskyjä solmuun osoitteessa <ip> (oletus: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) Suorita käsky kun paras lohko muuttuu (%s cmd on vaihdettu block hashin kanssa) - Upgrade wallet to latest format Päivitä lompakko uusimpaan formaattiin - Set key pool size to <n> (default: 100) Aseta avainpoolin koko arvoon <n> (oletus: 100) - Rescan the block chain for missing wallet transactions Skannaa uudelleen lohkoketju lompakon puuttuvien rahasiirtojen vuoksi - Use OpenSSL (https) for JSON-RPC connections Käytä OpenSSL:ää (https) JSON-RPC-yhteyksille - Server certificate file (default: server.cert) Palvelimen sertifikaatti-tiedosto (oletus: server.cert) - Server private key (default: server.pem) Palvelimen yksityisavain (oletus: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Hyväksyttävä salaus (oletus: -TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - This help message Tämä ohjeviesti - Unable to bind to %s on this computer (bind returned error %d, %s) Kytkeytyminen %s tällä tietokonella ei onnistu (kytkeytyminen palautti virheen %d, %s) - - Connect through socks proxy - Yhdistä socks proxyn läpi - - - Allow DNS lookups for -addnode, -seednode and -connect Salli DNS kyselyt -addnode, -seednode ja -connect yhteydessä - Loading addresses... Ladataan osoitteita... - Error loading wallet.dat: Wallet corrupted Virhe ladattaessa wallet.dat-tiedostoa: Lompakko vioittunut - Error loading wallet.dat: Wallet requires newer version of Myriadcoin - Virhe ladattaessa wallet.dat-tiedostoa: Tarvitset uudemman version Myriadcoinista + Virhe ladattaessa wallet.dat-tiedostoa: Tarvitset uudemman version Bitcoinista - Wallet needed to be rewritten: restart Myriadcoin to complete Lompakko tarvitsee uudelleenkirjoittaa: käynnistä Myriadcoin uudelleen - Error loading wallet.dat Virhe ladattaessa wallet.dat-tiedostoa - Invalid -proxy address: '%s' Virheellinen proxy-osoite '%s' - Unknown network specified in -onlynet: '%s' Tuntematon verkko -onlynet parametrina: '%s' - Unknown -socks proxy version requested: %i Tuntematon -socks proxy versio pyydetty: %i - Cannot resolve -bind address: '%s' -bind osoitteen '%s' selvittäminen epäonnistui - Cannot resolve -externalip address: '%s' -externalip osoitteen '%s' selvittäminen epäonnistui - Invalid amount for -paytxfee=<amount>: '%s' -paytxfee=<amount>: '%s' on virheellinen - Invalid amount Virheellinen määrä - Insufficient funds Lompakon saldo ei riitä - Loading block index... Ladataan lohkoindeksiä... - Add a node to connect to and attempt to keep the connection open Linää solmu mihin liittyä pitääksesi yhteyden auki - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - Kytkeytyminen %s ei onnistu tällä tietokoneella. Myriadcoin on todennäköisesti jo ajamassa. - - - - Fee per KB to add to transactions you send - Rahansiirtopalkkio per KB lisätään lähettämääsi rahansiirtoon - - - Loading wallet... Ladataan lompakkoa... - Cannot downgrade wallet Et voi päivittää lompakkoasi vanhempaan versioon - Cannot write default address Oletusosoitetta ei voi kirjoittaa - Rescanning... Skannataan uudelleen... - Done loading Lataus on valmis - To use the %s option Käytä %s optiota - Error Virhe - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_fr.ts b/src/qt/locale/bitcoin_fr.ts index 668c0bac..fabb5b1c 100644 --- a/src/qt/locale/bitcoin_fr.ts +++ b/src/qt/locale/bitcoin_fr.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - À propos de Myriadcoin + About Myriadcoin Core + À propos de Myriadcoin Core - - <b>Myriadcoin</b> version - <b>Myriadcoin</b> version + <b>Myriadcoin Core</b> version + Version de <b>Myriadcoin Core</b> - This is experimental software. @@ -21,160 +17,135 @@ Distributed under the MIT/X11 software license, see the accompanying file COPYIN This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - Ce logiciel est en phase expérimentale. + Ce logiciel est expérimental. - Distribué sous licence MIT/X11, voir le fichier COPYING ou http://www.opensource.org/licenses/mit-license.php. + Distribué sous licence logicielle MIT/X11, voir le fichier COPYING joint ou http://www.opensource.org/licenses/mit-license.php. - Ce produit comprend des fonctionnalités développées par le projet OpenSSL pour être utilisés dans la boîte à outils OpenSSL (http://www.openssl.org/), un logiciel cryptographique écrit par Eric Young (eay@cryptsoft.com), et des fonctionnalités développées pour le logiciel UPnP écrit par Thomas Bernard. + Ce produit comprend des logiciels développés par le projet OpenSSL afin d'être utilisés dans la boîte à outils OpenSSL (http://www.openssl.org/), un logiciel de chiffrement écrit par Eric Young (eay@cryptsoft.com), et un logiciel UPnP développé par Thomas Bernard. - Copyright - Droit d'auteur + Tous droits réservés - - The Myriadcoin developers - Les développeurs Myriadcoin + The Myriadcoin Core developers + Les développeurs Myriadcoin Core + + + (%1-bit) + (%1-bit) AddressBookPage - - Address Book - Carnet d'adresses - - - Double-click to edit address or label - Double cliquez afin de modifier l'adresse ou l'étiquette + Double cliquer afin de modifier l'adresse ou l'étiquette - Create a new address Créer une nouvelle adresse - + &New + &Nouveau + + Copy the currently selected address to the system clipboard - Copier l'adresse sélectionnée dans le presse-papiers + Copier l'adresse courante sélectionnée dans le presse-papier - - &New Address - &Nouvelle adresse + &Copy + &Copier - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Voici vos adresses Myriadcoin qui vous permettent de recevoir des paiements. Vous pouvez donner une adresse différente à chaque expéditeur afin de savoir qui vous paye. + C&lose + &Fermer - &Copy Address &Copier l'adresse - - Show &QR Code - Afficher le &QR Code - - - - Sign a message to prove you own a Myriadcoin address - Signer un message pour prouver que vous détenez une adresse Myriadcoin - - - - Sign &Message - Signer un &message - - - Delete the currently selected address from the list Effacer l'adresse actuellement sélectionnée de la liste - Export the data in the current tab to a file Exporter les données de l'onglet courant vers un fichier - &Export &Exporter - - Verify a message to ensure it was signed with a specified Myriadcoin address - Vérifier un message pour vous assurer qu'il a bien été signé avec l'adresse Myriadcoin spécifiée - - - - &Verify Message - &Vérifier un message - - - &Delete &Supprimer - - These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - Ce sont vos adresses Myriadcoin pour émettre des paiements. Vérifiez toujours le montant et l'adresse du destinataire avant d'envoyer des pièces. + Choose the address to send coins to + Choisir l'adresse à laquelle envoyer des pièces + + + Choose the address to receive coins with + Choisir l'adresse avec laquelle recevoir des pîèces + + + C&hoose + C&hoisir + + + Sending addresses + Adresses d'envoi + + + Receiving addresses + Adresses de réception + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + Voici vos adresses Myriadcoin pour envoyer des paiements. Vérifiez toujours le montant et l'adresse du destinataire avant d'envoyer des pièces. + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Voici vos adresses Myriadcoin pour recevoir des paiements. Il est recommandé d'utiliser une nouvelle adresse de réception pour chaque transaction. - Copy &Label Copier l'é&tiquette - &Edit - &Éditer + &Modifier - - Send &Coins - Envoyer des Bit&coins + Export Address List + Exporter la liste d'adresses - - Export Address Book Data - Exporter les données du carnet d'adresses - - - Comma separated file (*.csv) Valeurs séparées par des virgules (*.csv) - - Error exporting - Erreur lors de l'exportation + Exporting Failed + L'exportation a échoué - - Could not write to file %1. - Impossible d'écrire dans le fichier %1. + There was an error trying to save the address list to %1. + Une erreur est survenue lors de l'enregistrement de la liste d'adresses vers %1. AddressTableModel - Label Étiquette - Address Adresse - (no label) (aucune étiquette) @@ -182,460 +153,393 @@ This product includes software developed by the OpenSSL Project for use in the O AskPassphraseDialog - Passphrase Dialog Dialogue de phrase de passe - Enter passphrase - Entrez la phrase de passe + Saisir la phrase de passe - New passphrase Nouvelle phrase de passe - Repeat new passphrase - Répétez la phrase de passe + Répéter la phrase de passe - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Entrez une nouvelle phrase de passe pour le porte-monnaie.<br/>Veuillez utiliser une phrase composée de <b>10 caractères aléatoires ou plus</b>, ou bien de <b>huit mots ou plus</b>. + Saisir la nouvelle phrase de passe pour le portefeuille. <br/>Veuillez utiliser une phrase de passe de <b>10 caractères aléatoires ou plus</b>, ou de <b>huit mots ou plus</b>. - Encrypt wallet - Chiffrer le porte-monnaie + Chiffrer le portefeuille - This operation needs your wallet passphrase to unlock the wallet. - Cette opération nécessite votre phrase de passe pour déverrouiller le porte-monnaie. + Cette opération nécessite votre phrase de passe pour déverrouiller le portefeuille. - Unlock wallet - Déverrouiller le porte-monnaie + Déverrouiller le portefeuille - This operation needs your wallet passphrase to decrypt the wallet. - Cette opération nécessite votre phrase de passe pour décrypter le porte-monnaie. + Cette opération nécessite votre phrase de passe pour déchiffrer le portefeuille. - Decrypt wallet - Déchiffrer le porte-monnaie + Déchiffrer le portefeuille - Change passphrase Changer la phrase de passe - Enter the old and new passphrase to the wallet. - Entrez l’ancienne phrase de passe pour le porte-monnaie ainsi que la nouvelle. + Saisir l’ancienne phrase de passe pour le portefeuille ainsi que la nouvelle. - Confirm wallet encryption - Confirmer le chiffrement du porte-monnaie + Confirmer le chiffrement du portefeuille - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! - Attention : Si vous chiffrez votre porte-monnaie et perdez votre phrase de passe, vous <b>PERDREZ ACCÈS À TOUS VOS MYRIADCOINS</b> ! + Attention : Si vous chiffrez votre portefeuille et perdez votre phrase de passe, vous <b>PERDREZ TOUS VOS MYRIADCOINS</b> ! - Are you sure you wish to encrypt your wallet? - Êtes-vous sûr de vouloir chiffrer votre porte-monnaie ? + Êtes-vous sûr de vouloir chiffrer votre portefeuille ? - 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. - IMPORTANT : Les sauvegardes précédentes de votre fichier de porte-monnaie devraient être remplacées par le nouveau fichier crypté de porte-monnaie. Pour des raisons de sécurité, les précédentes sauvegardes de votre fichier de porte-monnaie non chiffré deviendront inutilisables dès que vous commencerez à utiliser le nouveau porte-monnaie chiffré. + IMPORTANT : Toute sauvegarde précédente de votre fichier de portefeuille devrait être remplacée par le nouveau fichier de portefeuille chiffré. Pour des raisons de sécurité, les sauvegardes précédentes de votre fichier de portefeuille non chiffré deviendront inutilisables dès que vous commencerez à utiliser le nouveau portefeuille chiffré. - - Warning: The Caps Lock key is on! Attention : la touche Verr. Maj. est activée ! - - Wallet encrypted - Porte-monnaie chiffré + Portefeuille chiffré - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. - Myriadcoin va à présent se fermer pour terminer la procédure de cryptage. N'oubliez pas que le chiffrement de votre porte-monnaie ne peut pas fournir une protection totale contre le vol par des logiciels malveillants qui infecteraient votre ordinateur. + Myriadcoin va à présent se fermer pour terminer le chiffrement. N'oubliez pas que le chiffrement de votre portefeuille n'est pas une protection totale contre le vol par des logiciels malveillants qui infecteraient votre ordinateur. - - - - Wallet encryption failed - Le chiffrement du porte-monnaie a échoué + Le chiffrement du portefeuille a échoué - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - Le chiffrement du porte-monnaie a échoué en raison d'une erreur interne. Votre porte-monnaie n'a pas été chiffré. + Le chiffrement du portefeuille a échoué en raison d'une erreur interne. Votre portefeuille n'a pas été chiffré. - - The supplied passphrases do not match. - Les phrases de passe entrées ne correspondent pas. + Les phrases de passe saisies ne correspondent pas. - Wallet unlock failed - Le déverrouillage du porte-monnaie a échoué + Le déverrouillage du portefeuille a échoué - - - The passphrase entered for the wallet decryption was incorrect. - La phrase de passe entrée pour décrypter le porte-monnaie était incorrecte. + La phrase de passe saisie pour déchiffrer le portefeuille était incorrecte. - Wallet decryption failed - Le déchiffrage du porte-monnaie a échoué + Le déchiffrage du portefeuille a échoué - Wallet passphrase was successfully changed. - La phrase de passe du porte-monnaie a été modifiée avec succès. + La phrase de passe du portefeuille a été modifiée avec succès. BitcoinGUI - Sign &message... - Signer un &message... + &Signer le message... - Synchronizing with network... - Synchronisation avec le réseau… + Synchronisation avec le réseau en cours… - &Overview &Vue d'ensemble - - Show general overview of wallet - Afficher une vue d’ensemble du porte-monnaie + Node + Nœud + + + Show general overview of wallet + Afficher une vue d’ensemble du portefeuille - &Transactions &Transactions - Browse transaction history Parcourir l'historique des transactions - - Edit the list of stored addresses and labels - Éditer la liste des adresses et des étiquettes stockées - - - - Show the list of addresses for receiving payments - Afficher la liste des adresses pour recevoir des paiements - - - E&xit Q&uitter - Quit application Quitter l’application - Show information about Myriadcoin Afficher des informations à propos de Myriadcoin - About &Qt À propos de &Qt - Show information about Qt Afficher des informations sur Qt - &Options... &Options… - &Encrypt Wallet... - &Chiffrer le porte-monnaie... + &Chiffrer le portefeuille... - &Backup Wallet... - &Sauvegarder le porte-monnaie... + Sauvegarder le &portefeuille... - &Change Passphrase... - &Modifier la phrase de passe... + &Changer la phrase de passe... + + + &Sending addresses... + Adresses d'&envoi... + + + &Receiving addresses... + Adresses de &réception... + + + Open &URI... + Ouvrir un &URI... - Importing blocks from disk... Importation des blocs depuis le disque... - Reindexing blocks on disk... Réindexation des blocs sur le disque... - Send coins to a Myriadcoin address Envoyer des pièces à une adresse Myriadcoin - Modify configuration options for Myriadcoin Modifier les options de configuration de Myriadcoin - Backup wallet to another location - Sauvegarder le porte-monnaie à un autre emplacement + Sauvegarder le portefeuille vers un autre emplacement - Change the passphrase used for wallet encryption - Modifier la phrase de passe utilisée pour le chiffrement du porte-monnaie + Modifier la phrase de passe utilisée pour le chiffrement du portefeuille - &Debug window Fenêtre de &débogage - Open debugging and diagnostic console Ouvrir une console de débogage et de diagnostic - &Verify message... &Vérifier un message... - - Myriadcoin Myriadcoin - Wallet - Porte-monnaie + Portefeuille - &Send &Envoyer - &Receive &Recevoir - - &Addresses - &Adresses - - - - &About Myriadcoin - À &propos de Myriadcoin - - - &Show / Hide &Afficher / Cacher - Show or hide the main Window Afficher ou masquer la fenêtre principale - Encrypt the private keys that belong to your wallet - Crypter les clefs privées de votre porte-monnaie + Chiffrer les clefs privées de votre portefeuille - Sign messages with your Myriadcoin addresses to prove you own them Signer les messages avec vos adresses Myriadcoin pour prouver que vous les détenez - Verify messages to ensure they were signed with specified Myriadcoin addresses - Vérifier les messages pour vous assurer qu'ils ont bien été signés avec les adresses Myriadcoin spécifiées + Vérifier les messages pour vous assurer qu'ils ont été signés avec les adresses Myriadcoin spécifiées - &File &Fichier - &Settings &Réglages - &Help &Aide - Tabs toolbar Barre d'outils des onglets - - [testnet] [testnet] - + Myriadcoin Core + Myriadcoin Core + + + Request payments (generates QR codes and myriadcoin: URIs) + Demander des paiements (génère des codes QR et des URIs myriadcoin:) + + + &About Myriadcoin Core + À &propos de Myriadcoin Core + + + Show the list of used sending addresses and labels + Afficher la liste d'adresses d'envoi et d'étiquettes utilisées + + + Show the list of used receiving addresses and labels + Afficher la liste d'adresses de réception et d'étiquettes utilisées + + + Open a myriadcoin: URI or payment request + Ouvrir un URI myriadcoin: ou une demande de paiement + + + &Command-line options + Options de ligne de &commande + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + Afficher le message d'aide de Myriadcoin Core pour obtenir une liste des options de ligne de commande Myriadcoin possibles. + + Myriadcoin client Client Myriadcoin - %n active connection(s) to Myriadcoin network %n connexion active avec le réseau Myriadcoin%n connexions actives avec le réseau Myriadcoin - No block source available... - Aucune source de bloc disponible... + Aucune source de blocs disponible... - Processed %1 of %2 (estimated) blocks of transaction history. - %1 blocs sur %2 (estimés) de l'historique des transactions traités. + À traité %1 blocs sur %2 (estimés) de l'historique des transactions. - Processed %1 blocks of transaction history. - %1 blocs de l'historique des transactions traités. + À traité %1 blocs de l'historique des transactions. - %n hour(s) %n heure%n heures - %n day(s) %n jour%n jours - %n week(s) %n semaine%n semaines - - %1 behind - %1 en arrière + %1 and %2 + %1 et %2 + + + %n year(s) + %n an%n ans + + + %1 behind + %1 en retard - Last received block was generated %1 ago. Le dernier bloc reçu avait été généré il y a %1. - Transactions after this will not yet be visible. - Les transactions après cela ne seront pas encore visibles. + Les transactions après ceci ne sont pas encore visibles. - Error Erreur - Warning Avertissement - Information Information - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - Cette transaction dépasse la limite de taille. Vous pouvez quand même l'envoyer en vous acquittant de frais d'un montant de %1 qui iront aux nœuds qui traiteront la transaction et aideront à soutenir le réseau. Voulez-vous payer les frais ? - - - Up to date À jour - Catching up... - Rattrapage… + Rattrapage en cours… - - Confirm transaction fee - Confirmer les frais de transaction - - - Sent transaction Transaction envoyée - Incoming transaction Transaction entrante - Date: %1 Amount: %2 Type: %3 @@ -648,419 +552,717 @@ Adresse : %4 - - - URI handling - Gestion des URI - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - L'URI ne peut être analysé ! Cela peut être causé par une adresse Myriadcoin invalide ou par des paramètres d'URI malformés. - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Le porte-monnaie est <b>chiffré</b> et est actuellement <b>déverrouillé</b> + Le portefeuille est <b>chiffré</b> et est actuellement <b>déverrouillé</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> - Le porte-monnaie est <b>chiffré</b> et est actuellement <b>verrouillé</b> + Le portefeuille est <b>chiffré</b> et actuellement <b>verrouillé</b> - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. - Une erreur fatale est survenue. Myriadcoin ne peut plus continuer à fonctionner de façon sûre et va s'arrêter. + Une erreur fatale est survenue. Myriadcoin ne peut plus continuer de façon sûre et va s'arrêter. ClientModel - Network Alert Alerte réseau - EditAddressDialog + CoinControlDialog - - Edit Address - Éditer l'adresse + Coin Control Address Selection + Sélection de l'adresse de contrôle des pièces + + + Quantity: + Quantité : + + + Bytes: + Octets : + + + Amount: + Montant : + + + Priority: + Priorité : + + + Fee: + Frais : + + + Low Output: + Sortie faible : + + + After Fee: + Après les frais : + + + Change: + Monnaie : + + + (un)select all + Tout (dé)sélectionner + + + Tree mode + Mode arborescence + + + List mode + Mode liste + + + Amount + Montant + + + Address + Adresse + + + Date + Date + + + Confirmations + Confirmations + + + Confirmed + Confirmée + + + Priority + Priorité + + + Copy address + Copier l’adresse + + + Copy label + Copier l’étiquette + + + Copy amount + Copier le montant + + + Copy transaction ID + Copier l'ID de la transaction + + + Lock unspent + Verrouiller ce qui n'est pas dépensé + + + Unlock unspent + Déverrouiller ce qui n'est pas dépensé + + + Copy quantity + Copier la quantité + + + Copy fee + Copier les frais + + + Copy after fee + Copier le montant après les frais + + + Copy bytes + Copier les octets + + + Copy priority + Copier la priorité + + + Copy low output + Copier la sortie faible + + + Copy change + Copier la monnaie + + + highest + la plus élevée + + + higher + plus élevée + + + high + élevée + + + medium-high + moyennement-élevée + + + medium + moyenne + + + low-medium + moyennement-basse + + + low + basse + + + lower + plus basse + + + lowest + la plus basse + + + (%1 locked) + (%1 verrouillé) + + + none + aucun + + + Dust + Poussière + + + yes + oui + + + no + non + + + This label turns red, if the transaction size is greater than 1000 bytes. + Cette étiquette devient rouge si la taille de la transaction est plus grande que 1 000 octets. + + + This means a fee of at least %1 per kB is required. + Signifie que des frais d'au moins 1% par ko sont requis. + + + Can vary +/- 1 byte per input. + Peut varier +/- 1 octet par entrée. + + + Transactions with higher priority are more likely to get included into a block. + Les transactions à priorité plus haute sont plus à même d'être incluses dans un bloc. + + + This label turns red, if the priority is smaller than "medium". + Cette étiquette devient rouge si la priorité est plus basse que « moyenne » + + + This label turns red, if any recipient receives an amount smaller than %1. + Cette étiquette devient rouge si un destinataire reçoit un montant inférieur à 1%. + + + This means a fee of at least %1 is required. + Signifie que des frais d'au moins %1 sont requis. + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + Les montants inférieurs à 0,546 fois les frais minimums de relais sont affichés en tant que poussière. + + + This label turns red, if the change is smaller than %1. + Cette étiquette devient rouge si la monnaie rendue est inférieure à %1. + + + (no label) + (aucune étiquette) + + + change from %1 (%2) + monnaie de %1 (%2) + + + (change) + (monnaie) + + + + EditAddressDialog + + Edit Address + Modifier l'adresse - &Label &Étiquette - - The label associated with this address book entry - L’étiquette associée à cette entrée du carnet d'adresses + The label associated with this address list entry + L'étiquette associée à cette entrée de la liste d'adresses + + + The address associated with this address list entry. This can only be modified for sending addresses. + L'adresse associée à cette entrée de la liste d'adresses. Ceci ne peut être modifié que pour les adresses d'envoi. - &Address &Adresse - - The address associated with this address book entry. This can only be modified for sending addresses. - L’adresse associée avec cette entrée du carnet d'adresses. Ne peut être modifiées que les adresses d’envoi. - - - New receiving address Nouvelle adresse de réception - New sending address Nouvelle adresse d’envoi - Edit receiving address - Éditer l’adresse de réception + Modifier l’adresse de réception - Edit sending address - Éditer l’adresse d'envoi + Modifier l’adresse d'envoi - The entered address "%1" is already in the address book. L’adresse fournie « %1 » est déjà présente dans le carnet d'adresses. - The entered address "%1" is not a valid Myriadcoin address. L'adresse fournie « %1 » n'est pas une adresse Myriadcoin valide. - Could not unlock wallet. - Impossible de déverrouiller le porte-monnaie. + Impossible de déverrouiller le portefeuille. - New key generation failed. - Échec de la génération de la nouvelle clef. + Échec de génération de la nouvelle clef. - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt - Myriadcoin-Qt + A new data directory will be created. + Un nouveau répertoire de données sera créé. + + + name + nom + + + Directory already exists. Add %1 if you intend to create a new directory here. + Le répertoire existe déjà. Ajoutez %1 si vous voulez créer un nouveau répertoire ici. + + + Path already exists, and is not a directory. + Le chemin existe déjà et n'est pas un répertoire. + + + Cannot create data directory here. + Impossible de créer un répertoire de données ici. + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + Myriadcoin Core - Options de ligne de commande + + + Myriadcoin Core + Myriadcoin Core - version version - Usage: Utilisation : - command-line options options de ligne de commande - UI options - Options Interface Utilisateur + Options de l'interface utilisateur - Set language, for example "de_DE" (default: system locale) - Définir la langue, par exemple « de_DE » (par défaut : la langue du système) + Définir la langue, par exemple « fr_CA » (par défaut : la langue du système) - Start minimized - Démarrer sous forme minimisée + Démarrer minimisé + + + Set SSL root certificates for payment request (default: -system-) + Définir les certificats SSL racine pour les requêtes de paiement (par défaut : -système-) - Show splash screen on startup (default: 1) Afficher l'écran d'accueil au démarrage (par défaut : 1) + + Choose data directory on startup (default: 0) + Choisir un répertoire de données au démarrage (par défaut : 0) + + + + Intro + + Welcome + Bienvenue + + + Welcome to Myriadcoin Core. + Bienvenue à Myriadcoin Core. + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + Comme c'est la première fois que le logiciel est lancé, vous pouvez choisir où Myriadcoin Core stockera ses données. + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + Myriadcoin Core va télécharger et stocker une copie de la chaîne de blocs Myriadcoin. Au moins %1Go de données seront stockées dans ce répertoire et cela augmentera avec le temps. Le portefeuille sera également stocké dans ce répertoire. + + + Use the default data directory + Utiliser le répertoire de données par défaut + + + Use a custom data directory: + Utiliser un répertoire de données personnalisé : + + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" can not be created. + Erreur : le répertoire de données spécifié « %1 » ne peut pas être créé. + + + Error + Erreur + + + GB of free space available + Go d'espace libre disponible + + + (of %1GB needed) + (sur %1Go nécessaires) + + + + OpenURIDialog + + Open URI + Ouvrir un URI + + + Open payment request from URI or file + Ouvrir une demande de paiement à partir d'un URI ou d'un fichier + + + URI: + URI : + + + Select payment request file + Choisir le fichier de demande de paiement + + + Select payment request file to open + Choisir le fichier de demande de paiement à ouvrir + OptionsDialog - Options Options - &Main Réglages &principaux - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Frais de transaction optionnel par ko qui aident à garantir un traitement rapide des transactions. La plupart des transactions utilisent 1 ko. - Pay transaction &fee Payer des &frais de transaction - Automatically start Myriadcoin after logging in to the system. - Démarrer Myriadcoin automatiquement lors de l'ouverture une session sur l'ordinateur. + Démarrer Myriadcoin automatiquement après avoir ouvert une session sur l'ordinateur. - &Start Myriadcoin on system login &Démarrer Myriadcoin lors de l'ouverture d'une session - + Size of &database cache + Taille du cache de la base de &données + + + MB + Mo + + + Number of script &verification threads + Nombre d'exétrons de &vérification de script + + + Connect to the Myriadcoin network through a SOCKS proxy. + Se connecter au réseau Myriadcoin par un mandataire SOCKS. + + + &Connect through SOCKS proxy (default proxy): + Se &connecter par un mandataire SOCKS (mandataire par défaut) : + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + Adresse IP du mandataire (par ex. IPv4 : 127.0.0.1 / IPv6 : ::1) + + + 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 |. + URL de tiers (par ex. un explorateur de blocs) apparaissant dans l'onglet des transactions comme éléments du menu contextuel. %s dans l'URL est remplacé par le hachage de la transaction. Les URL multiples sont séparées par une barre verticale |. + + + Third party transaction URLs + URL de transaction d'un tiers + + + Active command-line options that override above options: + Options actives de ligne de commande qui annulent les options ci-dessus : + + Reset all client options to default. - Remettre toutes les options du client aux valeurs par défaut. + Réinitialiser toutes les options du client aux valeurs par défaut. - &Reset Options - &Remise à zéro des options + &Réinitialisation des options - &Network &Réseau - + (0 = auto, <0 = leave that many cores free) + (0 = auto, < 0 = laisser ce nombre de cœurs inutilisés) + + + W&allet + &Portefeuille + + + Expert + Expert + + + Enable coin &control features + Activer les fonctions de &contrôle des pièces + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + Si vous désactivé la dépense de la monnaie non confirmée, la monnaie d'une transaction ne peut pas être utilisée tant que cette transaction n'a pas reçu au moins une confirmation. Ceci affecte aussi comment votre solde est calculé. + + + &Spend unconfirmed change + &Dépenser la monnaie non confirmée + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. - Ouvrir le port du client Myriadcoin automatiquement sur le routeur. Cela ne fonctionne que si votre routeur supporte l'UPnP et si la fonctionnalité est activée. + Ouvrir le port du client Myriadcoin automatiquement sur le routeur. Ceci ne fonctionne que si votre routeur supporte l'UPnP et si la fonctionnalité est activée. - Map port using &UPnP - Ouvrir le port avec l'&UPnP + Mapper le port avec l'&UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - Connexion au réseau Myriadcoin à travers un proxy SOCKS (par ex. lors d'une connexion via Tor). - - - - &Connect through SOCKS proxy: - &Connexion à travers un proxy SOCKS : - - - Proxy &IP: - &IP du proxy : + &IP du serveur mandataire : - - IP address of the proxy (e.g. 127.0.0.1) - Adresse IP du proxy (par ex. 127.0.0.1) - - - &Port: &Port : - Port of the proxy (e.g. 9050) - Port du proxy (par ex. 9050) + Port du serveur mandataire (par ex. 9050) - SOCKS &Version: &Version SOCKS : - SOCKS version of the proxy (e.g. 5) Version SOCKS du serveur mandataire (par ex. 5) - &Window &Fenêtre - Show only a tray icon after minimizing the window. Afficher uniquement une icône système après minimisation. - &Minimize to the tray instead of the taskbar &Minimiser dans la barre système au lieu de la barre des tâches - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. - Minimiser au lieu quitter l'application lorsque la fenêtre est fermée. Lorsque cette option est activée, l'application ne pourra être fermée qu'en sélectionnant Quitter dans le menu déroulant. + Minimiser au lieu de quitter l'application lorsque la fenêtre est fermée. Si cette option est activée, l'application ne pourra être fermée qu'en sélectionnant Quitter dans le menu. - M&inimize on close M&inimiser lors de la fermeture - &Display &Affichage - User Interface &language: &Langue de l'interface utilisateur : - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. La langue de l'interface utilisateur peut être définie ici. Ce réglage sera pris en compte après redémarrage de Myriadcoin. - &Unit to show amounts in: &Unité d'affichage des montants : - Choose the default subdivision unit to show in the interface and when sending coins. Choisissez la sous-unité par défaut pour l'affichage dans l'interface et lors de l'envoi de pièces. - Whether to show Myriadcoin addresses in the transaction list or not. Détermine si les adresses Myriadcoin seront affichées sur la liste des transactions. - &Display addresses in transaction list &Afficher les adresses sur la liste des transactions - - &OK - &Valider + Whether to show coin control features or not. + Afficher ou non les fonctions de contrôle des pièces. + + + &OK + &OK - &Cancel A&nnuler - - &Apply - &Appliquer - - - default par défaut - + none + aucune + + Confirm options reset - Confirmer la remise à zéro des options + Confirmer la réinitialisation des options - - Some settings may require a client restart to take effect. - La prise en compte de certains réglages peut nécessiter un redémarrage du client. + Client restart required to activate changes. + Le redémarrage du client est nécessaire pour activer les changements. - - Do you want to proceed? - Voulez-vous continuer ? + Client will be shutdown, do you want to proceed? + Le client sera arrêté, voulez-vous continuer? - - - Warning - Avertissement + This change would require a client restart. + Ce changement nécessite un redémarrage du client. - - - This setting will take effect after restarting Myriadcoin. - Ce réglage sera pris en compte après un redémarrage de Myriadcoin. - - - The supplied proxy address is invalid. - L'adresse de proxy fournie est invalide. + L'adresse de serveur mandataire fournie est invalide. OverviewPage - Form Formulaire - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. - Les informations affichées peuvent être obsolètes. Votre porte-monnaie est automatiquement synchronisé avec le réseau Myriadcoin lorsque la connexion s'établit, or ce processus n'est pas encore terminé. + Les informations affichées peuvent être obsolètes. Votre portefeuille est automatiquement synchronisé avec le réseau Myriadcoin lorsque la connexion s'établit, or ce processus n'est pas encore terminé. - - Balance: - Solde : - - - - Unconfirmed: - Non confirmé : - - - Wallet - Porte-monnaie + Portefeuille + + + Available: + Disponible : + + + Your current spendable balance + Votre solde actuel pouvant être dépensé + + + Pending: + En attente : + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + Total des transactions qui doivent encore être confirmées et qu'il n'est pas encore possible de dépenser - Immature: Immature : - Mined balance that has not yet matured Le solde généré n'est pas encore mûr - + Total: + Total : + + + Your current total balance + Votre solde total actuel + + <b>Recent transactions</b> <b>Transactions récentes</b> - - Your current balance - Votre solde actuel - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - Total des transactions qui doivent encore être confirmées et qui ne sont pas prises en compte dans le solde actuel - - - - out of sync désynchronisé @@ -1068,579 +1270,856 @@ Adresse : %4 PaymentServer - + URI handling + Gestion des URIs + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + L'URI ne peut être analysé ! Ceci peut être causé par une adresse Myriadcoin invalide ou par des paramètres d'URI mal composé. + + + Requested payment amount of %1 is too small (considered dust). + Le paiement demandé d'un montant de %1 est trop faible (considéré comme de la poussière). + + + Payment request error + Erreur de demande de paiement + + Cannot start myriadcoin: click-to-pay handler - Impossible de démarrer myriadcoin : gestionnaire de cliquer-pour-payer + Impossible de démarrer le gestionnaire de cliquer-pour-payer myriadcoin : + + + Net manager warning + Avertissement du gestionnaire de réseau + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + Votre serveur mandataire actif ne prend pas en charge SOCKS5 ce qui est exigé pour les demandes de paiements par serveur mandataire. + + + Payment request fetch URL is invalid: %1 + L'URL de récupération de la demande de paiement est invalide : %1 + + + Payment request file handling + Gestion des fichiers de demande de paiement + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + Le fichier de demande de paiement ne peut pas être lu ou traité ! Ceci peut être causé par un fichier de demande de paiement invalide. + + + Unverified payment requests to custom payment scripts are unsupported. + Les demandes de paiements non vérifiées à des scripts de paiement personnalisés ne sont pas prises en charge. + + + Refund from %1 + Remboursement de %1 + + + Error communicating with %1: %2 + Erreur de communication avec %1 : %2 + + + Payment request can not be parsed or processed! + La demande de paiement ne peut pas être analysée ou traitée ! + + + Bad response from server %1 + Mauvaise réponse du serveur %1 + + + Payment acknowledged + Le paiement a été confirmé + + + Network request error + Erreur de demande réseau - QRCodeDialog + QObject - - QR Code Dialog - Dialogue de QR Code + Myriadcoin + Myriadcoin - - Request Payment - Demande de paiement + Error: Specified data directory "%1" does not exist. + Erreur : le répertoire de données spécifié « %1 » n'existe pas. - - Amount: - Montant : + Error: Cannot parse configuration file: %1. Only use key=value syntax. + Erreur : impossible d'analyser le fichier de configuration : %1. N’utilisez que la syntaxe clef=valeur. - - Label: - Étiquette : + Error: Invalid combination of -regtest and -testnet. + Erreur : combinaison invalide de -regtest et de -testnet. - - Message: - Message : + Myriadcoin Core didn't yet exit safely... + Myriadcoin Core ne s'est pas encore arrêté en toute sécurité... - - &Save As... - &Enregistrer sous... + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Saisir une adresse Myriadcoin (par ex. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + &Sauvegarder l'image... - - Error encoding URI into QR Code. - Erreur de l'encodage de l'URI dans le QR Code. + &Copy Image + &Copier l'image - - The entered amount is invalid, please check. - Le montant entré est invalide, veuillez le vérifier. - - - - Resulting URI too long, try to reduce the text for label / message. - L'URI résultant est trop long, essayez avec un texte d'étiquette ou de message plus court. - - - Save QR Code - Sauvegarder le QR Code + Sauvegarder le code QR - - PNG Images (*.png) - Images PNG (*.png) + PNG Image (*.png) + Image PNG (*.png) RPCConsole - Client name Nom du client - - - - - - - - - - N/A - Indisponible + N.D. - Client version Version du client - &Information &Informations - + Debug window + Fenêtre de débogage + + + General + Général + + Using OpenSSL version Version d'OpenSSL utilisée - Startup time - Date de démarrage + Heure de démarrage - Network Réseau - + Name + Nom + + Number of connections Nombre de connexions - - On testnet - Sur testnet - - - Block chain Chaîne de blocs - Current number of blocks Nombre actuel de blocs - Estimated total blocks Nombre total estimé de blocs - Last block time Horodatage du dernier bloc - &Open &Ouvrir - - Command-line options - Options de ligne de commande - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - Afficher le message d'aide de Myriadcoin-Qt pour obtenir la liste des options de ligne de commande disponibles pour Myriadcoin. - - - - &Show - &Afficher - - - &Console &Console - + &Network Traffic + Trafic &réseau + + + &Clear + &Nettoyer + + + Totals + Totaux + + + In: + Entrant : + + + Out: + Sortant : + + Build date Date de compilation - - Myriadcoin - Debug window - Myriadcoin - Fenêtre de débogage - - - - Myriadcoin Core - Noyau Myriadcoin - - - Debug log file Journal de débogage - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. - Ouvrir le journal de débogage de Myriadcoin depuis le répertoire de données actuel. Cela peut prendre quelques secondes pour les journaux de grande taille. + Ouvrir le journal de débogage de Myriadcoin depuis le répertoire de données actuel. Ceci peut prendre quelques secondes pour les journaux de grande taille. - Clear console Nettoyer la console - Welcome to the Myriadcoin RPC console. Bienvenue sur la console RPC de Myriadcoin. - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Utilisez les touches de curseur pour naviguer dans l'historique et <b>Ctrl-L</b> pour effacer l'écran. + Utiliser les touches de curseur pour naviguer dans l'historique et <b>Ctrl-L</b> pour effacer l'écran. - Type <b>help</b> for an overview of available commands. - Tapez <b>help</b> pour afficher une vue générale des commandes disponibles. + Taper <b>help</b> pour afficher une vue générale des commandes disponibles. + + + %1 B + %1 o + + + %1 KB + %1 Ko + + + %1 MB + %1 Mo + + + %1 GB + %1 Go + + + %1 m + %1 min + + + %1 h + %1 h + + + %1 h %2 m + %1 h %2 min + + + + ReceiveCoinsDialog + + &Amount: + &Montant : + + + &Label: + &Étiquette : + + + &Message: + M&essage : + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + Réutilise une adresse de réception précédemment utilisée. Réutiliser une adresse pose des problèmes de sécurité et de vie privée. N'utilisez pas cette option sauf si vous générez à nouveau une demande de paiement déjà faite. + + + R&euse an existing receiving address (not recommended) + Ré&utiliser une adresse de réception existante (non recommandé) + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + Un message optionnel à joindre à la demande de paiement qui sera affiché à l'ouverture de celle-ci. Note : le message ne sera pas envoyé avec le paiement par le réseau Myriadcoin. + + + An optional label to associate with the new receiving address. + Un étiquette optionnelle à associer à la nouvelle adresse de réception + + + Use this form to request payments. All fields are <b>optional</b>. + Utiliser ce formulaire pour demander des paiements. Tous les champs sont <b>optionnels</b>. + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + Un montant optionnel à demander. Laisser ceci vide ou à zéro pour ne pas demander de montant spécifique. + + + Clear all fields of the form. + Effacer tous les champs du formulaire. + + + Clear + Effacer + + + Requested payments history + Historique des paiements demandés + + + &Request payment + &Demande de paiement + + + Show the selected request (does the same as double clicking an entry) + Afficher la demande choisie (identique à un double-clic sur une entrée) + + + Show + Afficher + + + Remove the selected entries from the list + Enlever les entrées sélectionnées de la liste + + + Remove + Enlever + + + Copy label + Copier l’étiquette + + + Copy message + Copier le message + + + Copy amount + Copier le montant + + + + ReceiveRequestDialog + + QR Code + Code QR + + + Copy &URI + Copier l'&URI + + + Copy &Address + Copier l'&adresse + + + &Save Image... + &Sauvegarder l'image... + + + Request payment to %1 + Demande de paiement à %1 + + + Payment information + Informations de paiement + + + URI + URI + + + Address + Adresse + + + Amount + Montant + + + Label + Étiquette + + + Message + Message + + + Resulting URI too long, try to reduce the text for label / message. + L'URI résultant est trop long, essayez de réduire le texte d'étiquette / de message. + + + Error encoding URI into QR Code. + Erreur d'encodage de l'URI en code QR. + + + + RecentRequestsTableModel + + Date + Date + + + Label + Étiquette + + + Message + Message + + + Amount + Montant + + + (no label) + (pas d'étiquette) + + + (no message) + (pas de message) + + + (no amount) + (aucun montant) SendCoinsDialog - - - - - - - - Send Coins Envoyer des pièces - - Send to multiple recipients at once - Envoyer des pièces à plusieurs destinataires à la fois + Coin Control Features + Fonctions de contrôle des pièces + + + Inputs... + Entrants... + + + automatically selected + choisi automatiquement + + + Insufficient funds! + Fonds insuffisants ! + + + Quantity: + Quantité : + + + Bytes: + Octets : + + + Amount: + Montant : + + + Priority: + Priorité : + + + Fee: + Frais : + + + Low Output: + Sortie faible + + + After Fee: + Après les frais : + + + Change: + Monnaie : + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + Si ceci est actif mais l'adresse de monnaie rendue est vide ou invalide, la monnaie sera envoyée vers une adresse nouvellement générée. + + + Custom change address + Adresse personnalisée de monnaie rendue + + + Send to multiple recipients at once + Envoyer à plusieurs destinataires à la fois - Add &Recipient Ajouter un &destinataire - - Remove all transaction fields - Enlever tous les champs de transaction + Clear all fields of the form. + Effacer tous les champs du formulaire. - Clear &All &Tout nettoyer - Balance: Solde : - - 123.456 BTC - 123.456 BTC - - - Confirm the send action Confirmer l’action d'envoi - S&end E&nvoyer - - <b>%1</b> to %2 (%3) - <b>%1</b> à %2 (%3) - - - Confirm send coins Confirmer l’envoi des pièces - - Are you sure you want to send %1? - Êtes-vous sûr de vouloir envoyer %1 ? + %1 to %2 + %1 à %2 - - and - et + Copy quantity + Copier la quantité + + + Copy amount + Copier le montant + + + Copy fee + Copier les frais + + + Copy after fee + Copier le montant après les frais + + + Copy bytes + Copier les octets + + + Copy priority + Copier la priorité + + + Copy low output + Copier la sortie faible + + + Copy change + Copier la monnaie + + + Total Amount %1 (= %2) + Montant total %1 (= %2) + + + or + ou - The recipient address is not valid, please recheck. - Cette adresse de destinataire n’est pas valide, veuillez la vérifier. + L'adresse du destinataire n’est pas valide, veuillez la vérifier. - The amount to pay must be larger than 0. Le montant à payer doit être supérieur à 0. - The amount exceeds your balance. Le montant dépasse votre solde. - The total exceeds your balance when the %1 transaction fee is included. Le montant dépasse votre solde lorsque les frais de transaction de %1 sont inclus. - Duplicate address found, can only send to each address once per send operation. - Adresse dupliquée trouvée, il n'est possible d'envoyer qu'une fois à chaque adresse par opération d'envoi. + Adresse indentique trouvée, il n'est possible d'envoyer qu'une fois à chaque adresse par opération d'envoi. - - Error: Transaction creation failed! - Erreur : Échec de la création de la transaction ! + Transaction creation failed! + La création de la transaction a échoué ! - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Erreur : la transaction a été rejetée. Cela peut arriver si certaines pièces de votre porte-monnaie ont déjà été dépensées, par exemple si vous avez utilisé une copie de wallet.dat avec laquelle les pièces ont été dépensées mais pas marquées comme telles ici. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + La transaction a été rejetée ! Ceci peut arriver si certaines pièces de votre portefeuille étaient déjà dépensées, par exemple si vous avez utilisé une copie de wallet.dat et que des pièces ont été dépensées dans la copie sans être marquées comme telles ici. + + + Warning: Invalid Myriadcoin address + Attention : adresse Myriadcoin invalide + + + (no label) + (pas d'étiquette) + + + Warning: Unknown change address + Attention : adresse de monnaie rendue inconnue + + + Are you sure you want to send? + Êtes-vous sûr de vouloir envoyer ? + + + added as transaction fee + ajouté en tant que frais de transaction + + + Payment request expired + La demande de paiement a expiré + + + Invalid payment address %1 + Adresse de paiement invalide %1 SendCoinsEntry - - Form - Formulaire - - - A&mount: &Montant : - Pay &To: - Payer &à : + &Payer à : - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) L'adresse à laquelle le paiement sera envoyé (par ex. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book - Entrez une étiquette pour cette adresse afin de l’ajouter à votre carnet d’adresses + Saisir une étiquette pour cette adresse afin de l’ajouter à votre carnet d’adresses - &Label: - &Étiquette : + É&tiquette : - - Choose address from address book - Choisir une adresse dans le carnet d'adresses + Choose previously used address + Choisir une adresse déjà utilisée + + + This is a normal payment. + Ceci est un paiement normal. - Alt+A Alt+A - Paste address from clipboard - Coller une adresse depuis le presse-papiers + Coller l'adresse depuis le presse-papier - Alt+P Alt+P - - Remove this recipient - Enlever ce destinataire + Remove this entry + Enlever cette entrée - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Entrez une adresse Myriadcoin (par ex. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + Message : + + + This is a verified payment request. + Ceci est une demande de paiement vérifiée. + + + Enter a label for this address to add it to the list of used addresses + Saisir une étiquette pour cette adresse afin de l'ajouter à la liste d'adresses utilisées + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + Un message qui était joint à l'URI Myriadcoin et qui sera stocké avec la transaction pour référence. Note : ce message ne sera pas envoyé par le réseau Myriadcoin. + + + This is an unverified payment request. + Ceci est une demande de paiement non vérifiée. + + + Pay To: + Payer à : + + + Memo: + Mémo : + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + Arrêt de Myriadcoin Core... + + + Do not shut down the computer until this window disappears. + Ne pas fermer l'ordinateur jusqu'à la disparition de cette fenêtre. SignVerifyMessageDialog - Signatures - Sign / Verify a Message Signatures - Signer / Vérifier un message - &Sign Message &Signer un message - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. - Vous pouvez signer des messages avec vos adresses pour prouver que les détenez. Faites attention à ne pas signer quoi que ce soit de vague car des attaques d'hameçonnage peuvent essayer d'usurper votre identité par votre signature. Ne signez que des déclarations entièrement détaillées et avec lesquelles vous serez d'accord. + Vous pouvez signer des messages avec vos adresses pour prouver que vous les détenez. Faites attention de ne pas signer de vague car des attaques d'hameçonnage peuvent essayer d'usurper votre identité par votre signature. Ne signez que des déclarations entièrement détaillées et avec lesquelles vous serez d'accord. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) L'adresse avec laquelle le message sera signé (par ex. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book - Choisir une adresse depuis le carnet d'adresses + Choose previously used address + Choisir une adresse précédemment utilisée - - Alt+A Alt+A - Paste address from clipboard - Coller une adresse depuis le presse-papiers + Coller une adresse depuis le presse-papier - Alt+P Alt+P - Enter the message you want to sign here - Entrez ici le message que vous désirez signer + Saisir ici le message que vous désirez signer - Signature Signature - Copy the current signature to the system clipboard - Copier la signature actuelle dans le presse-papiers + Copier la signature actuelle dans le presse-papier - Sign the message to prove you own this Myriadcoin address Signer le message pour prouver que vous détenez cette adresse Myriadcoin - Sign &Message Signer le &message - Reset all sign message fields - Remettre à zéro tous les champs de signature de message + Réinitialiser tous les champs de signature de message - - Clear &All &Tout nettoyer - &Verify Message &Vérifier un message - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. - Entrez ci-dessous l'adresse ayant servi à signer, le message (assurez-vous d'avoir copié exactement les retours à la ligne, les espacements, tabulations etc.) et la signature pour vérifier le message. Faites attention à ne pas déduire davantage de la signature que ce qui est contenu dans le message signé lui-même pour éviter d'être trompé par une attaque d'homme du milieu. + Saisir ci-dessous l'adresse de signature, le message (assurez-vous d'avoir copié exactement les retours à la ligne, les espaces, tabulations etc...) et la signature pour vérifier le message. Faire attention à ne pas déduire davantage de la signature que ce qui est contenu dans le message signé lui-même pour éviter d'être trompé par une attaque d'homme du milieu. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) L'adresse avec laquelle le message a été signé (par ex. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address Vérifier le message pour vous assurer qu'il a bien été signé par l'adresse Myriadcoin spécifiée - Verify &Message - Vérifier un &message + Vérifier le &message - Reset all verify message fields - Remettre à zéro tous les champs de vérification de message + Réinitialiser tous les champs de vérification de message - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Entrez une adresse Myriadcoin (par ex. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Saisir une adresse Myriadcoin (par ex. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature Cliquez sur « Signer le message » pour générer la signature - - Enter Myriadcoin signature - Entrer une signature Myriadcoin - - - - The entered address is invalid. - L'adresse entrée est invalide. + L'adresse saisie est invalide. - - - - Please check the address and try again. - Veuillez vérifier l'adresse et réessayez. + Veuillez vérifier l'adresse et réessayer. - - The entered address does not refer to a key. - L'adresse entrée ne fait pas référence à une clef. + L'adresse saisie ne fait pas référence à une clef. - Wallet unlock was cancelled. - Le déverrouillage du porte-monnaie a été annulé. + Le déverrouillage du portefeuille a été annulé. - Private key for the entered address is not available. La clef privée pour l'adresse indiquée n'est pas disponible. - Message signing failed. La signature du message a échoué. - Message signed. Le message a été signé. - The signature could not be decoded. La signature n'a pu être décodée. - - Please check the signature and try again. - Veuillez vérifier la signature et réessayez. + Veuillez vérifier la signature et réessayer. - The signature did not match the message digest. - La signature ne correspond pas au hachage du message. + La signature ne correspond pas à l'empreinte du message. - Message verification failed. Échec de la vérification du message. - Message verified. Message vérifié. @@ -1648,186 +2127,160 @@ Adresse : %4 SplashScreen - - The Myriadcoin developers - Les développeurs Myriadcoin + Myriadcoin Core + Myriadcoin Core + + + The Myriadcoin Core developers + Les développeurs Myriadcoin Core - [testnet] [testnet] + + TrafficGraphWidget + + KB/s + Ko/s + + TransactionDesc - Open until %1 Ouvert jusqu'à %1 - + conflicted + en conflit + + %1/offline %1/hors ligne - %1/unconfirmed %1/non confirmée - %1 confirmations %1 confirmations - Status État - , broadcast through %n node(s) , diffusée à travers %n nœud, diffusée à travers %n nœuds - Date Date - Source Source - Generated - Génération + Généré - - From De - - - To À - - own address votre propre adresse - label étiquette - - - - - Credit Crédit - matures in %n more block(s) - arrive à maturité dans %n blocarrive à maturité dans %n blocs de plus + arrive à maturité dans %n bloc de plusarrive à maturité dans %n blocs de plus - not accepted - non accepté + refusé - - - - Debit Débit - Transaction fee Frais de transaction - Net amount Montant net - Message Message - Comment Commentaire - Transaction ID ID de la transaction - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Les pièces générées doivent mûrir pendant 120 blocs avant de pouvoir être dépensées. Lorsque vous avez généré ce bloc, il a été diffusé sur le réseau pour être ajouté à la chaîne de blocs. S’il échoue a intégrer la chaîne, son état sera modifié en « non accepté » et il ne sera pas possible de le dépenser. Cela peut arriver occasionnellement si un autre nœud génère un bloc quelques secondes avant ou après vous. + Merchant + Marchand + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Les pièces générées doivent mûrir pendant %1 blocs avant de pouvoir être dépensées. Lorsque vous avez généré ce bloc, il a été diffusé sur le réseau pour être ajouté à la chaîne de blocs. S’il échoue a intégrer la chaîne, son état sera modifié en « non accepté » et il ne sera pas possible de le dépenser. Ceci peut arriver occasionnellement si un autre nœud génère un bloc à quelques secondes du votre. - Debug information Informations de débogage - Transaction Transaction - Inputs - Entrées + Entrants - Amount Montant - true vrai - false faux - , has not been successfully broadcast yet , n’a pas encore été diffusée avec succès - Open for %n more block(s) Ouvert pour %n bloc de plusOuvert pour %n blocs de plus - unknown inconnu @@ -1835,12 +2288,10 @@ Adresse : %4 TransactionDescDialog - Transaction details Détails de la transaction - This pane shows a detailed description of the transaction Ce panneau affiche une description détaillée de la transaction @@ -1848,294 +2299,259 @@ Adresse : %4 TransactionTableModel - Date Date - Type Type - Address Adresse - Amount Montant + + Immature (%1 confirmations, will be available after %2) + Immature (%1 confirmations, sera disponible après %2) + - Open for %n more block(s) Ouvert pour %n bloc de plusOuvert pour %n blocs de plus - Open until %1 Ouvert jusqu'à %1 - - Offline (%1 confirmations) - Hors ligne (%1 confirmations) - - - - Unconfirmed (%1 of %2 confirmations) - Non confirmée (%1 confirmations sur un total de %2) - - - Confirmed (%1 confirmations) Confirmée (%1 confirmations) - - - Mined balance will be available when it matures in %n more block(s) - Le solde généré (mined) sera disponible quand il aura mûri dans %n blocLe solde généré (mined) sera disponible quand il aura mûri dans %n blocs - - This block was not received by any other nodes and will probably not be accepted! Ce bloc n’a été reçu par aucun autre nœud et ne sera probablement pas accepté ! - Generated but not accepted Généré mais pas accepté - + Offline + Hors ligne + + + Unconfirmed + Non confirmé + + + Confirming (%1 of %2 recommended confirmations) + Confirmation (%1 sur %2 confirmations recommandées) + + + Conflicted + En conflit + + Received with Reçue avec - Received from Reçue de - Sent to Envoyée à - Payment to yourself Paiement à vous-même - Mined - Extraction + Extrait - (n/a) - (indisponible) + (n.d) - Transaction status. Hover over this field to show number of confirmations. État de la transaction. Laissez le pointeur de la souris sur ce champ pour voir le nombre de confirmations. - Date and time that the transaction was received. Date et heure de réception de la transaction. - Type of transaction. Type de transaction. - Destination address of transaction. L’adresse de destination de la transaction. - Amount removed from or added to balance. - Montant ajouté au, ou enlevé du, solde. + Montant ajouté ou enlevé au solde. TransactionView - - All Toutes - Today Aujourd’hui - This week Cette semaine - This month Ce mois-ci - Last month - Mois dernier + Le mois dernier - This year Cette année - Range... Intervalle… - Received with - Reçues avec + Reçue avec - Sent to - Envoyées à + Envoyée à - To yourself À vous-même - Mined - Extraction + Extrait - Other Autres - Enter address or label to search - Entrez une adresse ou une étiquette à rechercher + Saisir une adresse ou une étiquette à rechercher - Min amount - Montant min + Montant min. - Copy address Copier l’adresse - Copy label Copier l’étiquette - Copy amount Copier le montant - Copy transaction ID Copier l'ID de la transaction - Edit label - Éditer l’étiquette + Modifier l’étiquette - Show transaction details Afficher les détails de la transaction - - Export Transaction Data - Exporter les données des transactions + Export Transaction History + Exporter l'historique des transactions + + + Exporting Failed + L'exportation a échoué + + + There was an error trying to save the transaction history to %1. + Une erreur est survenue lors de l'enregistrement de l'historique des transactions vers %1. + + + Exporting Successful + Exportation réussie + + + The transaction history was successfully saved to %1. + L'historique des transactions a été sauvegardée avec succès vers %1. - Comma separated file (*.csv) Valeurs séparées par des virgules (*.csv) - Confirmed Confirmée - Date Date - Type Type - Label Étiquette - Address Adresse - Amount Montant - ID ID - - Error exporting - Erreur lors de l’exportation - - - - Could not write to file %1. - Impossible d'écrire dans le fichier %1. - - - Range: Intervalle : - to à + + WalletFrame + + No wallet has been loaded. + Aucun portefeuille de chargé. + + WalletModel - Send Coins Envoyer des pièces @@ -2143,160 +2559,121 @@ Adresse : %4 WalletView - &Export &Exporter - Export the data in the current tab to a file Exporter les données de l'onglet courant vers un fichier - Backup Wallet - Sauvegarder le porte-monnaie + Sauvegarder le portefeuille - Wallet Data (*.dat) - Données de porte-monnaie (*.dat) + Données de portefeuille (*.dat) - Backup Failed Échec de la sauvegarde - - There was an error trying to save the wallet data to the new location. - Une erreur est survenue lors de l'enregistrement des données de porte-monnaie à un nouvel endroit + There was an error trying to save the wallet data to %1. + Une erreur est survenue lors de l'enregistrement des données de portefeuille vers %1. + + + The wallet data was successfully saved to %1. + Les données de portefeuille ont été enregistrées avec succès vers %1 - Backup Successful Sauvegarde réussie - - - The wallet data was successfully saved to the new location. - Les données de porte-monnaie ont été enregistrées avec succès sur le nouvel emplacement. - bitcoin-core - - Myriadcoin version - Version de Myriadcoin - - - Usage: Utilisation : - - Send command to -server or myriadcoind - Envoyer une commande à -server ou à myriadcoind - - - List commands Lister les commandes - Get help for a command Obtenir de l’aide pour une commande - Options: Options : - Specify configuration file (default: myriadcoin.conf) Spécifier le fichier de configuration (par défaut : myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) Spécifier le fichier PID (par défaut : myriadcoind.pid) - Specify data directory Spécifier le répertoire de données - - Set database cache size in megabytes (default: 25) - Définir la taille du tampon en mégaoctets (par défaut : 25) - - - Listen for connections on <port> (default: 8333 or testnet: 18333) Écouter les connexions sur le <port> (par défaut : 8333 ou testnet : 18333) - Maintain at most <n> connections to peers (default: 125) Garder au plus <n> connexions avec les pairs (par défaut : 125) - Connect to a node to retrieve peer addresses, and disconnect Se connecter à un nœud pour obtenir des adresses de pairs puis se déconnecter - Specify your own public address Spécifier votre propre adresse publique - Threshold for disconnecting misbehaving peers (default: 100) Seuil de déconnexion des pairs de mauvaise qualité (par défaut : 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Délai en secondes de refus de reconnexion aux pairs de mauvaise qualité (par défaut : 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Une erreur est survenue lors de la mise en place du port RPC %u pour écouter sur IPv4 : %s + Une erreur est survenue lors du réglage du port RPC %u pour écouter sur IPv4 : %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) Écouter les connexions JSON-RPC sur le <port> (par défaut : 8332 ou tesnet : 18332) - Accept command line and JSON-RPC commands Accepter les commandes de JSON-RPC et de la ligne de commande - + Myriadcoin Core RPC client version + Version du client RPC de Myriadcoin Core + + Run in the background as a daemon and accept commands Fonctionner en arrière-plan en tant que démon et accepter les commandes - Use the test network Utiliser le réseau de test - Accept connections from outside (default: 1 if no -proxy or -connect) - Accepter les connexions entrantes (par défaut : 1 si -proxy ou -connect ne sont pas présents) + Accepter les connexions entrantes (par défaut : 1 si aucun -proxy ou -connect ) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2317,616 +2694,690 @@ rpcpassword=%s Le nom d'utilisateur et le mot de passe NE DOIVENT PAS être identiques. Si le fichier n'existe pas, créez-le avec les droits de lecture accordés au propriétaire. Il est aussi conseillé de régler alertnotify pour être prévenu des problèmes ; -par exemple : alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com +par exemple : alertnotify=echo %%s | mail -s "Alerte Bitcoin" admin@foo.com - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Une erreur est survenue lors de la mise en place du port RPC %u pour écouter sur IPv6, retour à IPv4 : %s + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + Chiffrements acceptables (par défaut : TLSv1.2+HIGH : TLSv1+HIGH : !SSLv2 : !aNULL : !eNULL : !3DES : @STRENGTH) + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + Une erreur est survenue lors du réglage du port RPC %u pour écouter sur IPv6, retour à IPv4 : %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 Se lier à l'adresse donnée et toujours l'écouter. Utilisez la notation [host]:port pour l'IPv6 - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. - Impossible d’obtenir un verrou sur le répertoire de données %s. Myriadcoin fonctionne probablement déjà. + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + Limiter continuellement les transactions gratuites à <n>*1000 octets par minute (par défaut : 15) + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + Entrer dans le mode de test de régression qui utilise une chaîne spéciale dans laquelle les blocs peuvent être résolus instantanément. Ceci est destiné aux outils de test de régression et au développement d'applications. + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + Passer en mode de test de régression qui utilise une chaîne spéciale dans laquelle les blocs sont résolus instantanément. + + + Error: Listening for incoming connections failed (listen returned error %d) + Erreur : l'écoute des connexions entrantes a échoué (l'écoute a retourné l'erreur %d) - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Erreur : la transaction a été rejetée ! Cela peut arriver si certaines pièces de votre porte-monnaie étaient déjà dépensées, par exemple si vous avez utilisé une copie de wallet.dat et les pièces ont été dépensées avec cette copie sans être marquées comme telles ici. + Erreur : La transaction a été rejetée ! Ceci peut arriver si certaines pièces de votre portefeuille étaient déjà dépensées, par exemple si vous avez utilisé une copie de wallet.dat et les pièces ont été dépensées avec cette copie sans être marquées comme tel ici. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! - Erreur : cette transaction nécessite des frais de transaction d'au moins %s en raison de son montant, de sa complexité ou parce que des fonds reçus récemment sont utilisés ! + Erreur : Cette transaction nécessite des frais de transaction d'au moins %s en raison de son montant, de sa complexité ou de l'utilisation de fonds reçus récemment ! - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - Exécuter une commande lorsqu'une alerte correspondante est reçue (%s dans la commande sera remplacé par le message) - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - Exécuter la commande lorsqu'une transaction de porte-monnaie change (%s dans la commande est remplacée par TxID) + Exécuter la commande lorsqu'une transaction de portefeuille change (%s dans la commande est remplacée par TxID) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - Définir la taille maximale en octets des transactions prioritaires/à frais modiques (par défaut : 27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + Les frais inférieurs à ce seuil sont considérés comme nuls (pour la création de transactions) (par défaut : + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + Purger l’activité de la base de données de la mémoire vers le journal sur disque tous les <n> mégaoctets (par défaut : 100) + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + À quel point la vérification des blocs -checkblocks est approfondie (0-4, par défaut : 3) + + + In this mode -genproclimit controls how many blocks are generated immediately. + Dans ce mode -genproclimit contrôle combien de blocs sont générés immédiatement. + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + Définir le nombre d'exétrons de vérification des scripts (%u à %d, 0 = auto, < 0 = laisser ce nombre de cœurs inutilisés, par défaut : %d) + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + Définir la limite processeur définissant quand la génération est en fonction (-1 = illimité, par défaut : -1) - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications - Ceci est une pré-version de test - utilisez à vos risques et périls - ne l'utilisez pas pour miner ou pour des applications marchandes + Ceci est une pré-version de test - l'utiliser à vos risques et périls - ne pas l'utiliser pour miner ou pour des applications marchandes + + + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + Impossible de se lier à %s sur cet ordinateur. Myriadcoin Core fonctionne probablement déjà. + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + Utiliser un serveur mandataire SOCKS5 séparé pour atteindre les pairs par les services cachés de Tor (par défaut : -proxy) - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - Attention : -paytxfee est réglée sur un montant très élevé ! Il s'agit des frais de transaction que vous payerez si vous émettez une transaction. + Attention : -paytxfee est réglée sur un montant très élevé ! Il s'agit des frais de transaction que vous payerez si vous envoyez une transaction. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - Avertissement : les transactions affichées pourraient être incorrectes ! Vous ou d'autres nœuds du réseau pourriez avoir besoin d'effectuer une mise à jour. - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. - Attention : veuillez vérifier que l'heure et la date de votre ordinateur sont correctes ! Si votre horloge n'est pas à l'heure, Myriadcoin ne fonctionnera pas correctement. + Attention : Veuillez vérifier que la date et l'heure de votre ordinateur sont justes ! Si votre horloge n'est pas à l'heure, Myriadcoin ne fonctionnera pas correctement. + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + Attention : Le réseau ne semble pas totalement d'accord ! Quelques mineurs semblent éprouver des difficultés. + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + Attention : Nous ne semblons pas être en accord complet avec nos pairs ! Vous pourriez avoir besoin d'effectuer une mise à niveau, ou d'autres nœuds du réseau pourraient avoir besoin d'effectuer une mise à niveau. - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Avertissement : une erreur est survenue lors de la lecture de wallet.dat ! Toutes les clefs ont été lues correctement mais les données de transaction ou les entrées du carnet d'adresses pourraient être incorrectes ou manquantes. + Avertissement : une erreur est survenue lors de la lecture de wallet.dat ! Toutes les clefs ont été lues correctement mais les données de transaction ou les entrées du carnet d'adresses sont peut-être incorrectes ou manquantes. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - Avertissement : wallet.dat corrompu, données récupérées ! Le fichier wallet.dat original a été enregistré en tant que wallet.{horodatage}.bak dans %s ; si votre solde ou transactions sont incorrects vous devriez effectuer une restauration depuis une sauvegarde. + Avertissement : wallet.dat corrompu, données récupérées ! Le fichier wallet.dat original a été enregistré en tant que wallet.{timestamp}.bak dans %s ; si votre solde ou transactions sont incorrects vous devriez effectuer une restauration depuis une sauvegarde. + + + (default: 1) + (par défaut : 1) + + + (default: wallet.dat) + (par défaut : wallet.dat) + + + <category> can be: + <category> peut être : - Attempt to recover private keys from a corrupt wallet.dat Tenter de récupérer les clefs privées d'un wallet.dat corrompu - - Block creation options: - Options de création des blocs : + Myriadcoin Core Daemon + Démon Myriadcoin Core + + + Block creation options: + Options de création de bloc : + + + Clear list of wallet transactions (diagnostic tool; implies -rescan) + Effacer la liste des transactions du portefeuille (outil de diagnostic, implique un nouveau balayage -rescan) - Connect only to the specified node(s) Ne se connecter qu'au(x) nœud(s) spécifié(s) - + Connect through SOCKS proxy + Connexion à travers un serveur mandataire SOCKS + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + Se connecter à JSON-RPC sur le <port> (par défaut : 8332 ou testnet : 18332) + + + Connection options: + Options de connexion : + + Corrupted block database detected - Base de données des blocs corrompue détectée + Base corrompue de données des blocs détectée + + + Debugging/Testing options: + Options de test/de débogage : + + + Disable safemode, override a real safe mode event (default: 0) + Désactiver le mode sans échec, passer outre un événement sans échec réel (par défaut : 0) - Discover own IP address (default: 1 when listening and no -externalip) - Découvrir sa propre adresse IP (par défaut : 1 lors de l'écoute et si -externalip n'est pas présent) + Découvrir sa propre adresse IP (par défaut : 1 lors de l'écoute et si aucun -externalip) + + + Do not load the wallet and disable wallet RPC calls + Ne pas charger le portefeuille et désactiver les appels RPC - Do you want to rebuild the block database now? Voulez-vous reconstruire la base de données des blocs maintenant ? - Error initializing block database Erreur lors de l'initialisation de la base de données des blocs - Error initializing wallet database environment %s! - Erreur lors de l'initialisation de l'environnement de la base de données du porte-monnaie %s ! + Erreur lors de l'initialisation de l'environnement de la base de données du portefeuille %s ! - Error loading block database Erreur du chargement de la base de données des blocs - Error opening block database - Erreur lors de l'ouverture de la base de données + Erreur lors de l'ouverture de la base de données des blocs - Error: Disk space is low! Erreur : l'espace disque est faible ! - Error: Wallet locked, unable to create transaction! - Erreur : Porte-monnaie verrouillé, impossible de créer la transaction ! + Erreur : Portefeuille verrouillé, impossible de créer la transaction ! - Error: system error: Erreur : erreur système : - Failed to listen on any port. Use -listen=0 if you want this. - Échec de l'écoute sur un port quelconque. Utilisez -listen=0 si vous voulez cela. + Échec de l'écoute sur un port quelconque. Utilisez -listen=0 si vous voulez ceci. - Failed to read block info La lecture des informations de bloc a échoué - Failed to read block La lecture du bloc a échoué - Failed to sync block index La synchronisation de l'index des blocs a échoué - Failed to write block index L''écriture de l'index des blocs a échoué - Failed to write block info L'écriture des informations du bloc a échoué - Failed to write block L'écriture du bloc a échoué - Failed to write file info L'écriture des informations de fichier a échoué - Failed to write to coin database L'écriture dans la base de données des pièces a échoué - Failed to write transaction index L'écriture de l'index des transactions a échoué - Failed to write undo data L'écriture des données d'annulation a échoué - + Fee per kB to add to transactions you send + Frais par ko à ajouter aux transactions que vous envoyez + + + Fees smaller than this are considered zero fee (for relaying) (default: + Les frais inférieurs à ce seuil sont considérés comme nuls (pour le relayage) (par défaut : + + Find peers using DNS lookup (default: 1 unless -connect) Trouver des pairs en utilisant la recherche DNS (par défaut : 1 sauf si -connect est utilisé) - - Generate coins (default: 0) - Générer des pièces (défaut: 0) + Force safe mode (default: 0) + Forcer le mode sans échec (par défaut : 0) + + + Generate coins (default: 0) + Générer des pièces (défaut : 0) - How many blocks to check at startup (default: 288, 0 = all) Nombre de blocs à vérifier au démarrage (par défaut : 288, 0 = tout) - - How thorough the block verification is (0-4, default: 3) - Niveau d'approfondissement de la vérification des blocs (0-4, par défaut : 3) + If <category> is not supplied, output all debugging information. + Si <category> n'est pas indiqué, extraire toutes les données de débogage. + + + Importing... + Importation... + + + Incorrect or no genesis block found. Wrong datadir for network? + Bloc de genèse incorrect ou introuvable. Mauvais répertoire de données pour le réseau ? + + + Invalid -onion address: '%s' + Adresse -onion invalide : « %s » - Not enough file descriptors available. - Pas assez de descripteurs de fichiers disponibles. + Pas assez de descripteurs de fichiers de disponibles. + + + Prepend debug output with timestamp (default: 1) + Ajouter l'horodatage au début des résultats de débogage (par défaut : 1) + + + RPC client options: + Options du client RPC : - Rebuild block chain index from current blk000??.dat files - Reconstruire l'index de la chaîne des blocs à partir des fichiers blk000??.dat actuels + Reconstruire l'index de la chaîne de blocs à partir des fichiers blk000??.dat courants + + + Select SOCKS version for -proxy (4 or 5, default: 5) + Choisir la version SOCKS pour -proxy (4 ou 5, par défaut : 5) + + + Set database cache size in megabytes (%d to %d, default: %d) + Définir la taille du cache de la base de données en mégaoctets (%d to %d, default: %d) + + + Set maximum block size in bytes (default: %d) + Définir la taille minimale de bloc en octets (par défaut : %d) - Set the number of threads to service RPC calls (default: 4) Définir le nombre d'exétrons pour desservir les appels RPC (par défaut : 4) - + Specify wallet file (within data directory) + Spécifiez le fichier de portefeuille (dans le répertoire de données) + + + Spend unconfirmed change when sending transactions (default: 1) + Dépenser la monnaie non confirmée lors de l'envoi de transactions (par défaut : 1) + + + This is intended for regression testing tools and app development. + Ceci est à l'intention des outils de test de régression et du développement applicatif. + + + Usage (deprecated, use myriadcoin-cli): + Utilisation (obsolète, utiliser myriadcoin-cli) : + + Verifying blocks... - Vérification des blocs... + Vérification des blocs en cours... - Verifying wallet... - Vérification du porte-monnaie... + Vérification du portefeuille en cours... + + + Wait for RPC server to start + Attendre le démarrage du serveur RPC + + + Wallet %s resides outside data directory %s + Le portefeuille %s réside en dehors du répertoire de données %s + + + Wallet options: + Options du portefeuille : + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + Attention : l'argument obsolète -debugnet a été ignoré, utiliser -debug=net + + + You need to rebuild the database using -reindex to change -txindex + Vous devez reconstruire la base de données en utilisant -reindex afin de modifier -txindex - Imports blocks from external blk000??.dat file Importe des blocs depuis un fichier blk000??.dat externe - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) - Définir le nombre de fils d’exécution pour la vérification des scripts (maximum 16, 0 = auto, < 0 = laisser ce nombre de cœurs libres, par défaut : 0) + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + Impossible d’obtenir un verrou sur le répertoire de données %s. Myriadcoin Core fonctionne probablement déjà. + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + Exécuter une commande lorsqu'une alerte pertinente est reçue ou si nous voyons une bifurcation vraiment étendue (%s dans la commande est remplacé par le message) + + + Output debugging information (default: 0, supplying <category> is optional) + Informations du résultat de débogage (par défaut : 0, fournir <category> est optionnel) + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + Définir la taille maximale en octets des transactions prioritaires/à frais modiques (par défaut : %d) - Information Informations - - Invalid -tor address: '%s' - Adresse -tor invalide : « %s » - - - Invalid amount for -minrelaytxfee=<amount>: '%s' Montant invalide pour -minrelayfee=<montant> : « %s » - Invalid amount for -mintxfee=<amount>: '%s' Montant invalide pour -mintxfee=<montant> : « %s » - + Limit size of signature cache to <n> entries (default: 50000) + Limiter la taille du cache des signatures à <n> entrées (par défaut : 50000) + + + Log transaction priority and fee per kB when mining blocks (default: 0) + Journaliser la priorité des transactions et les frais par ko lors du minage (par défaut : 0) + + Maintain a full transaction index (default: 0) Maintenir un index complet des transactions (par défaut : 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Tampon maximal de réception par -connection, <n>*1000 octets (par défaut : 5000) + Tampon maximal de réception par « -connection » <n>*1 000 octets (par défaut : 5 000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Tampon maximal d'envoi par connexion, <n>*1000 octets (par défaut : 1000) + Tampon maximal d'envoi par « -connection », <n>*1 000 octets (par défaut : 1 000) - Only accept block chain matching built-in checkpoints (default: 1) N'accepter que la chaîne de blocs correspondant aux points de vérification internes (par défaut : 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Se connecter uniquement aux nœuds du réseau <net> (IPv4, IPv6 ou Tor) - - Output extra debugging information. Implies all other -debug* options - Afficher des information de débogage supplémentaires. Cela signifie toutes les autres options -debug* + Print block on startup, if found in block index + Imprimer le bloc au démarrage s'il est trouvé dans l'index des blocs - - Output extra network debugging information - Afficher des informations de débogage réseau supplémentaires + Print block tree on startup (default: 0) + Imprimer l'arborescence des blocs au démarrage (par défaut : 0) - - Prepend debug output with timestamp - Faire précéder les données de débogage par un horodatage + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + Options RPC SSL : (voir le wiki Myriadcoin pour les instructions de configuration de SSL) + + + RPC server options: + Options du serveur RPC : + + + Randomly drop 1 of every <n> network messages + Abandonner aléatoirement 1 message du réseau sur <n> + + + Randomly fuzz 1 of every <n> network messages + Tester aléatoirement 1 message du réseau sur <n> + + + Run a thread to flush wallet periodically (default: 1) + Exécuter un exétron pour purger le portefeuille périodiquement (par défaut : 1) - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) - Options SSL : (cf. le wiki de Myriadcoin pour les instructions de configuration du SSL) + Options SSL : (voir le Wiki de Myriadcoin pour les instructions de configuration du SSL) - - Select the version of socks proxy to use (4-5, default: 5) - Sélectionner la version du proxy socks à utiliser (4-5, 5 étant la valeur par défaut) + Send command to Myriadcoin Core + Envoyer une commande à Myriadcoin Core - Send trace/debug info to console instead of debug.log file Envoyer les informations de débogage/trace à la console au lieu du fichier debug.log - - Send trace/debug info to debugger - Envoyer les informations de débogage/trace au débogueur - - - - Set maximum block size in bytes (default: 250000) - Définir la taille maximale des blocs en octets (par défaut : 250000) - - - Set minimum block size in bytes (default: 0) - Définir la taille minimale des blocs en octets (par défaut : 0) + Définir la taille minimale de bloc en octets (par défaut : 0) + + + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + Définit le drapeau DB_PRIVATE dans l'environnement de la base de données du portefeuille (par défaut : 1) + + + Show all debugging options (usage: --help -help-debug) + Montrer toutes les options de débogage (utilisation : --help --help-debug) + + + Show benchmark information (default: 0) + Afficher les infos du test de performance (par défaut : 0) - Shrink debug.log file on client startup (default: 1 when no -debug) Réduire le fichier debug.log lors du démarrage du client (par défaut : 1 lorsque -debug n'est pas présent) - Signing transaction failed La signature de la transaction a échoué - Specify connection timeout in milliseconds (default: 5000) - Spécifier le délai d'expiration de la connexion en millisecondes (par défaut : 5000) + Spécifier le délai d'expiration de la connexion en millisecondes (par défaut : 5 000) + + + Start Myriadcoin Core Daemon + Démarrer le démon Myriadcoin Core - System error: Erreur système : - Transaction amount too small Montant de la transaction trop bas - Transaction amounts must be positive - Les montants de la transaction doivent être positifs + Les montants de transaction doivent être positifs - Transaction too large Transaction trop volumineuse - Use UPnP to map the listening port (default: 0) Utiliser l'UPnP pour rediriger le port d'écoute (par défaut : 0) - Use UPnP to map the listening port (default: 1 when listening) Utiliser l'UPnP pour rediriger le port d'écoute (par défaut : 1 lors de l'écoute) - - Use proxy to reach tor hidden services (default: same as -proxy) - Utiliser un proxy pour atteindre les services cachés de Tor (par défaut : même valeur que -proxy) - - - Username for JSON-RPC connections Nom d'utilisateur pour les connexions JSON-RPC - Warning Avertissement - Warning: This version is obsolete, upgrade required! - Avertissement : cette version est obsolète, une mise à jour est nécessaire ! + Avertissement : cette version est obsolète, une mise à niveau est nécessaire ! - - You need to rebuild the databases using -reindex to change -txindex - Vous devez reconstruire les bases de données avec -reindex pour modifier -txindex + Zapping all transactions from wallet... + Supprimer toutes les transactions du portefeuille... + + + on startup + au démarrage + + + version + version - wallet.dat corrupt, salvage failed wallet.dat corrompu, la récupération a échoué - Password for JSON-RPC connections Mot de passe pour les connexions JSON-RPC - Allow JSON-RPC connections from specified IP address Autoriser les connexions JSON-RPC depuis l'adresse IP spécifiée - Send commands to node running on <ip> (default: 127.0.0.1) - Envoyer des commandes au nœud fonctionnant à <ip> (par défaut : 127.0.0.1) + Envoyer des commandes au nœud fonctionnant sur <ip> (par défaut : 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) - Exécuter la commande lorsque le meilleur bloc change (%s est remplacé par le hachage du bloc dans cmd) + Exécuter la commande lorsque le meilleur bloc change (%s dans cmd est remplacé par le hachage du bloc) - Upgrade wallet to latest format - Mettre à jour le format du porte-monnaie + Mettre à niveau le portefeuille vers le format le plus récent - Set key pool size to <n> (default: 100) - Régler la taille de la plage de clefs sur <n> (par défaut : 100) + Régler la taille de la réserve de clefs sur <n> (par défaut : 100) - Rescan the block chain for missing wallet transactions - Réanalyser la chaîne de blocs pour les transactions de porte-monnaie manquantes + Réanalyser la chaîne de blocs pour les transactions de portefeuille manquantes - Use OpenSSL (https) for JSON-RPC connections Utiliser OpenSSL (https) pour les connexions JSON-RPC - Server certificate file (default: server.cert) Fichier de certificat serveur (par défaut : server.cert) - Server private key (default: server.pem) Clef privée du serveur (par défaut : server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Clefs de chiffrement acceptables (par défaut : TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - This help message Ce message d'aide - Unable to bind to %s on this computer (bind returned error %d, %s) Impossible de se lier à %s sur cet ordinateur (bind a retourné l'erreur %d, %s) - - Connect through socks proxy - Connexion via un proxy socks - - - Allow DNS lookups for -addnode, -seednode and -connect Autoriser les recherches DNS pour -addnode, -seednode et -connect - Loading addresses... Chargement des adresses… - Error loading wallet.dat: Wallet corrupted - Erreur lors du chargement de wallet.dat : porte-monnaie corrompu + Erreur lors du chargement de wallet.dat : portefeuille corrompu - Error loading wallet.dat: Wallet requires newer version of Myriadcoin - Erreur lors du chargement de wallet.dat : le porte-monnaie nécessite une version plus récente de Myriadcoin + Erreur lors du chargement de wallet.dat : le portefeuille exige une version plus récente de Myriadcoin - Wallet needed to be rewritten: restart Myriadcoin to complete - Le porte-monnaie nécessitait une réécriture : veuillez redémarrer Myriadcoin pour terminer l'opération + Le portefeuille devait être réécrit : redémarrer Myriadcoin pour terminer l'opération. - Error loading wallet.dat Erreur lors du chargement de wallet.dat - Invalid -proxy address: '%s' Adresse -proxy invalide : « %s » - Unknown network specified in -onlynet: '%s' Réseau inconnu spécifié sur -onlynet : « %s » - Unknown -socks proxy version requested: %i - Version inconnue de proxy -socks demandée : %i + Version inconnue de serveur mandataire -socks demandée : %i - Cannot resolve -bind address: '%s' Impossible de résoudre l'adresse -bind : « %s » - Cannot resolve -externalip address: '%s' Impossible de résoudre l'adresse -externalip : « %s » - Invalid amount for -paytxfee=<amount>: '%s' Montant invalide pour -paytxfee=<montant> : « %s » - Invalid amount Montant invalide - Insufficient funds Fonds insuffisants - Loading block index... Chargement de l’index des blocs… - Add a node to connect to and attempt to keep the connection open Ajouter un nœud auquel se connecter et tenter de garder la connexion ouverte - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - Impossible de se lier à %s sur cet ordinateur. Myriadcoin fonctionne probablement déjà. - - - - Fee per KB to add to transactions you send - Frais par Ko à ajouter aux transactions que vous enverrez - - - Loading wallet... - Chargement du porte-monnaie… + Chargement du portefeuille… - Cannot downgrade wallet - Impossible de revenir à une version antérieure du porte-monnaie + Impossible de revenir à une version inférieure du portefeuille - Cannot write default address Impossible d'écrire l'adresse par défaut - Rescanning... Nouvelle analyse… - Done loading Chargement terminé - To use the %s option Pour utiliser l'option %s - Error Erreur - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_fr_CA.ts b/src/qt/locale/bitcoin_fr_CA.ts index 2be07c79..f93d9b6a 100644 --- a/src/qt/locale/bitcoin_fr_CA.ts +++ b/src/qt/locale/bitcoin_fr_CA.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - A propos de Myriadcoin + About Myriadcoin Core + - - <b>Myriadcoin</b> version - <b>Myriadcoin</b> version + <b>Myriadcoin Core</b> version + - This is experimental software. @@ -28,294 +24,235 @@ Distribué sous licence MIT/X11, voir le fichier COPYING ou http://www.opensourc Ce produit comprend des logiciels développés par le projet OpenSSL pour être utilisés dans la boîte à outils OpenSSL (http://www.openssl.org/), un logiciel cryptographique écrit par Eric Young (eay@cryptsoft.com) et un logiciel UPnP écrit par Thomas Bernard. - Copyright - - The Myriadcoin developers + The Myriadcoin Core developers + + + + (%1-bit) AddressBookPage - - Address Book - Carnet d'adresses - - - Double-click to edit address or label Double-cliquez afin de modifier l'adress ou l'étiquette - Create a new address Créer une nouvelle adresse - + &New + + + Copy the currently selected address to the system clipboard Copier l'adresse surligné a votre presse-papier - - &New Address + &Copy - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Ceux-ci sont vos adresses Myriadcoin qui vous permettent de recevoir des paiements. Vous pouvez en donner une différente à chaque expédieur afin de savoir qui vous payent. + C&lose + - &Copy Address - - Show &QR Code - - - - - Sign a message to prove you own a Myriadcoin address - - - - - Sign &Message - - - - Delete the currently selected address from the list - Export the data in the current tab to a file - &Export - - Verify a message to ensure it was signed with a specified Myriadcoin address - - - - - &Verify Message - - - - &Delete &Supprimer - + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + Copy &Label - &Edit - - Send &Coins + Export Address List - - Export Address Book Data - Exporter les données du carnet d'adresses - - - Comma separated file (*.csv) + Fichier séparé par une virgule (*.csv) + + + Exporting Failed - - Error exporting - - - - - Could not write to file %1. + There was an error trying to save the address list to %1. AddressTableModel - Label - + Record - Address - + Addresse - (no label) - + (pas de record) AskPassphraseDialog - Passphrase Dialog - Enter passphrase - + Entrer Mot de Passe - New passphrase - + Nouveau Mot de passe - Repeat new passphrase - + Répéter Mot de Passe - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - + Entrer le nouveau mot de passe pour le porte-feuille. Veuillez utiliser un mot de passe de 10 caractères au hasard ou plus, ou, 8 mots ou plus. - Encrypt wallet - + Encrypter Porte-Feuille - This operation needs your wallet passphrase to unlock the wallet. - + Cette opération nécessite le mot de passe de votre porte-feuille pour débarrer le porte-feuille. - Unlock wallet - + Débarrer Porte-Feuille - This operation needs your wallet passphrase to decrypt the wallet. - + Cette opération nécessite le mot de passe de votre porte-feuille pour le décrypter. - Decrypt wallet - Change passphrase - Enter the old and new passphrase to the wallet. - Confirm wallet encryption - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! - Are you sure you wish to encrypt your wallet? - 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. - - Warning: The Caps Lock key is on! - - Wallet encrypted - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. - - - - Wallet encryption failed - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - - The supplied passphrases do not match. - Wallet unlock failed - - - The passphrase entered for the wallet decryption was incorrect. - Wallet decryption failed - Wallet passphrase was successfully changed. @@ -323,319 +260,286 @@ Ce produit comprend des logiciels développés par le projet OpenSSL pour être BitcoinGUI - Sign &message... - Synchronizing with network... - &Overview - + Node + + + Show general overview of wallet - &Transactions - Browse transaction history - - Edit the list of stored addresses and labels - - - - - Show the list of addresses for receiving payments - - - - E&xit - Quit application - Show information about Myriadcoin - About &Qt - Show information about Qt - &Options... - &Encrypt Wallet... - &Backup Wallet... - &Change Passphrase... - + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + Importing blocks from disk... - Reindexing blocks on disk... - Send coins to a Myriadcoin address - Modify configuration options for Myriadcoin - Backup wallet to another location - Change the passphrase used for wallet encryption - &Debug window - Open debugging and diagnostic console - &Verify message... - - Myriadcoin - Wallet - &Send - &Receive - - &Addresses - - - - - &About Myriadcoin - &A propos de Myriadcoin - - - &Show / Hide - Show or hide the main Window - Encrypt the private keys that belong to your wallet - Sign messages with your Myriadcoin addresses to prove you own them - Verify messages to ensure they were signed with specified Myriadcoin addresses - &File - &Settings - &Help - Tabs toolbar - - [testnet] - + Myriadcoin Core + + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + Myriadcoin client - %n active connection(s) to Myriadcoin network - No block source available... - Processed %1 of %2 (estimated) blocks of transaction history. - Processed %1 blocks of transaction history. - %n hour(s) - %n day(s) - %n week(s) - + %1 and %2 + + + + %n year(s) + + + %1 behind - Last received block was generated %1 ago. - Transactions after this will not yet be visible. - Error - Warning - Information - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - Up to date - Catching up... - - Confirm transaction fee - - - - Sent transaction - Incoming transaction - Date: %1 Amount: %2 Type: %3 @@ -644,29 +548,14 @@ Address: %4 - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. @@ -674,329 +563,647 @@ Address: %4 ClientModel - Network Alert + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + + + + Address + Addresse + + + Date + + + + Confirmations + + + + Confirmed + + + + Priority + + + + Copy address + + + + Copy label + + + + Copy amount + + + + Copy transaction ID + + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + + + + Dust + + + + yes + + + + no + + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + (pas de record) + + + change from %1 (%2) + + + + (change) + + + EditAddressDialog - Edit Address - &Label - - The label associated with this address book entry + The label associated with this address list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. - &Address - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - New receiving address - New sending address - Edit receiving address - Edit sending address - The entered address "%1" is already in the address book. - The entered address "%1" is not a valid Myriadcoin address. - Could not unlock wallet. - New key generation failed. - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt + A new data directory will be created. + + + + name + + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core - version - Usage: - command-line options - UI options - Set language, for example "de_DE" (default: system locale) - Start minimized - + Set SSL root certificates for payment request (default: -system-) + + + Show splash screen on startup (default: 1) + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + + + + Error: Specified data directory "%1" can not be created. + + + + Error + + + + GB of free space available + + + + (of %1GB needed) + + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open + + OptionsDialog - Options - &Main - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. - Pay transaction &fee - Automatically start Myriadcoin after logging in to the system. - &Start Myriadcoin on system login - + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + Reset all client options to default. - &Reset Options - &Network - + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. - Map port using &UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - - - - - &Connect through SOCKS proxy: - - - - Proxy &IP: - - IP address of the proxy (e.g. 127.0.0.1) - - - - &Port: - Port of the proxy (e.g. 9050) - SOCKS &Version: - SOCKS version of the proxy (e.g. 5) - &Window - Show only a tray icon after minimizing the window. - &Minimize to the tray instead of the taskbar - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. - M&inimize on close - &Display - User Interface &language: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. - &Unit to show amounts in: - Choose the default subdivision unit to show in the interface and when sending coins. - Whether to show Myriadcoin addresses in the transaction list or not. - &Display addresses in transaction list - + Whether to show coin control features or not. + + + &OK - &Cancel - - &Apply - - - - default - + none + + + Confirm options reset - - Some settings may require a client restart to take effect. + Client restart required to activate changes. - - Do you want to proceed? + Client will be shutdown, do you want to proceed? - - - Warning + This change would require a client restart. - - - This setting will take effect after restarting Myriadcoin. - - - - The supplied proxy address is invalid. @@ -1004,59 +1211,54 @@ Address: %4 OverviewPage - Form - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. - - Balance: - - - - - Unconfirmed: - - - - Wallet - + Available: + + + + Your current spendable balance + + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + + + Immature: - Mined balance that has not yet matured - + Total: + + + + Your current total balance + + + <b>Recent transactions</b> - - Your current balance - - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - - - - - out of sync @@ -1064,579 +1266,856 @@ Address: %4 PaymentServer - + URI handling + + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + Cannot start myriadcoin: click-to-pay handler + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + + + + Network request error + + - QRCodeDialog + QObject - - QR Code Dialog + Myriadcoin - - Request Payment + Error: Specified data directory "%1" does not exist. - - Amount: + Error: Cannot parse configuration file: %1. Only use key=value syntax. - - Label: + Error: Invalid combination of -regtest and -testnet. - - Message: + Myriadcoin Core didn't yet exit safely... - - &Save As... + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + + QRImageWidget + + &Save Image... - - Error encoding URI into QR Code. + &Copy Image - - The entered amount is invalid, please check. - - - - - Resulting URI too long, try to reduce the text for label / message. - - - - Save QR Code - - PNG Images (*.png) + PNG Image (*.png) RPCConsole - Client name - - - - - - - - - - N/A - Client version - &Information - + Debug window + + + + General + + + Using OpenSSL version - Startup time - Network - + Name + + + Number of connections - - On testnet - - - - Block chain - Current number of blocks - Estimated total blocks - Last block time - &Open - - Command-line options - - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - - - - - &Show - - - - &Console - + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + Build date - - Myriadcoin - Debug window - - - - - Myriadcoin Core - - - - Debug log file - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. - Clear console - Welcome to the Myriadcoin RPC console. - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Type <b>help</b> for an overview of available commands. + + %1 B + + + + %1 KB + + + + %1 MB + + + + %1 GB + + + + %1 m + + + + %1 h + + + + %1 h %2 m + + + + + ReceiveCoinsDialog + + &Amount: + + + + &Label: + + + + &Message: + + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + + + + Clear + + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + + + + Remove the selected entries from the list + + + + Remove + + + + Copy label + + + + Copy message + + + + Copy amount + + + + + ReceiveRequestDialog + + QR Code + + + + Copy &URI + + + + Copy &Address + + + + &Save Image... + + + + Request payment to %1 + + + + Payment information + + + + URI + + + + Address + Addresse + + + Amount + + + + Label + Record + + + Message + + + + Resulting URI too long, try to reduce the text for label / message. + + + + Error encoding URI into QR Code. + + + + + RecentRequestsTableModel + + Date + + + + Label + Record + + + Message + + + + Amount + + + + (no label) + (pas de record) + + + (no message) + + + + (no amount) + + SendCoinsDialog - - - - - - - - Send Coins - + Coin Control Features + + + + Inputs... + + + + automatically selected + + + + Insufficient funds! + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + Send to multiple recipients at once - Add &Recipient - - Remove all transaction fields + Clear all fields of the form. - Clear &All - Balance: - - 123.456 BTC - - - - Confirm the send action - S&end - - <b>%1</b> to %2 (%3) - - - - Confirm send coins - - Are you sure you want to send %1? + %1 to %2 - - and + Copy quantity + + + + Copy amount + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + + + + or - The recipient address is not valid, please recheck. - The amount to pay must be larger than 0. - The amount exceeds your balance. - The total exceeds your balance when the %1 transaction fee is included. - Duplicate address found, can only send to each address once per send operation. - - Error: Transaction creation failed! + Transaction creation failed! - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + + + + (no label) + (pas de record) + + + Warning: Unknown change address + + + + Are you sure you want to send? + + + + added as transaction fee + + + + Payment request expired + + + + Invalid payment address %1 SendCoinsEntry - - Form - - - - A&mount: - Pay &To: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book - &Label: - - Choose address from address book + Choose previously used address + + + + This is a normal payment. - Alt+A - Paste address from clipboard - Alt+P - - Remove this recipient + Remove this entry - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + + + + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. SignVerifyMessageDialog - Signatures - Sign / Verify a Message - &Sign Message - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book + Choose previously used address - - Alt+A - Paste address from clipboard - Alt+P - Enter the message you want to sign here - Signature - Copy the current signature to the system clipboard - Sign the message to prove you own this Myriadcoin address - Sign &Message - Reset all sign message fields - - Clear &All - &Verify Message - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address - Verify &Message - Reset all verify message fields - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature - - Enter Myriadcoin signature - - - - - The entered address is invalid. - - - - Please check the address and try again. - - The entered address does not refer to a key. - Wallet unlock was cancelled. - Private key for the entered address is not available. - Message signing failed. - Message signed. - The signature could not be decoded. - - Please check the signature and try again. - The signature did not match the message digest. - Message verification failed. - Message verified. @@ -1644,186 +2123,160 @@ Address: %4 SplashScreen - - The Myriadcoin developers + Myriadcoin Core + + + + The Myriadcoin Core developers - [testnet] + + TrafficGraphWidget + + KB/s + + + TransactionDesc - Open until %1 - + conflicted + + + %1/offline - %1/unconfirmed - %1 confirmations - Status - , broadcast through %n node(s) - Date - Source - Generated - - From - - - To - - own address - label - - - - - Credit - matures in %n more block(s) - not accepted - - - - Debit - Transaction fee - Net amount - Message - Comment - Transaction ID - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Merchant + + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Debug information - Transaction - Inputs - Amount - true - false - , has not been successfully broadcast yet - Open for %n more block(s) - unknown @@ -1831,12 +2284,10 @@ Address: %4 TransactionDescDialog - Transaction details - This pane shows a detailed description of the transaction @@ -1844,117 +2295,102 @@ Address: %4 TransactionTableModel - Date - Type - Address - + Addresse - Amount + + Immature (%1 confirmations, will be available after %2) + + - Open for %n more block(s) - Open until %1 - - Offline (%1 confirmations) - - - - - Unconfirmed (%1 of %2 confirmations) - - - - Confirmed (%1 confirmations) - - - Mined balance will be available when it matures in %n more block(s) - - - This block was not received by any other nodes and will probably not be accepted! - Generated but not accepted - + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + Received with - Received from - Sent to - Payment to yourself - Mined - (n/a) - Transaction status. Hover over this field to show number of confirmations. - Date and time that the transaction was received. - Type of transaction. - Destination address of transaction. - Amount removed from or added to balance. @@ -1962,176 +2398,156 @@ Address: %4 TransactionView - - All - Today - This week - This month - Last month - This year - Range... - Received with - Sent to - To yourself - Mined - Other - Enter address or label to search - Min amount - Copy address - Copy label - Copy amount - Copy transaction ID - Edit label - Show transaction details - - Export Transaction Data + Export Transaction History + + + + Exporting Failed + + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + + + + The transaction history was successfully saved to %1. - Comma separated file (*.csv) - + Fichier séparé par une virgule (*.csv) - Confirmed - Date - Type - Label - + Record - Address - + Addresse - Amount - ID - - Error exporting - - - - - Could not write to file %1. - - - - Range: - to + + WalletFrame + + No wallet has been loaded. + + + WalletModel - Send Coins @@ -2139,160 +2555,121 @@ Address: %4 WalletView - &Export - Export the data in the current tab to a file - Backup Wallet - Wallet Data (*.dat) - Backup Failed - - There was an error trying to save the wallet data to the new location. + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. - Backup Successful - - - The wallet data was successfully saved to the new location. - - bitcoin-core - - Myriadcoin version - - - - Usage: - - Send command to -server or myriadcoind - - - - List commands - Get help for a command - Options: - Specify configuration file (default: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) - Specify data directory - - Set database cache size in megabytes (default: 25) - - - - Listen for connections on <port> (default: 8333 or testnet: 18333) - Maintain at most <n> connections to peers (default: 125) - Connect to a node to retrieve peer addresses, and disconnect - Specify your own public address - Threshold for disconnecting misbehaving peers (default: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) - Accept command line and JSON-RPC commands - + Myriadcoin Core RPC client version + + + Run in the background as a daemon and accept commands - Use the test network - Accept connections from outside (default: 1 if no -proxy or -connect) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2307,612 +2684,686 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications - + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. - + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + Attempt to recover private keys from a corrupt wallet.dat - + Myriadcoin Core Daemon + + + Block creation options: - + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + Connect only to the specified node(s) - + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + Corrupted block database detected - + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + Discover own IP address (default: 1 when listening and no -externalip) - + Do not load the wallet and disable wallet RPC calls + + + Do you want to rebuild the block database now? - Error initializing block database - Error initializing wallet database environment %s! - Error loading block database - Error opening block database - Error: Disk space is low! - Error: Wallet locked, unable to create transaction! - Error: system error: - Failed to listen on any port. Use -listen=0 if you want this. - Failed to read block info - Failed to read block - Failed to sync block index - Failed to write block index - Failed to write block info - Failed to write block - Failed to write file info - Failed to write to coin database - Failed to write transaction index - Failed to write undo data - + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + Find peers using DNS lookup (default: 1 unless -connect) - + Force safe mode (default: 0) + + + Generate coins (default: 0) - How many blocks to check at startup (default: 288, 0 = all) - - How thorough the block verification is (0-4, default: 3) + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' - Not enough file descriptors available. - + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + Rebuild block chain index from current blk000??.dat files - + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + Set the number of threads to service RPC calls (default: 4) - + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + Verifying blocks... - Verifying wallet... - + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + + + Imports blocks from external blk000??.dat file - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) - Information - - Invalid -tor address: '%s' - - - - Invalid amount for -minrelaytxfee=<amount>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' - + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + Maintain a full transaction index (default: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Only accept block chain matching built-in checkpoints (default: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - Output extra debugging information. Implies all other -debug* options + Print block on startup, if found in block index - - Output extra network debugging information + Print block tree on startup (default: 0) - - Prepend debug output with timestamp + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) - - Select the version of socks proxy to use (4-5, default: 5) + Send command to Myriadcoin Core - Send trace/debug info to console instead of debug.log file - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - Set minimum block size in bytes (default: 0) - + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + Shrink debug.log file on client startup (default: 1 when no -debug) - Signing transaction failed - Specify connection timeout in milliseconds (default: 5000) - + Start Myriadcoin Core Daemon + + + System error: - Transaction amount too small - Transaction amounts must be positive - Transaction too large - Use UPnP to map the listening port (default: 0) - Use UPnP to map the listening port (default: 1 when listening) - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - Username for JSON-RPC connections - Warning - Warning: This version is obsolete, upgrade required! - - You need to rebuild the databases using -reindex to change -txindex + Zapping all transactions from wallet... + + + + on startup + + + + version - wallet.dat corrupt, salvage failed - Password for JSON-RPC connections - Allow JSON-RPC connections from specified IP address - Send commands to node running on <ip> (default: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) - Upgrade wallet to latest format - Set key pool size to <n> (default: 100) - Rescan the block chain for missing wallet transactions - Use OpenSSL (https) for JSON-RPC connections - Server certificate file (default: server.cert) - Server private key (default: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - This help message - Unable to bind to %s on this computer (bind returned error %d, %s) - - Connect through socks proxy - - - - Allow DNS lookups for -addnode, -seednode and -connect - Loading addresses... - Error loading wallet.dat: Wallet corrupted - Error loading wallet.dat: Wallet requires newer version of Myriadcoin - Wallet needed to be rewritten: restart Myriadcoin to complete - Error loading wallet.dat - Invalid -proxy address: '%s' - Unknown network specified in -onlynet: '%s' - Unknown -socks proxy version requested: %i - Cannot resolve -bind address: '%s' - Cannot resolve -externalip address: '%s' - Invalid amount for -paytxfee=<amount>: '%s' - Invalid amount - Insufficient funds - Loading block index... - Add a node to connect to and attempt to keep the connection open - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - Loading wallet... - Cannot downgrade wallet - Cannot write default address - Rescanning... - Done loading - To use the %s option - Error - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_gl.ts b/src/qt/locale/bitcoin_gl.ts new file mode 100644 index 00000000..66dabbc8 --- /dev/null +++ b/src/qt/locale/bitcoin_gl.ts @@ -0,0 +1,3389 @@ + + + AboutDialog + + About Myriadcoin Core + Sobre Myriadcoin core + + + <b>Myriadcoin Core</b> version + <b>Bitcoin core</b> versión + + + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. + +Isto é software experimental. + +Distribuído baixo a licencia de software MIT/X11, véxase o arquivo que acompaña COPYING ou http://www.opensource.org/licenses/mit-license.php. + +Este produto inclúe software desenvolvido polo OpenSSL Project para o uso no OpenSSL Toolkit (http://www.openssl.org/) e software criptográfico escrito por Eric Young (eay@cryptsoft.com) e software UPnP escrito por Thomas Bernard. + + + Copyright + Copyright + + + The Myriadcoin Core developers + Os desarrolladores de Myriadcoin Core + + + (%1-bit) + + + + + AddressBookPage + + Double-click to edit address or label + Doble click para editar a dirección ou a etiqueta + + + Create a new address + Crear unha nova dirección + + + &New + &Novo + + + Copy the currently selected address to the system clipboard + Copiar a dirección seleccionada ao cartafol + + + &Copy + &Copiar + + + C&lose + &Pechar + + + &Copy Address + &Copiar Dirección + + + Delete the currently selected address from the list + Borrar a dirección actualmente seleccionada da listaxe + + + Export the data in the current tab to a file + Exportar os datos da pestaña actual a un arquivo. + + + &Export + &Exportar + + + &Delete + &Borrar + + + Choose the address to send coins to + Escolle a dirección á que enviar moedas + + + Choose the address to receive coins with + Escolle a dirección da que recibir moedas + + + C&hoose + &Escoller + + + Sending addresses + Direccións para enviar + + + Receiving addresses + Direccións para recibir + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + Estas son as túas direccións Myriadcoin para enviar pagos. Revisa sempre a cantidade e a dirección receptora antes de enviar moedas. + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Estas son as túas direccións Myriadcoin para recibir pagos. Recoméndase empregar unha nova dirección de recepción por cada transacción. + + + Copy &Label + Copiar &Etiqueta + + + &Edit + &Modificar + + + Export Address List + Exportar Lista de Direccións + + + Comma separated file (*.csv) + Arquivo separado por comas (*.csv) + + + Exporting Failed + Exportación falida + + + There was an error trying to save the address list to %1. + + + + + AddressTableModel + + Label + Etiqueta + + + Address + Dirección + + + (no label) + (sen etiqueta) + + + + AskPassphraseDialog + + Passphrase Dialog + Diálogo de Contrasinal + + + Enter passphrase + Introduce contrasinal + + + New passphrase + Novo contrasinal + + + Repeat new passphrase + Repite novo contrasinal + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Introduce o novo contrasinal ao moedeiro.<br/>Por favor empregue un contrasinal de <b>10 ou máis caracteres aleatorios</b>, ou <b>oito ou máis palabras</b>. + + + Encrypt wallet + Encriptar moedeiro + + + This operation needs your wallet passphrase to unlock the wallet. + Esta operación precisa o contrasinal do teu moedeiro para desbloquear o moedeiro. + + + Unlock wallet + Desbloquear moedeiro + + + This operation needs your wallet passphrase to decrypt the wallet. + Esta operación precisa o contrasinal do teu moedeiro para desencriptar o moedeiro. + + + Decrypt wallet + Desencriptar moedeiro + + + Change passphrase + Cambiar contrasinal + + + Enter the old and new passphrase to the wallet. + Introduce o vello e novo contrasinais no moedeiro. + + + Confirm wallet encryption + Confirmar encriptación de moedeiro + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! + Precaución: Se encriptas o teu moedeiro e perdes o teu contrasinal, ti <b>PERDERÁS TÓDOLOS TEUS MYRIADCOINS</b>! + + + Are you sure you wish to encrypt your wallet? + Estás seguro de que desexas encriptar o teu moedeiro? + + + 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. + IMPORTANTE: Calquera copia de seguridade previa que fixeses do teu arquivo de moedeiro debería ser substituída polo recén xerado arquivo encriptado de moedeiro. Por razóns de seguridade, as copias de seguridade previas de un arquivo de moedeiro desencriptado tornaránse inútiles no momento no que comeces a emprega-lo novo, encriptado, moedeiro. + + + Warning: The Caps Lock key is on! + Precaución: A tecla de Bloqueo de Maiúsculas está activada! + + + Wallet encrypted + Moedeiro encriptado + + + Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. + Myriadcoin se pechará agora para rematar o proceso de encriptación. Lembra que encriptar o teu moedeiro non protexe totalmente os teus myriadcoins de ser robados por malware que infecte o teu ordenador. + + + Wallet encryption failed + Encriptación de moedeiro fallida + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + A encriptación do moedeiro fallou por mor dun erro interno. O teu moedeiro non foi encriptado. + + + The supplied passphrases do not match. + Os contrasinais suministrados non coinciden. + + + Wallet unlock failed + Desbloqueo de moedeiro fallido + + + The passphrase entered for the wallet decryption was incorrect. + O contrasinal introducido para a desencriptación do moedeiro foi incorrecto. + + + Wallet decryption failed + Desencriptación de moedeiro fallida + + + Wallet passphrase was successfully changed. + Cambiouse con éxito o contrasinal do moedeiro. + + + + BitcoinGUI + + Sign &message... + &Asinar mensaxe... + + + Synchronizing with network... + Sincronizando coa rede... + + + &Overview + &Vista xeral + + + Node + + + + Show general overview of wallet + Amosar vista xeral do moedeiro + + + &Transactions + &Transacciones + + + Browse transaction history + Navegar historial de transaccións + + + E&xit + &Saír + + + Quit application + Saír da aplicación + + + Show information about Myriadcoin + Amosar información sobre Myriadcoin + + + About &Qt + Acerca de &Qt + + + Show information about Qt + Amosar información acerca de Qt + + + &Options... + &Opcións... + + + &Encrypt Wallet... + &Encriptar Moedeiro... + + + &Backup Wallet... + Copia de &Seguridade do Moedeiro... + + + &Change Passphrase... + &Cambiar contrasinal... + + + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + + Importing blocks from disk... + Importando bloques de disco... + + + Reindexing blocks on disk... + Reindexando bloques no disco... + + + Send coins to a Myriadcoin address + Enviar moedas a unha dirección Myriadcoin + + + Modify configuration options for Myriadcoin + Modificar opcións de configuración para Myriadcoin + + + Backup wallet to another location + Facer copia de seguridade do moedeiro noutra localización + + + Change the passphrase used for wallet encryption + Cambiar o contrasinal empregado para a encriptación do moedeiro + + + &Debug window + Ventana de &Depuración + + + Open debugging and diagnostic console + Abrir consola de depuración e diagnóstico + + + &Verify message... + &Verificar mensaxe... + + + Myriadcoin + Myriadcoin + + + Wallet + Moedeiro + + + &Send + &Enviar + + + &Receive + &Recibir + + + &Show / Hide + &Amosar/Agachar + + + Show or hide the main Window + Amosar ou agachar a ventana principal + + + Encrypt the private keys that belong to your wallet + Encriptar as claves privadas que pertencen ao teu moedeiro + + + Sign messages with your Myriadcoin addresses to prove you own them + Asina mensaxes coas túas direccións Myriadcoin para probar que te pertencen + + + Verify messages to ensure they were signed with specified Myriadcoin addresses + Verificar mensaxes para asegurar que foron asinados con direccións Myriadcoin dadas. + + + &File + &Arquivo + + + &Settings + Axus&tes + + + &Help + A&xuda + + + Tabs toolbar + Barra de ferramentas + + + [testnet] + [testnet] + + + Myriadcoin Core + Core de Myriadcoin + + + Request payments (generates QR codes and myriadcoin: URIs) + Solicitar pagos (xenera códigos QR e myriadcoin: URIs) + + + &About Myriadcoin Core + &Sobre Myriadcoin Core + + + Show the list of used sending addresses and labels + Amosar a listaxe de direccións e etiquetas para enviar empregadas + + + Show the list of used receiving addresses and labels + Amosar a listaxe de etiquetas e direccións para recibir empregadas + + + Open a myriadcoin: URI or payment request + Abrir un myriadcoin: URI ou solicitude de pago + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + + Myriadcoin client + Cliente Myriadcoin + + + %n active connection(s) to Myriadcoin network + %n conexión activa coa rede Myriadcoin%n conexións activas coa rede Myriadcoin + + + No block source available... + Non hai orixe de bloques dispoñible... + + + Processed %1 of %2 (estimated) blocks of transaction history. + Procesados %1 de %2 bloques (estimados) del historial de transacciones. + + + Processed %1 blocks of transaction history. + Procesados %1 bloques do historial de transacccións. + + + %n hour(s) + %n hora%n horas + + + %n day(s) + %n día%n días + + + %n week(s) + %n semana%n semanas + + + %1 and %2 + + + + %n year(s) + + + + %1 behind + %1 detrás + + + Last received block was generated %1 ago. + O último bloque recibido foi xerado fai %1. + + + Transactions after this will not yet be visible. + As transaccións despois desta non serán todavía visibles. + + + Error + Erro + + + Warning + Precaución + + + Information + Información + + + Up to date + Actualizado + + + Catching up... + Poñendo ao día... + + + Sent transaction + Transacción enviada + + + Incoming transaction + Transacción entrante + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + Data: %1 +Cantidade: %2 +Tipo: %3 +Dirección: %4 + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + O moedeiro está <b>encriptado</b> e actualmente <b>desbloqueado</b> + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + O moedeiro está <b>encriptado</b> e actualmente <b>bloqueado</b> + + + A fatal error occurred. Myriadcoin can no longer continue safely and will quit. + Ocorriu un erro fatal. Myriadcoin non pode continuar en condicións de seguridade e pecharáse. + + + + ClientModel + + Network Alert + Alerta de Rede + + + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + Cantidade: + + + Bytes: + Bytes: + + + Amount: + Importe: + + + Priority: + Prioridade: + + + Fee: + Pago: + + + Low Output: + + + + After Fee: + + + + Change: + Cambiar: + + + (un)select all + (des)selecciona todo + + + Tree mode + Modo árbore + + + List mode + Modo lista + + + Amount + Cantidade + + + Address + Dirección + + + Date + Data + + + Confirmations + Confirmacións + + + Confirmed + Confirmado + + + Priority + Prioridade + + + Copy address + Copiar dirección + + + Copy label + Copiar etiqueta + + + Copy amount + Copiar cantidade + + + Copy transaction ID + Copiar ID de transacción + + + Lock unspent + Bloquear o aforrado + + + Unlock unspent + Desbloquear o aforrado + + + Copy quantity + Copiar cantidade + + + Copy fee + Copiar pago + + + Copy after fee + Copiar despóis do pago + + + Copy bytes + Copiar bytes + + + Copy priority + Copiar prioridade + + + Copy low output + + + + Copy change + Copiar cambio + + + highest + O máis alto + + + higher + Máis alto que + + + high + alto + + + medium-high + medio-alto + + + medium + + + + low-medium + medio-baixo + + + low + baixo + + + lower + máis baixo que + + + lowest + o máis baixo + + + (%1 locked) + (%1 bloqueado) + + + none + + + + Dust + Limpar + + + yes + Si + + + no + non + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + As transacción con maior prioridade teñen máis posibilidades de ser incluidas nun bloque + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + (sen etiqueta) + + + change from %1 (%2) + + + + (change) + (cambio) + + + + EditAddressDialog + + Edit Address + Modificar Dirección + + + &Label + &Etiqueta + + + The label associated with this address list entry + A etiqueta asociada con esta entrada da listaxe de direccións + + + The address associated with this address list entry. This can only be modified for sending addresses. + A dirección asociada con esta entrada na listaxe de dirección. Esta so pode ser modificada por direccións para enviar. + + + &Address + &Dirección + + + New receiving address + Nova dirección para recibir + + + New sending address + Nova dirección para enviar + + + Edit receiving address + Modificar dirección para recibir + + + Edit sending address + Modificar dirección para enviar + + + The entered address "%1" is already in the address book. + A dirección introducida "%1" xa está no libro de direccións. + + + The entered address "%1" is not a valid Myriadcoin address. + A dirección introducida '%1' non é unha dirección Myriadcoin válida. + + + Could not unlock wallet. + Non se puido desbloquear o moedeiro. + + + New key generation failed. + A xeración de nova clave fallou. + + + + FreespaceChecker + + A new data directory will be created. + Crearáse un novo directorio de datos. + + + name + nome + + + Directory already exists. Add %1 if you intend to create a new directory here. + O directorio xa existe. Engade %1 se queres crear un novo directorio aquí. + + + Path already exists, and is not a directory. + A ruta xa existe e non é un directorio. + + + Cannot create data directory here. + Non se pode crear directorio de datos aquí + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core + Core de Myriadcoin + + + version + versión + + + Usage: + Emprego: + + + command-line options + opcións da liña de comandos + + + UI options + opcións de UI + + + Set language, for example "de_DE" (default: system locale) + Fixar idioma, por exemplo "de_DE" (por defecto: locale del sistema) + + + Start minimized + Comezar minimizado + + + Set SSL root certificates for payment request (default: -system-) + + + + Show splash screen on startup (default: 1) + Amosar pantalla splash no arranque (por defecto: 1) + + + Choose data directory on startup (default: 0) + Escolle directorio de datos ao arrancar (por defecto: 0) + + + + Intro + + Welcome + Benvido + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + Empregar o directorio de datos por defecto + + + Use a custom data directory: + Empregar un directorio de datos personalizado + + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" can not be created. + Erro: O directorio de datos especificado "%1" non pode ser creado. + + + Error + Erro + + + GB of free space available + GB de espacio libre dispoñible + + + (of %1GB needed) + (de %1 GB precisados) + + + + OpenURIDialog + + Open URI + Abrir URI + + + Open payment request from URI or file + Abrir solicitude de pago dende URI ou ficheiro + + + URI: + URI: + + + Select payment request file + Seleccionar ficheiro de solicitude de pago + + + Select payment request file to open + Seleccione ficheiro de solicitude de pago para abrir + + + + OptionsDialog + + Options + Opcións + + + &Main + &Principal + + + Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. + Tarifa por kB de transacción opcional que axuda a asegurar que as túas transaccións son procesadas rapidamente. A maioría das transaccións son 1 kB. + + + Pay transaction &fee + Pagar &tarifa da transacción + + + Automatically start Myriadcoin after logging in to the system. + Comezar Myriadcoin automáticamente despois de loguearse no sistema. + + + &Start Myriadcoin on system login + &Comezar Myriadcoin ao facer login no sistema + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + + Reset all client options to default. + Restaurar todas as opcións de cliente ás por defecto + + + &Reset Options + Opcións de &Restaurar + + + &Network + &Rede + + + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. + Abrir automáticamente o porto do cliente Myriadcoin no router. Esto so funciona se o teu router soporta UPnP e está habilitado. + + + Map port using &UPnP + Mapear porto empregando &UPnP + + + Proxy &IP: + &IP do Proxy: + + + &Port: + &Porto: + + + Port of the proxy (e.g. 9050) + Porto do proxy (exemplo: 9050) + + + SOCKS &Version: + &Version de SOCKS: + + + SOCKS version of the proxy (e.g. 5) + Versión SOCKS del proxy (exemplo: 5) + + + &Window + &Xanela + + + Show only a tray icon after minimizing the window. + Amosar so un icono na bandexa tras minimiza-la xanela. + + + &Minimize to the tray instead of the taskbar + &Minimizar á bandexa en lugar de á barra de tarefas. + + + Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. + Minimizar en lugar de saír da aplicación cando se pecha a xanela. Cando se habilita esta opción, a aplicación so se pechará tras seleccionar Saír no menú. + + + M&inimize on close + M&inimizar ao pechar + + + &Display + &Visualización + + + User Interface &language: + &Linguaxe de interface de usuario: + + + The user interface language can be set here. This setting will take effect after restarting Myriadcoin. + A linguaxe de interface de usuario pode fixarse aquí. Esta configuración terá efecto tras reiniciar Myriadcoin. + + + &Unit to show amounts in: + &Unidade na que amosar as cantidades: + + + Choose the default subdivision unit to show in the interface and when sending coins. + Escolle a unidade de subdivisión por defecto para amosar na interface e ao enviar moedas. + + + Whether to show Myriadcoin addresses in the transaction list or not. + Se se amosan ou non as direccións Myriadcoin na listaxe de transaccións. + + + &Display addresses in transaction list + &Visualizar direccións na listaxe de transaccións + + + Whether to show coin control features or not. + + + + &OK + &OK + + + &Cancel + &Cancelar + + + default + por defecto + + + none + + + + Confirm options reset + Confirmar opcións de restaurar + + + Client restart required to activate changes. + + + + Client will be shutdown, do you want to proceed? + + + + This change would require a client restart. + + + + The supplied proxy address is invalid. + A dirección de proxy suministrada é inválida. + + + + OverviewPage + + Form + Formulario + + + The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. + A información amosada por estar desactualizada. O teu moedeiro sincronízase automáticamente coa rede Myriadcoin despois de que se estableza unha conexión, pero este proceso non está todavía rematado. + + + Wallet + Moedeiro + + + Available: + + + + Your current spendable balance + O teu balance actualmente dispoñible + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + Total de transaccións que aínda teñen que ser confirmadas, e non contan todavía dentro do balance gastable + + + Immature: + Inmaduro: + + + Mined balance that has not yet matured + O balance minado todavía non madurou + + + Total: + Total: + + + Your current total balance + O teu balance actual total + + + <b>Recent transactions</b> + <b>Transaccións recentes</b> + + + out of sync + non sincronizado + + + + PaymentServer + + URI handling + Manexo de URI + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + Non se pode parsear a URI! Esto pode ser causado por unha dirección Myriadcoin inválida ou parámetros da URI malformados. + + + Requested payment amount of %1 is too small (considered dust). + A cantidade de %1 na solicitude de pado é moi pequena (considerada po). + + + Payment request error + Erro na petición de pago + + + Cannot start myriadcoin: click-to-pay handler + + + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + Devolución dende %1 + + + Error communicating with %1: %2 + Erro comunicando con %1: %2 + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + Responsa errónea do servidor %1 + + + Payment acknowledged + Pago admitido + + + Network request error + Erro de solicitude de rede + + + + QObject + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" does not exist. + Erro: O directorio de datos especificado "%1" non existe. + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + + + + Error: Invalid combination of -regtest and -testnet. + Erro: combinación inválida de -regtest e -testnet. + + + Myriadcoin Core didn't yet exit safely... + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Introduce unha dirección Myriadcoin (exemplo: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + &Gardar Imaxe... + + + &Copy Image + &Copiar Imaxe + + + Save QR Code + Gardar Código QR + + + PNG Image (*.png) + + + + + RPCConsole + + Client name + Nome do cliente + + + N/A + N/A + + + Client version + Versión do cliente + + + &Information + &Información + + + Debug window + + + + General + + + + Using OpenSSL version + Usar versión OpenSSL + + + Startup time + Tempo de arranque + + + Network + Rede + + + Name + + + + Number of connections + Número de conexións + + + Block chain + Cadea de bloques + + + Current number of blocks + Número actual de bloques + + + Estimated total blocks + Bloques totais estimados + + + Last block time + Hora do último bloque + + + &Open + &Abrir + + + &Console + &Consola + + + &Network Traffic + &Tráfico de Rede + + + &Clear + &Limpar + + + Totals + Totais + + + In: + Dentro: + + + Out: + Fóra: + + + Build date + Data de construción + + + Debug log file + Arquivo de log de depuración + + + Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. + Abrir o arquivo de log de depuración de Myriadcoin dende o directorio actual de datos. Esto pode levar uns cantos segundos para grandes arquivos de log. + + + Clear console + Limpar consola + + + Welcome to the Myriadcoin RPC console. + Benvido á consola RPC de Myriadcoin + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + Emprega as flechas arriba e abaixo para navegar polo historial, e <b>Ctrl-L</b> para limpar a pantalla. + + + Type <b>help</b> for an overview of available commands. + Escribe <b>axuda</b> para unha vista xeral dos comandos dispoñibles. + + + %1 B + %1 B + + + %1 KB + %1 KB + + + %1 MB + %1 MB + + + %1 GB + %1 GB + + + %1 m + %1 m + + + %1 h + %1 h + + + %1 h %2 m + %1 h %2 m + + + + ReceiveCoinsDialog + + &Amount: + &Cantidade: + + + &Label: + &Etiqueta: + + + &Message: + &Mensaxe: + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + Reutilizar unha das direccións para recibir previas. Reutilizar direccións ten problemas de seguridade e privacidade. Non empregues esto agás que antes se fixese unha solicitude de rexeneración dun pago. + + + R&euse an existing receiving address (not recommended) + R&eutilizar unha dirección para recibir existente (non recomendado) + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + Limpar todos os campos do formulario + + + Clear + Limpar + + + Requested payments history + + + + &Request payment + &Solicitar pago + + + Show the selected request (does the same as double clicking an entry) + + + + Show + + + + Remove the selected entries from the list + + + + Remove + + + + Copy label + Copiar etiqueta + + + Copy message + + + + Copy amount + Copiar cantidade + + + + ReceiveRequestDialog + + QR Code + Código QR + + + Copy &URI + Copiar &URI + + + Copy &Address + Copiar &Dirección + + + &Save Image... + &Gardar Imaxe... + + + Request payment to %1 + Solicitar pago a %1 + + + Payment information + Información de Pago + + + URI + URI + + + Address + Dirección + + + Amount + Cantidade + + + Label + Etiqueta + + + Message + Mensaxe + + + Resulting URI too long, try to reduce the text for label / message. + A URI resultante é demasiado larga, tenta reducir o texto para a etiqueta / mensaxe. + + + Error encoding URI into QR Code. + Erro codificando URI nun Código QR. + + + + RecentRequestsTableModel + + Date + Data + + + Label + Etiqueta + + + Message + Mensaxe + + + Amount + Cantidade + + + (no label) + (sen etiqueta) + + + (no message) + + + + (no amount) + + + + + SendCoinsDialog + + Send Coins + Moedas Enviadas + + + Coin Control Features + + + + Inputs... + + + + automatically selected + + + + Insufficient funds! + + + + Quantity: + Cantidade: + + + Bytes: + Bytes: + + + Amount: + Importe: + + + Priority: + Prioridade: + + + Fee: + Pago: + + + Low Output: + + + + After Fee: + + + + Change: + Cambiar: + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + + Send to multiple recipients at once + Enviar a múltiples receptores á vez + + + Add &Recipient + Engadir &Receptor + + + Clear all fields of the form. + Limpar tódolos campos do formulario + + + Clear &All + Limpar &Todo + + + Balance: + Balance: + + + Confirm the send action + Confirmar a acción de envío + + + S&end + &Enviar + + + Confirm send coins + Confirmar envío de moedas + + + %1 to %2 + %1 a %2 + + + Copy quantity + Copiar cantidade + + + Copy amount + Copiar cantidade + + + Copy fee + Copiar pago + + + Copy after fee + Copiar despóis do pago + + + Copy bytes + Copiar bytes + + + Copy priority + Copiar prioridade + + + Copy low output + + + + Copy change + Copiar cambio + + + Total Amount %1 (= %2) + + + + or + + + + The recipient address is not valid, please recheck. + A dirección de recepción non é válida, por favor compróbea. + + + The amount to pay must be larger than 0. + A cantidade a pagar debe ser maior que 0. + + + The amount exceeds your balance. + A cantidade sobrepasa o teu balance. + + + The total exceeds your balance when the %1 transaction fee is included. + O total sobrepasa o teu balance cando se inclúe a tarifa de transacción %1. + + + Duplicate address found, can only send to each address once per send operation. + Atopouse dirección duplicada, so se pode enviar a cada dirección unha vez por operación. + + + Transaction creation failed! + + + + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + Atención: Enderezo Myriadcoin non válido + + + (no label) + (sen etiqueta) + + + Warning: Unknown change address + Atención: Enderezo de cambio desconocido + + + Are you sure you want to send? + Seguro que queres enviar? + + + added as transaction fee + engadido como tarifa de transacción + + + Payment request expired + A petición de pago expirou + + + Invalid payment address %1 + Dirección de pago %1 inválida + + + + SendCoinsEntry + + A&mount: + &Cantidade: + + + Pay &To: + Pagar &A: + + + The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + A dirección á que enviar o pago (exemplo: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + Enter a label for this address to add it to your address book + Introduce unha etiqueta para esta dirección para engadila ao teu libro de direccións + + + &Label: + &Etiqueta: + + + Choose previously used address + Escoller dirección previamente empregada + + + This is a normal payment. + Este é un pago normal + + + Alt+A + Alt+A + + + Paste address from clipboard + Pegar dirección dende portapapeis + + + Alt+P + Alt+P + + + Remove this entry + Eliminar esta entrada + + + Message: + + + + This is a verified payment request. + Esta é unha solicitude de pago verificada + + + Enter a label for this address to add it to the list of used addresses + Introduce unha etiqueta para esta dirección para engadila á listaxe de direccións empregadas + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + Esta é unha solicitude de pago non verificada + + + Pay To: + Pagar A: + + + Memo: + Memo: + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. + + + + + SignVerifyMessageDialog + + Signatures - Sign / Verify a Message + Sinaturas - Asinar / Verificar unha Mensaxe + + + &Sign Message + &Asinar Mensaxe + + + You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. + Podes asinar mensaxes coas túas direccións para probar que ti as posees. Ten conta de non asinar nada vago, xa que hai ataques de phishing que tentarán que asines coa túa identidade por riba deles. Asina únicamente declaracións totalmente detalladas coas que esteas de acordo. + + + The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + A dirección coa que asinar a mensaxe (exemplo: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + Choose previously used address + Escoller dirección previamente empregada + + + Alt+A + Alt+A + + + Paste address from clipboard + Pegar dirección dende portapapeis + + + Alt+P + Alt+P + + + Enter the message you want to sign here + Introduce a mensaxe que queres asinar aquí + + + Signature + Sinatura + + + Copy the current signature to the system clipboard + Copiar a sinatura actual ao portapapeis do sistema + + + Sign the message to prove you own this Myriadcoin address + Asina a mensaxe para probar que posees esta dirección Myriadcoin + + + Sign &Message + Asinar &Mensaxe + + + Reset all sign message fields + Restaurar todos os campos de sinatura de mensaxe + + + Clear &All + Limpar &Todo + + + &Verify Message + &Verificar Mensaxe + + + Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. + Introduce a dirección coa que asinar, a mensaxe (asegúrate de copiar exactamente os saltos de liña, espacios, tabulacións, etc.) e a sinatura debaixo para verificar a mensaxe. Ten coidado de non ler máis na sinatura do que hai no mensaxe asinado mesmo, a fin de evitar ser cazado nun ataque de home no medio. + + + The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + A dirección coa que foi firmada a mensaxe (exemplo: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + Verify the message to ensure it was signed with the specified Myriadcoin address + Verificar a mensaxe para asegurar que foi asinada coa dirección Myriadcoin especificada + + + Verify &Message + Verificar &Mensaxe + + + Reset all verify message fields + Restaurar todos os campos de verificación de mensaxe + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Introduza unha dirección Myriadcoin (exemplo: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + Click "Sign Message" to generate signature + Click en "Asinar Mensaxe" para xerar sinatura + + + The entered address is invalid. + A dirección introducida é inválida. + + + Please check the address and try again. + Por favor comproba a dirección e proba de novo. + + + The entered address does not refer to a key. + A dirección introducida non se refire a ninguna clave. + + + Wallet unlock was cancelled. + Cancelouse o desbloqueo do moedeiro. + + + Private key for the entered address is not available. + A clave privada da dirección introducida non está dispoñible. + + + Message signing failed. + Fallou a sinatura da mensaxe. + + + Message signed. + Mensaxe asinada. + + + The signature could not be decoded. + A sinatura non puido ser decodificada. + + + Please check the signature and try again. + Por favor revise a sinatura e probe de novo. + + + The signature did not match the message digest. + A sinatura non coincide co resumo da mensaxe. + + + Message verification failed. + A verificación da mensaxe fallou. + + + Message verified. + Mensaxe verificada. + + + + SplashScreen + + Myriadcoin Core + Core de Myriadcoin + + + The Myriadcoin Core developers + Os desarrolladores de Myriadcoin Core + + + [testnet] + [testnet] + + + + TrafficGraphWidget + + KB/s + KB/s + + + + TransactionDesc + + Open until %1 + Aberto ata %1 + + + conflicted + + + + %1/offline + %1/fóra de liña + + + %1/unconfirmed + %1/sen confirmar + + + %1 confirmations + %1 confirmacións + + + Status + Estado + + + , broadcast through %n node(s) + , propagado a % nodo, propagado a % nodos + + + Date + Data + + + Source + Orixe + + + Generated + Xerado + + + From + Dende + + + To + A + + + own address + dirección propia + + + label + etiqueta + + + Credit + Crédito + + + matures in %n more block(s) + madura nun bloque máismadura en %n bloques máis + + + not accepted + non aceptado + + + Debit + Débito + + + Transaction fee + Tarifa de transacción + + + Net amount + Cantidade neta + + + Message + Mensaxe + + + Comment + Comentario + + + Transaction ID + ID de Transacción + + + Merchant + Comerciante + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + As moedas xeradas deben madurar %1 bloques antes de que poidan ser gastadas. Cando xeraste este bloque, foi propagado á rede para ser engadido á cadeas de bloques. Se falla ao tentar meterse na cadea, o seu estado cambiará a "non aceptado" e non poderá ser gastado. Esto pode ocorrir ocasionalmente se outro nodo xera un bloque en poucos segundos de diferencia co teu. + + + Debug information + Información de depuración + + + Transaction + Transacción + + + Inputs + Entradas + + + Amount + Cantidade + + + true + verdadeiro + + + false + falso + + + , has not been successfully broadcast yet + , non foi propagado con éxito todavía + + + Open for %n more block(s) + Abrir para %s bloque máisAbrir para %n bloques máis + + + unknown + descoñecido + + + + TransactionDescDialog + + Transaction details + Detalles de transacción + + + This pane shows a detailed description of the transaction + Este panel amosa unha descripción detallada da transacción + + + + TransactionTableModel + + Date + Data + + + Type + Tipo + + + Address + Dirección + + + Amount + Cantidade + + + Immature (%1 confirmations, will be available after %2) + + + + Open for %n more block(s) + Abrir para %n bloque máisAbrir para %n bloques máis + + + Open until %1 + Aberto ata %1 + + + Confirmed (%1 confirmations) + Confirmado (%1 confirmacións) + + + This block was not received by any other nodes and will probably not be accepted! + Este bloque non foi recibido por ningún outro nodo e probablemente non será aceptado! + + + Generated but not accepted + Xerado pero non aceptado + + + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + + Received with + Recibido con + + + Received from + Recibido de + + + Sent to + Enviado a + + + Payment to yourself + Pago a ti mesmo + + + Mined + Minado + + + (n/a) + (n/a) + + + Transaction status. Hover over this field to show number of confirmations. + Estado da transacción. Pasa por riba deste campo para amosar o número de confirmacións. + + + Date and time that the transaction was received. + Data e hora na que foi recibida a transacción. + + + Type of transaction. + Tipo de transacción. + + + Destination address of transaction. + Dirección de destino da transacción. + + + Amount removed from or added to balance. + Cantidade borrada ou engadida no balance. + + + + TransactionView + + All + Todo + + + Today + Hoxe + + + This week + Esta semana + + + This month + Este mes + + + Last month + O último mes + + + This year + Este ano + + + Range... + Periodo... + + + Received with + Recibido con + + + Sent to + Enviado a + + + To yourself + A ti mesmo + + + Mined + Minado + + + Other + Outro + + + Enter address or label to search + Introduce dirección ou etiqueta para buscar + + + Min amount + Cantidade mínima + + + Copy address + Copiar dirección + + + Copy label + Copiar etiqueta + + + Copy amount + Copiar cantidade + + + Copy transaction ID + Copiar ID de transacción + + + Edit label + Modificar etiqueta + + + Show transaction details + Amosar detalles da transacción + + + Export Transaction History + Exportar Historial de Transaccións + + + Exporting Failed + Exportación falida + + + There was an error trying to save the transaction history to %1. + Houbo un erro intentando salvar o historial de transaccións a %1. + + + Exporting Successful + Exportado correctamente + + + The transaction history was successfully saved to %1. + O historial de transaccións foi salvado correctamente en %1. + + + Comma separated file (*.csv) + Arquivo separado por comas (*.csv) + + + Confirmed + Confirmado + + + Date + Data + + + Type + Tipo + + + Label + Etiqueta + + + Address + Dirección + + + Amount + Cantidade + + + ID + ID + + + Range: + Periodo: + + + to + a + + + + WalletFrame + + No wallet has been loaded. + Ningún moedeiro cargado + + + + WalletModel + + Send Coins + Moedas Enviadas + + + + WalletView + + &Export + &Exportar + + + Export the data in the current tab to a file + Exportar os datos da pestaña actual a un arquivo. + + + Backup Wallet + Copia de Seguridade de Moedeiro + + + Wallet Data (*.dat) + Datos de Moedeiro (*.dat) + + + Backup Failed + Copia de Seguridade Fallida + + + There was an error trying to save the wallet data to %1. + Houbo un erro intentando gardar os datos de moedeiro en %1. + + + The wallet data was successfully saved to %1. + Os datos do moedeiro foron gardados correctamente en %1. + + + Backup Successful + Copia de Seguridade Correcta + + + + bitcoin-core + + Usage: + Emprego: + + + List commands + Listar comandos + + + Get help for a command + Obter axuda para un comando + + + Options: + Opcións: + + + Specify configuration file (default: myriadcoin.conf) + Especificar arquivo de configuración (por defecto: myriadcoin.conf) + + + Specify pid file (default: myriadcoind.pid) + Especificar arquivo de pid (por defecto: myriadcoind.pid) + + + Specify data directory + Especificar directorio de datos + + + Listen for connections on <port> (default: 8333 or testnet: 18333) + Escoitar conexións no <porto> (por defecto: 8333 ou testnet: 18333) + + + Maintain at most <n> connections to peers (default: 125) + Manter como moito <n> conexións con pares (por defecto: 125) + + + Connect to a node to retrieve peer addresses, and disconnect + Conectar a nodo para recuperar direccións de pares, e desconectar + + + Specify your own public address + Especificar a túa propia dirección pública + + + Threshold for disconnecting misbehaving peers (default: 100) + Umbral para desconectar pares con mal comportamento (por defecto: 100) + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + Número de segundos para manter sen reconectar aos pares con mal comportamento (por defecto: 86400) + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + Ocorreu un erro mentres se establecía o porto RPC %u para escoitar sobre IPv4: %s + + + Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) + Escoitar conexións JSON-RPC no <porto> (por defecto: 8332 ou testnet: 18332) + + + Accept command line and JSON-RPC commands + Aceptar liña de comandos e comandos JSON-RPC + + + Myriadcoin Core RPC client version + + + + Run in the background as a daemon and accept commands + Executar no fondo como un demo e aceptar comandos + + + Use the test network + Empregar a rede de proba + + + Accept connections from outside (default: 1 if no -proxy or -connect) + Aceptar conexións de fóra (por defecto: 1 se non -proxy ou -connect) + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=myriadcoinrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com + + %s, debes fixar unha rpcpassword no arquivo de configuración: +%s +Reoméndase usar o seguinte contrasinal aleatorio: +rpcuser=myriadcoinrpc +rpcpassword=%s +(non precisas lembrar este contrasinal) +O nome do usuario e o contrasinal DEBEN NON ser o mesmo. +Se o arquivo non existe, debes crealo con permisos de so lectura para o propietario. +Tamén é recomendable fixar alertnotify de modo que recibas notificación dos problemas; +por exemplo: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + Cifradores aceptables (por defecto: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + Ocorreu un erro mentres se establecía o porto RPC %u para escoitar sobre IPv6, voltando a IPv4: %s + + + Bind to given address and always listen on it. Use [host]:port notation for IPv6 + Enlazar a unha dirección dada e escoitar sempre nela. Emprega a notación [host]:post para IPv6 + + + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + Entra en modo de test de regresión, que emprega unha cadea especial na que os bloques poden ser resoltos instantáneamente. Esto está pensado para ferramentes de testing de regresión e desenvolvemento de aplicacións. + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) + + + + Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Erro: A transacción foi rexeitada! Esto podería suceder se unha das moedas do teu moedeiro xa foi gastada, como se usas unha copia de wallet.dat e hai moedas que se gastaron na copia pero non foron marcadas como gastadas aquí. + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! + Erro: Esta transacción require unha tarifa de transacción de alomenos %s debido á súa cantidade, complexidade ou emprego de fondos recentemente recibidos! + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + Executar comando cando unha transacción do moedeiro cambia (%s no comando é substituído por TxID) + + + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + + + + This is a pre-release test build - use at your own risk - do not use for mining or merchant applications + Esta é unha build de test pre-lanzamento - emprégaa baixo o teu propio risco - non empregar para minado ou aplicacións de comerciantes + + + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + Precaución: -paytxfee está posto moi algo! Esta é a tarifa de transacción que ti pagarás se envías unha transacción. + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. + Precaución; Por favor revisa que a data e hora do teu ordenador son correctas! Se o teu reloxo está equivocato Myriadcoin non funcionará adecuadamente. + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + Precaución: A rede non parece estar totalmente de acordo! Algúns mineitos parecen estar experimentando problemas. + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + Precaución: Non parece que esteamos totalmente de acordo cos nosos pares! Pode que precises actualizar, ou outros nodos poden precisar actualizarse. + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + Precaución: erro lendo wallet.dat! Tódalas claves lidas correctamente, pero os datos de transacción ou as entradas do libro de direccións podrían estar ausentes ou incorrectos. + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + Precaución: wallet.dat corrupto, datos salvagardados! O wallet.dat orixinal foi gardado como wallet.{timestamp}.bak en %s; se o teu balance ou transaccións son incorrectas deberías restauralas dende unha copia de seguridade. + + + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + <categoría> pode ser: + + + Attempt to recover private keys from a corrupt wallet.dat + Tentar recuperar claves privadas dende un wallet.dat corrupto + + + Myriadcoin Core Daemon + + + + Block creation options: + Opcións de creación de bloque: + + + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + + Connect only to the specified node(s) + Conectar so ao(s) nodo(s) especificado(s) + + + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + Conectar a JSON-RPC no <porto> (por defecto: 8332 ou testnet: 18332) + + + Connection options: + + + + Corrupted block database detected + Detectada base de datos de bloques corrupta. + + + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + + Discover own IP address (default: 1 when listening and no -externalip) + Descobrir dirección IP propia (por defecto: 1 se á escoita e non -externalip) + + + Do not load the wallet and disable wallet RPC calls + + + + Do you want to rebuild the block database now? + Queres reconstruír a base de datos de bloques agora? + + + Error initializing block database + Erro inicializando a base de datos de bloques + + + Error initializing wallet database environment %s! + Erro inicializando entorno de base de datos de moedeiro %s! + + + Error loading block database + Erro cargando base de datos do bloque + + + Error opening block database + Erro abrindo base de datos de bloques + + + Error: Disk space is low! + Erro: Espacio en disco escaso! + + + Error: Wallet locked, unable to create transaction! + Erro: Moedeiro bloqueado, imposible crear transacción! + + + Error: system error: + Erro: erro do sistema: + + + Failed to listen on any port. Use -listen=0 if you want this. + Fallou escoitar en calquera porto. Emprega -listen=0 se queres esto. + + + Failed to read block info + Fallou a lectura da información do bloque + + + Failed to read block + Fallou a lectura do bloque + + + Failed to sync block index + Fallou a sincronización do índice do bloque + + + Failed to write block index + Fallou a escritura do índice do bloque + + + Failed to write block info + Fallou a escritura da información do bloque + + + Failed to write block + Fallou a escritura do bloque + + + Failed to write file info + Fallou a escritura da información do arquivo + + + Failed to write to coin database + Fallou a escritura na base de datos de moedas + + + Failed to write transaction index + Fallou a escritura do índice de transaccións + + + Failed to write undo data + Fallou a escritura dos datos para desfacer + + + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + + Find peers using DNS lookup (default: 1 unless -connect) + Atopar pares usando lookup DNS (por defecto: 1 agás -connect) + + + Force safe mode (default: 0) + + + + Generate coins (default: 0) + Xerar moedas (por defecto: 0) + + + How many blocks to check at startup (default: 288, 0 = all) + Cantos bloques para chequear ao arrancar (por defecto: 288, 0 = todos) + + + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + Bloque genesis incorrecto o no existente. Datadir erróneo para a rede? + + + Invalid -onion address: '%s' + Dirección -onion inválida: '%s' + + + Not enough file descriptors available. + Non hai suficientes descritores de arquivo dispoñibles. + + + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + + Rebuild block chain index from current blk000??.dat files + Reconstruír índice de cadea de bloque dende os ficheiros actuais blk000??.dat + + + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + + Set the number of threads to service RPC calls (default: 4) + Fixar o número de fíos para as chamadas aos servicios RPC (por defecto: 4) + + + Specify wallet file (within data directory) + Especificar arquivo do moedeiro (dentro do directorio de datos) + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + Emprego (desaconsellado, usar myriadcoin-cli) + + + Verifying blocks... + Verificando bloques... + + + Verifying wallet... + Verificando moedeiro... + + + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + O moedeiro %s reside fóra do directorio de datos %s + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + Precisas reconstruír a base de datos empregando -reindex para cambiar -txindex + + + Imports blocks from external blk000??.dat file + Importa bloques dende arquivos blk000??.dat externos + + + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + Executar comando cando se recibe unha alerta relevante ou vemos un fork realmente longo (%s no cmd é substituído pola mensaxe) + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + + + + Information + Información + + + Invalid amount for -minrelaytxfee=<amount>: '%s' + Cantidade inválida para -minrelaytxfee=<cantidade>: '%s' + + + Invalid amount for -mintxfee=<amount>: '%s' + Cantidade inválida para -mintxfee=<cantidade>: '%s' + + + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + + Maintain a full transaction index (default: 0) + Manter un índice completo de transaccións (por defecto: 0) + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + Máximo buffer por-conexión para recibir, <n>*1000 bytes (por defecto: 5000) + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + Máximo buffer por-conexión para enviar, <n>*1000 bytes (por defecto: 1000) + + + Only accept block chain matching built-in checkpoints (default: 1) + Aceptar so cadeas de bloques coincidentes con check-points incorporados (por defecto: 1) + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + Conectar so a nodos na rede <net> (IPv4, IPv6 ou Tor) + + + Print block on startup, if found in block index + + + + Print block tree on startup (default: 0) + + + + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + + + + SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + Opcións SSL: (ver ńa Wiki Myriadcoin as instrucción de configuración de SSL) + + + Send command to Myriadcoin Core + + + + Send trace/debug info to console instead of debug.log file + Enviar traza/información de depuración á consola en lugar de ao arquivo debug.log + + + Set minimum block size in bytes (default: 0) + Fixar tamaño mínimo de bloque en bytes (por defecto: 0) + + + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + Recortar o arquivo debug.log ao arrancar o cliente (por defecto: 1 cando no-debug) + + + Signing transaction failed + Fallou a sinatura da transacción + + + Specify connection timeout in milliseconds (default: 5000) + Especificar tempo límite da conexión en milisegundos (por defecto: 5000) + + + Start Myriadcoin Core Daemon + + + + System error: + Erro do sistema: + + + Transaction amount too small + A cantidade da transacción é demasiado pequena + + + Transaction amounts must be positive + As cantidades da transacción deben ser positivas + + + Transaction too large + A transacción é demasiado grande + + + Use UPnP to map the listening port (default: 0) + Usar UPnP para mapear o porto de escoita (por defecto: 0) + + + Use UPnP to map the listening port (default: 1 when listening) + Usar UPnP para mapear o porto de escoita (por defecto: 1 se á escoita) + + + Username for JSON-RPC connections + Nome de usuario para conexións JSON-RPC + + + Warning + Precaución + + + Warning: This version is obsolete, upgrade required! + Precaución: Esta versión é obsoleta, precísase unha actualización! + + + Zapping all transactions from wallet... + + + + on startup + + + + version + versión + + + wallet.dat corrupt, salvage failed + wallet.dat corrupto, fallou o gardado + + + Password for JSON-RPC connections + Contrasinal para conexións JSON-RPC + + + Allow JSON-RPC connections from specified IP address + Permitir conexións JSON-RPC dende direccións IP especificadas + + + Send commands to node running on <ip> (default: 127.0.0.1) + Enviar comandos a nodo executando na <ip> (por defecto: 127.0.0.1) + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + Executar comando cando o mellor bloque cambie (%s no comando é sustituído polo hash do bloque) + + + Upgrade wallet to latest format + Actualizar moedeiro ao formato máis recente + + + Set key pool size to <n> (default: 100) + Fixar tamaño do pool de claves a <n> (por defecto: 100) + + + Rescan the block chain for missing wallet transactions + Rescanear transaccións ausentes na cadea de bloques + + + Use OpenSSL (https) for JSON-RPC connections + Empregar OpenSSL (https) para conexións JSON-RPC + + + Server certificate file (default: server.cert) + Arquivo de certificado do servidor (por defecto: server.cert) + + + Server private key (default: server.pem) + Clave privada do servidor (por defecto: server.perm) + + + This help message + Esta mensaxe de axuda + + + Unable to bind to %s on this computer (bind returned error %d, %s) + Imposible enlazar con %s neste ordenador (enlace devolveu erro %d, %s) + + + Allow DNS lookups for -addnode, -seednode and -connect + Permitir lookup de DNS para -addnote, -seednote e -connect + + + Loading addresses... + Cargando direccións... + + + Error loading wallet.dat: Wallet corrupted + Erro cargando wallet.dat: Moedeiro corrupto + + + Error loading wallet.dat: Wallet requires newer version of Myriadcoin + Erro cargando wallet.dat: O moedeiro precisa unha versión máis nova de Myriadcoin + + + Wallet needed to be rewritten: restart Myriadcoin to complete + Precísase rescribir o moedeiro: reinicie Myriadcoin para completar + + + Error loading wallet.dat + Erro cargando wallet.dat + + + Invalid -proxy address: '%s' + Dirección -proxy inválida: '%s' + + + Unknown network specified in -onlynet: '%s' + Rede descoñecida especificada en -onlynet: '%s' + + + Unknown -socks proxy version requested: %i + Versión solicitada de proxy -socks descoñecida: %i + + + Cannot resolve -bind address: '%s' + Non se pode resolver a dirección -bind: '%s' + + + Cannot resolve -externalip address: '%s' + Non se pode resolver dirección -externalip: '%s' + + + Invalid amount for -paytxfee=<amount>: '%s' + Cantidade inválida para -paytxfee=<cantidade>: '%s' + + + Invalid amount + Cantidade inválida + + + Insufficient funds + Fondos insuficientes + + + Loading block index... + Cargando índice de bloques... + + + Add a node to connect to and attempt to keep the connection open + Engadir un nodo ao que conectarse e tentar manter a conexión aberta + + + Loading wallet... + Cargando moedeiro... + + + Cannot downgrade wallet + Non se pode desactualizar o moedeiro + + + Cannot write default address + Non se pode escribir a dirección por defecto + + + Rescanning... + Rescaneando... + + + Done loading + Carga completa + + + To use the %s option + Empregar a opción %s + + + Error + Erro + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + Debes fixar rpcpassword=<contrasinal> no arquivo de configuración: +%s +Se o arquivo non existe, debes crealo con permisos de so lectura para o propietario. + + + \ No newline at end of file diff --git a/src/qt/locale/bitcoin_gu_IN.ts b/src/qt/locale/bitcoin_gu_IN.ts index 0213bebf..94c97659 100644 --- a/src/qt/locale/bitcoin_gu_IN.ts +++ b/src/qt/locale/bitcoin_gu_IN.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - બીટકોઈન વિષે - - - - <b>Myriadcoin</b> version + About Myriadcoin Core + + + + <b>Myriadcoin Core</b> version - This is experimental software. @@ -23,153 +19,128 @@ This product includes software developed by the OpenSSL Project for use in the O - Copyright - - The Myriadcoin developers + The Myriadcoin Core developers + + + + (%1-bit) AddressBookPage - - Address Book - - - - Double-click to edit address or label - Create a new address - + &New + + + Copy the currently selected address to the system clipboard - - &New Address + &Copy - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + C&lose - &Copy Address - - Show &QR Code - - - - - Sign a message to prove you own a Myriadcoin address - - - - - Sign &Message - - - - Delete the currently selected address from the list - Export the data in the current tab to a file - &Export - - Verify a message to ensure it was signed with a specified Myriadcoin address - - - - - &Verify Message - - - - &Delete - + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + Copy &Label - &Edit - - Send &Coins + Export Address List - - Export Address Book Data - - - - Comma separated file (*.csv) - - Error exporting + Exporting Failed - - Could not write to file %1. + There was an error trying to save the address list to %1. AddressTableModel - Label - Address - (no label) @@ -177,140 +148,106 @@ This product includes software developed by the OpenSSL Project for use in the O AskPassphraseDialog - Passphrase Dialog - Enter passphrase - New passphrase - Repeat new passphrase - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Encrypt wallet - This operation needs your wallet passphrase to unlock the wallet. - Unlock wallet - This operation needs your wallet passphrase to decrypt the wallet. - Decrypt wallet - Change passphrase - Enter the old and new passphrase to the wallet. - Confirm wallet encryption - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! - Are you sure you wish to encrypt your wallet? - 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. - - Warning: The Caps Lock key is on! - - Wallet encrypted - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. - - - - Wallet encryption failed - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - - The supplied passphrases do not match. - Wallet unlock failed - - - The passphrase entered for the wallet decryption was incorrect. - Wallet decryption failed - Wallet passphrase was successfully changed. @@ -318,319 +255,286 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - Sign &message... - Synchronizing with network... - &Overview - + Node + + + Show general overview of wallet - &Transactions - Browse transaction history - - Edit the list of stored addresses and labels - - - - - Show the list of addresses for receiving payments - - - - E&xit - Quit application - Show information about Myriadcoin - About &Qt - Show information about Qt - &Options... - &Encrypt Wallet... - &Backup Wallet... - &Change Passphrase... - + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + Importing blocks from disk... - Reindexing blocks on disk... - Send coins to a Myriadcoin address - Modify configuration options for Myriadcoin - Backup wallet to another location - Change the passphrase used for wallet encryption - &Debug window - Open debugging and diagnostic console - &Verify message... - - Myriadcoin - Wallet - &Send - &Receive - - &Addresses - - - - - &About Myriadcoin - - - - &Show / Hide - Show or hide the main Window - Encrypt the private keys that belong to your wallet - Sign messages with your Myriadcoin addresses to prove you own them - Verify messages to ensure they were signed with specified Myriadcoin addresses - &File - &Settings - &Help - Tabs toolbar - - [testnet] - + Myriadcoin Core + + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + Myriadcoin client - %n active connection(s) to Myriadcoin network - No block source available... - Processed %1 of %2 (estimated) blocks of transaction history. - Processed %1 blocks of transaction history. - %n hour(s) - %n day(s) - %n week(s) - + %1 and %2 + + + + %n year(s) + + + %1 behind - Last received block was generated %1 ago. - Transactions after this will not yet be visible. - Error - Warning - Information - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - Up to date - Catching up... - - Confirm transaction fee - - - - Sent transaction - Incoming transaction - Date: %1 Amount: %2 Type: %3 @@ -639,29 +543,14 @@ Address: %4 - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. @@ -669,329 +558,647 @@ Address: %4 ClientModel - Network Alert + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + + + + Address + + + + Date + + + + Confirmations + + + + Confirmed + + + + Priority + + + + Copy address + + + + Copy label + + + + Copy amount + + + + Copy transaction ID + + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + + + + Dust + + + + yes + + + + no + + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + + + + change from %1 (%2) + + + + (change) + + + EditAddressDialog - Edit Address - &Label - - The label associated with this address book entry + The label associated with this address list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. - &Address - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - New receiving address - New sending address - Edit receiving address - Edit sending address - The entered address "%1" is already in the address book. - The entered address "%1" is not a valid Myriadcoin address. - Could not unlock wallet. - New key generation failed. - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt + A new data directory will be created. + + + + name + + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core - version - Usage: - command-line options - UI options - Set language, for example "de_DE" (default: system locale) - Start minimized - + Set SSL root certificates for payment request (default: -system-) + + + Show splash screen on startup (default: 1) + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + + + + Error: Specified data directory "%1" can not be created. + + + + Error + + + + GB of free space available + + + + (of %1GB needed) + + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open + + OptionsDialog - Options - &Main - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. - Pay transaction &fee - Automatically start Myriadcoin after logging in to the system. - &Start Myriadcoin on system login - + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + Reset all client options to default. - &Reset Options - &Network - + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. - Map port using &UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - - - - - &Connect through SOCKS proxy: - - - - Proxy &IP: - - IP address of the proxy (e.g. 127.0.0.1) - - - - &Port: - Port of the proxy (e.g. 9050) - SOCKS &Version: - SOCKS version of the proxy (e.g. 5) - &Window - Show only a tray icon after minimizing the window. - &Minimize to the tray instead of the taskbar - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. - M&inimize on close - &Display - User Interface &language: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. - &Unit to show amounts in: - Choose the default subdivision unit to show in the interface and when sending coins. - Whether to show Myriadcoin addresses in the transaction list or not. - &Display addresses in transaction list - + Whether to show coin control features or not. + + + &OK - &Cancel - - &Apply - - - - default - + none + + + Confirm options reset - - Some settings may require a client restart to take effect. + Client restart required to activate changes. - - Do you want to proceed? + Client will be shutdown, do you want to proceed? - - - Warning + This change would require a client restart. - - - This setting will take effect after restarting Myriadcoin. - - - - The supplied proxy address is invalid. @@ -999,59 +1206,54 @@ Address: %4 OverviewPage - Form - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. - - Balance: - - - - - Unconfirmed: - - - - Wallet - + Available: + + + + Your current spendable balance + + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + + + Immature: - Mined balance that has not yet matured - + Total: + + + + Your current total balance + + + <b>Recent transactions</b> - - Your current balance - - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - - - - - out of sync @@ -1059,579 +1261,856 @@ Address: %4 PaymentServer - + URI handling + + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + Cannot start myriadcoin: click-to-pay handler + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + + + + Network request error + + - QRCodeDialog + QObject - - QR Code Dialog + Myriadcoin - - Request Payment + Error: Specified data directory "%1" does not exist. - - Amount: + Error: Cannot parse configuration file: %1. Only use key=value syntax. - - Label: + Error: Invalid combination of -regtest and -testnet. - - Message: + Myriadcoin Core didn't yet exit safely... - - &Save As... + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + + QRImageWidget + + &Save Image... - - Error encoding URI into QR Code. + &Copy Image - - The entered amount is invalid, please check. - - - - - Resulting URI too long, try to reduce the text for label / message. - - - - Save QR Code - - PNG Images (*.png) + PNG Image (*.png) RPCConsole - Client name - - - - - - - - - - N/A - Client version - &Information - + Debug window + + + + General + + + Using OpenSSL version - Startup time - Network - + Name + + + Number of connections - - On testnet - - - - Block chain - Current number of blocks - Estimated total blocks - Last block time - &Open - - Command-line options - - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - - - - - &Show - - - - &Console - + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + Build date - - Myriadcoin - Debug window - - - - - Myriadcoin Core - - - - Debug log file - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. - Clear console - Welcome to the Myriadcoin RPC console. - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Type <b>help</b> for an overview of available commands. + + %1 B + + + + %1 KB + + + + %1 MB + + + + %1 GB + + + + %1 m + + + + %1 h + + + + %1 h %2 m + + + + + ReceiveCoinsDialog + + &Amount: + + + + &Label: + + + + &Message: + + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + + + + Clear + + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + + + + Remove the selected entries from the list + + + + Remove + + + + Copy label + + + + Copy message + + + + Copy amount + + + + + ReceiveRequestDialog + + QR Code + + + + Copy &URI + + + + Copy &Address + + + + &Save Image... + + + + Request payment to %1 + + + + Payment information + + + + URI + + + + Address + + + + Amount + + + + Label + + + + Message + + + + Resulting URI too long, try to reduce the text for label / message. + + + + Error encoding URI into QR Code. + + + + + RecentRequestsTableModel + + Date + + + + Label + + + + Message + + + + Amount + + + + (no label) + + + + (no message) + + + + (no amount) + + SendCoinsDialog - - - - - - - - Send Coins - + Coin Control Features + + + + Inputs... + + + + automatically selected + + + + Insufficient funds! + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + Send to multiple recipients at once - Add &Recipient - - Remove all transaction fields + Clear all fields of the form. - Clear &All - Balance: - - 123.456 BTC - - - - Confirm the send action - S&end - - <b>%1</b> to %2 (%3) - - - - Confirm send coins - - Are you sure you want to send %1? + %1 to %2 - - and + Copy quantity + + + + Copy amount + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + + + + or - The recipient address is not valid, please recheck. - The amount to pay must be larger than 0. - The amount exceeds your balance. - The total exceeds your balance when the %1 transaction fee is included. - Duplicate address found, can only send to each address once per send operation. - - Error: Transaction creation failed! + Transaction creation failed! - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + + + + (no label) + + + + Warning: Unknown change address + + + + Are you sure you want to send? + + + + added as transaction fee + + + + Payment request expired + + + + Invalid payment address %1 SendCoinsEntry - - Form - - - - A&mount: - Pay &To: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book - &Label: - - Choose address from address book + Choose previously used address + + + + This is a normal payment. - Alt+A - Paste address from clipboard - Alt+P - - Remove this recipient + Remove this entry - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + + + + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. SignVerifyMessageDialog - Signatures - Sign / Verify a Message - &Sign Message - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book + Choose previously used address - - Alt+A - Paste address from clipboard - Alt+P - Enter the message you want to sign here - Signature - Copy the current signature to the system clipboard - Sign the message to prove you own this Myriadcoin address - Sign &Message - Reset all sign message fields - - Clear &All - &Verify Message - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address - Verify &Message - Reset all verify message fields - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature - - Enter Myriadcoin signature - - - - - The entered address is invalid. - - - - Please check the address and try again. - - The entered address does not refer to a key. - Wallet unlock was cancelled. - Private key for the entered address is not available. - Message signing failed. - Message signed. - The signature could not be decoded. - - Please check the signature and try again. - The signature did not match the message digest. - Message verification failed. - Message verified. @@ -1639,186 +2118,160 @@ Address: %4 SplashScreen - - The Myriadcoin developers + Myriadcoin Core + + + + The Myriadcoin Core developers - [testnet] + + TrafficGraphWidget + + KB/s + + + TransactionDesc - Open until %1 - + conflicted + + + %1/offline - %1/unconfirmed - %1 confirmations - Status - , broadcast through %n node(s) - Date - Source - Generated - - From - - - To - - own address - label - - - - - Credit - matures in %n more block(s) - not accepted - - - - Debit - Transaction fee - Net amount - Message - Comment - Transaction ID - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Merchant + + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Debug information - Transaction - Inputs - Amount - true - false - , has not been successfully broadcast yet - Open for %n more block(s) - unknown @@ -1826,12 +2279,10 @@ Address: %4 TransactionDescDialog - Transaction details - This pane shows a detailed description of the transaction @@ -1839,117 +2290,102 @@ Address: %4 TransactionTableModel - Date - Type - Address - Amount + + Immature (%1 confirmations, will be available after %2) + + - Open for %n more block(s) - Open until %1 - - Offline (%1 confirmations) - - - - - Unconfirmed (%1 of %2 confirmations) - - - - Confirmed (%1 confirmations) - - - Mined balance will be available when it matures in %n more block(s) - - - This block was not received by any other nodes and will probably not be accepted! - Generated but not accepted - + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + Received with - Received from - Sent to - Payment to yourself - Mined - (n/a) - Transaction status. Hover over this field to show number of confirmations. - Date and time that the transaction was received. - Type of transaction. - Destination address of transaction. - Amount removed from or added to balance. @@ -1957,176 +2393,156 @@ Address: %4 TransactionView - - All - Today - This week - This month - Last month - This year - Range... - Received with - Sent to - To yourself - Mined - Other - Enter address or label to search - Min amount - Copy address - Copy label - Copy amount - Copy transaction ID - Edit label - Show transaction details - - Export Transaction Data + Export Transaction History + + + + Exporting Failed + + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + + + + The transaction history was successfully saved to %1. - Comma separated file (*.csv) - Confirmed - Date - Type - Label - Address - Amount - ID - - Error exporting - - - - - Could not write to file %1. - - - - Range: - to + + WalletFrame + + No wallet has been loaded. + + + WalletModel - Send Coins @@ -2134,160 +2550,121 @@ Address: %4 WalletView - &Export - Export the data in the current tab to a file - Backup Wallet - Wallet Data (*.dat) - Backup Failed - - There was an error trying to save the wallet data to the new location. + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. - Backup Successful - - - The wallet data was successfully saved to the new location. - - bitcoin-core - - Myriadcoin version - - - - Usage: - - Send command to -server or myriadcoind - - - - List commands - Get help for a command - Options: - Specify configuration file (default: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) - Specify data directory - - Set database cache size in megabytes (default: 25) - - - - Listen for connections on <port> (default: 8333 or testnet: 18333) - Maintain at most <n> connections to peers (default: 125) - Connect to a node to retrieve peer addresses, and disconnect - Specify your own public address - Threshold for disconnecting misbehaving peers (default: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) - Accept command line and JSON-RPC commands - + Myriadcoin Core RPC client version + + + Run in the background as a daemon and accept commands - Use the test network - Accept connections from outside (default: 1 if no -proxy or -connect) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2302,612 +2679,686 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications - + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. - + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + Attempt to recover private keys from a corrupt wallet.dat - + Myriadcoin Core Daemon + + + Block creation options: - + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + Connect only to the specified node(s) - + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + Corrupted block database detected - + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + Discover own IP address (default: 1 when listening and no -externalip) - + Do not load the wallet and disable wallet RPC calls + + + Do you want to rebuild the block database now? - Error initializing block database - Error initializing wallet database environment %s! - Error loading block database - Error opening block database - Error: Disk space is low! - Error: Wallet locked, unable to create transaction! - Error: system error: - Failed to listen on any port. Use -listen=0 if you want this. - Failed to read block info - Failed to read block - Failed to sync block index - Failed to write block index - Failed to write block info - Failed to write block - Failed to write file info - Failed to write to coin database - Failed to write transaction index - Failed to write undo data - + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + Find peers using DNS lookup (default: 1 unless -connect) - + Force safe mode (default: 0) + + + Generate coins (default: 0) - How many blocks to check at startup (default: 288, 0 = all) - - How thorough the block verification is (0-4, default: 3) + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' - Not enough file descriptors available. - + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + Rebuild block chain index from current blk000??.dat files - + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + Set the number of threads to service RPC calls (default: 4) - + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + Verifying blocks... - Verifying wallet... - + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + + + Imports blocks from external blk000??.dat file - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) - Information - - Invalid -tor address: '%s' - - - - Invalid amount for -minrelaytxfee=<amount>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' - + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + Maintain a full transaction index (default: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Only accept block chain matching built-in checkpoints (default: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - Output extra debugging information. Implies all other -debug* options + Print block on startup, if found in block index - - Output extra network debugging information + Print block tree on startup (default: 0) - - Prepend debug output with timestamp + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) - - Select the version of socks proxy to use (4-5, default: 5) + Send command to Myriadcoin Core - Send trace/debug info to console instead of debug.log file - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - Set minimum block size in bytes (default: 0) - + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + Shrink debug.log file on client startup (default: 1 when no -debug) - Signing transaction failed - Specify connection timeout in milliseconds (default: 5000) - + Start Myriadcoin Core Daemon + + + System error: - Transaction amount too small - Transaction amounts must be positive - Transaction too large - Use UPnP to map the listening port (default: 0) - Use UPnP to map the listening port (default: 1 when listening) - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - Username for JSON-RPC connections - Warning - Warning: This version is obsolete, upgrade required! - - You need to rebuild the databases using -reindex to change -txindex + Zapping all transactions from wallet... + + + + on startup + + + + version - wallet.dat corrupt, salvage failed - Password for JSON-RPC connections - Allow JSON-RPC connections from specified IP address - Send commands to node running on <ip> (default: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) - Upgrade wallet to latest format - Set key pool size to <n> (default: 100) - Rescan the block chain for missing wallet transactions - Use OpenSSL (https) for JSON-RPC connections - Server certificate file (default: server.cert) - Server private key (default: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - This help message - Unable to bind to %s on this computer (bind returned error %d, %s) - - Connect through socks proxy - - - - Allow DNS lookups for -addnode, -seednode and -connect - Loading addresses... - Error loading wallet.dat: Wallet corrupted - Error loading wallet.dat: Wallet requires newer version of Myriadcoin - Wallet needed to be rewritten: restart Myriadcoin to complete - Error loading wallet.dat - Invalid -proxy address: '%s' - Unknown network specified in -onlynet: '%s' - Unknown -socks proxy version requested: %i - Cannot resolve -bind address: '%s' - Cannot resolve -externalip address: '%s' - Invalid amount for -paytxfee=<amount>: '%s' - Invalid amount - Insufficient funds - Loading block index... - Add a node to connect to and attempt to keep the connection open - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - Loading wallet... - Cannot downgrade wallet - Cannot write default address - Rescanning... - Done loading - To use the %s option - Error - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_he.ts b/src/qt/locale/bitcoin_he.ts index c54cdaaf..e8625cdd 100644 --- a/src/qt/locale/bitcoin_he.ts +++ b/src/qt/locale/bitcoin_he.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - אודות ביטקוין + About Myriadcoin Core + על אודות ליבת ביטקוין - - <b>Myriadcoin</b> version - גרסת <b>ביטקוין</b> + <b>Myriadcoin Core</b> version + <b>קליינט ביטקוין</b> גירסאת - This is experimental software. @@ -28,153 +24,128 @@ This product includes software developed by the OpenSSL Project for use in the O המוצר הזה כולל תוכנה שפותחה ע"י פרויקט OpenSSL לשימוש בתיבת הכלים OpenSSL (http://www.openssl.org/) ותוכנה קריפטוגרפית שנכתבה ע"י אריק יאנג (eay@cryptsoft.com) ותוכנת UPnP שנכתבה ע"י תומס ברנרד. - Copyright זכויות יוצרים - - The Myriadcoin developers + The Myriadcoin Core developers + + + + (%1-bit) AddressBookPage - - Address Book - פנקס כתובות - - - Double-click to edit address or label לחץ לחיצה כפולה לערוך כתובת או תוית - Create a new address יצירת כתובת חדשה - + &New + &חדש + + Copy the currently selected address to the system clipboard העתק את הכתובת המסומנת ללוח העריכה - - &New Address - כתובת חדשה + &Copy + &העתק - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - אלה כתובת הביטקוין שלך עבור קבלת תשלומים. ייתכן ותרצה לתת כתובת שונה לכל שולח כדי שתוכל לעקוב אחר מי משלם לך. + C&lose + סגירה - &Copy Address העתק כתובת - - Show &QR Code - הצג &קוד QR - - - - Sign a message to prove you own a Myriadcoin address - חתום על הודעה בכדי להוכיח כי אתה הבעלים של כתובת ביטקוין. - - - - Sign &Message - חתום על הודעה - - - Delete the currently selected address from the list מחק את הכתובת שנבחרה מהרשימה - Export the data in the current tab to a file יצוא הנתונים בטאב הנוכחי לקובץ - &Export - + &ייצא - - Verify a message to ensure it was signed with a specified Myriadcoin address - אמת הודעה בכדי להבטיח שהיא נחתמה עם כתובת ביטקוין מסוימת. - - - - &Verify Message - אמת הודעה - - - &Delete - מחק + &מחק + + + Choose the address to send coins to + בחר את הכתובת אליה תרצה לשלוח את המטבעות + + + Choose the address to receive coins with + בחר את הכתובת איתה תרצה לקבל את המטבעות + + + C&hoose + בחר + + + Sending addresses + כתובת לשליחה + + + Receiving addresses + קבל כתובות - These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. אלה כתובת הביטקוין שלך עבור שליחת תשלומים. תמיד בדוק את מספר ואת כתובות מקבלי התשלומים לפני שליחת מטבעות. - + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + אלה כתובות הביטקוין שלך עבור קבלת תשלומים. מומלץ להשתמש בכתובת חדשה לכל פעולה. + + Copy &Label העתק תוית - &Edit עריכה - - Send &Coins - שלח מטבעות + Export Address List + ייצוא רשימת כתובות - - Export Address Book Data - יצוא נתוני פנקס כתובות - - - Comma separated file (*.csv) קובץ מופרד בפסיקים (*.csv) - - Error exporting - שגיאה ביצוא + Exporting Failed + הייצוא נכשל - - Could not write to file %1. - לא מסוגל לכתוב לקובץ %1. + There was an error trying to save the address list to %1. + AddressTableModel - Label תוית - Address כתובת - (no label) (ללא תוית) @@ -182,140 +153,106 @@ This product includes software developed by the OpenSSL Project for use in the O AskPassphraseDialog - Passphrase Dialog שיח סיסמא - Enter passphrase - הכנס סיסמא + הכנס סיסמה - New passphrase סיסמה חדשה - Repeat new passphrase חזור על הסיסמה החדשה - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. הכנס את הסיסמה החדשה לארנק. <br/>אנא השתמש בסיסמה המכילה <b>10 תוים אקראיים או יותר</b>, או <b>שמונה מילים או יותר</b>. - Encrypt wallet הצפן ארנק - This operation needs your wallet passphrase to unlock the wallet. הפעולה הזו דורשת את סיסמת הארנק שלך בשביל לפתוח את הארנק. - Unlock wallet פתיחת ארנק - This operation needs your wallet passphrase to decrypt the wallet. הפעולה הזו דורשת את סיסמת הארנק שלך בשביל לפענח את הארנק. - Decrypt wallet פענוח ארנק - Change passphrase שינוי סיסמה - Enter the old and new passphrase to the wallet. הכנס את הסיסמות הישנה והחדשה לארנק. - Confirm wallet encryption אשר הצפנת ארנק - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! אזהרה: אם אתה מצפין את הארנק ומאבד את הסיסמא, אתה <b>תאבד את כל הביטקוינים שלך</b>! - Are you sure you wish to encrypt your wallet? האם אתה בטוח שברצונך להצפין את הארנק? - 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. חשוב! כל גיבוי קודם שעשית לארנק שלך יש להחליף עם קובץ הארנק המוצפן שזה עתה נוצר. מסיבות אבטחה, גיבויים קודמים של קובץ הארנק הלא-מוצפן יהפכו לחסרי שימוש ברגע שתתחיל להשתמש בארנק החדש המוצפן. - - Warning: The Caps Lock key is on! זהירות: מקש Caps Lock מופעל! - - Wallet encrypted הארנק הוצפן - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. ביטקוין ייסגר עכשיו כדי להשלים את תהליך ההצפנה. זכור שהצפנת הארנק שלך אינו יכול להגן באופן מלא על הביטקוינים שלך מתוכנות זדוניות המושתלות על המחשב. - - - - Wallet encryption failed הצפנת הארנק נכשלה - Wallet encryption failed due to an internal error. Your wallet was not encrypted. הצפנת הארנק נכשלה עקב שגיאה פנימית. הארנק שלך לא הוצפן. - - The supplied passphrases do not match. הסיסמות שניתנו אינן תואמות. - Wallet unlock failed פתיחת הארנק נכשלה - - - The passphrase entered for the wallet decryption was incorrect. הסיסמה שהוכנסה לפענוח הארנק שגויה. - Wallet decryption failed פענוח הארנק נכשל - Wallet passphrase was successfully changed. סיסמת הארנק שונתה בהצלחה. @@ -323,319 +260,286 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - Sign &message... חתום על הודעה - Synchronizing with network... מסתנכרן עם הרשת... - &Overview &סקירה - + Node + + + Show general overview of wallet הצג סקירה כללית של הארנק - &Transactions &פעולות - Browse transaction history דפדף בהיסטוריית הפעולות - - Edit the list of stored addresses and labels - ערוך את רשימת הכתובות והתויות - - - - Show the list of addresses for receiving payments - הצג את רשימת הכתובות לקבלת תשלומים - - - E&xit י&ציאה - Quit application סגור תוכנה - Show information about Myriadcoin הצג מידע על ביטקוין - About &Qt אודות Qt - Show information about Qt הצג מידע על Qt - &Options... &אפשרויות - &Encrypt Wallet... הצפן ארנק - &Backup Wallet... גיבוי ארנק - &Change Passphrase... שנה סיסמא - + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + Importing blocks from disk... מייבא בלוקים מהדיסק... - Reindexing blocks on disk... מחדש את אינדקס הבלוקים בדיסק... - Send coins to a Myriadcoin address שלח מטבעות לכתובת ביטקוין - Modify configuration options for Myriadcoin שנה אפשרויות תצורה עבור ביטקוין - Backup wallet to another location גיבוי הארנק למקום אחר - Change the passphrase used for wallet encryption שנה את הסיסמה להצפנת הארנק - &Debug window חלון ניפוי - Open debugging and diagnostic console פתח את לוח הבקרה לאבחון וניפוי - &Verify message... אמת הודעה... - - Myriadcoin ביטקוין - Wallet ארנק - &Send - ושלח + &שלח - &Receive וקבל - - &Addresses - וכתובות - - - - &About Myriadcoin - אודות ביטקוין - - - &Show / Hide הצג / הסתר - Show or hide the main Window הצג או הסתר את החלון הראשי - Encrypt the private keys that belong to your wallet הצפן את המפתחות הפרטיים ששייכים לארנק שלך - Sign messages with your Myriadcoin addresses to prove you own them חתום על הודעות עם כתובות הביטקוין שלך כדי להוכיח שהן בבעלותך - Verify messages to ensure they were signed with specified Myriadcoin addresses אמת הודעות כדי להבטיח שהן נחתמו עם כתובת ביטקוין מסוימות - &File &קובץ - &Settings ה&גדרות - &Help &עזרה - Tabs toolbar סרגל כלים טאבים - - [testnet] [רשת-בדיקה] - + Myriadcoin Core + ליבת ביטקוין + + + Request payments (generates QR codes and myriadcoin: URIs) + בקש תשלומים (מייצר קודיי QR וסכימות URI של :bitcoin) + + + &About Myriadcoin Core + &אודות קליינט ביטקוין + + + Show the list of used sending addresses and labels + הצג את רשימת הכתובות לשליחה שהיו בשימוש לרבות התוויות + + + Show the list of used receiving addresses and labels + הצג את רשימת הכתובות והתויות המשומשות + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + Myriadcoin client תוכנת ביטקוין - %n active connection(s) to Myriadcoin network חיבור פעיל אחד לרשת הביטקוין%n חיבורים פעילים לרשת הביטקוין - No block source available... - + אין קוד נתון - Processed %1 of %2 (estimated) blocks of transaction history. - 1% מתוך 2% (משוער) בלוקים של הסטוריית פעולת עובדו + %1 מתוך %2 (משוער) בלוקים של הסטוריית פעולות עובדו. - Processed %1 blocks of transaction history. הושלם עיבוד של %1 בלוקים של היסטוריית פעולות. - %n hour(s) %n שעה%n שעות - %n day(s) %n יום%n ימים - %n week(s) %n שבוע%n שבועות - + %1 and %2 + + + + %n year(s) + + + %1 behind 1% מאחור - Last received block was generated %1 ago. הבלוק האחרון שהתקבל נוצר לפני %1 - Transactions after this will not yet be visible. לאחר זאת פעולות נספות טרם יהיו גלויות - Error שגיאה - Warning אזהרה - Information מידע - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - פעולה זו חורגת מגבולות הגודל. עדיין באפשרותך לשלוח אותה תמורת עמלה של %1, המיועדת לצמתים שמעבדים את הפעולה שלך ועוזרת לתמוך ברשת. האם ברצונך לשלם את העמלה? - - - Up to date עדכני - Catching up... מתעדכן... - - Confirm transaction fee - אשר עמלת פעולה - - - Sent transaction פעולה שנשלחה - Incoming transaction פעולה שהתקבלה - Date: %1 Amount: %2 Type: %3 @@ -647,29 +551,14 @@ Address: %4 כתובת: %4 - - - URI handling - תפעול URI - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - לא ניתן לנתח URI! זה יכול להיגרם כתוצאה מכתובת ביטקוין לא תקינה או פרמטרי URI חסרי צורה תקינה. - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> הארנק <b>מוצפן</b> וכרגע <b>פתוח</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> הארנק <b>מוצפן</b> וכרגע <b>נעול</b> - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. שגיאה סופנית אירעה. ביטקוין אינו יכול להמשיך לפעול בבטחה ולכן ייסגר. @@ -677,329 +566,647 @@ Address: %4 ClientModel - Network Alert אזעקת רשת + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + כמות: + + + Bytes: + בייטים: + + + Amount: + כמות: + + + Priority: + קדימות: + + + Fee: + תשלום: + + + Low Output: + + + + After Fee: + לאחר עמלה: + + + Change: + שינוי: + + + (un)select all + (מחק)(בחר) הכל + + + Tree mode + מצב עץ + + + List mode + מצר רשימה + + + Amount + כמות + + + Address + כתובת + + + Date + תאריך + + + Confirmations + אישורים + + + Confirmed + מאושר + + + Priority + קדימות + + + Copy address + העתק כתובת + + + Copy label + העתק תוית + + + Copy amount + העתק כמות + + + Copy transaction ID + העתק מזהה פעולה + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + העתק כמות + + + Copy fee + העתק מחיר + + + Copy after fee + העתק אחרי עמלה + + + Copy bytes + העתק בייטים + + + Copy priority + העתק קדימות + + + Copy low output + + + + Copy change + העתק עודף + + + highest + הכי גבוה + + + higher + גבוהה יותר + + + high + גבוה + + + medium-high + בנוני גבוה + + + medium + בינוני + + + low-medium + בינוני - נמוך + + + low + נמוך + + + lower + נמוך יותר + + + lowest + הכי נמוך + + + (%1 locked) + + + + none + + + + Dust + אבק + + + yes + כן + + + no + לא + + + This label turns red, if the transaction size is greater than 1000 bytes. + תווית זו מאדימה במידה וגודל הפעולה עולה על 1000 בייט + + + This means a fee of at least %1 per kB is required. + זאת אומרת שנחוצה עמלה של לא פחות מ־%1 לכל קילו בייט. + + + Can vary +/- 1 byte per input. + הערך יכול להיות +/- בייט 1 פר כניסה + + + Transactions with higher priority are more likely to get included into a block. + העברות עם עדיפות גבוהה, יותר סיכוי שיכנסו לתוך הבלוק + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + התווית הזו הופכת לאדומה, אם אחד מהנמענים מקבל סכום אשר קטן מ 1% + + + This means a fee of at least %1 is required. + זה אומר שצריך לפחות 1% עמלה + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + (ללא תוית) + + + change from %1 (%2) + עודף מ־%1 (%2) + + + (change) + (עודף) + + EditAddressDialog - Edit Address ערוך כתובת - &Label ת&וית - - The label associated with this address book entry - התוית המשויכת לרשומה הזו בפנקס הכתובות + The label associated with this address list entry + התוית המשויכת לרשומה הזו ברשימת הכתובות + + + The address associated with this address list entry. This can only be modified for sending addresses. + הכתובת המשויכת עם רשומה זו ברשימת הכתובות. ניתן לשנות זאת רק עבור כתובות לשליחה. - &Address &כתובת - - The address associated with this address book entry. This can only be modified for sending addresses. - הכתובת המשויכת לרשומה זו בפנקס הכתובות. ניתן לשנות זאת רק עבור כתובות לשליחה. - - - New receiving address כתובת חדשה לקבלה - New sending address כתובת חדשה לשליחה - Edit receiving address ערוך כתובת לקבלה - Edit sending address ערוך כתובת לשליחה - The entered address "%1" is already in the address book. הכתובת שהכנסת "%1" כבר נמצאת בפנקס הכתובות. - The entered address "%1" is not a valid Myriadcoin address. הכתובת שהוכנסה "%1" אינה כתובת ביטקוין תקינה. - Could not unlock wallet. פתיחת הארנק נכשלה. - New key generation failed. יצירת מפתח חדש נכשלה. - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt - Myriadcoin-Qt + A new data directory will be created. + ספריית מידע חדשה תיווצר. + + + name + שם + + + Directory already exists. Add %1 if you intend to create a new directory here. + הספריה כבר קיימת. הוסף %1 אם ברצונך ליצור ספריה חדשה כאן. + + + Path already exists, and is not a directory. + הנתיב כבר קיים ואינו מצביע על ספרייה. + + + Cannot create data directory here. + לא ניתן ליצור ספריית מידע כאן. + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core + ליבת ביטקוין - version גרסה - Usage: שימוש: - command-line options אפשרויות שורת פקודה - UI options אפשרויות ממשק - Set language, for example "de_DE" (default: system locale) קבע שפה, למשל "he_il" (ברירת מחדל: שפת המערכת) - Start minimized התחל ממוזער - + Set SSL root certificates for payment request (default: -system-) + + + Show splash screen on startup (default: 1) הצג מסך פתיחה בעת הפעלה (ברירת מחדל: 1) + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + ברוך בואך + + + Welcome to Myriadcoin Core. + ברוך הבא לקליינט ביטקוין + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + מכיוון שזאת הפעם הראשונה שהתוכנה הופעלה תוכל לבחור איפה ביטקויין קור תאכסן את + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + קליינט ביטקוין יוריד וישמור העתק של שרשרת הבלוקים של ביטקוין. לפחות %1GB מהנתונים יאוכסנו בתיקיה הזו, ויגדל עם הזמן. הארנק גם יאוחסן בתיקיה הזו. + + + Use the default data directory + השתמש בברירת המחדל עבור ספריית המידע. + + + Use a custom data directory: + השתמש בספריית מידע מותאמת אישית: + + + Myriadcoin + ביטקוין + + + Error: Specified data directory "%1" can not be created. + שגיאה: אי אפשר ליצור את התיקיה "%1" + + + Error + שגיאה + + + GB of free space available + ג"ב של שטח אחסון פנוי + + + (of %1GB needed) + (מתוך %1 ג"ב נחוצים) + + + + OpenURIDialog + + Open URI + פתח URI + + + Open payment request from URI or file + + + + URI: + כתובת: + + + Select payment request file + בחירת קובץ בקשת תשלום + + + Select payment request file to open + בחירת קובץ בקשת תשלום לפתיחה + OptionsDialog - Options אפשרויות - &Main ראשי - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. - + עמלת פעולה אופציונלית לכל kB תבטיח שהפעולה שלך תעובד בזריזות. רוב הפעולות הן 1 kB. - Pay transaction &fee שלם &עמלת פעולה - Automatically start Myriadcoin after logging in to the system. הפעל את ביטקוין באופן עצמאי לאחר התחברות למערכת. - &Start Myriadcoin on system login התחל את ביטקוין בעת התחברות למערכת - + Size of &database cache + + + + MB + מגה בייט + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + Reset all client options to default. אפס כל אפשרויות התוכנה לברירת המחדל. - &Reset Options איפוס אפשרויות - &Network רשת - + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. פתח את פורט ביטקוין בנתב באופן אוטומטי. עובד רק אם UPnP מאופשר ונתמך ע"י הנתב. - Map port using &UPnP מיפוי פורט באמצעות UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - התחבר לרשת הביטקוין דרך פרוקסי SOCKS (למשל בעת התחברות דרך Tor). - - - - &Connect through SOCKS proxy: - התחבר דרך פרוקסי SOCKS - - - Proxy &IP: כתובת IP של פרוקסי: - - IP address of the proxy (e.g. 127.0.0.1) - כתובת האינטרנט של הפרוקסי (למשל 127.0.0.1) - - - &Port: פורט: - Port of the proxy (e.g. 9050) הפורט של הפרוקסי (למשל 9050) - SOCKS &Version: גרסת SOCKS: - SOCKS version of the proxy (e.g. 5) גרסת SOCKS של הפרוקסי (למשל 5) - &Window חלון - Show only a tray icon after minimizing the window. הצג סמל מגש בלבד לאחר מזעור החלון. - &Minimize to the tray instead of the taskbar מ&זער למגש במקום לשורת המשימות - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. מזער את התוכנה במקום לצאת ממנה כשהחלון נסגר. כשאפשרות זו פעילה, התוכנה תיסגר רק לאחר בחירת יציאה מהתפריט. - M&inimize on close מזער בעת סגירה - &Display תצוגה - User Interface &language: שפת ממשק המשתמש: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. ניתן לקבוע כאן את שפת ממשק המשתמש. הגדרה זו תחול לאחר הפעלה מחדש של ביטקוין. - &Unit to show amounts in: יחידת מדידה להצגת כמויות: - Choose the default subdivision unit to show in the interface and when sending coins. בחר את ברירת המחדל ליחידת החלוקה אשר תוצג בממשק ובעת שליחת מטבעות. - Whether to show Myriadcoin addresses in the transaction list or not. האם להציג כתובות ביטקוין ברשימת הפעולות או לא. - &Display addresses in transaction list הצג כתובות ברשימת הפעולות - + Whether to show coin control features or not. + + + &OK אישור - &Cancel ביטול - - &Apply - יישום - - - default ברירת מחדל - + none + + + Confirm options reset אשר את איפוס האפשרויות - - Some settings may require a client restart to take effect. - כמה מההגדרות עשויות לדרוש אתחול התוכנה כדי להיכנס לפועל. + Client restart required to activate changes. + - - Do you want to proceed? - האם ברצונך להמשיך? + Client will be shutdown, do you want to proceed? + - - - Warning - אזהרה + This change would require a client restart. + - - - This setting will take effect after restarting Myriadcoin. - הגדרה זו תחול לאחר הפעלה מחדש של ביטקוין. - - - The supplied proxy address is invalid. כתובת הפרוקסי שסופקה אינה תקינה. @@ -1007,59 +1214,54 @@ Address: %4 OverviewPage - Form טופס - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. המידע המוצג עשוי להיות מיושן. הארנק שלך מסתנכרן באופן אוטומטי עם רשת הביטקוין לאחר כינון חיבור, אך התהליך טרם הסתיים. - - Balance: - יתרה: - - - - Unconfirmed: - ממתין לאישור: - - - Wallet ארנק - + Available: + + + + Your current spendable balance + היתרה הזמינה הנוכחית + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + הסכום הכולל של פעולות שטרם אושרו, ועוד אינן נספרות בחישוב היתרה הזמינה + + Immature: לא בשל: - Mined balance that has not yet matured מאזן שנכרה וטרם הבשיל - + Total: + סך הכול: + + + Your current total balance + סך כל היתרה הנוכחית שלך + + <b>Recent transactions</b> <b>פעולות אחרונות</b> - - Your current balance - היתרה הנוכחית שלך - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - הסכום הכולל של פעולות שטרם אושרו, ועוד אינן נספרות בחישוב היתרה הנוכחית - - - - out of sync לא מסונכרן @@ -1067,579 +1269,856 @@ Address: %4 PaymentServer - + URI handling + תפעול URI + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + לא ניתן לנתח URI! זה יכול להיגרם כתוצאה מכתובת ביטקוין לא תקינה או פרמטרי URI חסרי צורה תקינה. + + + Requested payment amount of %1 is too small (considered dust). + הסכום הנדרש לתשלום %1 קטן מדי (נחשב לאבק) + + + Payment request error + שגיאה בבקשת תשלום + + Cannot start myriadcoin: click-to-pay handler לא ניתן להתחיל את ביטקוין: מפעיל לחץ-לתשלום + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + בקשות לתשלום לסקריפטיי תשלום מותאמים אישית אינן נתמכות. + + + Refund from %1 + החזר מ־%1 + + + Error communicating with %1: %2 + שגיאה בתקשורת עם %1: %2 + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + מענה שגוי משרת %1 + + + Payment acknowledged + התשלום התקבל + + + Network request error + שגיאת בקשת שרת + - QRCodeDialog + QObject - - QR Code Dialog - שיח קוד QR + Myriadcoin + ביטקוין - - Request Payment - בקש תשלום + Error: Specified data directory "%1" does not exist. + שגיאה: הספריה "%1" לא קיימת. - - Amount: - כמות: + Error: Cannot parse configuration file: %1. Only use key=value syntax. + - - Label: - תוית: + Error: Invalid combination of -regtest and -testnet. + שגיאה: שילוב בלתי חוקי של regtest- ו testnet-. - - Message: - הודעה: + Myriadcoin Core didn't yet exit safely... + - - &Save As... - &שמור בשם... + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + הכנס כתובת ביטקוין (למשל 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + &שמור תמונה.. - - Error encoding URI into QR Code. - שגיאה בקידוד URI לקוד QR + &Copy Image + &העתק תמונה - - The entered amount is invalid, please check. - הכמות שהוכנסה אינה תקינה, אנא ודא. - - - - Resulting URI too long, try to reduce the text for label / message. - המזהה המתקבל ארוך מדי, נסה להפחית את הטקסט בתוית / הודעה. - - - Save QR Code שמור קוד QR - - PNG Images (*.png) - תמונות PNG (*.png) + PNG Image (*.png) + תמונת PNG (*.png) RPCConsole - Client name שם ממשק - - - - - - - - - - N/A N/A - Client version גרסת ממשק - &Information מידע - + Debug window + חלון דיבאג + + + General + כללי + + Using OpenSSL version משתמש ב-OpenSSL גרסה - Startup time זמן אתחול - Network רשת - + Name + שם + + Number of connections מספר חיבורים - - On testnet - ברשת הבדיקה - - - Block chain שרשרת הבלוקים - Current number of blocks מספר הבלוקים הנוכחי - Estimated total blocks מספר כולל משוער של בלוקים - Last block time זמן הבלוק האחרון - &Open פתח - - Command-line options - אפשרויות שורת פקודה - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - הצג את הודעה העזרה של myriadcoin-qt כדי לקבל רשימה של אפשרויות שורת פקודה של ביטקוין. - - - - &Show - הצג - - - &Console לוח בקרה - + &Network Traffic + &תעבורת רשת + + + &Clear + & נקה + + + Totals + סכומים + + + In: + נכנס: + + + Out: + יוצא: + + Build date תאריך בניה - - Myriadcoin - Debug window - ביטקוין - חלון ניפוי - - - - Myriadcoin Core - ליבת ביטקוין - - - Debug log file קובץ יומן ניפוי - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. פתח את קובץ יומן הניפוי מתיקיית הנתונים הנוכחית. זה עשוי לקחת מספר שניות עבור קובצי יומן גדולים. - Clear console נקה לוח בקרה - Welcome to the Myriadcoin RPC console. ברוכים הבאים ללוח בקרת RPC של ביטקוין - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. השתמש בחיצים למעלה ולמטה כדי לנווט בהיסטוריה, ו- <b>Ctrl-L</b> כדי לנקות את המסך. - Type <b>help</b> for an overview of available commands. הקלד <b>help</b> בשביל סקירה של הפקודות הזמינות. + + %1 B + %1 בייט + + + %1 KB + %1 קילו בייט + + + %1 MB + %1 מגה בייט + + + %1 GB + %1 ג'יגה בייט + + + %1 m + 1% דקות + + + %1 h + %1 שעות + + + %1 h %2 m + %1 שעות %2 דקות + + + + ReceiveCoinsDialog + + &Amount: + &סכום: + + + &Label: + ת&וית: + + + &Message: + &הודעה: + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + השתמש שוב באחת מכתובות הקבלה שכבר נעשה בהן שימוש. לשימוש חוזר בכתובות ישהן השלכות אבטחה ופרטיות. השתמש בזה רק אם אתה מייצר מחדש בקשת תשלום שכבר נעשתה. + + + R&euse an existing receiving address (not recommended) + ש&ימוש חוזר בכתובת קבלה קיימת(לא מומלץ) + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + נקה את כל השדות + + + Clear + נקה + + + Requested payments history + + + + &Request payment + &בקש תשלום + + + Show the selected request (does the same as double clicking an entry) + + + + Show + הצג + + + Remove the selected entries from the list + + + + Remove + הסר + + + Copy label + העתק תוית + + + Copy message + + + + Copy amount + העתק כמות + + + + ReceiveRequestDialog + + QR Code + קוד QR + + + Copy &URI + העתק &URI + + + Copy &Address + התעק &כתובת + + + &Save Image... + &שמור תמונה.. + + + Request payment to %1 + בקש תשלום ל %1 + + + Payment information + אנפרומצייה על התשלום + + + URI + כתובת (אתר או משאב) + + + Address + כתובת + + + Amount + כמות + + + Label + תוית + + + Message + הודעה + + + Resulting URI too long, try to reduce the text for label / message. + המזהה המתקבל ארוך מדי, נסה להפחית את הטקסט בתוית / הודעה. + + + Error encoding URI into QR Code. + שגיאה בקידוד URI לקוד QR + + + + RecentRequestsTableModel + + Date + תאריך + + + Label + תוית + + + Message + הודעה + + + Amount + כמות + + + (no label) + (ללא תוית) + + + (no message) + (אין הודעות) + + + (no amount) + + SendCoinsDialog - - - - - - - - Send Coins שלח מטבעות - + Coin Control Features + ה + + + Inputs... + כניסות... + + + automatically selected + נבחר אוטומאטית + + + Insufficient funds! + אין מספיק כספים! + + + Quantity: + כמות: + + + Bytes: + בייטים: + + + Amount: + כמות: + + + Priority: + קדימות: + + + Fee: + תשלום: + + + Low Output: + + + + After Fee: + לאחר עמלה: + + + Change: + שינוי: + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + כתובת לעודף מותאמת אישית + + Send to multiple recipients at once שלח למספר מקבלים בו-זמנית - Add &Recipient הוסף מקבל - - Remove all transaction fields - הסר את כל השדות בפעולה + Clear all fields of the form. + נקה את כל השדות - Clear &All נקה הכל - Balance: יתרה: - - 123.456 BTC - 123.456 ביטקוין - - - Confirm the send action אשר את פעולת השליחה - S&end שלח - - <b>%1</b> to %2 (%3) - <b>%1</b> ל- %2 (%3) - - - Confirm send coins אשר שליחת מטבעות - - Are you sure you want to send %1? - האם אתה בטוח שברצונך לשלוח %1? + %1 to %2 + %1 אל %2 - - and - ו- + Copy quantity + העתק כמות + + + Copy amount + העתק כמות + + + Copy fee + העתק מחיר + + + Copy after fee + העתק אחרי עמלה + + + Copy bytes + העתק בייטים + + + Copy priority + העתק קדימות + + + Copy low output + + + + Copy change + העתק עודף + + + Total Amount %1 (= %2) + + + + or + או - The recipient address is not valid, please recheck. כתובת המקבל אינה תקינה, אנא בדוק שנית. - The amount to pay must be larger than 0. הכמות לשלם חייבת להיות גדולה מ-0. - The amount exceeds your balance. הכמות עולה על המאזן שלך. - The total exceeds your balance when the %1 transaction fee is included. הכמות הכוללת, ובכללה עמלת פעולה בסך %1, עולה על המאזן שלך. - Duplicate address found, can only send to each address once per send operation. כתובת כפולה נמצאה, ניתן לשלוח לכל כתובת רק פעם אחת בכל פעולת שליחה. - - Error: Transaction creation failed! - שגיאה: יצירת הפעולה נכשלה! + Transaction creation failed! + יצירת הפעולה נכשלה! - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - שגיאה: הפעולה נדחתה. זה עשוי לקרות עם חלק מהמטבעות בארנק שלך כבר נוצלו, למשל אם השתמשת בעותק של wallet.dat ומטבעות נוצלו בעותק אך לא סומנו כמנוצלות כאן. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + + + + (no label) + (ללא תוית) + + + Warning: Unknown change address + + + + Are you sure you want to send? + האם אכן לשלוח? + + + added as transaction fee + הוסף מחיר טיפול + + + Payment request expired + תוקף בקשת תשלום פג + + + Invalid payment address %1 + כתובת תשלום שגויה %1 SendCoinsEntry - - Form - טופס - - - A&mount: כ&מות: - Pay &To: שלם &ל: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) הכתובת שאליה ישלח התשלום (למשל 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book הכנס תוית לכתובת הזאת כדי להכניס לפנקס הכתובות - &Label: ת&וית: - - Choose address from address book - בחר כתובת מפנקס הכתובות + Choose previously used address + בחר כתובת שהייתה בשימוש + + + This is a normal payment. + זהו תשלום רגיל. - Alt+A Alt+A - Paste address from clipboard הדבר כתובת מהלוח - Alt+P Alt+P - - Remove this recipient - הסר את המקבל הזה + Remove this entry + - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - הכנס כתובת ביטקוין (למשל 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + הודעה: + + + This is a verified payment request. + זוהי בקשה מאומתת לתשלום. + + + Enter a label for this address to add it to the list of used addresses + הקלד תווית עבור כתובת זו בכדי להוסיף אותה לרשימת הכתובות בשימוש + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + זוהי בקשת תשלום בלתי־מאומתת. + + + Pay To: + תשלום ל: + + + Memo: + תזכורת: + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. + אין לכבות את המחשב עד שחלון זה נעלם. SignVerifyMessageDialog - Signatures - Sign / Verify a Message חתימות - חתום או אמת הודעה - &Sign Message חתום על הו&דעה - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. אתה יכול לחתום על הודעות עם הכתובות שלך כדי להוכיח שהן בבעלותך. היזהר לא לחתום על משהו מעורפל, שכן התקפות פישינג עשויות לגרום לך בעורמה למסור את זהותך. חתום רק על אמרות מפורטות לחלוטין שאתה מסכים עימן. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) הכתובת איתה לחתום על ההודעה (למשל 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book - בחר כתובת מפנקס הכתובות + Choose previously used address + בחר כתובת שהייתה בשימוש - - Alt+A Alt+A - Paste address from clipboard הדבק כתובת מהלוח - Alt+P Alt+P - Enter the message you want to sign here הכנס כאן את ההודעה שעליך ברצונך לחתום - Signature חתימה - Copy the current signature to the system clipboard העתק את החתימה הנוכחית ללוח המערכת - Sign the message to prove you own this Myriadcoin address חתום על ההודעה כדי להוכיח שכתובת הביטקוין הזו בבעלותך. - Sign &Message חתום על הודעה - Reset all sign message fields אפס את כל שדות החתימה על הודעה - - Clear &All נקה הכל - &Verify Message אמת הודעה - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. הכנס למטה את הכתובת החותמת, ההודעה (ודא שאתה מעתיק מעברי שורה, רווחים, טאבים וכו' באופן מדויק) והחתימה כדי לאמת את ההודעה. היזהר לא לפרש את החתימה כיותר ממה שמופיע בהודעה החתומה בעצמה, כדי להימנע מליפול קורבן למתקפת איש-באמצע. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) הכתובת איתה ההודעה נחתמה (למשל 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address אמת את ההודעה כדי להבטיח שהיא נחתמה עם כתובת הביטקוין הנתונה - Verify &Message אימות הודעה - Reset all verify message fields אפס את כל שדות אימות הודעה - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) הכנס כתובת ביטקוין (למשל 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature לחץ "חתום על ההודעה" כדי לחולל חתימה - - Enter Myriadcoin signature - הכנס חתימת ביטקוין - - - - The entered address is invalid. הכתובת שהוכנסה אינה תקינה. - - - - Please check the address and try again. אנא בדוק את הכתובת ונסה שנית. - - The entered address does not refer to a key. הכתובת שהוכנסה אינה מתייחסת למפתח. - Wallet unlock was cancelled. פתיחת הארנק בוטלה. - Private key for the entered address is not available. המפתח הפרטי עבור הכתובת שהוכנסה אינו זמין. - Message signing failed. החתימה על ההודעה נכשלה. - Message signed. ההודעה נחתמה. - The signature could not be decoded. לא ניתן לפענח את החתימה. - - Please check the signature and try again. אנא בדוק את החתימה ונסה שנית. - The signature did not match the message digest. החתימה לא תואמת את תקציר ההודעה. - Message verification failed. אימות ההודעה נכשל. - Message verified. ההודעה אומתה. @@ -1647,186 +2126,160 @@ Address: %4 SplashScreen - - The Myriadcoin developers + Myriadcoin Core + ליבת ביטקוין + + + The Myriadcoin Core developers - [testnet] [רשת-בדיקה] + + TrafficGraphWidget + + KB/s + קילו בייט לשניה + + TransactionDesc - Open until %1 פתוח עד %1 - + conflicted + + + %1/offline %1/מנותק - %1/unconfirmed %1/ממתין לאישור - %1 confirmations %1 אישורים - Status מצב - , broadcast through %n node(s) , הופץ דרך צומת אחד, הופץ דרך %n צמתים - Date תאריך - Source מקור - Generated נוצר - - From מאת - - - To אל - - own address כתובת עצמית - label תוית - - - - - Credit זיכוי - matures in %n more block(s) מבשיל בעוד בלוק אחדמבשיל בעוד %n בלוקים - not accepted לא התקבל - - - - Debit חיוב - Transaction fee עמלת פעולה - Net amount כמות נקיה - Message הודעה - Comment הערה - Transaction ID זיהוי פעולה - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - מטבעות שנוצרים חייבים להבשיל למשך 120 בלוקים לפני שניתן לנצל אותם. כשיצרת את הבלוק הזה, הוא הופץ לרשת כדי להתווסף לשרשרת הבלוקים. אם הוא אינו מצליח לביע לשרשרת, המצב שלו ישתנה ל"לא התקבל" ולא ניתן יהיה לנצל אותו. זה עשוי לקרות מעת לעת אם צומת אחר יוצר בלוק בטווח של מספר שניות מהבלוק שלך. + Merchant + סוחר + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + מטבעות חדשים שנוצרו חייבים להבשיל במשך %1 בלוקים לפני שניתן לנצל אותם. כשבלוק זה נוצר הוא שודר ברשת על מנת שייכנס לשרשרת הבלוקים. במקרה והוא לא ייכנס לשרשרת, מצבו ישתנה ל"לא התקבל" ולא ניתן יהיה לנצלו. זה יכול לקרות מדי פעם אם במקרה צומת אחרת ייצרה בלוק בהבדל של שניות בודדות ממך. - Debug information מידע ניפוי - Transaction פעולה - Inputs קלטים - Amount כמות - true אמת - false שקר - , has not been successfully broadcast yet , טרם שודר בהצלחה - Open for %n more block(s) פתח למשך בלוק %n יותרפתח למשך %n בלוקים נוספים - unknown לא ידוע @@ -1834,12 +2287,10 @@ Address: %4 TransactionDescDialog - Transaction details פרטי הפעולה - This pane shows a detailed description of the transaction חלונית זו מציגה תיאור מפורט של הפעולה @@ -1847,117 +2298,102 @@ Address: %4 TransactionTableModel - Date תאריך - Type סוג - Address כתובת - Amount כמות + + Immature (%1 confirmations, will be available after %2) + + - Open for %n more block(s) פתח למשך בלוק %n יותרפתח למשך %n בלוקים נוספים - Open until %1 פתוח עד %1 - - Offline (%1 confirmations) - לא מחובר (%1 אישורים) - - - - Unconfirmed (%1 of %2 confirmations) - ממתין לאישור (%1 מתוך %2 אישורים) - - - Confirmed (%1 confirmations) מאושר (%1 אישורים) - - - Mined balance will be available when it matures in %n more block(s) - המאזן שנכרה יהיה זמין כשהוא מבשיל בעוד בלוק אחדהמאזן שנכרה יהיה זמין כשהוא מבשיל בעוד %n בלוקים - - This block was not received by any other nodes and will probably not be accepted! הבלוק הזה לא נקלט על ידי אף צומת אחר, וכנראה לא יתקבל! - Generated but not accepted נוצר אך לא התקבל - + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + Received with התקבל עם - Received from התקבל מאת - Sent to נשלח ל - Payment to yourself תשלום לעצמך - Mined נכרה - (n/a) (n/a) - Transaction status. Hover over this field to show number of confirmations. מצב הפעולה. השהה את הסמן מעל שדה זה כדי לראות את מספר האישורים. - Date and time that the transaction was received. התאריך והשעה בה הפעולה הזאת התקבלה. - Type of transaction. סוג הפעולה. - Destination address of transaction. כתובת היעד של הפעולה. - Amount removed from or added to balance. הכמות שהתווספה או הוסרה מהיתרה. @@ -1965,176 +2401,156 @@ Address: %4 TransactionView - - All הכל - Today היום - This week השבוע - This month החודש - Last month החודש שעבר - This year השנה - Range... טווח... - Received with התקבל עם - Sent to נשלח ל - To yourself לעצמך - Mined נכרה - Other אחר - Enter address or label to search הכנס כתובת או תוית לחפש - Min amount כמות מזערית - Copy address העתק כתובת - Copy label העתק תוית - Copy amount העתק כמות - Copy transaction ID העתק מזהה פעולה - Edit label ערוך תוית - Show transaction details הצג פרטי פעולה - - Export Transaction Data - יצוא נתוני פעולות + Export Transaction History + יצוא היסטוריית פעולות + + + Exporting Failed + הייצוא נכשל + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + הייצוא בוצע בהצלחה + + + The transaction history was successfully saved to %1. + היסטוריית הפעולות נשמרה ל־%1 בהצלחה. - Comma separated file (*.csv) קובץ מופרד בפסיקים (*.csv) - Confirmed מאושר - Date תאריך - Type סוג - Label תוית - Address כתובת - Amount כמות - ID מזהה - - Error exporting - שגיאה ביצוא - - - - Could not write to file %1. - לא מסוגל לכתוב לקובץ %1. - - - Range: טווח: - to אל + + WalletFrame + + No wallet has been loaded. + לא נטען ארנק + + WalletModel - Send Coins שלח מטבעות @@ -2142,160 +2558,121 @@ Address: %4 WalletView - &Export - + &ייצא - Export the data in the current tab to a file יצוא הנתונים בטאב הנוכחי לקובץ - Backup Wallet גבה ארנק - Wallet Data (*.dat) נתוני ארנק (*.dat) - Backup Failed גיבוי נכשל - - There was an error trying to save the wallet data to the new location. - הייתה שגיאה בנסיון לשמור את המידע הארנק למיקום החדש. + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. + - Backup Successful גיבוי הושלם בהצלחה - - - The wallet data was successfully saved to the new location. - נתוני הארנק נשמרו בהצלחה במקום החדש. - bitcoin-core - - Myriadcoin version - גרסת ביטקוין - - - Usage: שימוש: - - Send command to -server or myriadcoind - שלח פקודה ל -server או myriadcoind - - - List commands רשימת פקודות - Get help for a command קבל עזרה עבור פקודה - Options: אפשרויות: - Specify configuration file (default: myriadcoin.conf) ציין קובץ הגדרות (ברירת מחדל: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) ציין קובץ pid (ברירת מחדל: myriadcoind.pid) - Specify data directory ציין תיקיית נתונים - - Set database cache size in megabytes (default: 25) - קבע את גודל המטמון של מסד הנתונים במגהבייט (ברירת מחדל: 25) - - - Listen for connections on <port> (default: 8333 or testnet: 18333) האזן לחיבורים ב<פורט> (ברירת מחדל: 8333 או ברשת הבדיקה: 18333) - Maintain at most <n> connections to peers (default: 125) החזק לכל היותר <n> חיבורים לעמיתים (ברירת מחדל: 125) - Connect to a node to retrieve peer addresses, and disconnect התחבר לצומת כדי לדלות כתובות עמיתים, ואז התנתק - Specify your own public address ציין את הכתובת הפומבית שלך - Threshold for disconnecting misbehaving peers (default: 100) סף להתנתקות מעמיתים הנוהגים שלא כהלכה (ברירת מחדל: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) מספר שניות למנוע מעמיתים הנוהגים שלא כהלכה מלהתחבר מחדש (ברירת מחדל: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s אירעה שגיאה בעת הגדרת פורט RPC %u להאזנה ב-IPv4: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) האזן לחיבורי JSON-RPC ב- <port> (ברירת מחדל: 8332 או רשת בדיקה: 18332) - Accept command line and JSON-RPC commands קבל פקודות משורת הפקודה ו- JSON-RPC - + Myriadcoin Core RPC client version + + + Run in the background as a daemon and accept commands רוץ ברקע כדימון וקבל פקודות - Use the test network השתמש ברשת הבדיקה - Accept connections from outside (default: 1 if no -proxy or -connect) קבל חיבורים מבחוץ (ברירת מחדל: 1 ללא -proxy או -connect) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2320,612 +2697,686 @@ rpcpassword=%s - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + צפנים קבילים (ברירת מחדל: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s אירעה שגיאה בעת הגדרת פורט RPC %u להאזנה ב-IPv6, נסוג ל-IPv4: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 קשור עם כתובת נתונה והאזן לה תמיד. השתמש בסימון [host]:port עבוד IPv6. - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. - לא מסוגל להשיג נעילה על תיקיית הנתונים %s. כנראה שביטקוין כבר רץ. + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + כניסה למצב בדיקת רגרסיה, בה נעשה שימוש בשרשרת מיוחדת המאפשרת פתרון מיידי של בלוקים. מצב זה מיועד לכלי בדיקת רגרסיה ופיתוח תוכנה. + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) + - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. שגיאה: הפעולה נדחתה! זה עלול לקרות אם כמה מהמטבעות בארנק שלך כבר נוצלו, למשל אם השתמשת בעותק של wallet.dat ומטבעות נשלחו בעותק אך לא סומנו כמנוצלות כאן. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! שגיאה: הפעולה הזאת דורשת עמלת פעולה של לפחות %s עקב הכמות, המורכבות, או השימוש בכספים שהתקבלו לאחרונה! - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - בצע פעולה כאשר ההודעה הרלוונטית מתקבלת(%s בשורת הפקודה משתנה על-ידי ההודעה) - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) בצע פקודה כאשר פעולת ארנק משתנה (%s ב cmd יוחלף ב TxID) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - קבע גודל מקסימלי עבור פעולות עדיפות גבוהה/עמלה נמוכה בבתים (ברירת מחדל: 27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications זוהי בניית ניסיון טרום-שחרור - השימוש בה על אחריותך - אין להשתמש לצורך כריה או יישומי מסחר - + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. אזהרה: -paytxfee נקבע לערך מאד גבוה! זוהי עמלת הפעולה שתשלם אם אתה שולח פעולה. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - אזהרה: הפעולות המוצגות עשויות לא להיות נכונות! ייתכן ואתה צריך לשדרג, או שצמתים אחרים צריכים לשדרג. - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. אזהרה: אנא בדוק שהתאריך והשעה של המחשב שלך נכונים! אם השעון שלך אינו נכון ביטקוין לא יעבוד כראוי. - + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + אזהרה: נראה שלא כל הרשת מסכימה! נראה שישנם כורים אשר נתקלים בבעיות. + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + אזהרה: נראה שאנחנו לא מסכימים לחלוטין עם העמיתים שלנו! ייתכן ואנחנו צריכים לשדרג, או שצמתים אחרות צריכות לשדרג. + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. אזהרה: שגיאה בקריאת wallet.dat! כל המתפחות נקראו באופן תקין, אך נתוני הפעולות או ספר הכתובות עלולים להיות חסרים או שגויים. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. אזהרה: קובץ wallet.dat מושחת, המידע חולץ! קובץ wallet.dat המקורח נשמר כ - wallet.{timestamp}.bak ב - %s; אם המאזן או הפעולות שגויים עליך לשחזר גיבוי. - + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + Attempt to recover private keys from a corrupt wallet.dat נסה לשחזר מפתחות פרטיים מקובץ wallet.dat מושחת. - + Myriadcoin Core Daemon + + + Block creation options: אפשרויות יצירת בלוק: - + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + Connect only to the specified node(s) התחבר רק לצמתים המצוינים - + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + התחבר ל JSON-RPC ב <port> (ברירת מחדל: 8332 או ברשת בדיקה: 18332) + + + Connection options: + הגדרות חיבור: + + Corrupted block database detected התגלה מסד נתוני בלוקים לא תקין - + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + Discover own IP address (default: 1 when listening and no -externalip) גלה את כתובת ה-IP העצמית (ברירת מחדל: 1 כשמאזינים וללא -externalip) - + Do not load the wallet and disable wallet RPC calls + + + Do you want to rebuild the block database now? האם תרצה כעט לבנות מחדש את מסד נתוני הבלוקים? - Error initializing block database שגיאה באתחול מסד נתוני הבלוקים - Error initializing wallet database environment %s! שגיאה באתחול סביבת מסד נתוני הארנקים %s! - Error loading block database שגיאה בטעינת מסד נתוני הבלוקים - Error opening block database שגיאה בטעינת מסד נתוני הבלוקים - Error: Disk space is low! שגיאה: מעט מקום פנוי בדיסק! - Error: Wallet locked, unable to create transaction! שגיאה: הארנק נעול, אין אפשרות ליצור פעולה! - Error: system error: שגיאה: שגיאת מערכת: - Failed to listen on any port. Use -listen=0 if you want this. האזנה נכשלה בכל פורט. השתמש ב- -listen=0 אם ברצונך בכך. - Failed to read block info קריאת מידע הבלוקים נכשלה - Failed to read block קריאת הבלוק נכשלה - Failed to sync block index סנכרון אינדקס הבלוקים נכשל - Failed to write block index כתיבת אינדקס הבלוקים נכשל - Failed to write block info כתיבת מידע הבלוקים נכשל - Failed to write block כתיבת הבלוק נכשלה - Failed to write file info כתיבת מידע הקבצים נכשלה - Failed to write to coin database כתיבת מסד נתוני המטבעות נכשלה - Failed to write transaction index כתיבת אינדקס הפעולות נכשלה - Failed to write undo data כתיבת נתוני ביטול נכשלה - + Fee per kB to add to transactions you send + עמלה לכל kB להוסיף לפעולות שאתה שולח + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + Find peers using DNS lookup (default: 1 unless -connect) מצא עמיתים ע"י חיפוש DNS (ברירת מחדל: 1 ללא -connect) - - Generate coins (default: 0) + Force safe mode (default: 0) - + Generate coins (default: 0) + ייצר מטבעות (ברגיל: 0) + + How many blocks to check at startup (default: 288, 0 = all) מספר הבלוקים לבדוק בעת אתחול (ברירת מחדל: 288, 0 = כולם) - - How thorough the block verification is (0-4, default: 3) - מידת היסודיות של אימות הבלוקים (0-4, ברירת מחדל: 3) - - - - Not enough file descriptors available. + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + בלוק בראשית הינו שגוי או לא נמצא. ספריית מידע לא נכונה עבור הרשת? + + + Invalid -onion address: '%s' + כתובת onion- שגויה: '%s' + + + Not enough file descriptors available. + אין מספיק מידע על הקובץ + + + Prepend debug output with timestamp (default: 1) + + + + RPC client options: - Rebuild block chain index from current blk000??.dat files בנה מחדש את אינדק שרשרת הבלוקים מקבצי ה-blk000??.dat הנוכחיים. - + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + Set the number of threads to service RPC calls (default: 4) קבע את מספר תהליכוני לשירות קריאות RPC (ברירת מחדל: 4) - + Specify wallet file (within data directory) + ציין קובץ ארנק (בתוך ספריית המידע) + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + שימוש (מיושן, השתמש ב myriadcoin-cli): + + Verifying blocks... מאמת את שלמות מסד הנתונים... - Verifying wallet... מאמת את יושרת הארנק... - + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + הארנק %s יושב מחוץ לספריית המידע %s + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + עליך לבנות מחדש את מסד הנתונים תוך שימוש ב- -reindex על מנת לשנות את -txindex + + Imports blocks from external blk000??.dat file מייבא בלוקים מקובצי blk000??.dat חיצוניים - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + הרץ פקודה כאשר ההתראה הרלוונטית מתקבלת או כשאנחנו עדים לפיצול ארוך מאוד (%s בשורת הפקודה יוחלף ע"י ההודעה) + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) - Information מידע - - Invalid -tor address: '%s' - כתובת לא תקינה ל -tor: '%s' - - - Invalid amount for -minrelaytxfee=<amount>: '%s' - + כמות לא תקינה עבור -paytxfee=<amount>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' + כמות לא תקינה עבור -paytxfee=<amount>: '%s' + + + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) - Maintain a full transaction index (default: 0) תחזק אינדקס פעולות מלא (ברירת מחדל: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) חוצץ קבלה מירבי לכל חיבור, <n>*1000 בתים (ברירת מחדל: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) חוצץ שליחה מירבי לכל חיבור, <n>*1000 בתים (ברירת מחדל: 1000) - Only accept block chain matching built-in checkpoints (default: 1) קבל רק שרשרת בלוקים התואמת נקודות ביקורת מובנות (ברירת מחדל: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) התחבר רק לצמתים ברשת <net> (IPv4, IPv6 או Tor) - - Output extra debugging information. Implies all other -debug* options - פלוט מידע ניפוי נוסף. נובע מכך כל אפשרויות -debug* האחרות. + Print block on startup, if found in block index + - - Output extra network debugging information - פלוט מידע נוסף לניפוי שגיאות ברשת. + Print block tree on startup (default: 0) + - - Prepend debug output with timestamp - הוסף חותמת זמן לפני פלט דיבאג + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + הגדרות שרת RPC + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) אפשרויות SSL: (ראה את הויקי של ביטקוין עבור הוראות הגדרת SSL) - - Select the version of socks proxy to use (4-5, default: 5) - בחר את גרסת פרוקסי SOCKS להשתמש בה (4-5, ברירת מחדל: 5) + Send command to Myriadcoin Core + - Send trace/debug info to console instead of debug.log file שלח מידע דיבאג ועקבה לקונסולה במקום לקובץ debug.log - - Send trace/debug info to debugger - שלח מידע דיבאג ועקבה לכלי דיבאג - - - - Set maximum block size in bytes (default: 250000) - קבע את גדול הבלוק המירבי בבתים (ברירת מחדל: 250000) - - - Set minimum block size in bytes (default: 0) קבע את גודל הבלוק המינימלי בבתים (ברירת מחדל: 0) - + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + Shrink debug.log file on client startup (default: 1 when no -debug) כווץ את קובץ debug.log בהפעלת הקליינט (ברירת מחדל: 1 ללא -debug) - Signing transaction failed - + פעולה העברה נכשלה - Specify connection timeout in milliseconds (default: 5000) ציין הגבלת זמן לחיבור במילישניות (ברירת מחדל: 5000) - + Start Myriadcoin Core Daemon + + + System error: שגיאת מערכת: - Transaction amount too small - + סכום העברה קטן מדי - Transaction amounts must be positive - + סכום ההעברה חייב להיות חיובי - Transaction too large - + סכום העברה גדול מדי - Use UPnP to map the listening port (default: 0) השתמש ב-UPnP כדי למפות את הפורט להאזנה (ברירת מחדל: 0) - Use UPnP to map the listening port (default: 1 when listening) השתמש ב-UPnP כדי למפות את הפורט להאזנה (ברירת מחדל: 1 בעת האזנה) - - Use proxy to reach tor hidden services (default: same as -proxy) - השתמש בפרוקסי כדי להגיע לשירותים חבויים ב-tor (ברירת מחדל: כמו ב- -proxy) - - - Username for JSON-RPC connections שם משתמש לחיבורי JSON-RPC - Warning אזהרה - Warning: This version is obsolete, upgrade required! אזהרה: הגרסה הזאת מיושנת, יש צורך בשדרוג! - - You need to rebuild the databases using -reindex to change -txindex - עליך לבנות מחדש את מסדי הנתונים תוך שימוש ב- -reindex על מנת לשנות את -txindex + Zapping all transactions from wallet... + + + + on startup + בפתיחה + + + version + גרסה - wallet.dat corrupt, salvage failed קובץ wallet.dat מושחת, החילוץ נכשל - Password for JSON-RPC connections סיסמה לחיבורי JSON-RPC - Allow JSON-RPC connections from specified IP address אפשר חיבורי JSON-RPC מכתובת האינטרנט המצוינת - Send commands to node running on <ip> (default: 127.0.0.1) שלח פקודות לצומת ב-<ip> (ברירת מחדל: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) בצע פקודה זו כשהבלוק הטוב ביותר משתנה (%s בפקודה יוחלף בגיבוב הבלוק) - Upgrade wallet to latest format שדרג את הארנק לפורמט העדכני - Set key pool size to <n> (default: 100) קבע את גודל המאגר ל -<n> (ברירת מחדל: 100) - Rescan the block chain for missing wallet transactions סרוק מחדש את שרשרת הבלוקים למציאת פעולות חסרות בארנק - Use OpenSSL (https) for JSON-RPC connections השתמש ב-OpenSSL (https( עבור חיבורי JSON-RPC - Server certificate file (default: server.cert) קובץ תעודת שרת (ברירת מחדל: server.cert) - Server private key (default: server.pem) מפתח פרטי של השרת (ברירת מחדל: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - צפנים קבילים (ברירת מחדל: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - This help message הודעת העזרה הזו - Unable to bind to %s on this computer (bind returned error %d, %s) לא מסוגל לקשור ל-%s במחשב זה (הקשירה החזירה שגיאה %d, %s) - - Connect through socks proxy - התחבר דרך פרוקסי SOCKS - - - Allow DNS lookups for -addnode, -seednode and -connect אפשר בדיקת DNS עבור -addnode, -seednode ו- -connect - Loading addresses... טוען כתובות... - Error loading wallet.dat: Wallet corrupted שגיאה בטעינת הקובץ wallet.dat: הארנק מושחת - Error loading wallet.dat: Wallet requires newer version of Myriadcoin שגיאה בטעינת הקובץ wallet.dat: הארנק דורש גרסה חדשה יותר של ביטקוין - Wallet needed to be rewritten: restart Myriadcoin to complete יש לכתוב מחדש את הארנק: אתחל את ביטקוין לסיום - Error loading wallet.dat שגיאה בטעינת הקובץ wallet.dat - Invalid -proxy address: '%s' כתובת -proxy לא תקינה: '%s' - Unknown network specified in -onlynet: '%s' רשת לא ידועה צוינה ב- -onlynet: '%s' - Unknown -socks proxy version requested: %i התבקשה גרסת פרוקסי -socks לא ידועה: %i - Cannot resolve -bind address: '%s' לא מסוגל לפתור כתובת -bind: '%s' - Cannot resolve -externalip address: '%s' לא מסוגל לפתור כתובת -externalip: '%s' - Invalid amount for -paytxfee=<amount>: '%s' כמות לא תקינה עבור -paytxfee=<amount>: '%s' - Invalid amount כמות לא תקינה - Insufficient funds אין מספיק כספים - Loading block index... טוען את אינדקס הבלוקים... - Add a node to connect to and attempt to keep the connection open הוסף צומת להתחברות ונסה לשמור את החיבור פתוח - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - לא ניתן לקשור ל-%s במחשב זה. ביטקוין כנראה עדיין רץ. - - - - Fee per KB to add to transactions you send - עמלה להוסיף לפעולות שאתה שולח עבור כל KB - - - Loading wallet... טוען ארנק... - Cannot downgrade wallet לא יכול להוריד דרגת הארנק - Cannot write default address לא יכול לכתוב את כתובת ברירת המחדל - Rescanning... סורק מחדש... - Done loading טעינה הושלמה - To use the %s option להשתמש באפשרות %s - Error שגיאה - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_hi_IN.ts b/src/qt/locale/bitcoin_hi_IN.ts index 1720e6a0..f91b194b 100644 --- a/src/qt/locale/bitcoin_hi_IN.ts +++ b/src/qt/locale/bitcoin_hi_IN.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - बिटकोइन के संबंध में + About Myriadcoin Core + - - <b>Myriadcoin</b> version - बिटकोइन वर्सन + <b>Myriadcoin Core</b> version + - This is experimental software. @@ -23,153 +19,128 @@ This product includes software developed by the OpenSSL Project for use in the O - Copyright कापीराइट - - The Myriadcoin developers + The Myriadcoin Core developers + + + + (%1-bit) AddressBookPage - - Address Book - पता पुस्तक - - - Double-click to edit address or label दो बार क्लिक करे पता या लेबल संपादन करने के लिए ! - Create a new address नया पता लिखिए ! - + &New + + + Copy the currently selected address to the system clipboard चुनिन्दा पते को सिस्टम क्लिपबोर्ड पर कापी करे ! - - &New Address - &नया पता - - - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + &Copy + + + + C&lose - &Copy Address &पता कॉपी करे - - Show &QR Code - - - - - Sign a message to prove you own a Myriadcoin address - - - - - Sign &Message - - - - Delete the currently selected address from the list - Export the data in the current tab to a file - &Export - - Verify a message to ensure it was signed with a specified Myriadcoin address - - - - - &Verify Message - - - - &Delete &मिटाए !! - + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + Copy &Label &लेबल कॉपी करे - &Edit &एडिट - - Send &Coins + Export Address List - - Export Address Book Data - पता पुस्तक का डेटा एक्सपोर्ट (निर्यात) करे ! - - - Comma separated file (*.csv) Comma separated file (*.csv) - - Error exporting - ग़लतियाँ एक्सपोर्ट (निर्यात) करे! + Exporting Failed + - - Could not write to file %1. - फाइल में लिख नही सके %1. + There was an error trying to save the address list to %1. + AddressTableModel - Label लेबल - Address पता - (no label) (कोई लेबल नही !) @@ -177,140 +148,106 @@ This product includes software developed by the OpenSSL Project for use in the O AskPassphraseDialog - Passphrase Dialog - Enter passphrase पहचान शब्द/अक्षर डालिए ! - New passphrase नया पहचान शब्द/अक्षर डालिए ! - Repeat new passphrase दोबारा नया पहचान शब्द/अक्षर डालिए ! - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. नया पहचान शब्द/अक्षर वॉलेट मे डालिए ! <br/> कृपा करके पहचान शब्द में <br> 10 से ज़्यादा अक्षॉरों का इस्तेमाल करे </b>,या <b>आठ या उससे से ज़्यादा शब्दो का इस्तेमाल करे</b> ! - Encrypt wallet एनक्रिप्ट वॉलेट ! - This operation needs your wallet passphrase to unlock the wallet. वॉलेट खोलने के आपका वॉलेट पहचान शब्द्‌/अक्षर चाईए ! - Unlock wallet वॉलेट खोलिए - This operation needs your wallet passphrase to decrypt the wallet. वॉलेट डीक्रिप्ट( विकोड) करने के लिए आपका वॉलेट पहचान शब्द्‌/अक्षर चाईए ! - Decrypt wallet डीक्रिप्ट वॉलेट - Change passphrase पहचान शब्द/अक्षर बदलिये ! - Enter the old and new passphrase to the wallet. कृपा करके पुराना एवं नया पहचान शब्द/अक्षर वॉलेट में डालिए ! - Confirm wallet encryption वॉलेट एनक्रिपशन को प्रमाणित कीजिए ! - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! - Are you sure you wish to encrypt your wallet? - 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. - - Warning: The Caps Lock key is on! - - Wallet encrypted वॉलेट एनक्रिप्ट हो गया ! - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. - - - - Wallet encryption failed वॉलेट एनक्रिप्ट नही हुआ! - Wallet encryption failed due to an internal error. Your wallet was not encrypted. वॉलेट एनक्रिपशन नाकाम हो गया इंटर्नल एरर की वजह से! आपका वॉलेट एनक्रीपत नही हुआ है! - - The supplied passphrases do not match. आपके द्वारा डाले गये पहचान शब्द/अक्षर मिलते नही है ! - Wallet unlock failed वॉलेट का लॉक नही खुला ! - - - The passphrase entered for the wallet decryption was incorrect. वॉलेट डीक्रिप्ट करने के लिए जो पहचान शब्द/अक्षर डाले गये है वो सही नही है! - Wallet decryption failed वॉलेट का डीक्रिप्ट-ष्ण असफल ! - Wallet passphrase was successfully changed. @@ -318,320 +255,287 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - Sign &message... - Synchronizing with network... नेटवर्क से समकालिक (मिल) रहा है ... - &Overview &विवरण - + Node + + + Show general overview of wallet वॉलेट का सामानया विवरण दिखाए ! - &Transactions & लेन-देन - Browse transaction history देखिए पुराने लेन-देन के विवरण ! - - Edit the list of stored addresses and labels - स्टोर किए हुए पते और लेबलओ को बदलिए ! - - - - Show the list of addresses for receiving payments - पते की सूची दिखाए जिन्हे भुगतान करना है ! - - - E&xit बाहर जायें - Quit application अप्लिकेशन से बाहर निकलना ! - Show information about Myriadcoin बीटकोइन के बारे में जानकारी ! - About &Qt - Show information about Qt - &Options... &विकल्प - &Encrypt Wallet... - &Backup Wallet... &बैकप वॉलेट - &Change Passphrase... - + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + Importing blocks from disk... - Reindexing blocks on disk... - Send coins to a Myriadcoin address - Modify configuration options for Myriadcoin - Backup wallet to another location - Change the passphrase used for wallet encryption पहचान शब्द/अक्षर जो वॉलेट एनक्रिपशन के लिए इस्तेमाल किया है उसे बदलिए! - &Debug window - Open debugging and diagnostic console - &Verify message... - - Myriadcoin बीटकोइन - Wallet वॉलेट - &Send - &Receive - - &Addresses - - - - - &About Myriadcoin - - - - &Show / Hide - Show or hide the main Window - Encrypt the private keys that belong to your wallet - Sign messages with your Myriadcoin addresses to prove you own them - Verify messages to ensure they were signed with specified Myriadcoin addresses - &File &फाइल - &Settings &सेट्टिंग्स - &Help &मदद - Tabs toolbar टैबस टूलबार - - [testnet] [टेस्टनेट] - + Myriadcoin Core + + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + Myriadcoin client - %n active connection(s) to Myriadcoin network %n सक्रिया संपर्क बीटकोइन नेटवर्क से%n सक्रिया संपर्क बीटकोइन नेटवर्क से - No block source available... - Processed %1 of %2 (estimated) blocks of transaction history. - Processed %1 blocks of transaction history. - %n hour(s) %n घंटा%n घंटे - %n day(s) %n दिन%n दिनो - %n week(s) %n हफ़्ता%n हफ्ते - + %1 and %2 + + + + %n year(s) + + + %1 behind %1 पीछे - Last received block was generated %1 ago. - Transactions after this will not yet be visible. - Error भूल - Warning चेतावनी - Information जानकारी - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - Up to date नवीनतम - Catching up... - - Confirm transaction fee - - - - Sent transaction भेजी ट्रांजक्शन - Incoming transaction प्राप्त हुई ट्रांजक्शन - Date: %1 Amount: %2 Type: %3 @@ -643,29 +547,14 @@ Address: %4 पता:%4\n - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> वॉलेट एन्क्रिप्टेड है तथा अभी लॉक्ड नहीं है - Wallet is <b>encrypted</b> and currently <b>locked</b> वॉलेट एन्क्रिप्टेड है तथा अभी लॉक्ड है - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. @@ -673,329 +562,647 @@ Address: %4 ClientModel - Network Alert + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + + + + Bytes: + + + + Amount: + राशि : + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + राशि + + + Address + पता + + + Date + taareek + + + Confirmations + + + + Confirmed + पक्का + + + Priority + + + + Copy address + पता कॉपी करे + + + Copy label + लेबल कॉपी करे + + + Copy amount + कॉपी राशि + + + Copy transaction ID + + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + + + + Dust + + + + yes + + + + no + + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + (कोई लेबल नही !) + + + change from %1 (%2) + + + + (change) + + + EditAddressDialog - Edit Address पता एडिट करना - &Label &लेबल - - The label associated with this address book entry - इस एड्रेस बुक से जुड़ा एड्रेस + The label associated with this address list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + - &Address &पता - - The address associated with this address book entry. This can only be modified for sending addresses. - इस एड्रेस बुक से जुड़ी प्रविष्टि केवल भेजने वाले addresses के लिए बदली जा सकती है| - - - New receiving address नया स्वीकार्य पता - New sending address नया भेजने वाला पता - Edit receiving address एडिट स्वीकार्य पता - Edit sending address एडिट भेजने वाला पता - The entered address "%1" is already in the address book. डाला गया पता "%1" एड्रेस बुक में पहले से ही मोजूद है| - The entered address "%1" is not a valid Myriadcoin address. - Could not unlock wallet. वॉलेट को unlock नहीं किया जा सकता| - New key generation failed. नयी कुंजी का निर्माण असफल रहा| - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt - बीटकोइन-Qt + A new data directory will be created. + + + + name + + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core + - version संस्करण - Usage: खपत : - command-line options - UI options - Set language, for example "de_DE" (default: system locale) - Start minimized - + Set SSL root certificates for payment request (default: -system-) + + + Show splash screen on startup (default: 1) + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + बीटकोइन + + + Error: Specified data directory "%1" can not be created. + + + + Error + + + + GB of free space available + + + + (of %1GB needed) + + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open + + OptionsDialog - Options विकल्प - &Main - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. - Pay transaction &fee - Automatically start Myriadcoin after logging in to the system. - &Start Myriadcoin on system login - + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + Reset all client options to default. - &Reset Options - &Network - + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. - Map port using &UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - - - - - &Connect through SOCKS proxy: - - - - Proxy &IP: - - IP address of the proxy (e.g. 127.0.0.1) - - - - &Port: - Port of the proxy (e.g. 9050) - SOCKS &Version: - SOCKS version of the proxy (e.g. 5) - &Window - Show only a tray icon after minimizing the window. - &Minimize to the tray instead of the taskbar - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. - M&inimize on close - &Display - User Interface &language: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. - &Unit to show amounts in: - Choose the default subdivision unit to show in the interface and when sending coins. - Whether to show Myriadcoin addresses in the transaction list or not. - &Display addresses in transaction list - + Whether to show coin control features or not. + + + &OK &ओके - &Cancel &कैन्सल - - &Apply - - - - default - + none + + + Confirm options reset - - Some settings may require a client restart to take effect. + Client restart required to activate changes. - - Do you want to proceed? + Client will be shutdown, do you want to proceed? - - - Warning - चेतावनी - - - - - This setting will take effect after restarting Myriadcoin. + This change would require a client restart. - The supplied proxy address is invalid. @@ -1003,59 +1210,54 @@ Address: %4 OverviewPage - Form फार्म - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. - - Balance: - बाकी रकम : - - - - Unconfirmed: - अपुष्ट : - - - Wallet वॉलेट - + Available: + + + + Your current spendable balance + + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + + + Immature: - Mined balance that has not yet matured - + Total: + + + + Your current total balance + + + <b>Recent transactions</b> <b>हाल का लेन-देन</b> - - Your current balance - आपका चालू बॅलेन्स - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - लेन देन की पुष्टि अभी नहीं हुई है, इसलिए इन्हें अभी मोजुदा बैलेंस में गिना नहीं गया है| - - - - out of sync @@ -1063,580 +1265,857 @@ Address: %4 PaymentServer - + URI handling + + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + Cannot start myriadcoin: click-to-pay handler + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + + + + Network request error + + - QRCodeDialog + QObject - - QR Code Dialog + Myriadcoin + बीटकोइन + + + Error: Specified data directory "%1" does not exist. - - Request Payment - भुगतान का अनुरोध - - - - Amount: - राशि : - - - - Label: - लेबल : - - - - Message: + Error: Cannot parse configuration file: %1. Only use key=value syntax. - - &Save As... + Error: Invalid combination of -regtest and -testnet. - - Error encoding URI into QR Code. + Myriadcoin Core didn't yet exit safely... - - The entered amount is invalid, please check. + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Myriadcoin एड्रेस लिखें (उदाहरण: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... - - Resulting URI too long, try to reduce the text for label / message. + &Copy Image - Save QR Code - - PNG Images (*.png) + PNG Image (*.png) RPCConsole - Client name - - - - - - - - - - N/A लागू नही - Client version - &Information - + Debug window + + + + General + + + Using OpenSSL version - Startup time - Network - + Name + + + Number of connections - - On testnet - - - - Block chain - Current number of blocks - Estimated total blocks - Last block time - &Open - - Command-line options - - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - - - - - &Show - - - - &Console - + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + Build date - - Myriadcoin - Debug window - - - - - Myriadcoin Core - - - - Debug log file - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. - Clear console - Welcome to the Myriadcoin RPC console. - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Type <b>help</b> for an overview of available commands. + + %1 B + + + + %1 KB + + + + %1 MB + + + + %1 GB + + + + %1 m + + + + %1 h + + + + %1 h %2 m + + + + + ReceiveCoinsDialog + + &Amount: + + + + &Label: + लेबल: + + + &Message: + + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + + + + Clear + + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + + + + Remove the selected entries from the list + + + + Remove + + + + Copy label + लेबल कॉपी करे + + + Copy message + + + + Copy amount + कॉपी राशि + + + + ReceiveRequestDialog + + QR Code + + + + Copy &URI + + + + Copy &Address + + + + &Save Image... + + + + Request payment to %1 + + + + Payment information + + + + URI + + + + Address + पता + + + Amount + राशि + + + Label + लेबल + + + Message + + + + Resulting URI too long, try to reduce the text for label / message. + + + + Error encoding URI into QR Code. + + + + + RecentRequestsTableModel + + Date + taareek + + + Label + लेबल + + + Message + + + + Amount + राशि + + + (no label) + (कोई लेबल नही !) + + + (no message) + + + + (no amount) + + SendCoinsDialog - - - - - - - - Send Coins सिक्के भेजें| - + Coin Control Features + + + + Inputs... + + + + automatically selected + + + + Insufficient funds! + + + + Quantity: + + + + Bytes: + + + + Amount: + राशि : + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + Send to multiple recipients at once एक साथ कई प्राप्तकर्ताओं को भेजें - Add &Recipient - - Remove all transaction fields + Clear all fields of the form. - Clear &All - Balance: बाकी रकम : - - 123.456 BTC - 123.456 BTC - - - Confirm the send action भेजने की पुष्टि करें - S&end - - <b>%1</b> to %2 (%3) - <b>%1</b> से %2 (%3) - - - Confirm send coins सिक्के भेजने की पुष्टि करें - - Are you sure you want to send %1? - क्या आप %1 भेजना चाहते हैं? + %1 to %2 + - - and - और + Copy quantity + + + + Copy amount + कॉपी राशि + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + + + + or + - The recipient address is not valid, please recheck. - The amount to pay must be larger than 0. भेजा गया अमाउंट शुन्य से अधिक होना चाहिए| - The amount exceeds your balance. - The total exceeds your balance when the %1 transaction fee is included. - Duplicate address found, can only send to each address once per send operation. - - Error: Transaction creation failed! + Transaction creation failed! - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + + + + (no label) + (कोई लेबल नही !) + + + Warning: Unknown change address + + + + Are you sure you want to send? + + + + added as transaction fee + + + + Payment request expired + + + + Invalid payment address %1 SendCoinsEntry - - Form - फार्म - - - A&mount: अमाउंट: - Pay &To: प्राप्तकर्ता: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book आपकी एड्रेस बुक में इस एड्रेस के लिए एक लेबल लिखें - &Label: लेबल: - - Choose address from address book + Choose previously used address + + + + This is a normal payment. - Alt+A Alt-A - Paste address from clipboard Clipboard से एड्रेस paste करें - Alt+P Alt-P - - Remove this recipient - प्राप्तकर्ता हटायें + Remove this entry + - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Myriadcoin एड्रेस लिखें (उदाहरण: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + + + + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. + SignVerifyMessageDialog - Signatures - Sign / Verify a Message - &Sign Message - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book + Choose previously used address - - Alt+A Alt-A - Paste address from clipboard Clipboard से एड्रेस paste करें - Alt+P Alt-P - Enter the message you want to sign here - Signature हस्ताक्षर - Copy the current signature to the system clipboard - Sign the message to prove you own this Myriadcoin address - Sign &Message - Reset all sign message fields - - Clear &All - &Verify Message - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address - Verify &Message - Reset all verify message fields - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Myriadcoin एड्रेस लिखें (उदाहरण: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature - - Enter Myriadcoin signature - - - - - The entered address is invalid. - - - - Please check the address and try again. - - The entered address does not refer to a key. - Wallet unlock was cancelled. - Private key for the entered address is not available. - Message signing failed. - Message signed. - The signature could not be decoded. - - Please check the signature and try again. - The signature did not match the message digest. - Message verification failed. - Message verified. @@ -1644,186 +2123,160 @@ Address: %4 SplashScreen - - The Myriadcoin developers + Myriadcoin Core + + + + The Myriadcoin Core developers - [testnet] + + TrafficGraphWidget + + KB/s + + + TransactionDesc - Open until %1 खुला है जबतक %1 - + conflicted + + + %1/offline - %1/unconfirmed %1/अपुष्ट - %1 confirmations %1 पुष्टियाँ - Status - , broadcast through %n node(s) - Date taareek - Source - Generated - - From - - - To - - own address - label - - - - - Credit - matures in %n more block(s) - not accepted - - - - Debit - Transaction fee - Net amount - Message - Comment - Transaction ID - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Merchant + + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Debug information - Transaction - Inputs - Amount राशि - true सही - false ग़लत - , has not been successfully broadcast yet , अभी तक सफलतापूर्वक प्रसारित नहीं किया गया है - Open for %n more block(s) - unknown अज्ञात @@ -1831,12 +2284,10 @@ Address: %4 TransactionDescDialog - Transaction details लेन-देन का विवरण - This pane shows a detailed description of the transaction ये खिड़की आपको लेन-देन का विस्तृत विवरण देगी ! @@ -1844,117 +2295,102 @@ Address: %4 TransactionTableModel - Date taareek - Type टाइप - Address पता - Amount राशि + + Immature (%1 confirmations, will be available after %2) + + - Open for %n more block(s) - Open until %1 खुला है जबतक %1 - - Offline (%1 confirmations) - ऑफलाइन ( %1 पक्का करना) - - - - Unconfirmed (%1 of %2 confirmations) - अपुष्ट ( %1 मे %2 पक्के ) - - - Confirmed (%1 confirmations) पक्के ( %1 पक्का करना) - - - Mined balance will be available when it matures in %n more block(s) - - - This block was not received by any other nodes and will probably not be accepted! यह ब्लॉक किसी भी और नोड को मिला नही है ! शायद यह ब्लॉक कोई भी नोड स्वीकारे गा नही ! - Generated but not accepted जेनरेट किया गया किंतु स्वीकारा नही गया ! - + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + Received with स्वीकारा गया - Received from स्वीकार्य ओर से - Sent to भेजा गया - Payment to yourself भेजा खुद को भुगतान - Mined माइंड - (n/a) (लागू नहीं) - Transaction status. Hover over this field to show number of confirmations. ट्रांसेक्शन स्तिथि| पुष्टियों की संख्या जानने के लिए इस जगह पर माउस लायें| - Date and time that the transaction was received. तारीख तथा समय जब ये ट्रांसेक्शन प्राप्त हुई थी| - Type of transaction. ट्रांसेक्शन का प्रकार| - Destination address of transaction. ट्रांसेक्शन की मंजिल का पता| - Amount removed from or added to balance. अमाउंट बैलेंस से निकला या जमा किया गया | @@ -1962,176 +2398,156 @@ Address: %4 TransactionView - - All सभी - Today आज - This week इस हफ्ते - This month इस महीने - Last month पिछले महीने - This year इस साल - Range... विस्तार... - Received with स्वीकार करना - Sent to भेजा गया - To yourself अपनेआप को - Mined माइंड - Other अन्य - Enter address or label to search ढूँदने के लिए कृपा करके पता या लेबल टाइप करे ! - Min amount लघुत्तम राशि - Copy address पता कॉपी करे - Copy label लेबल कॉपी करे - Copy amount कॉपी राशि - Copy transaction ID - Edit label एडिट लेबल - Show transaction details - - Export Transaction Data - लेन-देन का डेटा निर्यात करे ! + Export Transaction History + + + + Exporting Failed + + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + + + + The transaction history was successfully saved to %1. + - Comma separated file (*.csv) Comma separated file (*.csv) - Confirmed पक्का - Date taareek - Type टाइप - Label लेबल - Address पता - Amount राशि - ID ID - - Error exporting - ग़लतियाँ एक्सपोर्ट (निर्यात) करे! - - - - Could not write to file %1. - फाइल में लिख नही सके %1. - - - Range: विस्तार: - to तक + + WalletFrame + + No wallet has been loaded. + + + WalletModel - Send Coins @@ -2139,160 +2555,121 @@ Address: %4 WalletView - &Export - Export the data in the current tab to a file - Backup Wallet बैकप वॉलेट - Wallet Data (*.dat) वॉलेट डेटा (*.dat) - Backup Failed बैकप असफल - - There was an error trying to save the wallet data to the new location. + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. - Backup Successful बैकप सफल - - - The wallet data was successfully saved to the new location. - - bitcoin-core - - Myriadcoin version - बीटकोइन संस्करण - - - Usage: खपत : - - Send command to -server or myriadcoind - -server या myriadcoind को कमांड भेजें - - - List commands commands की लिस्ट बनाएं - Get help for a command किसी command के लिए मदद लें - Options: विकल्प: - Specify configuration file (default: myriadcoin.conf) configuraion की फाइल का विवरण दें (default: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) - pid फाइल का विवरण दें (default: myriadcoin.pid) + pid फाइल का विवरण दें (default: bitcoin.pid) - Specify data directory - + डेटा डायरेक्टरी बताएं - - Set database cache size in megabytes (default: 25) - - - - Listen for connections on <port> (default: 8333 or testnet: 18333) - Maintain at most <n> connections to peers (default: 125) - Connect to a node to retrieve peer addresses, and disconnect - Specify your own public address - Threshold for disconnecting misbehaving peers (default: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) - Accept command line and JSON-RPC commands - + Myriadcoin Core RPC client version + + + Run in the background as a daemon and accept commands - + बैकग्राउंड में डेमॉन बन कर रन करे तथा कमांड्स स्वीकार करें - Use the test network - + टेस्ट नेटवर्क का इस्तेमाल करे - Accept connections from outside (default: 1 if no -proxy or -connect) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2307,612 +2684,686 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications - + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. - + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + Attempt to recover private keys from a corrupt wallet.dat - + Myriadcoin Core Daemon + + + Block creation options: - + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + Connect only to the specified node(s) - + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + Corrupted block database detected - + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + Discover own IP address (default: 1 when listening and no -externalip) - + Do not load the wallet and disable wallet RPC calls + + + Do you want to rebuild the block database now? - Error initializing block database - Error initializing wallet database environment %s! - Error loading block database - Error opening block database - Error: Disk space is low! - Error: Wallet locked, unable to create transaction! - Error: system error: - Failed to listen on any port. Use -listen=0 if you want this. - Failed to read block info - Failed to read block - Failed to sync block index - Failed to write block index - Failed to write block info - Failed to write block - Failed to write file info - Failed to write to coin database - Failed to write transaction index - Failed to write undo data - + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + Find peers using DNS lookup (default: 1 unless -connect) - + Force safe mode (default: 0) + + + Generate coins (default: 0) - How many blocks to check at startup (default: 288, 0 = all) - - How thorough the block verification is (0-4, default: 3) + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' - Not enough file descriptors available. - + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + Rebuild block chain index from current blk000??.dat files - + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + Set the number of threads to service RPC calls (default: 4) - + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + Verifying blocks... ब्लॉक्स जाँचे जा रहा है... - Verifying wallet... वॉलेट जाँचा जा रहा है... - + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + + + Imports blocks from external blk000??.dat file - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) - Information जानकारी - - Invalid -tor address: '%s' - - - - Invalid amount for -minrelaytxfee=<amount>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' - + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + Maintain a full transaction index (default: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Only accept block chain matching built-in checkpoints (default: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - Output extra debugging information. Implies all other -debug* options + Print block on startup, if found in block index - - Output extra network debugging information + Print block tree on startup (default: 0) - - Prepend debug output with timestamp + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) - - Select the version of socks proxy to use (4-5, default: 5) + Send command to Myriadcoin Core - Send trace/debug info to console instead of debug.log file - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - Set minimum block size in bytes (default: 0) - + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + Shrink debug.log file on client startup (default: 1 when no -debug) - Signing transaction failed - Specify connection timeout in milliseconds (default: 5000) - + Start Myriadcoin Core Daemon + + + System error: - Transaction amount too small - Transaction amounts must be positive - Transaction too large - Use UPnP to map the listening port (default: 0) - Use UPnP to map the listening port (default: 1 when listening) - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - Username for JSON-RPC connections - Warning चेतावनी - Warning: This version is obsolete, upgrade required! - - You need to rebuild the databases using -reindex to change -txindex + Zapping all transactions from wallet... - + on startup + + + + version + संस्करण + + wallet.dat corrupt, salvage failed - Password for JSON-RPC connections - Allow JSON-RPC connections from specified IP address - Send commands to node running on <ip> (default: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) - Upgrade wallet to latest format - Set key pool size to <n> (default: 100) - Rescan the block chain for missing wallet transactions - Use OpenSSL (https) for JSON-RPC connections - Server certificate file (default: server.cert) - Server private key (default: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - This help message - Unable to bind to %s on this computer (bind returned error %d, %s) - - Connect through socks proxy - - - - Allow DNS lookups for -addnode, -seednode and -connect - Loading addresses... पता पुस्तक आ रही है... - Error loading wallet.dat: Wallet corrupted - Error loading wallet.dat: Wallet requires newer version of Myriadcoin - Wallet needed to be rewritten: restart Myriadcoin to complete - Error loading wallet.dat - Invalid -proxy address: '%s' - Unknown network specified in -onlynet: '%s' - Unknown -socks proxy version requested: %i - Cannot resolve -bind address: '%s' - Cannot resolve -externalip address: '%s' - Invalid amount for -paytxfee=<amount>: '%s' - Invalid amount राशि ग़लत है - Insufficient funds - Loading block index... ब्लॉक इंडेक्स आ रहा है... - Add a node to connect to and attempt to keep the connection open - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - Loading wallet... वॉलेट आ रहा है... - Cannot downgrade wallet - Cannot write default address - Rescanning... रि-स्केनी-इंग... - Done loading लोड हो गया| - To use the %s option - Error भूल - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_hr.ts b/src/qt/locale/bitcoin_hr.ts index 14752af6..bb178a0e 100644 --- a/src/qt/locale/bitcoin_hr.ts +++ b/src/qt/locale/bitcoin_hr.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - O Myriadcoin-u + About Myriadcoin Core + O Myriadcoin Jezrgu - - <b>Myriadcoin</b> version - <b>Myriadcoin</b> verzija + <b>Myriadcoin Core</b> version + - This is experimental software. @@ -23,153 +19,128 @@ This product includes software developed by the OpenSSL Project for use in the O - Copyright + Autorsko pravo + + + The Myriadcoin Core developers - - The Myriadcoin developers + (%1-bit) AddressBookPage - - Address Book - Adresar - - - Double-click to edit address or label Dvostruki klik za uređivanje adrese ili oznake - Create a new address Dodajte novu adresu - + &New + + + Copy the currently selected address to the system clipboard Kopiraj trenutno odabranu adresu u međuspremnik - - &New Address - &Nova adresa + &Copy + - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Ovo su vaše Myriadcoin adrese za primanje isplate. Možda želite dati drukčiju adresu svakom primatelju tako da možete pratiti tko je platio. + C&lose + - &Copy Address &Kopirati adresu - - Show &QR Code - Prikaži &QR Kôd - - - - Sign a message to prove you own a Myriadcoin address - - - - - Sign &Message - - - - Delete the currently selected address from the list - Export the data in the current tab to a file Izvoz podataka iz trenutnog taba u datoteku - &Export - + &Izvoz - - Verify a message to ensure it was signed with a specified Myriadcoin address - - - - - &Verify Message - - - - &Delete &Brisanje - + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + Copy &Label Kopirati &oznaku - &Edit &Izmjeniti - - Send &Coins + Export Address List - - Export Address Book Data - Izvoz podataka adresara - - - Comma separated file (*.csv) Datoteka vrijednosti odvojenih zarezom (*. csv) - - Error exporting - Pogreška kod izvoza + Exporting Failed + - - Could not write to file %1. - Ne mogu pisati u datoteku %1. + There was an error trying to save the address list to %1. + AddressTableModel - Label Oznaka - Address Adresa - (no label) (bez oznake) @@ -177,140 +148,106 @@ This product includes software developed by the OpenSSL Project for use in the O AskPassphraseDialog - Passphrase Dialog - Enter passphrase Unesite lozinku - New passphrase Nova lozinka - Repeat new passphrase Ponovite novu lozinku - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. Unesite novi lozinku za novčanik. <br/> Molimo Vas da koristite zaporku od <b>10 ili više slučajnih znakova,</b> ili <b>osam ili više riječi.</b> - Encrypt wallet Šifriranje novčanika - This operation needs your wallet passphrase to unlock the wallet. Ova operacija treba lozinku vašeg novčanika kako bi se novčanik otključao. - Unlock wallet Otključaj novčanik - This operation needs your wallet passphrase to decrypt the wallet. Ova operacija treba lozinku vašeg novčanika kako bi se novčanik dešifrirao. - Decrypt wallet Dešifriranje novčanika. - Change passphrase Promjena lozinke - Enter the old and new passphrase to the wallet. Unesite staru i novu lozinku za novčanik. - Confirm wallet encryption Potvrdi šifriranje novčanika - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! Upozorenje: Ako šifrirate vaš novčanik i izgubite lozinku, <b>IZGUBIT ĆETE SVE SVOJE MYRIADCOINSE!</b> - Are you sure you wish to encrypt your wallet? Jeste li sigurni da želite šifrirati svoj novčanik? - 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. - - Warning: The Caps Lock key is on! - + Upozorenje: Tipka Caps Lock je uključena! - - Wallet encrypted Novčanik šifriran - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. - Myriadcoin će se sada zatvoriti kako bi dovršio postupak šifriranja. Zapamtite da šifriranje vašeg novčanika ne može u potpunosti zaštititi vaše myriadcoine od krađe preko zloćudnog softvera koji bi bio na vašem računalu. + Myriadcoin će se sada zatvoriti kako bi dovršio postupak šifriranja. Zapamtite da šifriranje vašeg novčanika ne može u potpunosti zaštititi vaše bitcoine od krađe preko zloćudnog softvera koji bi bio na vašem računalu. - - - - Wallet encryption failed Šifriranje novčanika nije uspjelo - Wallet encryption failed due to an internal error. Your wallet was not encrypted. Šifriranje novčanika nije uspjelo zbog interne pogreške. Vaš novčanik nije šifriran. - - The supplied passphrases do not match. Priložene lozinke se ne podudaraju. - Wallet unlock failed Otključavanje novčanika nije uspjelo - - - The passphrase entered for the wallet decryption was incorrect. Lozinka za dešifriranje novčanika nije točna. - Wallet decryption failed Dešifriranje novčanika nije uspjelo - Wallet passphrase was successfully changed. Lozinka novčanika je uspješno promijenjena. @@ -318,319 +255,286 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - Sign &message... &Potpišite poruku... - Synchronizing with network... Usklađivanje s mrežom ... - &Overview &Pregled - + Node + + + Show general overview of wallet Prikaži opći pregled novčanika - &Transactions &Transakcije - Browse transaction history Pretraži povijest transakcija - - Edit the list of stored addresses and labels - Uređivanje popisa pohranjenih adresa i oznaka - - - - Show the list of addresses for receiving payments - Prikaži popis adresa za primanje isplate - - - E&xit &Izlaz - Quit application Izlazak iz programa - Show information about Myriadcoin - Prikaži informacije o Myriadcoinu + Prikaži informacije o Bitcoinu - About &Qt Više o &Qt - Show information about Qt Prikaži informacije o Qt - &Options... &Postavke - &Encrypt Wallet... &Šifriraj novčanik... - &Backup Wallet... &Backup novčanika... - &Change Passphrase... &Promijena lozinke... - + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + Importing blocks from disk... Importiranje blokova sa diska... - Reindexing blocks on disk... Re-indeksiranje blokova na disku... - Send coins to a Myriadcoin address Slanje novca na myriadcoin adresu - Modify configuration options for Myriadcoin - Promijeni postavke konfiguracije za myriadcoin + Promijeni postavke konfiguracije za bitcoin - Backup wallet to another location Napravite sigurnosnu kopiju novčanika na drugoj lokaciji - Change the passphrase used for wallet encryption Promijenite lozinku za šifriranje novčanika - &Debug window - Open debugging and diagnostic console - &Verify message... - + &Potvrdite poruku... - - Myriadcoin Myriadcoin - Wallet Novčanik - &Send - + &Pošalji - &Receive - - &Addresses - - - - - &About Myriadcoin - &O Myriadcoinu - - - &Show / Hide - Show or hide the main Window - Encrypt the private keys that belong to your wallet - Sign messages with your Myriadcoin addresses to prove you own them - Verify messages to ensure they were signed with specified Myriadcoin addresses - &File &Datoteka - &Settings &Konfiguracija - &Help &Pomoć - Tabs toolbar Traka kartica - - [testnet] [testnet] - + Myriadcoin Core + Myriadcoin Jezgra + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + Myriadcoin client Myriadcoin klijent - %n active connection(s) to Myriadcoin network %n aktivna veza na Myriadcoin mrežu%n aktivne veze na Myriadcoin mrežu%n aktivnih veza na Myriadcoin mrežu - No block source available... - Processed %1 of %2 (estimated) blocks of transaction history. - Processed %1 blocks of transaction history. Obrađeno %1 blokova povijesti transakcije. - %n hour(s) - %n day(s) - %n week(s) - + %1 and %2 + + + + %n year(s) + + + %1 behind - Last received block was generated %1 ago. - Transactions after this will not yet be visible. - Error Greška - Warning - + Upozorenje - Information - + Informacija - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - Up to date Ažurno - Catching up... Ažuriranje... - - Confirm transaction fee - - - - Sent transaction Poslana transakcija - Incoming transaction Dolazna transakcija - Date: %1 Amount: %2 Type: %3 @@ -643,29 +547,14 @@ Adresa:%4 - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> Novčanik je <b>šifriran</b> i trenutno <b>otključan</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> Novčanik je <b>šifriran</b> i trenutno <b>zaključan</b> - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. @@ -673,389 +562,702 @@ Adresa:%4 ClientModel - Network Alert + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + + + + Bytes: + + + + Amount: + Iznos: + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + Iznos + + + Address + Adresa + + + Date + Datum + + + Confirmations + + + + Confirmed + Potvrđeno + + + Priority + + + + Copy address + Kopirati adresu + + + Copy label + Kopirati oznaku + + + Copy amount + Kopiraj iznos + + + Copy transaction ID + + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + + + + Dust + + + + yes + + + + no + + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + (bez oznake) + + + change from %1 (%2) + + + + (change) + + + EditAddressDialog - Edit Address Izmjeni adresu - &Label &Oznaka - - The label associated with this address book entry - Oznaka ovog upisa u adresar + The label associated with this address list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + - &Address &Adresa - - The address associated with this address book entry. This can only be modified for sending addresses. - Adresa ovog upisa u adresar. Može se mjenjati samo kod adresa za slanje. - - - New receiving address Nova adresa za primanje - New sending address Nova adresa za slanje - Edit receiving address Uredi adresu za primanje - Edit sending address Uredi adresu za slanje - The entered address "%1" is already in the address book. Upisana adresa "%1" je već u adresaru. - The entered address "%1" is not a valid Myriadcoin address. Upisana adresa "%1" nije valjana myriadcoin adresa. - Could not unlock wallet. Ne mogu otključati novčanik. - New key generation failed. Stvaranje novog ključa nije uspjelo. - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt + A new data directory will be created. - + name + ime + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core + Myriadcoin Jezgra + + version verzija - Usage: Upotreba: - command-line options - UI options UI postavke - Set language, for example "de_DE" (default: system locale) - Start minimized Pokreni minimiziran - + Set SSL root certificates for payment request (default: -system-) + + + Show splash screen on startup (default: 1) + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + Dobrodošli + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" can not be created. + + + + Error + Pogreška + + + GB of free space available + + + + (of %1GB needed) + (od potrebnog %1GB) + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open + + OptionsDialog - Options Postavke - &Main &Glavno - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. - Pay transaction &fee Plati &naknadu za transakciju - Automatically start Myriadcoin after logging in to the system. Automatski pokreni Myriadcoin kad se uključi računalo - &Start Myriadcoin on system login &Pokreni Myriadcoin kod pokretanja sustava - + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + Reset all client options to default. - &Reset Options - &Network + &Mreža + + + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change - Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. Automatski otvori port Myriadcoin klijenta na ruteru. To radi samo ako ruter podržava UPnP i ako je omogućen. - Map port using &UPnP Mapiraj port koristeći &UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - Spojite se na Bitcon mrežu putem SOCKS proxy-a (npr. kod povezivanja kroz Tor) - - - - &Connect through SOCKS proxy: - &Povezivanje putem SOCKS proxy-a: - - - Proxy &IP: - + Proxy &IP: - - IP address of the proxy (e.g. 127.0.0.1) - IP adresa proxy-a (npr. 127.0.0.1) - - - &Port: - Port of the proxy (e.g. 9050) Port od proxy-a (npr. 9050) - SOCKS &Version: - + SOCKS &Verzija: - SOCKS version of the proxy (e.g. 5) - &Window - + &Prozor - Show only a tray icon after minimizing the window. Prikaži samo ikonu u sistemskoj traci nakon minimiziranja prozora - &Minimize to the tray instead of the taskbar &Minimiziraj u sistemsku traku umjesto u traku programa - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. Minimizirati umjesto izaći iz aplikacije kada je prozor zatvoren. Kada je ova opcija omogućena, aplikacija će biti zatvorena tek nakon odabira Izlaz u izborniku. - M&inimize on close M&inimiziraj kod zatvaranja - &Display &Prikaz - User Interface &language: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. - &Unit to show amounts in: &Jedinica za prikazivanje iznosa: - Choose the default subdivision unit to show in the interface and when sending coins. - Izaberite željeni najmanji dio myriadcoina koji će biti prikazan u sučelju i koji će se koristiti za plaćanje. + Izaberite željeni najmanji dio bitcoina koji će biti prikazan u sučelju i koji će se koristiti za plaćanje. - Whether to show Myriadcoin addresses in the transaction list or not. - &Display addresses in transaction list &Prikaži adrese u popisu transakcija - + Whether to show coin control features or not. + + + &OK - + &U redu - &Cancel - + &Odustani - - &Apply - - - - default + standardne vrijednosti + + + none - Confirm options reset - - Some settings may require a client restart to take effect. + Client restart required to activate changes. - - Do you want to proceed? + Client will be shutdown, do you want to proceed? - - - Warning - Upozorenje - - - - - This setting will take effect after restarting Myriadcoin. + This change would require a client restart. - The supplied proxy address is invalid. - + Priložena proxy adresa je nevažeća. OverviewPage - Form Oblik - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. - + Prikazani podatci mogu biti zastarjeli. Vaš novčanik se automatski sinkronizira s Myriadcoin mrežom kada je veza uspostavljena, ali taj proces još nije završen. - - Balance: - Stanje: - - - - Unconfirmed: - Nepotvrđene: - - - Wallet Novčanik - + Available: + + + + Your current spendable balance + + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + + + Immature: - Mined balance that has not yet matured - + Total: + Ukupno: + + + Your current total balance + + + <b>Recent transactions</b> <b>Nedavne transakcije</b> - - Your current balance - Vaše trenutno stanje računa - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - Ukupni iznos transakcija koje tek trebaju biti potvrđene, i još uvijek nisu uračunate u trenutni saldo - - - - out of sync @@ -1063,579 +1265,856 @@ Adresa:%4 PaymentServer - + URI handling + URI upravljanje + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + Cannot start myriadcoin: click-to-pay handler + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + + + + Network request error + + - QRCodeDialog + QObject - - QR Code Dialog - QR Code Dijalog + Myriadcoin + Myriadcoin - - Request Payment - Zatraži plaćanje - - - - Amount: - Iznos: - - - - Label: - Oznaka - - - - Message: - Poruka: - - - - &Save As... - &Spremi kao... - - - - Error encoding URI into QR Code. + Error: Specified data directory "%1" does not exist. - - The entered amount is invalid, please check. + Error: Cannot parse configuration file: %1. Only use key=value syntax. - - Resulting URI too long, try to reduce the text for label / message. - Rezultirajući URI je predug, probajte umanjiti tekst za naslov / poruku. + Error: Invalid combination of -regtest and -testnet. + + + + Myriadcoin Core didn't yet exit safely... + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Unesite Myriadcoin adresu (npr. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + + + + &Copy Image + - Save QR Code - + Spremi QR kod - - PNG Images (*.png) - PNG slike (*.png) + PNG Image (*.png) + RPCConsole - Client name - + Ime klijenta - - - - - - - - - - N/A - + N/A - Client version - + Verzija klijenta - &Information + &Informacija + + + Debug window + + + + General - Using OpenSSL version - + Koristim OpenSSL verziju - Startup time - Network - + Mreža + + + Name + Ime - Number of connections - + Broj konekcija - - On testnet - - - - Block chain Lanac blokova - Current number of blocks Trenutni broj blokova - Estimated total blocks Procjenjeni ukupni broj blokova - Last block time Posljednje vrijeme bloka - &Open - + &Otvori - - Command-line options - - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - - - - - &Show - - - - &Console + &Konzola + + + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: - Build date - - Myriadcoin - Debug window - - - - - Myriadcoin Core - - - - Debug log file - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. - Clear console - + Očisti konzolu - Welcome to the Myriadcoin RPC console. - + Dobrodošli u Myriadcoin RPC konzolu. - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + Kako bi navigirali kroz povijest koristite strelice gore i dolje. <b>Ctrl-L</b> kako bi očistili ekran. + + + Type <b>help</b> for an overview of available commands. - - Type <b>help</b> for an overview of available commands. + %1 B + + + + %1 KB + + + + %1 MB + + + + %1 GB + + + + %1 m + + + + %1 h + + + + %1 h %2 m + + + + + ReceiveCoinsDialog + + &Amount: + + + + &Label: + &Oznaka: + + + &Message: + + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + + + + Clear + + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + Pokaži + + + Remove the selected entries from the list + + + + Remove + + + + Copy label + Kopirati oznaku + + + Copy message + + + + Copy amount + Kopiraj iznos + + + + ReceiveRequestDialog + + QR Code + QR kôd + + + Copy &URI + + + + Copy &Address + + + + &Save Image... + + + + Request payment to %1 + + + + Payment information + + + + URI + + + + Address + Adresa + + + Amount + Iznos + + + Label + Oznaka + + + Message + Poruka + + + Resulting URI too long, try to reduce the text for label / message. + Rezultirajući URI je predug, probajte umanjiti tekst za naslov / poruku. + + + Error encoding URI into QR Code. + + + + + RecentRequestsTableModel + + Date + Datum + + + Label + Oznaka + + + Message + Poruka + + + Amount + Iznos + + + (no label) + (bez oznake) + + + (no message) + + + + (no amount) SendCoinsDialog - - - - - - - - Send Coins Slanje novca - + Coin Control Features + + + + Inputs... + + + + automatically selected + + + + Insufficient funds! + + + + Quantity: + + + + Bytes: + + + + Amount: + Iznos: + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + Send to multiple recipients at once Pošalji k nekoliko primatelja odjednom - Add &Recipient &Dodaj primatelja - - Remove all transaction fields - Obriši sva polja transakcija + Clear all fields of the form. + - Clear &All Obriši &sve - Balance: Stanje: - - 123.456 BTC - 123,456 BTC - - - Confirm the send action Potvrdi akciju slanja - S&end &Pošalji - - <b>%1</b> to %2 (%3) - <b>%1</b> do %2 (%3) - - - Confirm send coins Potvrdi slanje novca - - Are you sure you want to send %1? - Jeste li sigurni da želite poslati %1? + %1 to %2 + - - and - i + Copy quantity + + + + Copy amount + Kopiraj iznos + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + + + + or + ili - The recipient address is not valid, please recheck. Adresa primatelja je nevaljala, molimo provjerite je ponovo. - The amount to pay must be larger than 0. Iznos mora biti veći od 0. - The amount exceeds your balance. Iznos je veći od stanja računa. - The total exceeds your balance when the %1 transaction fee is included. Iznos je veći od stanja računa kad se doda naknada za transakcije od %1. - Duplicate address found, can only send to each address once per send operation. Pronašli smo adresu koja se ponavlja. U svakom plaćanju program može svaku adresu koristiti samo jedanput. - - Error: Transaction creation failed! + Transaction creation failed! - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Generirani novčići moraju pričekati nastanak 120 blokova prije nego što ih je moguće potrošiti. Kad ste generirali taj blok, on je bio emitiran u mrežu kako bi bio dodan postojećim lancima blokova. Ako ne uspije biti dodan, njegov status bit će promijenjen u "nije prihvatljiv" i on neće biti potrošiv. S vremena na vrijeme tako nešto se može desiti ako neki drugi nod približno istovremeno generira blok. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + + + + (no label) + (bez oznake) + + + Warning: Unknown change address + + + + Are you sure you want to send? + + + + added as transaction fee + + + + Payment request expired + + + + Invalid payment address %1 + SendCoinsEntry - - Form - Oblik - - - A&mount: &Iznos: - Pay &To: &Primatelj plaćanja: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book Unesite oznaku za ovu adresu kako bi ju dodali u vaš adresar - &Label: &Oznaka: - - Choose address from address book - Odaberite adresu iz adresara + Choose previously used address + + + + This is a normal payment. + - Alt+A Alt+A - Paste address from clipboard Zalijepi adresu iz međuspremnika - Alt+P Alt+P - - Remove this recipient - Ukloni ovog primatelja + Remove this entry + - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Unesite Myriadcoin adresu (npr. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + Poruka: + + + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + Primatelj plaćanja: + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. + SignVerifyMessageDialog - Signatures - Sign / Verify a Message - &Sign Message &Potpišite poruku - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. Možete potpisati poruke sa svojom adresom kako bi dokazali da ih posjedujete. Budite oprezni da ne potpisujete ništa mutno, jer bi vas phishing napadi mogli na prevaru natjerati da prepišete svoj identitet njima. Potpisujte samo detaljno objašnjene izjave sa kojima se slažete. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Unesite Myriadcoin adresu (npr. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book - Odaberite adresu iz adresara + Choose previously used address + - - Alt+A Alt+A - Paste address from clipboard Zalijepi adresu iz međuspremnika - Alt+P Alt+P - Enter the message you want to sign here Upišite poruku koju želite potpisati ovdje - Signature - + Potpis - Copy the current signature to the system clipboard - Sign the message to prove you own this Myriadcoin address - Sign &Message - Reset all sign message fields - - Clear &All Obriši &sve - &Verify Message - + &Potvrdite poruku - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Unesite Myriadcoin adresu (npr. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address - Verify &Message - Reset all verify message fields - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Unesite Myriadcoin adresu (npr. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature - - Enter Myriadcoin signature - - - - - The entered address is invalid. - - - - Please check the address and try again. - - The entered address does not refer to a key. - Wallet unlock was cancelled. - + Otključavanje novčanika je otkazano. - Private key for the entered address is not available. - Message signing failed. - Message signed. - + Poruka je potpisana. - The signature could not be decoded. - - Please check the signature and try again. - The signature did not match the message digest. - Message verification failed. - Message verified. @@ -1643,186 +2122,160 @@ Adresa:%4 SplashScreen - - The Myriadcoin developers + Myriadcoin Core + Myriadcoin Jezgra + + + The Myriadcoin Core developers - [testnet] [testnet] + + TrafficGraphWidget + + KB/s + + + TransactionDesc - Open until %1 Otvoren do %1 - + conflicted + + + %1/offline %1 nije dostupan - %1/unconfirmed %1/nepotvrđeno - %1 confirmations %1 potvrda - Status Status - , broadcast through %n node(s) - Date Datum - Source - + Izvor - Generated Generiran - - From Od - - - To Za - - own address - + vlastita adresa - label oznaka - - - - - Credit Uplaćeno - matures in %n more block(s) - not accepted Nije prihvaćeno - - - - Debit Zaduženje - Transaction fee Naknada za transakciju - Net amount Neto iznos - Message Poruka - Comment Komentar - Transaction ID + ID transakcije + + + Merchant - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Generirani novčići moraju pričekati nastanak 120 blokova prije nego što ih je moguće potrošiti. Kad ste generirali taj blok, on je bio emitiran u mrežu kako bi bio dodan postojećim lancima blokova. Ako ne uspije biti dodan, njegov status bit će promijenjen u "nije prihvaćen" i on neće biti potrošiv. S vremena na vrijeme tako nešto se može desiti ako neki drugi nod generira blok u približno isto vrijeme. + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + - Debug information - Transaction - + Transakcija - Inputs - + Unosi - Amount Iznos - true - false - , has not been successfully broadcast yet , još nije bio uspješno emitiran - Open for %n more block(s) - unknown nepoznato @@ -1830,12 +2283,10 @@ Adresa:%4 TransactionDescDialog - Transaction details Detalji transakcije - This pane shows a detailed description of the transaction Ova panela prikazuje detaljni opis transakcije @@ -1843,117 +2294,102 @@ Adresa:%4 TransactionTableModel - Date Datum - Type Tip - Address Adresa - Amount Iznos + + Immature (%1 confirmations, will be available after %2) + + - Open for %n more block(s) - Open until %1 Otvoren do %1 - - Offline (%1 confirmations) - Nije na mreži (%1 potvrda) - - - - Unconfirmed (%1 of %2 confirmations) - Nepotvrđen (%1 od %2 potvrda) - - - Confirmed (%1 confirmations) Potvrđen (%1 potvrda) - - - Mined balance will be available when it matures in %n more block(s) - - - This block was not received by any other nodes and will probably not be accepted! Generirano - Upozorenje: ovaj blok nije bio primljen od strane bilo kojeg drugog noda i vjerojatno neće biti prihvaćen! - Generated but not accepted Generirano, ali nije prihvaćeno - + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + Received with Primljeno s - Received from Primljeno od - Sent to Poslano za - Payment to yourself Plaćanje samom sebi - Mined Rudareno - (n/a) (n/d) - Transaction status. Hover over this field to show number of confirmations. Status transakcije - Date and time that the transaction was received. Datum i vrijeme kad je transakcija primljena - Type of transaction. Vrsta transakcije. - Destination address of transaction. Odredište transakcije - Amount removed from or added to balance. Iznos odbijen od ili dodan k saldu. @@ -1961,176 +2397,156 @@ Adresa:%4 TransactionView - - All Sve - Today Danas - This week Ovaj tjedan - This month Ovaj mjesec - Last month Prošli mjesec - This year Ove godine - Range... Raspon... - Received with Primljeno s - Sent to Poslano za - To yourself Tebi - Mined Rudareno - Other Ostalo - Enter address or label to search Unesite adresu ili oznaku za pretraživanje - Min amount Min iznos - Copy address Kopirati adresu - Copy label Kopirati oznaku - Copy amount Kopiraj iznos - Copy transaction ID - Edit label Izmjeniti oznaku - Show transaction details + Prikaži detalje transakcije + + + Export Transaction History - - Export Transaction Data - Izvoz podataka transakcija + Exporting Failed + + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + + + + The transaction history was successfully saved to %1. + - Comma separated file (*.csv) Datoteka podataka odvojenih zarezima (*.csv) - Confirmed Potvrđeno - Date Datum - Type Tip - Label Oznaka - Address Adresa - Amount Iznos - ID ID - - Error exporting - Izvoz pogreške - - - - Could not write to file %1. - Ne mogu pisati u datoteku %1. - - - Range: Raspon: - to za + + WalletFrame + + No wallet has been loaded. + + + WalletModel - Send Coins Slanje novca @@ -2138,160 +2554,121 @@ Adresa:%4 WalletView - &Export - + &Izvoz - Export the data in the current tab to a file Izvoz podataka iz trenutnog taba u datoteku - Backup Wallet - Wallet Data (*.dat) - + Podaci novčanika (*.dat) - Backup Failed - - There was an error trying to save the wallet data to the new location. + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. - Backup Successful - - - The wallet data was successfully saved to the new location. - - bitcoin-core - - Myriadcoin version - Myriadcoin verzija - - - Usage: Upotreba: - - Send command to -server or myriadcoind - Pošalji komandu usluzi -server ili myriadcoind - - - List commands Prikaži komande - Get help for a command Potraži pomoć za komandu - Options: Postavke: - Specify configuration file (default: myriadcoin.conf) Odredi konfiguracijsku datoteku (ugrađeni izbor: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) - Odredi proces ID datoteku (ugrađeni izbor: myriadcoin.pid) + Odredi proces ID datoteku (ugrađeni izbor: bitcoin.pid) - Specify data directory Odredi direktorij za datoteke - - Set database cache size in megabytes (default: 25) - Postavi cache za bazu podataka u MB (zadano:25) - - - Listen for connections on <port> (default: 8333 or testnet: 18333) Slušaj na <port>u (default: 8333 ili testnet: 18333) - Maintain at most <n> connections to peers (default: 125) Održavaj najviše <n> veza sa članovima (default: 125) - Connect to a node to retrieve peer addresses, and disconnect - Specify your own public address - + Odaberi vlastitu javnu adresu - Threshold for disconnecting misbehaving peers (default: 100) Prag za odspajanje članova koji se čudno ponašaju (default: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Broj sekundi koliko se članovima koji se čudno ponašaju neće dopustiti da se opet spoje (default: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) Prihvaćaj JSON-RPC povezivanje na portu broj <port> (ugrađeni izbor: 8332 or testnet: 18332) - Accept command line and JSON-RPC commands Prihvati komande iz tekst moda i JSON-RPC - + Myriadcoin Core RPC client version + + + Run in the background as a daemon and accept commands Izvršavaj u pozadini kao uslužnik i prihvaćaj komande - Use the test network Koristi test mrežu - Accept connections from outside (default: 1 if no -proxy or -connect) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2306,612 +2683,686 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications - + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Upozorenje: -paytxfee je podešen na preveliki iznos. To je iznos koji ćete platiti za obradu transakcije. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. Upozorenje: Molimo provjerite jesu li datum i vrijeme na vašem računalu točni. Ako vaš sat ide krivo, Myriadcoin neće raditi ispravno. - + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + Attempt to recover private keys from a corrupt wallet.dat - + Myriadcoin Core Daemon + + + Block creation options: Opcije za kreiranje bloka: - + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + Connect only to the specified node(s) Poveži se samo sa određenim nodom - + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + Corrupted block database detected - + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + Discover own IP address (default: 1 when listening and no -externalip) - + Do not load the wallet and disable wallet RPC calls + + + Do you want to rebuild the block database now? - Error initializing block database - Error initializing wallet database environment %s! - Error loading block database - Error opening block database - Error: Disk space is low! - + Pogreška: Nema prostora na disku! - Error: Wallet locked, unable to create transaction! - Error: system error: - + Pogreška: sistemska pogreška: - Failed to listen on any port. Use -listen=0 if you want this. - Failed to read block info - Failed to read block - Failed to sync block index - Failed to write block index - Failed to write block info - Failed to write block - Failed to write file info - Failed to write to coin database - Failed to write transaction index - Failed to write undo data - + Fee per kB to add to transactions you send + Naknada po kB dodana transakciji koju šaljete + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + Find peers using DNS lookup (default: 1 unless -connect) - + Force safe mode (default: 0) + + + Generate coins (default: 0) - How many blocks to check at startup (default: 288, 0 = all) - - How thorough the block verification is (0-4, default: 3) + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' - Not enough file descriptors available. - + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + Rebuild block chain index from current blk000??.dat files - + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + Set the number of threads to service RPC calls (default: 4) - + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + Verifying blocks... - Verifying wallet... - + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + + + Imports blocks from external blk000??.dat file Importiraj blokove sa vanjskog blk000??.dat fajla - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) - Information - + Informacija - - Invalid -tor address: '%s' - Nevaljala -tor adresa: '%s' - - - Invalid amount for -minrelaytxfee=<amount>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' - + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + Maintain a full transaction index (default: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Only accept block chain matching built-in checkpoints (default: 1) Prihvati samo lance blokova koji se podudaraju sa ugrađenim checkpoint-ovima (default: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - Output extra debugging information. Implies all other -debug* options + Print block on startup, if found in block index - - Output extra network debugging information + Print block tree on startup (default: 0) - - Prepend debug output with timestamp - Dodaj izlaz debuga na početak sa vremenskom oznakom + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) SSL postavke: (za detalje o podešavanju SSL opcija vidi Myriadcoin Wiki) - - Select the version of socks proxy to use (4-5, default: 5) + Send command to Myriadcoin Core - Send trace/debug info to console instead of debug.log file Šalji trace/debug informacije na konzolu umjesto u debug.log datoteku - - Send trace/debug info to debugger - Pošalji trace/debug informacije u debugger - - - - Set maximum block size in bytes (default: 250000) - Podesite maksimalnu veličinu bloka u bajtovima (default: 250000) - - - Set minimum block size in bytes (default: 0) Podesite minimalnu veličinu bloka u bajtovima (default: 0) - + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + Shrink debug.log file on client startup (default: 1 when no -debug) - Signing transaction failed - Specify connection timeout in milliseconds (default: 5000) Odredi vremenski prozor za spajanje na mrežu u milisekundama (ugrađeni izbor: 5000) - - System error: + Start Myriadcoin Core Daemon - + System error: + Pogreška sistema: + + Transaction amount too small - Transaction amounts must be positive - Transaction too large - Use UPnP to map the listening port (default: 0) Pokušaj koristiti UPnP da otvoriš port za uslugu (default: 0) - Use UPnP to map the listening port (default: 1 when listening) Pokušaj koristiti UPnP da otvoriš port za uslugu (default: 1 when listening) - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - Username for JSON-RPC connections Korisničko ime za JSON-RPC veze - Warning - + Upozorenje - Warning: This version is obsolete, upgrade required! - - You need to rebuild the databases using -reindex to change -txindex + Zapping all transactions from wallet... - + on startup + + + + version + verzija + + wallet.dat corrupt, salvage failed - Password for JSON-RPC connections Lozinka za JSON-RPC veze - Allow JSON-RPC connections from specified IP address Dozvoli JSON-RPC povezivanje s određene IP adrese - Send commands to node running on <ip> (default: 127.0.0.1) Pošalji komande nodu na adresi <ip> (ugrađeni izbor: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) Izvršite naredbu kada se najbolji blok promjeni (%s u cmd je zamjenjen sa block hash) - Upgrade wallet to latest format Nadogradite novčanik u posljednji format. - Set key pool size to <n> (default: 100) Podesi memorijski prostor za ključeve na <n> (ugrađeni izbor: 100) - Rescan the block chain for missing wallet transactions Ponovno pretraži lanac blokova za transakcije koje nedostaju - Use OpenSSL (https) for JSON-RPC connections Koristi OpenSSL (https) za JSON-RPC povezivanje - Server certificate file (default: server.cert) Uslužnikov SSL certifikat (ugrađeni izbor: server.cert) - Server private key (default: server.pem) Uslužnikov privatni ključ (ugrađeni izbor: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Prihvaljivi načini šifriranja (ugrađeni izbor: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - This help message Ova poruka za pomoć - Unable to bind to %s on this computer (bind returned error %d, %s) Program ne može koristiti %s na ovom računalu (bind returned error %d, %s) - - Connect through socks proxy - Poveži se kroz socks proxy - - - Allow DNS lookups for -addnode, -seednode and -connect Dozvoli DNS upite za dodavanje nodova i povezivanje - Loading addresses... Učitavanje adresa... - Error loading wallet.dat: Wallet corrupted Greška kod učitavanja wallet.dat: Novčanik pokvaren - Error loading wallet.dat: Wallet requires newer version of Myriadcoin - Greška kod učitavanja wallet.dat: Novčanik zahtjeva noviju verziju Myriadcoina + Greška kod učitavanja wallet.dat: Novčanik zahtjeva noviju verziju Bitcoina - Wallet needed to be rewritten: restart Myriadcoin to complete Novčanik je trebao prepravak: ponovo pokrenite Myriadcoin - Error loading wallet.dat Greška kod učitavanja wallet.dat - Invalid -proxy address: '%s' Nevaljala -proxy adresa: '%s' - Unknown network specified in -onlynet: '%s' - Unknown -socks proxy version requested: %i - Cannot resolve -bind address: '%s' - Cannot resolve -externalip address: '%s' - Invalid amount for -paytxfee=<amount>: '%s' Nevaljali iznos za opciju -paytxfee=<amount>: '%s' - Invalid amount Nevaljali iznos za opciju - Insufficient funds Nedovoljna sredstva - Loading block index... Učitavanje indeksa blokova... - Add a node to connect to and attempt to keep the connection open Unesite nod s kojim se želite spojiti and attempt to keep the connection open - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - Program ne može koristiti %s na ovom računalu. Myriadcoin program je vjerojatno već pokrenut. - - - - Fee per KB to add to transactions you send - Naknada posredniku po KB-u koja će biti dodana svakoj transakciji koju pošalješ - - - Loading wallet... Učitavanje novčanika... - Cannot downgrade wallet Nije moguće novčanik vratiti na prijašnju verziju. - Cannot write default address Nije moguće upisati zadanu adresu. - Rescanning... Rescaniranje - Done loading Učitavanje gotovo - To use the %s option - Error Greška - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_hu.ts b/src/qt/locale/bitcoin_hu.ts index a8b9f24d..b1cf9d6b 100644 --- a/src/qt/locale/bitcoin_hu.ts +++ b/src/qt/locale/bitcoin_hu.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - A Myriadcoinról + About Myriadcoin Core + - - <b>Myriadcoin</b> version - <b>Myriadcoin</b> verzió + <b>Myriadcoin Core</b> version + - This is experimental software. @@ -27,153 +23,128 @@ MIT/X11 szoftverlicenc alatt kiadva, lásd a mellékelt fájlt COPYING vagy http Ez a termék az OpenSSL Project által lett kifejlesztve az OpenSSL Toolkit (http://www.openssl.org/) és kriptográfiai szoftvertben való felhasználásra, írta Eric Young (eay@cryptsoft.com) és UPnP szoftver, írta Thomas Bernard. - Copyright + Copyright + + + The Myriadcoin Core developers - - The Myriadcoin developers + (%1-bit) AddressBookPage - - Address Book - Címjegyzék - - - Double-click to edit address or label Dupla-kattintás a cím vagy a címke szerkesztéséhez - Create a new address Új cím létrehozása - + &New + + + Copy the currently selected address to the system clipboard A kiválasztott cím másolása a vágólapra - - &New Address - &Új cím + &Copy + - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Ezekkel a Myriadcoin-címekkel fogadhatod kifizetéseket. Érdemes lehet minden egyes kifizető számára külön címet létrehozni, hogy könnyebben nyomon követhesd, kitől kaptál már pénzt. + C&lose + - &Copy Address &Cím másolása - - Show &QR Code - &QR kód mutatása - - - - Sign a message to prove you own a Myriadcoin address - - - - - Sign &Message - - - - Delete the currently selected address from the list - Export the data in the current tab to a file Jelenlegi nézet exportálása fájlba - &Export - + &Exportálás... - - Verify a message to ensure it was signed with a specified Myriadcoin address - Üzenet ellenőrzése, hogy valóban a megjelölt Myriadcoin címekkel van-e aláírva. - - - - &Verify Message - Üzenet ellenőrzése - - - &Delete &Törlés - + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + Copy &Label Címke &másolása - &Edit Sz&erkesztés - - Send &Coins + Export Address List - - Export Address Book Data - Címjegyzék adatainak exportálása - - - Comma separated file (*.csv) Vesszővel elválasztott fájl (*. csv) - - Error exporting - Hiba exportálás közben + Exporting Failed + - - Could not write to file %1. - %1 nevű fájl nem írható. + There was an error trying to save the address list to %1. + AddressTableModel - Label Címke - Address Cím - (no label) (nincs címke) @@ -181,140 +152,106 @@ Ez a termék az OpenSSL Project által lett kifejlesztve az OpenSSL Toolkit (htt AskPassphraseDialog - Passphrase Dialog Kulcsszó párbeszédablak - Enter passphrase Add meg a jelszót - New passphrase Új jelszó - Repeat new passphrase Új jelszó újra - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. Írd be az új jelszót a tárcához.<br/>Használj legalább 10<br/>véletlenszerű karaktert</b> vagy <b>legalább nyolc szót</b>. - Encrypt wallet Tárca kódolása - This operation needs your wallet passphrase to unlock the wallet. A tárcád megnyitásához a műveletnek szüksége van a tárcád jelszavára. - Unlock wallet Tárca megnyitása - This operation needs your wallet passphrase to decrypt the wallet. A tárcád dekódolásához a műveletnek szüksége van a tárcád jelszavára. - Decrypt wallet Tárca dekódolása - Change passphrase Jelszó megváltoztatása - Enter the old and new passphrase to the wallet. Írd be a tárca régi és új jelszavát. - Confirm wallet encryption Biztosan kódolni akarod a tárcát? - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! Figyelem: Ha kódolod a tárcát, és elveszíted a jelszavad, akkor <b>AZ ÖSSZES MYRIADCOINODAT IS EL FOGOD VESZÍTENI!</b> - Are you sure you wish to encrypt your wallet? Biztosan kódolni akarod a tárcát? - 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. FONTOS: A pénztárca-fájl korábbi mentéseit ezzel az új, titkosított pénztárca-fájllal kell helyettesíteni. Biztonsági okokból a pénztárca-fájl korábbi titkosítás nélküli mentései haszontalanná válnak amint elkezdi használni az új, titkosított pénztárcát. - - Warning: The Caps Lock key is on! - - Wallet encrypted Tárca kódolva - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. Myriadcoin will close now to finish the encryption process. Ne feledd, hogy a tárca titkosítása sem nyújt teljes védelmet az adathalász programok fertőzésével szemben. - - - - Wallet encryption failed Tárca kódolása sikertelen. - Wallet encryption failed due to an internal error. Your wallet was not encrypted. Tárca kódolása belső hiba miatt sikertelen. A tárcád nem lett kódolva. - - The supplied passphrases do not match. A megadott jelszavak nem egyeznek. - Wallet unlock failed Tárca megnyitása sikertelen - - - The passphrase entered for the wallet decryption was incorrect. Hibás jelszó. - Wallet decryption failed Dekódolás sikertelen. - Wallet passphrase was successfully changed. Jelszó megváltoztatva. @@ -322,319 +259,286 @@ Ez a termék az OpenSSL Project által lett kifejlesztve az OpenSSL Toolkit (htt BitcoinGUI - Sign &message... Üzenet aláírása... - Synchronizing with network... Szinkronizálás a hálózattal... - &Overview &Áttekintés - + Node + + + Show general overview of wallet Tárca általános áttekintése - &Transactions &Tranzakciók - Browse transaction history Tranzakciótörténet megtekintése - - Edit the list of stored addresses and labels - Tárolt címek és címkék listájának szerkesztése - - - - Show the list of addresses for receiving payments - Kiizetést fogadó címek listája - - - E&xit &Kilépés - Quit application Kilépés - Show information about Myriadcoin - Információk a Myriadcoinról + Információk a Bitcoinról - About &Qt A &Qt-ról - Show information about Qt Információk a Qt ról - &Options... &Opciók... - &Encrypt Wallet... Tárca &kódolása... - &Backup Wallet... &Bisztonsági másolat készítése a Tárcáról - &Change Passphrase... Jelszó &megváltoztatása... - + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + Importing blocks from disk... A blokkok importálása lemezről... - Reindexing blocks on disk... A blokkok lemezen történő ujraindexelése... - Send coins to a Myriadcoin address Érmék küldése megadott címre - Modify configuration options for Myriadcoin Myriadcoin konfigurációs opciók - Backup wallet to another location Biztonsági másolat készítése a Tárcáról egy másik helyre - Change the passphrase used for wallet encryption Tárcakódoló jelszó megváltoztatása - &Debug window &Debug ablak - Open debugging and diagnostic console Hibakereső és diagnosztikai konzol megnyitása - &Verify message... Üzenet &valódiságának ellenőrzése - - Myriadcoin Myriadcoin - Wallet Tárca - &Send - + &Küldés - &Receive - + &Fogadás - - &Addresses - - - - - &About Myriadcoin - &A Myriadcoinról - - - &Show / Hide - + &Mutat / Elrejt - Show or hide the main Window - Encrypt the private keys that belong to your wallet A pénztárcájához tartozó privát kulcsok titkosítása - Sign messages with your Myriadcoin addresses to prove you own them Üzenet aláírása a Myriadcoin címmel, amivel bizonyítja, hogy a cím az ön tulajdona. - Verify messages to ensure they were signed with specified Myriadcoin addresses Annak ellenőrzése, hogy az üzenetek valóban a megjelölt Myriadcoin címekkel vannak-e alaírva - &File &Fájl - &Settings &Beállítások - &Help &Súgó - Tabs toolbar Fül eszköztár - - [testnet] [teszthálózat] - + Myriadcoin Core + Myriadcoin Core + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + Myriadcoin client Myriadcoin kliens - %n active connection(s) to Myriadcoin network - %n aktív kapcsolat a Myriadcoin-hálózattal%n aktív kapcsolat a Myriadcoin-hálózattal + %n aktív kapcsolat a Bitcoin-hálózattal%n aktív kapcsolat a Bitcoin-hálózattal - No block source available... - + Blokk forrása ismeretlen... - Processed %1 of %2 (estimated) blocks of transaction history. - + %1 blokk feldolgozva a tranzakciótörténet %2 (becsült) blokkjából - Processed %1 blocks of transaction history. A tranzakció-történet %1 blokkja feldolgozva. - %n hour(s) - + %n óra%n óra - %n day(s) - + %n nap%n nap - %n week(s) + %n hét%n hét + + + %1 and %2 + + + + %n year(s) - %1 behind - + %1 lemaradás - Last received block was generated %1 ago. - + Az utolsóként kapott blokk kora: %1. - Transactions after this will not yet be visible. - + Ez utáni tranzakciók még nem lesznek láthatóak. - Error - + Hiba - Warning - + Figyelem - Information - + Információ - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - Up to date Naprakész - Catching up... Frissítés... - - Confirm transaction fee - Tranzakciós díj jóváhagyása - - - Sent transaction Tranzakció elküldve. - Incoming transaction Beérkező tranzakció - Date: %1 Amount: %2 Type: %3 @@ -647,29 +551,14 @@ Cím: %4 - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> Tárca <b>kódolva</b> és jelenleg <b>nyitva</b>. - Wallet is <b>encrypted</b> and currently <b>locked</b> Tárca <b>kódolva</b> és jelenleg <b>zárva</b>. - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. @@ -677,390 +566,703 @@ Cím: %4 ClientModel - Network Alert + Hálózati figyelmeztetés + + + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + + + + Bytes: + + + + Amount: + Összeg: + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + Összeg + + + Address + Cím + + + Date + Dátum + + + Confirmations + + + + Confirmed + Megerősítve + + + Priority + + + + Copy address + Cím másolása + + + Copy label + Címke másolása + + + Copy amount + Összeg másolása + + + Copy transaction ID + Tranzakcióazonosító másolása + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + + + + Dust + + + + yes + + + + no + + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + (nincs címke) + + + change from %1 (%2) + + + + (change) EditAddressDialog - Edit Address Cím szerkesztése - &Label Cím&ke - - The label associated with this address book entry - A címhez tartozó címke + The label associated with this address list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + - &Address &Cím - - The address associated with this address book entry. This can only be modified for sending addresses. - Az ehhez a címjegyzék-bejegyzéshez tartozó cím. Ez csak a küldő címeknél módosítható. - - - New receiving address Új fogadó cím - New sending address Új küldő cím - Edit receiving address Fogadó cím szerkesztése - Edit sending address Küldő cím szerkesztése - The entered address "%1" is already in the address book. A megadott "%1" cím már szerepel a címjegyzékben. - The entered address "%1" is not a valid Myriadcoin address. - A megadott "%1" cím nem egy érvényes Myriadcoin-cím. + A megadott "%1" cím nem egy érvényes Bitcoin-cím. - Could not unlock wallet. Tárca feloldása sikertelen - New key generation failed. Új kulcs generálása sikertelen - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt + A new data directory will be created. - + name + Név + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core + Myriadcoin Core + + version verzió - Usage: Használat: - command-line options parancssoros opciók - UI options UI opciók - Set language, for example "de_DE" (default: system locale) - + Nyelvbeállítás, például "de_DE" (alapértelmezett: rendszer nyelve) - Start minimized Indítás lekicsinyítve - + Set SSL root certificates for payment request (default: -system-) + + + Show splash screen on startup (default: 1) + Indítóképernyő mutatása induláskor (alapértelmezett: 1) + + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" can not be created. + + + + Error + Hiba + + + GB of free space available + + + + (of %1GB needed) + + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open OptionsDialog - Options Opciók - &Main &Fő - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. - + Opcionális, kB-onkénti tranzakciós díj a tranzakcióid minél gyorsabb feldolgozásának elősegítésére. A legtöbb tranzakció 1 kB-os. - Pay transaction &fee Tranzakciós &díj fizetése - Automatically start Myriadcoin after logging in to the system. Induljon el a Myriadcoin a számítógép bekapcsolásakor - &Start Myriadcoin on system login &Induljon el a számítógép bekapcsolásakor - + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + Reset all client options to default. - + Minden kliensbeállítás alapértelmezettre állítása. - &Reset Options - + Beállítások tö&rlése - &Network + &Hálózat + + + (0 = auto, <0 = leave that many cores free) - - Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. - A Myriadcoin-kliens portjának automatikus megnyitása a routeren. Ez csak akkor működik, ha a routered támogatja az UPnP-t és az engedélyezve is van rajta. + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. + A Bitcoin-kliens portjának automatikus megnyitása a routeren. Ez csak akkor működik, ha a routered támogatja az UPnP-t és az engedélyezve is van rajta. - Map port using &UPnP &UPnP port-feltérképezés - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - SOCKS proxyn keresztüli csatlakozás a Myriadcoin hálózatához (pl. Tor-on keresztüli csatlakozás esetén) - - - - &Connect through SOCKS proxy: - &Csatlakozás SOCKS proxyn keresztül: - - - Proxy &IP: - + Proxy &IP: - - IP address of the proxy (e.g. 127.0.0.1) - Proxy IP címe (pl.: 127.0.0.1) - - - &Port: - + &Port: - Port of the proxy (e.g. 9050) Proxy portja (pl.: 9050) - SOCKS &Version: - + SOCKS &Verzió: - SOCKS version of the proxy (e.g. 5) - + A proxy SOCKS verziója (pl. 5) - &Window - + &Ablak - Show only a tray icon after minimizing the window. Kicsinyítés után csak eszköztár-ikont mutass - &Minimize to the tray instead of the taskbar &Kicsinyítés a tálcára az eszköztár helyett - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. Az alkalmazásból való kilépés helyett az eszköztárba kicsinyíti az alkalmazást az ablak bezárásakor. Ez esetben az alkalmazás csak a Kilépés menüponttal zárható be. - M&inimize on close K&icsinyítés záráskor - &Display &Megjelenítés - User Interface &language: - + Felhasználófelület nye&lve: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. - + Itt beállíthatod a felhasználófelület nyelvét. Ez a beállítás a Myriadcoin ujraindítása után lép érvénybe. - &Unit to show amounts in: &Mértékegység: - Choose the default subdivision unit to show in the interface and when sending coins. Válaszd ki az interfészen és érmék küldésekor megjelenítendő alapértelmezett alegységet. - Whether to show Myriadcoin addresses in the transaction list or not. - + Mutassa-e a Myriadcoin címeket a tranzakciólistában. - &Display addresses in transaction list &Címek megjelenítése a tranzakciólistában - - &OK + Whether to show coin control features or not. - + &OK + &OK + + &Cancel Megszakítás - - &Apply - Alkalmazás - - - default alapértelmezett - + none + + + Confirm options reset + Beállítások törlésének jóváhagyása. + + + Client restart required to activate changes. - - Some settings may require a client restart to take effect. + Client will be shutdown, do you want to proceed? - - Do you want to proceed? + This change would require a client restart. - - - Warning - Figyelem - - - - - This setting will take effect after restarting Myriadcoin. - Ez a beállítás a Myriadcoin ujraindítása után lép érvénybe. - - - The supplied proxy address is invalid. - + A megadott proxy cím nem érvényes. OverviewPage - Form Űrlap - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. A kijelzett információ lehet, hogy elavult. A pénztárcája automatikusan szinkronizálja magát a Myriadcoin hálózattal miután a kapcsolat létrejön, de ez e folyamat még nem fejeződött be. - - Balance: - Egyenleg: - - - - Unconfirmed: - Megerősítetlen: - - - Wallet Tárca - + Available: + + + + Your current spendable balance + Jelenlegi egyenleg + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + Még megerősítésre váró, a jelenlegi egyenlegbe be nem számított tranzakciók + + Immature: - + Éretlen: - Mined balance that has not yet matured - + Bányászott egyenleg amely még nem érett be. + + + Total: + Összesen: + + + Your current total balance + Aktuális egyenleged - <b>Recent transactions</b> <b>Legutóbbi tranzakciók</b> - - Your current balance - Aktuális egyenleged - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - Még megerősítésre váró, a jelenlegi egyenlegbe be nem számított tranzakciók - - - - out of sync Nincs szinkronban. @@ -1068,767 +1270,1018 @@ Cím: %4 PaymentServer - + URI handling + URI kezelés + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + Cannot start myriadcoin: click-to-pay handler + A bitcoint nem lehet elindítani: click-to-pay handler + + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + + + + Network request error - QRCodeDialog + QObject - - QR Code Dialog - QR kód párbeszédablak + Myriadcoin + Myriadcoin - - Request Payment - Fizetés kérése + Error: Specified data directory "%1" does not exist. + - - Amount: - Összeg: + Error: Cannot parse configuration file: %1. Only use key=value syntax. + - - Label: - Címke: + Error: Invalid combination of -regtest and -testnet. + - - Message: - Üzenet: + Myriadcoin Core didn't yet exit safely... + - - &Save As... - Mentés má&sként + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Adj meg egy Bitcoin-címet (pl.: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L ) + + + + QRImageWidget + + &Save Image... + - - Error encoding URI into QR Code. - Hiba lépett fel az URI QR kóddá alakításakor + &Copy Image + - - The entered amount is invalid, please check. - A megadott összeg nem érvényes. Kérem ellenőrizze. - - - - Resulting URI too long, try to reduce the text for label / message. - A keletkezett URI túl hosszú, próbálja meg csökkenteni a cimkeszöveg / üzenet méretét. - - - Save QR Code QR kód mentése - - PNG Images (*.png) - PNG Képfájlok (*.png) + PNG Image (*.png) + RPCConsole - Client name Kliens néve - - - - - - - - - - N/A Nem elérhető - Client version Kliens verzió - &Information &Információ - - Using OpenSSL version + Debug window - + General + + + + Using OpenSSL version + Használt OpenSSL verzió + + Startup time Bekapcsolás ideje - Network Hálózat - + Name + Név + + Number of connections Kapcsolatok száma - - On testnet - Teszthálózaton - - - Block chain Blokklánc - Current number of blocks Aktuális blokkok száma - Estimated total blocks Becsült összes blokk - Last block time Utolsó blokk ideje - &Open &Megnyitás - - Command-line options - - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - - - - - &Show - - - - &Console &Konzol - + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + Build date Fordítás dátuma - - Myriadcoin - Debug window - - - - - Myriadcoin Core - - - - Debug log file - + Debug naplófájl - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. - Clear console Konzol törlése - Welcome to the Myriadcoin RPC console. - + Üdv a Myriadcoin RPC konzoljában! - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. Navigálhat a fel és le nyilakkal, és <b>Ctrl-L</b> -vel törölheti a képernyőt. - Type <b>help</b> for an overview of available commands. + Írd be azt, hogy <b>help</b> az elérhető parancsok áttekintéséhez. + + + %1 B + + + + %1 KB + + + + %1 MB + + + + %1 GB + + + + %1 m + + + + %1 h + + + + %1 h %2 m + + + + + ReceiveCoinsDialog + + &Amount: + + + + &Label: + Címke: + + + &Message: + + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + + + + Clear + + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + + + + Remove the selected entries from the list + + + + Remove + + + + Copy label + Címke másolása + + + Copy message + + + + Copy amount + Összeg másolása + + + + ReceiveRequestDialog + + QR Code + QR kód + + + Copy &URI + &URI másolása + + + Copy &Address + &Cím másolása + + + &Save Image... + + + + Request payment to %1 + + + + Payment information + + + + URI + + + + Address + Cím + + + Amount + Összeg + + + Label + Címke + + + Message + Üzenet + + + Resulting URI too long, try to reduce the text for label / message. + A keletkezett URI túl hosszú, próbálja meg csökkenteni a cimkeszöveg / üzenet méretét. + + + Error encoding URI into QR Code. + Hiba lépett fel az URI QR kóddá alakításakor + + + + RecentRequestsTableModel + + Date + Dátum + + + Label + Címke + + + Message + Üzenet + + + Amount + Összeg + + + (no label) + (nincs címke) + + + (no message) + + + + (no amount) SendCoinsDialog - - - - - - - - Send Coins Érmék küldése - + Coin Control Features + + + + Inputs... + + + + automatically selected + + + + Insufficient funds! + + + + Quantity: + + + + Bytes: + + + + Amount: + Összeg: + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + Send to multiple recipients at once Küldés több címzettnek egyszerre - Add &Recipient &Címzett hozzáadása - - Remove all transaction fields - Az összes tranzakciós mező eltávolítása + Clear all fields of the form. + - Clear &All Mindent &töröl - Balance: Egyenleg: - - 123.456 BTC - 123.456 BTC - - - Confirm the send action Küldés megerősítése - S&end &Küldés - - <b>%1</b> to %2 (%3) - <b>%1</b> %2-re (%3) - - - Confirm send coins Küldés megerősítése - - Are you sure you want to send %1? - Valóban el akarsz küldeni %1-t? + %1 to %2 + - - and - és + Copy quantity + + + + Copy amount + Összeg másolása + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + + + + or + - The recipient address is not valid, please recheck. A címzett címe érvénytelen, kérlek, ellenőrizd. - The amount to pay must be larger than 0. A fizetendő összegnek nagyobbnak kell lennie 0-nál. - The amount exceeds your balance. Nincs ennyi myriadcoin az egyenlegeden. - The total exceeds your balance when the %1 transaction fee is included. A küldeni kívánt összeg és a %1 tranzakciós díj együtt meghaladja az egyenlegeden rendelkezésedre álló összeget. - Duplicate address found, can only send to each address once per send operation. Többször szerepel ugyanaz a cím. Egy küldési műveletben egy címre csak egyszer lehet küldeni. - - Error: Transaction creation failed! + Transaction creation failed! - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Hiba: a tranzakciót elutasították. Ezt az okozhatja, ha már elköltöttél valamennyi érmét a tárcádból például ha a wallet.dat-od egy másolatát használtad, és így az elköltés csak abban lett jelölve, de itt nem. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + + + + (no label) + (nincs címke) + + + Warning: Unknown change address + + + + Are you sure you want to send? + + + + added as transaction fee + + + + Payment request expired + + + + Invalid payment address %1 + SendCoinsEntry - - Form - Űrlap - - - A&mount: Összeg: - Pay &To: Címzett: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book Milyen címkével kerüljön be ez a cím a címtáradba? - &Label: Címke: - - Choose address from address book - Válassz egy címet a címjegyzékből + Choose previously used address + + + + This is a normal payment. + - Alt+A Alt+A - Paste address from clipboard Cím beillesztése a vágólapról - Alt+P Alt+P - - Remove this recipient - Címzett eltávolítása + Remove this entry + - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Adj meg egy Myriadcoin-címet (pl.: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L ) + Message: + Üzenet: + + + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. + SignVerifyMessageDialog - Signatures - Sign / Verify a Message - &Sign Message Üzenet aláírása... - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. Aláírhat a címeivel üzeneteket, amivel bizonyíthatja, hogy a címek az önéi. Vigyázzon, hogy ne írjon alá semmi félreérthetőt, mivel a phising támadásokkal megpróbálhatják becsapni, hogy az azonosságát átírja másokra. Csak olyan részletes állításokat írjon alá, amivel egyetért. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Adj meg egy Myriadcoin-címet (pl.: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L ) + Adj meg egy Bitcoin-címet (pl.: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L ) - - - Choose an address from the address book - Válassz egy címet a címjegyzékből + Choose previously used address + - - Alt+A Alt+A - Paste address from clipboard Cím beillesztése a vágólapról - Alt+P Alt+P - Enter the message you want to sign here Ide írja az aláírandó üzenetet - Signature - + Aláírás - Copy the current signature to the system clipboard A jelenleg kiválasztott aláírás másolása a rendszer-vágólapra - Sign the message to prove you own this Myriadcoin address - + Üzenet - Sign &Message - + Üzenet &aláírása - Reset all sign message fields - - Clear &All Mindent &töröl - &Verify Message Üzenet ellenőrzése - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Írja be az aláírás címét, az üzenetet (ügyelve arra, hogy az új-sor, szóköz, tab, stb. karaktereket is pontosan) és az aláírást az üzenet ellenőrzéséhez. Ügyeljen arra, ne gondoljon többet az aláírásról, mint amennyi az aláírt szövegben ténylegesen áll, hogy elkerülje a köztes-ember (man-in-the-middle) támadást. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Adj meg egy Myriadcoin-címet (pl.: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L ) + Adj meg egy Bitcoin-címet (pl.: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L ) - Verify the message to ensure it was signed with the specified Myriadcoin address - Verify &Message - Reset all verify message fields - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Adj meg egy Myriadcoin-címet (pl.: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L ) + Adj meg egy Bitcoin-címet (pl.: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L ) - Click "Sign Message" to generate signature - - Enter Myriadcoin signature - Adja meg a Myriadcoin aláírást - - - - The entered address is invalid. A megadott cím nem érvényes. - - - - Please check the address and try again. Ellenőrizze a címet és próbálja meg újra. - - The entered address does not refer to a key. - Wallet unlock was cancelled. - Private key for the entered address is not available. - Message signing failed. - + Üzenet aláírása nem sikerült. - Message signed. - + Üzenet aláírva. - The signature could not be decoded. - + Az aláírást nem sikerült dekódolni. - - Please check the signature and try again. - + Ellenőrizd az aláírást és próbáld újra. - The signature did not match the message digest. - Message verification failed. - + Az üzenet ellenőrzése nem sikerült. - Message verified. - + Üzenet ellenőrizve. SplashScreen - - The Myriadcoin developers + Myriadcoin Core + Myriadcoin Core + + + The Myriadcoin Core developers - [testnet] [teszthálózat] + + TrafficGraphWidget + + KB/s + + + TransactionDesc - Open until %1 Megnyitva %1-ig - + conflicted + + + %1/offline - %1/unconfirmed %1/megerősítetlen - %1 confirmations %1 megerősítés - Status Állapot - , broadcast through %n node(s) - Date Dátum - Source - Generated Legenerálva - - From Űrlap - - - To Címzett - - own address - + saját cím - label címke - - - - - Credit Jóváírás - matures in %n more block(s) - + beérik %n blokk múlvabeérik %n blokk múlva - not accepted elutasítva - - - - Debit Terhelés - Transaction fee Tranzakciós díj - Net amount Nettó összeg - Message Üzenet - Comment Megjegyzés - Transaction ID + Tranzakcióazonosító + + + Merchant - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - A frissen generált érméket csak 120 blokkal később tudod elkölteni. Ez a blokk nyomban szétküldésre került a hálózatba, amint legeneráltad, hogy hozzáadhassák a blokklánchoz. Ha nem kerül be a láncba, úgy az állapota "elutasítva"-ra módosul, és nem költheted el az érméket. Ez akkor következhet be időnként, ha egy másik csomópont mindössze néhány másodperc különbséggel generált le egy blokkot a tiédhez képest. + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + - Debug information - + Debug információ - Transaction Tranzakció - Inputs - + Bemenetek - Amount Összeg - true - + igaz - false - + hamis - , has not been successfully broadcast yet , még nem sikerült elküldeni. - Open for %n more block(s) - + %n további blokkra megnyitva%n további blokkra megnyitva - unknown ismeretlen @@ -1836,12 +2289,10 @@ Cím: %4 TransactionDescDialog - Transaction details Tranzakció részletei - This pane shows a detailed description of the transaction Ez a mező a tranzakció részleteit mutatja @@ -1849,117 +2300,102 @@ Cím: %4 TransactionTableModel - Date Dátum - Type Típus - Address Cím - Amount Összeg + + Immature (%1 confirmations, will be available after %2) + + - Open for %n more block(s) - + %n további blokkra megnyitva%n további blokkra megnyitva - Open until %1 %1-ig megnyitva - - Offline (%1 confirmations) - Offline (%1 megerősítés) - - - - Unconfirmed (%1 of %2 confirmations) - Megerősítetlen (%1 %2 megerősítésből) - - - Confirmed (%1 confirmations) Megerősítve (%1 megerősítés) - - - Mined balance will be available when it matures in %n more block(s) - - - This block was not received by any other nodes and will probably not be accepted! Ezt a blokkot egyetlen másik csomópont sem kapta meg, így valószínűleg nem lesz elfogadva! - Generated but not accepted Legenerálva, de még el nem fogadva. - + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + Received with Erre a címre - Received from Erről az - Sent to Erre a címre - Payment to yourself Magadnak kifizetve - Mined Kibányászva - (n/a) (nincs) - Transaction status. Hover over this field to show number of confirmations. Tranzakció állapota. Húzd ide a kurzort, hogy lásd a megerősítések számát. - Date and time that the transaction was received. Tranzakció fogadásának dátuma és időpontja. - Type of transaction. Tranzakció típusa. - Destination address of transaction. A tranzakció címzettjének címe. - Amount removed from or added to balance. Az egyenleghez jóváírt vagy ráterhelt összeg. @@ -1967,176 +2403,156 @@ Cím: %4 TransactionView - - All Mind - Today Mai - This week Ezen a héten - This month Ebben a hónapban - Last month Múlt hónapban - This year Ebben az évben - Range... Tartomány ... - Received with Erre a címre - Sent to Erre a címre - To yourself Magadnak - Mined Kibányászva - Other Más - Enter address or label to search Írd be a keresendő címet vagy címkét - Min amount Minimális összeg - Copy address Cím másolása - Copy label Címke másolása - Copy amount Összeg másolása - Copy transaction ID - + Tranzakcióazonosító másolása - Edit label Címke szerkesztése - Show transaction details Tranzakciós részletek megjelenítése - - Export Transaction Data - Tranzakció adatainak exportálása + Export Transaction History + + + + Exporting Failed + + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + + + + The transaction history was successfully saved to %1. + - Comma separated file (*.csv) Vesszővel elválasztott fájl (*.csv) - Confirmed Megerősítve - Date Dátum - Type Típus - Label Címke - Address Cím - Amount Összeg - ID Azonosító - - Error exporting - Hiba lépett fel exportálás közben - - - - Could not write to file %1. - %1 fájlba való kiírás sikertelen. - - - Range: Tartomány: - to meddig + + WalletFrame + + No wallet has been loaded. + + + WalletModel - Send Coins Érmék küldése @@ -2144,170 +2560,130 @@ Cím: %4 WalletView - &Export - + &Exportálás... - Export the data in the current tab to a file Jelenlegi nézet exportálása fájlba - Backup Wallet Biztonsági másolat készítése a Tárcáról - Wallet Data (*.dat) Tárca fájl (*.dat) - Backup Failed Biztonsági másolat készítése sikertelen - - There was an error trying to save the wallet data to the new location. - Hiba lépett fel a Tárca másik helyre való mentése közben + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. + - Backup Successful - - - - - The wallet data was successfully saved to the new location. - + Sikeres biztonsági mentés bitcoin-core - - Myriadcoin version - Myriadcoin verzió - - - Usage: Használat: - - Send command to -server or myriadcoind - Parancs küldése a -serverhez vagy a myriadcoindhez - - - - List commands Parancsok kilistázása - Get help for a command Segítség egy parancsról - Options: Opciók - Specify configuration file (default: myriadcoin.conf) Konfigurációs fájl (alapértelmezett: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) pid-fájl (alapértelmezett: myriadcoind.pid) - Specify data directory Adatkönyvtár - - Set database cache size in megabytes (default: 25) - Az adatbázis gyorsítótár mérete megabájtban (alapértelmezés: 25) - - - Listen for connections on <port> (default: 8333 or testnet: 18333) Csatlakozásokhoz figyelendő <port> (alapértelmezett: 8333 or testnet: 18333) - Maintain at most <n> connections to peers (default: 125) Maximálisan <n> számú kapcsolat fenntartása a peerekkel (alapértelmezés: 125) - Connect to a node to retrieve peer addresses, and disconnect Kapcsolódás egy csomóponthoz a peerek címeinek megszerzése miatt, majd szétkapcsolás - Specify your own public address Adja meg az Ön saját nyilvános címét - Threshold for disconnecting misbehaving peers (default: 100) Helytelenül viselkedő peerek leválasztási határértéke (alapértelmezés: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Helytelenül viselkedő peerek kizárási ideje másodpercben (alapértelmezés: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) JSON-RPC csatlakozásokhoz figyelendő <port> (alapértelmezett: 8332 or testnet: 18332) - Accept command line and JSON-RPC commands Parancssoros és JSON-RPC parancsok elfogadása - + Myriadcoin Core RPC client version + + + Run in the background as a daemon and accept commands Háttérben futtatás daemonként és parancsok elfogadása - Use the test network Teszthálózat használata - Accept connections from outside (default: 1 if no -proxy or -connect) - + Kívülről érkező kapcsolatok elfogadása (alapértelmezett: 1, ha nem használt a -proxy vagy a -connect) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2322,623 +2698,696 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + Regressziós teszt mód indítása, amely egy speciális láncot használ, amelyben a blokkok azonnal feloldhatók. Ez regressziós tesztalkalmazások által és alkalmazásfejlesztéshez használható. + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Hiba: a tranzakciót elutasították. Ezt az okozhatja, ha már elköltöttél valamennyi érmét a tárcádból például ha a wallet.dat-od egy másolatát használtad, és így az elköltés csak abban lett jelölve, de itt nem. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + Parancs, amit akkor hajt végre, amikor egy tárca-tranzakció megváltozik (%s a parancsban lecserélődik a blokk TxID-re) + + + Fees smaller than this are considered zero fee (for transaction creation) (default: - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications - + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Figyelem: a -paytxfee nagyon magas. Ennyi tranzakciós díjat fogsz fizetni, ha elküldöd a tranzakciót. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. Figyelem: Ellenőrizd, hogy helyesen van-e beállítva a gépeden a dátum és az idő. A Myriadcoin nem fog megfelelően működni, ha rosszul van beállítvaaz órád. - + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + Attempt to recover private keys from a corrupt wallet.dat - + Myriadcoin Core Daemon + + + Block creation options: - + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + Connect only to the specified node(s) Csatlakozás csak a megadott csomóponthoz - + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + Corrupted block database detected + Sérült blokk-adatbázis észlelve + + + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) - Discover own IP address (default: 1 when listening and no -externalip) + Saját IP-cím felfedezése (alapértelmezett: 1, amikor figyel és nem használt a -externalip) + + + Do not load the wallet and disable wallet RPC calls - Do you want to rebuild the block database now? - + Újra akarod építeni a blokk adatbázist most? - Error initializing block database - + A blokkadatbázis inicializálása nem sikerült - Error initializing wallet database environment %s! - + A tárca-adatbázis inicializálása nem sikerült: %s! - Error loading block database - + Hiba a blokk adatbázis betöltése közben. - Error opening block database - + Hiba a blokk adatbázis megnyitása közben. - Error: Disk space is low! - Error: Wallet locked, unable to create transaction! - Error: system error: - + Hiba: rendszerhiba: - Failed to listen on any port. Use -listen=0 if you want this. - + Egyik hálózati porton sem sikerül hallgatni. Használja a -listen=0 kapcsolót, ha ezt szeretné. - Failed to read block info - + A blokkinformáció olvasása nem sikerült - Failed to read block - + A blokk olvasása nem sikerült - Failed to sync block index - + A blokkindex szinkronizálása nem sikerült - Failed to write block index - + A blokkindex írása nem sikerült - Failed to write block info - + A blokkinformáció írása nem sikerült - Failed to write block - + A blokk írása nem sikerült - Failed to write file info - + A fájlinformáció írása nem sikerült - Failed to write to coin database - + Az érme-adatbázis írása nem sikerült - Failed to write transaction index - + A tranzakcióindex írása nem sikerült - Failed to write undo data + A stornóadatok írása nem sikerült + + + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: - Find peers using DNS lookup (default: 1 unless -connect) - + Force safe mode (default: 0) + + + Generate coins (default: 0) - + Érmék generálása (alapértelmezett: 0) - How many blocks to check at startup (default: 288, 0 = all) + Hány blokkot ellenőrizzen induláskor (alapértelmezett: 288, 0 = mindet) + + + If <category> is not supplied, output all debugging information. - - How thorough the block verification is (0-4, default: 3) + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + Helytelen vagy nemlétező genézis blokk. Helytelen hálózati adatkönyvtár? + + + Invalid -onion address: '%s' - Not enough file descriptors available. + Nincs elég fájlleíró. + + + Prepend debug output with timestamp (default: 1) + + + + RPC client options: - Rebuild block chain index from current blk000??.dat files + Blokklánc index újraalkotása az alábbi blk000??.dat fájlokból + + + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) - Set the number of threads to service RPC calls (default: 4) - + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + Verifying blocks... - + Blokkok ellenőrzése... - Verifying wallet... + Tárca ellenőrzése... + + + Wait for RPC server to start - + Wallet %s resides outside data directory %s + + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + Az adatbázist újra kell építeni -reindex használatával (módosítás -tindex). + + Imports blocks from external blk000??.dat file - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) - Information - + Információ - - Invalid -tor address: '%s' - Érvénytelen -tor cím: '%s' - - - Invalid amount for -minrelaytxfee=<amount>: '%s' - + Érvénytelen -minrelaytxfee=<amount>: '%s' összeg - Invalid amount for -mintxfee=<amount>: '%s' + Érvénytelen -mintxfee=<amount>: '%s' összeg + + + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) - Maintain a full transaction index (default: 0) - + Teljes tranzakcióindex megőrzése (alapértelmezett: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Only accept block chain matching built-in checkpoints (default: 1) Csak blokklánccal egyező beépített ellenőrző pontok elfogadása (alapértelmezés: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - Output extra debugging information. Implies all other -debug* options + Print block on startup, if found in block index - - Output extra network debugging information + Print block tree on startup (default: 0) - - Prepend debug output with timestamp - Időbélyeges hibakeresési kimenet hozzáadása az elejéhez + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) SSL-opciók: (lásd a Myriadcoin Wiki SSL-beállítási instrukcióit) - - Select the version of socks proxy to use (4-5, default: 5) + Send command to Myriadcoin Core - Send trace/debug info to console instead of debug.log file trace/debug információ küldése a konzolra a debog.log fájl helyett - - Send trace/debug info to debugger - trace/debug információ küldése a debuggerre - - - - Set maximum block size in bytes (default: 250000) - - - - Set minimum block size in bytes (default: 0) - + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + Shrink debug.log file on client startup (default: 1 when no -debug) - Signing transaction failed - + Tranzakció aláírása sikertelen - Specify connection timeout in milliseconds (default: 5000) Csatlakozás időkerete milliszekundumban (alapértelmezett: 5000) - + Start Myriadcoin Core Daemon + + + System error: - + Rendszerhiba: - Transaction amount too small - + Tranzakció összege túl alacsony - Transaction amounts must be positive - + Tranzakció összege pozitív kell legyen - Transaction too large - + Túl nagy tranzakció - Use UPnP to map the listening port (default: 0) UPnP-használat engedélyezése a figyelő port feltérképezésénél (default: 0) - Use UPnP to map the listening port (default: 1 when listening) UPnP-használat engedélyezése a figyelő port feltérképezésénél (default: 1 when listening) - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - Username for JSON-RPC connections Felhasználói név JSON-RPC csatlakozásokhoz - Warning - + Figyelem - Warning: This version is obsolete, upgrade required! - - You need to rebuild the databases using -reindex to change -txindex + Zapping all transactions from wallet... - + on startup + + + + version + verzió + + wallet.dat corrupt, salvage failed - Password for JSON-RPC connections Jelszó JSON-RPC csatlakozásokhoz - Allow JSON-RPC connections from specified IP address JSON-RPC csatlakozások engedélyezése meghatározott IP-címről - Send commands to node running on <ip> (default: 127.0.0.1) Parancsok küldése <ip> címen működő csomóponthoz (alapértelmezett: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) Parancs, amit akkor hajt végre, amikor a legjobb blokk megváltozik (%s a cmd-ban lecserélődik a blokk hash-re) - Upgrade wallet to latest format A Tárca frissítése a legfrissebb formátumra - Set key pool size to <n> (default: 100) Kulcskarika mérete <n> (alapértelmezett: 100) - Rescan the block chain for missing wallet transactions Blokklánc újraszkennelése hiányzó tárca-tranzakciók után - Use OpenSSL (https) for JSON-RPC connections OpenSSL (https) használata JSON-RPC csatalkozásokhoz - Server certificate file (default: server.cert) Szervertanúsítvány-fájl (alapértelmezett: server.cert) - Server private key (default: server.pem) Szerver titkos kulcsa (alapértelmezett: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Elfogadható rejtjelkulcsok (alapértelmezett: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH ) - - - - This help message Ez a súgó-üzenet - Unable to bind to %s on this computer (bind returned error %d, %s) A %s nem elérhető ezen a gépen (bind returned error %d, %s) - - Connect through socks proxy - Csatlakozás SOCKS proxyn keresztül - - - Allow DNS lookups for -addnode, -seednode and -connect DNS-kikeresés engedélyezése az addnode-nál és a connect-nél - Loading addresses... Címek betöltése... - Error loading wallet.dat: Wallet corrupted Hiba a wallet.dat betöltése közben: meghibásodott tárca - Error loading wallet.dat: Wallet requires newer version of Myriadcoin - Hiba a wallet.dat betöltése közben: ehhez a tárcához újabb verziójú Myriadcoin-kliens szükséges + Hiba a wallet.dat betöltése közben: ehhez a tárcához újabb verziójú Bitcoin-kliens szükséges - Wallet needed to be rewritten: restart Myriadcoin to complete - A Tárca újraírása szükséges: Indítsa újra a teljesen a Myriadcoin-t + A Tárca újraírása szükséges: Indítsa újra a teljesen a Bitcoin-t - Error loading wallet.dat Hiba az wallet.dat betöltése közben - Invalid -proxy address: '%s' Érvénytelen -proxy cím: '%s' - Unknown network specified in -onlynet: '%s' Ismeretlen hálózat lett megadva -onlynet: '%s' - Unknown -socks proxy version requested: %i Ismeretlen -socks proxy kérése: %i - Cannot resolve -bind address: '%s' - + Csatlakozási cím (-bind address) feloldása nem sikerült: '%s' - Cannot resolve -externalip address: '%s' - + Külső cím (-externalip address) feloldása nem sikerült: '%s' - Invalid amount for -paytxfee=<amount>: '%s' Étvénytelen -paytxfee=<összeg> összeg: '%s' - Invalid amount Étvénytelen összeg - Insufficient funds - Nincs elég myriadcoinod. + Nincs elég bitcoinod. - Loading block index... Blokkindex betöltése... - Add a node to connect to and attempt to keep the connection open Elérendő csomópont megadása and attempt to keep the connection open - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - A %s nem elérhető ezen a gépen. A Myriadcoin valószínűleg fut már. - - - - Fee per KB to add to transactions you send - kB-onként felajánlandó díj az általad küldött tranzakciókhoz - - - Loading wallet... Tárca betöltése... - Cannot downgrade wallet Nem sikerült a Tárca visszaállítása a korábbi verzióra - Cannot write default address Nem sikerült az alapértelmezett címet írni. - Rescanning... Újraszkennelés... - Done loading Betöltés befejezve. - To use the %s option Használd a %s opciót - Error Hiba - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_id_ID.ts b/src/qt/locale/bitcoin_id_ID.ts new file mode 100644 index 00000000..accdca87 --- /dev/null +++ b/src/qt/locale/bitcoin_id_ID.ts @@ -0,0 +1,3380 @@ + + + AboutDialog + + About Myriadcoin Core + Mengenai Myriadcoin Core + + + <b>Myriadcoin Core</b> version + versi <b>Myriadcoin Core</b> + + + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. + +Software ini adalah yang bersifat percobaan. + +Dibagikan dengan izin software MIT/X11, bacalah arsip COPYING atau http://www.opensource.org/licenses/mit-license.php. + +Produk ini termasuk software yang dibangun oleh Proyek OpenSSL untuk Toolkit OpenSSL (http://www.openssl.org/) dan software kriptografi dibangun oleh Eric Young (eay@cryptsoft.com) dan software UPnP dibangun oleh Thomas Bernard. + + + Copyright + Copyright + + + The Myriadcoin Core developers + Pembangun Myriadcoin Core + + + (%1-bit) + + + + + AddressBookPage + + Double-click to edit address or label + Klik-ganda untuk mengubah alamat atau label + + + Create a new address + Buat alamat baru + + + &New + &Baru + + + Copy the currently selected address to the system clipboard + Salin alamat yang dipilih ke clipboard + + + &Copy + &Menyalin + + + C&lose + T&utup + + + &Copy Address + &Salin Alamat + + + Delete the currently selected address from the list + Hapus alamat yang sementara dipilih dari daftar + + + Export the data in the current tab to a file + Ekspor data dalam tab sekarang ke sebuah berkas + + + &Export + &Ekspor + + + &Delete + &Hapus + + + Choose the address to send coins to + Pilihlah alamat kemana koin Anda akan dikirim + + + Choose the address to receive coins with + Pilihlah alamat dimana Anda akan menerima koin + + + C&hoose + P&ilihlah + + + Sending addresses + Alamat-alamat mengirim + + + Receiving addresses + Alamat-alamat menerima + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + Alamat-alamat Anda supaya mengirim pembayaran. Periksalah jumlah dan alamat penerima setiap kali Anda mengirim Myriadcoin. + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Alamat-alamat Anda supaya menerima pembayaran. Dianjurkan agar Anda menggunakan alamat menerima yang baru untuk setiap transaksi. + + + Copy &Label + Salin &Label + + + &Edit + &Ubah + + + Export Address List + Ekspor Daftar Alamat + + + Comma separated file (*.csv) + Berkas CSV (*.csv) + + + Exporting Failed + Proses Ekspor Gagal + + + There was an error trying to save the address list to %1. + + + + + AddressTableModel + + Label + Label + + + Address + Alamat + + + (no label) + (tidak ada label) + + + + AskPassphraseDialog + + Passphrase Dialog + Dialog Kata kunci + + + Enter passphrase + Masukkan kata kunci + + + New passphrase + Kata kunci baru + + + Repeat new passphrase + Ulangi kata kunci baru + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Masukkan kata kunci baru ke dompet.<br/>Mohon gunakan kata kunci dengan <b>10 karakter atau lebih dengan acak</b>, atau <b>delapan kata atau lebih</b>. + + + Encrypt wallet + Enkripsi dompet + + + This operation needs your wallet passphrase to unlock the wallet. + Operasi ini memerlukan kata kunci dompet Anda untuk membuka dompet ini. + + + Unlock wallet + Buka dompet + + + This operation needs your wallet passphrase to decrypt the wallet. + Operasi ini memerlukan kata kunci dompet Anda untuk mendekripsi dompet ini. + + + Decrypt wallet + Dekripsi dompet + + + Change passphrase + Ubah kata kunci + + + Enter the old and new passphrase to the wallet. + Masukkan kata kunci lama dan baru ke dompet ini. + + + Confirm wallet encryption + Konfirmasi enkripsi dompet + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! + Perhatian: Jika anda mengenkripsi dompet anda dan lupa kata kuncinya, anda pasti <b>KEHILANGAN SELURUH MYRIADCOIN ANDA</B>! + + + Are you sure you wish to encrypt your wallet? + Apakah kamu yakin ingin mengenkripsi dompet anda? + + + 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. + + + + Warning: The Caps Lock key is on! + Perhatian: tombol Caps Lock sementara aktif! + + + Wallet encrypted + Dompet terenkripsi + + + Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. + Myriadcoin akan menutup untuk menyelesaikan proses enkripsi. Ingat bahwa dengan mengenkripsi dompet Anda tidak sepenuhnya melindungi myriadcoin Anda dari perangkat lunak berbahaya yang menginfeksi komputer Anda. + + + Wallet encryption failed + Enkripsi dompet gagal + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Enkripsi dompet gagal karena kesalahan internal. Dompet Anda tidak dienkripsi. + + + The supplied passphrases do not match. + Kata kunci yang dimasukkan tidak cocok. + + + Wallet unlock failed + Gagal buka dompet + + + The passphrase entered for the wallet decryption was incorrect. + Kata kunci yang dimasukkan untuk dekripsi dompet tidak cocok. + + + Wallet decryption failed + Dekripsi dompet gagal + + + Wallet passphrase was successfully changed. + Kata kunci untuk dompet berubah berhasil. + + + + BitcoinGUI + + Sign &message... + Pesan &penanda... + + + Synchronizing with network... + Sinkronisasi dengan jaringan... + + + &Overview + &Kilasan + + + Node + Node + + + Show general overview of wallet + Tampilkan kilasan umum dari dompet + + + &Transactions + &Transaksi + + + Browse transaction history + Jelajah sejarah transaksi + + + E&xit + K&eluar + + + Quit application + Keluar dari aplikasi + + + Show information about Myriadcoin + Tampilkan informasi mengenai Myriadcoin + + + About &Qt + Mengenai &Qt + + + Show information about Qt + Tampilkan informasi mengenai Qt + + + &Options... + &Pilihan... + + + &Encrypt Wallet... + %Enkripsi Dompet... + + + &Backup Wallet... + &Cadangkan Dompet... + + + &Change Passphrase... + &Ubah Kata Kunci... + + + &Sending addresses... + Alamat-alamat &Mengirim + + + &Receiving addresses... + Alamat-alamat &Menerima + + + Open &URI... + Buka &URI + + + Importing blocks from disk... + Blok-blok sedang di-impor dari disk + + + Reindexing blocks on disk... + Mengindex ulang block di harddisk... + + + Send coins to a Myriadcoin address + Kirim koin ke alamat Myriadcoin + + + Modify configuration options for Myriadcoin + Ubah pilihan konfigurasi untuk Myriadcoin + + + Backup wallet to another location + Cadangkan dompet ke lokasi lain + + + Change the passphrase used for wallet encryption + Ubah kata kunci yang digunakan untuk enkripsi dompet + + + &Debug window + &Jendela Debug + + + Open debugging and diagnostic console + Buka konsol debug dan diagnosa + + + &Verify message... + &Verifikasi pesan... + + + Myriadcoin + Myriadcoin + + + Wallet + Dompet + + + &Send + &Kirim + + + &Receive + &Menerima + + + &Show / Hide + &Sunjukkan / Menyembungi + + + Show or hide the main Window + Tampilkan atau sembunyikan jendela utama + + + Encrypt the private keys that belong to your wallet + Mengenkripsi kunci-kunci pribadi yang dipunyai dompetmu + + + Sign messages with your Myriadcoin addresses to prove you own them + Tandalah pesanan dengan alamat-alamat Myriadcoin Anda supaya membuktikan pesanan itu dikirim oleh Anda + + + Verify messages to ensure they were signed with specified Myriadcoin addresses + Periksakan pesan-pesan supaya menjaminkan ditandatangani oleh alamat Myriadcoin yang terperinci + + + &File + &Berkas + + + &Settings + &Pengaturan + + + &Help + &Bantuan + + + Tabs toolbar + Baris tab + + + [testnet] + [testnet] + + + Myriadcoin Core + Myriadcoin Core + + + Request payments (generates QR codes and myriadcoin: URIs) + Permintaan pembayaran (membangkitkan kode QR dan myriadcoin: URIs) + + + &About Myriadcoin Core + &Mengenai Myriadcoin Core + + + Show the list of used sending addresses and labels + Tampilkan daftar alamat dan label yang terkirim + + + Show the list of used receiving addresses and labels + Tampilkan daftar alamat dan label yang diterima + + + Open a myriadcoin: URI or payment request + Buka URI myriadcoin: atau permintaan pembayaran + + + &Command-line options + &pilihan Perintah-baris + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + Tampilkan pesan bantuan Myriadcoin Core untuk memberikan daftar pilihan perintah-baris yang memungkinkan dalam aplikasi Myriadcoin + + + Myriadcoin client + Klien Myriadcoin + + + %n active connection(s) to Myriadcoin network + %n hubungan aktif ke jaringan Myriadcoin + + + No block source available... + Sumber blok tidak tersedia... + + + Processed %1 of %2 (estimated) blocks of transaction history. + Proses % 1 dar i% 2 (perkiraan) blok catatan transaksi + + + Processed %1 blocks of transaction history. + %1 blok-blok riwayat transaksi telah diproses + + + %n hour(s) + %n jam + + + %n day(s) + %n hari + + + %n week(s) + %n minggu + + + %1 and %2 + %1 dan %2 + + + %n year(s) + %n tahun + + + %1 behind + kurang %1 + + + Last received block was generated %1 ago. + Blok terakhir dibuat %1 lalu. + + + Transactions after this will not yet be visible. + Transaksi setelah ini tidak akan ditampilkan + + + Error + Gagal + + + Warning + Peringatan + + + Information + Informasi + + + Up to date + Terbaru + + + Catching up... + Menyusul... + + + Sent transaction + Transaksi terkirim + + + Incoming transaction + Transaksi diterima + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + Tanggal: %1 +Nilai: %2 +Jenis: %3 +Alamat: %4 + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + Dompet saat ini <b>terenkripsi</b> dan <b>terbuka</b> + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + Dompet saat ini <b>terenkripsi</b> dan <b>terkunci</b> + + + A fatal error occurred. Myriadcoin can no longer continue safely and will quit. + Terjadi kesalahan fatal. Myriadcoin tidak bisa lagi meneruskan dengan aman dan akan berhenti. + + + + ClientModel + + Network Alert + Notifikasi Jaringan + + + + CoinControlDialog + + Coin Control Address Selection + Pilihan alamat pengaturan koin + + + Quantity: + Kuantitas: + + + Bytes: + Bytes: + + + Amount: + Nilai: + + + Priority: + Prioritas: + + + Fee: + Biaya: + + + Low Output: + Jumlah Yang Sedikit: + + + After Fee: + Dengan Biaya: + + + Change: + Uang Kembali: + + + (un)select all + (Tidak)memilih semua + + + Tree mode + mode pohon + + + List mode + Mode daftar + + + Amount + Nilai + + + Address + Alamat + + + Date + Tanggal + + + Confirmations + Konfirmasi-konfirmasi + + + Confirmed + Terkonfirmasi + + + Priority + Prioritas + + + Copy address + Salin alamat + + + Copy label + Salin label + + + Copy amount + Salin nilai + + + Copy transaction ID + Menyalinkan ID transaksi + + + Lock unspent + Kunci terpakai. + + + Unlock unspent + Membuka kunci terpakai + + + Copy quantity + Salin kuantitas + + + Copy fee + Salin biaya + + + Copy after fee + Salin dengan biaya + + + Copy bytes + Salin bytes + + + Copy priority + Salin prioritas + + + Copy low output + Salin jumlah yang sedikit + + + Copy change + Salin uang kembali + + + highest + terbesar + + + higher + lebih besar + + + high + besar + + + medium-high + sedang-sampai-besar + + + medium + sedang + + + low-medium + sedikit-sampai-sedang + + + low + sedikit + + + lower + lebih sedikit + + + lowest + tersedikit + + + (%1 locked) + (%1 terkunci) + + + none + tidak satupun + + + Dust + Debu + + + yes + ya + + + no + tidak + + + This label turns red, if the transaction size is greater than 1000 bytes. + Label ini akan berubah merah, jika ukuran transaksi lebih besar dari 1000 byte. + + + This means a fee of at least %1 per kB is required. + Berarti perlu biaya lebih dari %1 untuk setiap kB. + + + Can vary +/- 1 byte per input. + Boleh berbeda +/- 1 byte setiap masukan. + + + Transactions with higher priority are more likely to get included into a block. + Makin penting transaksinya, makin kemungkinan akan termasuk dalam blok. + + + This label turns red, if the priority is smaller than "medium". + Label ini akan berubah merah, jika prioritas lebih kecil dari "medium". + + + This label turns red, if any recipient receives an amount smaller than %1. + Label ini akan berubah merah, jika setiap penerima menerima nilai lebih kecil dari %1. + + + This means a fee of at least %1 is required. + Berarti perlu biaya lebih dari %1. + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + Nilai yang kurang dari 0.546 kali biaya pengiriman minimal akan ditampilkan sebagai debu. + + + This label turns red, if the change is smaller than %1. + Label ini akan berubah merah, jika perubahan itu lebih kecil dari %1. + + + (no label) + (tidak ada label) + + + change from %1 (%2) + uang kembali dari %1 (%2) + + + (change) + (uang kembali) + + + + EditAddressDialog + + Edit Address + Ubah Alamat + + + &Label + &Label + + + The label associated with this address list entry + Label yang terkait dengan daftar alamat yang dimasukkan ini + + + The address associated with this address list entry. This can only be modified for sending addresses. + Alamat yang terkait dengan entri buku alamat ini. Hanya dapat diubah untuk alamat pengirim. + + + &Address + &Alamat + + + New receiving address + Alamat menerima baru + + + New sending address + Alamat mengirim baru + + + Edit receiving address + Ubah alamat menerima + + + Edit sending address + Ubah alamat mengirim + + + The entered address "%1" is already in the address book. + Alamat yang dimasukkan "%1" sudah ada di dalam buku alamat. + + + The entered address "%1" is not a valid Myriadcoin address. + Alamat yang dimasukkan "%1" bukan alamat Myriadcoin yang benar. + + + Could not unlock wallet. + Tidak dapat membuka dompet. + + + New key generation failed. + Pembuatan kunci baru gagal. + + + + FreespaceChecker + + A new data directory will be created. + Sebuah data direktori baru telah dibuat. + + + name + nama + + + Directory already exists. Add %1 if you intend to create a new directory here. + Direktori masih ada. Tambahlah %1 kalau ingin membuat direktori baru disini. + + + Path already exists, and is not a directory. + Masih ada Path, dan path itu bukan direktori. + + + Cannot create data directory here. + Tidak busa membuat direktori untuk data disini. + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + Myriadcoin Core - pilihan Perintah-baris + + + Myriadcoin Core + Myriadcoin Core + + + version + versi + + + Usage: + Penggunaan: + + + command-line options + pilihan perintah-baris + + + UI options + pilihan UI + + + Set language, for example "de_DE" (default: system locale) + Atur bahasa, sebagai contoh "id_ID" (standar: system locale) + + + Start minimized + Memulai terminimalisi + + + Set SSL root certificates for payment request (default: -system-) + + + + Show splash screen on startup (default: 1) + Tampilkan layar pembuka saat nyala (standar: 1) + + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + Selamat Datang + + + Welcome to Myriadcoin Core. + Selamat Datang ke Myriadcoin Core + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + Menggunakan direktori untuk data yang biasa. + + + Use a custom data directory: + Menggunakan direktori data yang dipilih Anda: + + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" can not be created. + Gagal: Direktori untuk data "%1" tidak bisa dibuat. + + + Error + Gagal + + + GB of free space available + GB di hard disk yang masih tersedia + + + (of %1GB needed) + (dari %1GB yang diperlu) + + + + OpenURIDialog + + Open URI + Buka URI + + + Open payment request from URI or file + Buka permintaan pembayaran dari URI atau arsip + + + URI: + URI: + + + Select payment request file + Pilihlah arsip permintaan pembayaran + + + Select payment request file to open + Pilihlah arsip permintaan pembayaran yang Anda ingin membuka + + + + OptionsDialog + + Options + Pilihan + + + &Main + &Utama + + + Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. + Biaya transaksi untuk setiap kB yang membantu transaksi Andi diproses cepat (biayanya opsional). Ukuran transaksi biasanya 1kB. + + + Pay transaction &fee + Bayar &biaya transaksi + + + Automatically start Myriadcoin after logging in to the system. + Menyalakan Myriadcoin secara otomatis setelah masuk ke dalam sistem. + + + &Start Myriadcoin on system login + &Menyalakan Myriadcoin pada login sistem + + + Size of &database cache + + + + MB + MB + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + Menghubungkan jaringan Myriadcoin lewat proxy SOCKS. + + + &Connect through SOCKS proxy (default proxy): + &Hubungkan melalui proxy SOCKS (proxy biasa): + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + Alamat IP proxy (cth. IPv4: 127.0.0.1 / IPv6: ::1) + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + pilihan perintah-baris aktif menimpa atas pilihan-pilihan: + + + Reset all client options to default. + Reset setiap pilihan untuk pilihan biasa + + + &Reset Options + &Reset Pilihan + + + &Network + &Jaringan + + + (0 = auto, <0 = leave that many cores free) + + + + W&allet + D&ompet + + + Expert + Ahli + + + Enable coin &control features + Nyalain cara &pengaturan koin + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + Jika Anda menonaktifkan perubahan saldo untuk transaksi yang belum dikonfirmasi, perubahan dari transaksi tidak dapat dilakukan sampai transaksi memiliki setidaknya satu konfirmasi. Hal ini juga mempengaruhi bagaimana saldo Anda dihitung. + + + &Spend unconfirmed change + &Perubahan saldo untuk transaksi yang belum dikonfirmasi + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. + Otomatis membuka port client Myriadcoin di router. Hanya berjalan apabila router anda mendukung UPnP dan di-enable. + + + Map port using &UPnP + Petakan port dengan &UPnP + + + Proxy &IP: + IP Proxy: + + + &Port: + &Port: + + + Port of the proxy (e.g. 9050) + Port proxy (cth. 9050) + + + SOCKS &Version: + Versi &SOCKS: + + + SOCKS version of the proxy (e.g. 5) + Versi proxy SOCKS (cth. 5) + + + &Window + &Jendela + + + Show only a tray icon after minimizing the window. + Hanya tampilkan ikon tray setelah meminilisasi jendela + + + &Minimize to the tray instead of the taskbar + &Meminilisasi ke tray daripada taskbar + + + Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. + Meminimalkan tanpa keluar dari aplikasi saat jendela ditutup. Apabila pilihan ini diaktifkan, aplikasi hanya bisa ditutup dengan memilih Keluar di menu Berkas. + + + M&inimize on close + M&eminilisasi saat tutup + + + &Display + &Tampilan + + + User Interface &language: + &Bahasa Antarmuka Pengguna: + + + The user interface language can be set here. This setting will take effect after restarting Myriadcoin. + Tampilan bahasa pengguna dapat diatur disini. Pengaturan ini akan berpengaruh setelah memulai kembali aplikasi Myriadcoin. + + + &Unit to show amounts in: + &Unit untuk menunjukkan nilai: + + + Choose the default subdivision unit to show in the interface and when sending coins. + Pilihan standar unit yang ingin ditampilkan pada layar aplikasi dan saat mengirim koin. + + + Whether to show Myriadcoin addresses in the transaction list or not. + Apakah menampilkan alamat-alamat Myriadcoin dalam daftar transaksi atau tidak. + + + &Display addresses in transaction list + &Tampilkan alamat dalam daftar transaksi + + + Whether to show coin control features or not. + Ingin menunjukkan cara pengaturan koin atau tidak. + + + &OK + &YA + + + &Cancel + &Batal + + + default + standar + + + none + tidak satupun + + + Confirm options reset + Memastikan reset pilihan + + + Client restart required to activate changes. + + + + Client will be shutdown, do you want to proceed? + + + + This change would require a client restart. + + + + The supplied proxy address is invalid. + Alamat proxy yang diisi tidak valid. + + + + OverviewPage + + Form + Formulir + + + The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. + Informasi terlampir mungkin sudah kedaluwarsa. Dompet Anda secara otomatis mensinkronisasi dengan jaringan Myriadcoin ketika sebuah hubungan terbentuk, namun proses ini belum selesai. + + + Wallet + Dompet + + + Available: + Tersedia: + + + Your current spendable balance + Jumlah yang Anda bisa keluarkan sekarang + + + Pending: + Ditunda + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + Jumlah keseluruhan transaksi yang belum dikonfirmasi, dan belum saatnya dihitung sebagai pengeluaran saldo yang telah dibelanjakan. + + + Immature: + Terlalu Muda: + + + Mined balance that has not yet matured + Saldo ditambang yang masih terlalu muda + + + Total: + Jumlah: + + + Your current total balance + Jumlah saldo Anda sekarang + + + <b>Recent transactions</b> + <b>Transaksi sebelumnya</b> + + + out of sync + tidak tersinkron + + + + PaymentServer + + URI handling + Penanganan URI + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + URI tidak bisa dimengerti! Biasanya oleh karena alamat Myriadcoin yang tidak sah atau persoalan tentang parameter-parameter URI. + + + Requested payment amount of %1 is too small (considered dust). + Nilai pembayaran %1 yang diminta oleh Anda terlalu sedikit (dianggap debu). + + + Payment request error + Gagalan permintaan pembayaran + + + Cannot start myriadcoin: click-to-pay handler + + + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + Proxy Anda tidak mendukung SOCKS5, yang diperlu untuk permintaan pembayaran melalui proxy. + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + Pembayaran kembali dari %1 + + + Error communicating with %1: %2 + Masalah berkomunikasi dengan %1: %2 + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + Jawaban salah dari server %1 + + + Payment acknowledged + Pembayaran diakui + + + Network request error + Gagalan permintaan dari jaringan + + + + QObject + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" does not exist. + Gagal: Tidak ada direktori untuk data "%1". + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + Kesalahan: Tidak dapat memproses pengaturan berkas: %1. Hanya menggunakan kunci= nilai sintak. + + + Error: Invalid combination of -regtest and -testnet. + Gagal: Gabungan -regtest dan -testnet salah + + + Myriadcoin Core didn't yet exit safely... + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Masukkan alamat Myriadcoin (cth. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + &Simpan Gambaran... + + + &Copy Image + &Salin Gambaran + + + Save QR Code + Simpan Kode QR + + + PNG Image (*.png) + Gambar PNG (*.png) + + + + RPCConsole + + Client name + Nama Klien + + + N/A + T/S + + + Client version + Versi Klien + + + &Information + &Informasi + + + Debug window + Jendela debug + + + General + Umum + + + Using OpenSSL version + Menggunakan versi OpenSSL + + + Startup time + Waktu nyala + + + Network + Jaringan + + + Name + Nama + + + Number of connections + Jumlah hubungan + + + Block chain + Rantai blok + + + Current number of blocks + Jumlah blok terkini + + + Estimated total blocks + Perkiraan jumlah blok + + + Last block time + Waktu blok terakhir + + + &Open + &Buka + + + &Console + &Konsol + + + &Network Traffic + Kemacetan &Jaringan + + + &Clear + &Kosongkan + + + Totals + Total + + + In: + Masuk: + + + Out: + Keluar: + + + Build date + Tanggal pembuatan + + + Debug log file + Berkas catatan debug + + + Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. + Buka berkas catatan debug Myriadcoin dari direktori data sekarang. Hal ini dapat memakan waktu beberapa detik untuk berkas catatan yang besar. + + + Clear console + Bersihkan konsol + + + Welcome to the Myriadcoin RPC console. + Selamat datang ke konsol RPC Myriadcoin. + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + Gunakan panah keatas dan kebawah untuk menampilkan sejarah, dan <b>Ctrl-L</b> untuk bersihkan layar. + + + Type <b>help</b> for an overview of available commands. + Ketik <b>help</b> untuk menampilkan perintah tersedia. + + + %1 B + %1 B + + + %1 KB + %1 KB + + + %1 MB + %1 MB + + + %1 GB + %1 GB + + + %1 m + %1 menit + + + %1 h + %1 Jam + + + %1 h %2 m + %1 Jam %2 menit + + + + ReceiveCoinsDialog + + &Amount: + &Nilai: + + + &Label: + &Label: + + + &Message: + &Pesan: + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + Gunakan lagi alamat penerima yang ada (tidak disarankan) + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + Label opsional untuk mengasosiasikan dengan alamat penerima baru. + + + Use this form to request payments. All fields are <b>optional</b>. + Gunakan form ini untuk meminta pembayaran. Semua bidang adalah <b>opsional</b>. + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + Nilai permintaan opsional. Biarkan ini kosong atau nol bila tidak meminta nilai tertentu. + + + Clear all fields of the form. + Hapus informasi dari form. + + + Clear + Hapus + + + Requested payments history + Riwayat pembayaran yang diminta Anda + + + &Request payment + &Minta pembayaran + + + Show the selected request (does the same as double clicking an entry) + Menunjukkan permintaan yang dipilih (sama dengan tekan pilihan dua kali) + + + Show + Menunjukkan + + + Remove the selected entries from the list + Menghapus informasi terpilih dari daftar + + + Remove + Menghapus + + + Copy label + Salin label + + + Copy message + Salin Pesan + + + Copy amount + Salin nilai + + + + ReceiveRequestDialog + + QR Code + Kode QR + + + Copy &URI + Salin &URI + + + Copy &Address + Salin &Alamat + + + &Save Image... + &Simpan Gambaran... + + + Request payment to %1 + Minta pembayaran ke %1 + + + Payment information + Informasi pembayaran + + + URI + URI + + + Address + Alamat + + + Amount + Nilai + + + Label + Label + + + Message + Pesan + + + Resulting URI too long, try to reduce the text for label / message. + Hasil URI terlalu panjang, coba kurangi label / pesan. + + + Error encoding URI into QR Code. + Gagal mengubah URI ke kode QR. + + + + RecentRequestsTableModel + + Date + Tanggal + + + Label + Label + + + Message + Pesan: + + + Amount + Nilai + + + (no label) + (tidak ada label) + + + (no message) + (tidak ada pesan) + + + (no amount) + (tidak ada nilai) + + + + SendCoinsDialog + + Send Coins + Kirim Koin + + + Coin Control Features + Cara Pengaturan Koin + + + Inputs... + Masukan... + + + automatically selected + Pemilihan otomatis + + + Insufficient funds! + Saldo tidak mencukupi! + + + Quantity: + Kuantitas: + + + Bytes: + Bytes: + + + Amount: + Nilai: + + + Priority: + Prioritas: + + + Fee: + Biaya: + + + Low Output: + Jumlah Yang Sedikit: + + + After Fee: + Dengan Biaya: + + + Change: + Uang Kembali: + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + Jiki ini dipilih, tetapi alamat pengembalian uang kosong atau salah, uang kembali akan dikirim ke alamat yang baru dibuat. + + + Custom change address + Alamat uang kembali yang kustom + + + Send to multiple recipients at once + Kirim ke beberapa penerima sekaligus + + + Add &Recipient + Tambahlah &Penerima + + + Clear all fields of the form. + Hapus informasi dari form. + + + Clear &All + Hapus %Semua + + + Balance: + Saldo: + + + Confirm the send action + Konfirmasi aksi pengiriman + + + S&end + K&irim + + + Confirm send coins + Konfirmasi pengiriman koin + + + %1 to %2 + %1 ke %2 + + + Copy quantity + Salin kuantitas + + + Copy amount + Salin nilai + + + Copy fee + Salin biaya + + + Copy after fee + Salin dengan biaya + + + Copy bytes + Salin bytes + + + Copy priority + Salin prioritas + + + Copy low output + Salin jumlah yang sedikit + + + Copy change + Salin uang kembali + + + Total Amount %1 (= %2) + Jumlah Nilai %1 (= %2) + + + or + atau + + + The recipient address is not valid, please recheck. + Alamat penerima tidak sah, silakan periksa sekali lagi. + + + The amount to pay must be larger than 0. + Nilai yang dibayar harus lebih besar dari 0. + + + The amount exceeds your balance. + Nilai melebihi saldo Anda. + + + The total exceeds your balance when the %1 transaction fee is included. + Jumlah melebihi saldo Anda ketika biaya transaksi %1 ditambahkan. + + + Duplicate address found, can only send to each address once per send operation. + Ditemukan alamat ganda, hanya dapat mengirim ke tiap alamat sekali per operasi pengiriman. + + + Transaction creation failed! + Gagal membuat transaksi! + + + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Gagal: Transaksi ditolak. Ini mungkin terjadi jika beberapa dari koin dalam dompet Anda telah digunakan, seperti ketika Anda menggunakan salinan wallet.dat dan beberapa koin telah dibelanjakan dalam salinan tersebut tetapi disini tidak tertandai sebagai terpakai. + + + Warning: Invalid Myriadcoin address + Awas: Alamat Myriadcoin tidak sah + + + (no label) + (tidak ada label) + + + Warning: Unknown change address + + + + Are you sure you want to send? + Apakah Anda yakin ingin kirim? + + + added as transaction fee + ditambahkan sebagai biaya transaksi + + + Payment request expired + Permintaan pembayaran telah kadaluarsa + + + Invalid payment address %1 + Alamat pembayaran salah %1 + + + + SendCoinsEntry + + A&mount: + J&umlah: + + + Pay &To: + Kirim &Ke: + + + The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Alamat pembayaran (cth. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + Enter a label for this address to add it to your address book + Masukkan label bagi alamat ini untuk menambahkannya ke buku alamat Anda + + + &Label: + &Label: + + + Choose previously used address + Pilih alamat yang telah digunakan sebelumnya + + + This is a normal payment. + + + + Alt+A + Alt+J + + + Paste address from clipboard + Tempel alamat dari salinan + + + Alt+P + Alt+B + + + Remove this entry + + + + Message: + Pesan: + + + This is a verified payment request. + Permintaan pembayaran terverifikasi. + + + Enter a label for this address to add it to the list of used addresses + Masukkan label untuk alamat ini untuk dimasukan dalam daftar alamat yang pernah digunakan + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + Permintaan pembayaran tidak terverifikasi. + + + Pay To: + Kirim Ke: + + + Memo: + Catatan Peringatan: + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + Myriadcoin Core sementara dimatikan... + + + Do not shut down the computer until this window disappears. + Kamu tidak dapat mematikan komputer sebelum jendela ini tertutup sendiri. + + + + SignVerifyMessageDialog + + Signatures - Sign / Verify a Message + Tanda Tangan / Verifikasi sebuah Pesan + + + &Sign Message + &Tandakan Pesan + + + You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. + + + + The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Alamat yang akan ditandai pesan (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + Choose previously used address + Pilih alamat yang telah digunakan sebelumnya + + + Alt+A + Alt+A + + + Paste address from clipboard + Tempel alamat dari salinan + + + Alt+P + Alt+B + + + Enter the message you want to sign here + Masukan pesan yang ingin ditandai disini + + + Signature + Tanda Tangan + + + Copy the current signature to the system clipboard + Salin tanda tangan terpilih ke sistem klipboard + + + Sign the message to prove you own this Myriadcoin address + Tandai pesan untuk menyetujui kamu pemiliki alamat Myriadcoin ini + + + Sign &Message + Tandakan &Pesan + + + Reset all sign message fields + Hapus semua bidang penanda pesan + + + Clear &All + Hapus %Semua + + + &Verify Message + &Verifikasi Pesan + + + Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. + + + + The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Verify the message to ensure it was signed with the specified Myriadcoin address + + + + Verify &Message + Verifikasi &Pesan + + + Reset all verify message fields + Hapus semua bidang verifikasi pesan + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Masukkan alamat Myriadcoin (cth. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + Click "Sign Message" to generate signature + + + + The entered address is invalid. + Alamat yang dimasukkan tidak sesuai. + + + Please check the address and try again. + Silahkan periksa alamat dan coba lagi. + + + The entered address does not refer to a key. + Alamat itu tidak menghubungkan kunci. + + + Wallet unlock was cancelled. + Membuka kunci dompet dibatalkan. + + + Private key for the entered address is not available. + Kunci pribadi untuk alamat itu tidak tersedia. + + + Message signing failed. + Menandai pesan gagal. + + + Message signed. + Pesan ditandai. + + + The signature could not be decoded. + Tanda tangan tidak bisa diterjemahkan. + + + Please check the signature and try again. + Mohon periksa tanda tangan dan coba kembali + + + The signature did not match the message digest. + Tanda tangan tidak cocok dengan intisari pesan. + + + Message verification failed. + Verifikasi pesan gagal. + + + Message verified. + Pesan terverifikasi. + + + + SplashScreen + + Myriadcoin Core + Myriadcoin Core + + + The Myriadcoin Core developers + Pembangun Myriadcoin Core + + + [testnet] + [testnet] + + + + TrafficGraphWidget + + KB/s + KB/s + + + + TransactionDesc + + Open until %1 + Buka hingga %1 + + + conflicted + Terkonflik + + + %1/offline + %1/tidak terhubung + + + %1/unconfirmed + %1/belum dikonfirmasi + + + %1 confirmations + %1 konfirmasi + + + Status + Status + + + , broadcast through %n node(s) + kirim lewat %n node + + + Date + Tanggal + + + Source + Sumber + + + Generated + Dibuat + + + From + Dari + + + To + Untuk + + + own address + Alamat saya sendiri + + + label + label + + + Credit + Kredit + + + matures in %n more block(s) + cukup tua sesudah %n blok lagi + + + not accepted + tidak diterima + + + Debit + Debet + + + Transaction fee + Biaya Transaksi + + + Net amount + Nilai bersih + + + Message + Pesan: + + + Comment + Komentar + + + Transaction ID + ID Transaksi + + + Merchant + Pedagang + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + Debug information + Informasi debug + + + Transaction + Transaksi + + + Inputs + Masukan + + + Amount + Nilai + + + true + benar + + + false + salah + + + , has not been successfully broadcast yet + , belum berhasil disiarkan + + + Open for %n more block(s) + Buka untuk %n blok lagi + + + unknown + tidak diketahui + + + + TransactionDescDialog + + Transaction details + Rincian transaksi + + + This pane shows a detailed description of the transaction + Jendela ini menampilkan deskripsi rinci dari transaksi tersebut + + + + TransactionTableModel + + Date + Tanggal + + + Type + Jenis + + + Address + Alamat + + + Amount + Nilai + + + Immature (%1 confirmations, will be available after %2) + Terlalu muda (cuma %1 konfirmasi, akan siap sesudah %2) + + + Open for %n more block(s) + Buka untuk %n blok lagi + + + Open until %1 + Buka hingga %1 + + + Confirmed (%1 confirmations) + Terkonfirmasi (%1 konfirmasi) + + + This block was not received by any other nodes and will probably not be accepted! + Blok ini tidak diterima oleh node lainnya dan kemungkinan tidak akan diterima! + + + Generated but not accepted + Terbuat tetapi tidak diterima + + + Offline + Tidak terhubung + + + Unconfirmed + Belum dikonfirmasi + + + Confirming (%1 of %2 recommended confirmations) + Sedang dikonfirmasi (%1 dari %2 konfirmasi disarankan) + + + Conflicted + Terkonflik + + + Received with + Diterima dengan + + + Received from + Diterima dari + + + Sent to + Terkirim ke + + + Payment to yourself + Pembayaran ke Anda sendiri + + + Mined + Tertambang + + + (n/a) + (t/s) + + + Transaction status. Hover over this field to show number of confirmations. + Status transaksi. Arahkan ke bagian ini untuk menampilkan jumlah konfrimasi. + + + Date and time that the transaction was received. + Tanggal dan waktu transaksi tersebut diterima. + + + Type of transaction. + Jenis transaksi. + + + Destination address of transaction. + Alamat tujuan dari transaksi. + + + Amount removed from or added to balance. + Nilai dihapus dari atau ditambahkan ke saldo. + + + + TransactionView + + All + Semua + + + Today + Hari ini + + + This week + Minggu ini + + + This month + Bulan ini + + + Last month + Bulan kemarin + + + This year + Tahun ini + + + Range... + Jarak... + + + Received with + DIterima dengan + + + Sent to + Terkirim ke + + + To yourself + Ke Anda sendiri + + + Mined + Ditambang + + + Other + Lainnya + + + Enter address or label to search + Masukkan alamat atau label untuk mencari + + + Min amount + Nilai min + + + Copy address + Salin alamat + + + Copy label + Salin label + + + Copy amount + Salin Nilai + + + Copy transaction ID + Menyalinkan ID transaksi + + + Edit label + Ubah label + + + Show transaction details + Tampilkan rincian transaksi + + + Export Transaction History + Expor Histori Transaksi + + + Exporting Failed + Proses Ekspor Gagal + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + Proses Ekspor Berhasil + + + The transaction history was successfully saved to %1. + Riwayat transaksi berhasil disimpan di %1. + + + Comma separated file (*.csv) + Berkas CSV (*.csv) + + + Confirmed + Terkonfirmasi + + + Date + Tanggal + + + Type + Jenis + + + Label + Label + + + Address + Alamat + + + Amount + Nilai + + + ID + ID + + + Range: + Jarak: + + + to + ke + + + + WalletFrame + + No wallet has been loaded. + Tidak ada dompet yang dibuka + + + + WalletModel + + Send Coins + Kirim Koin + + + + WalletView + + &Export + &Ekspor + + + Export the data in the current tab to a file + Ekspor data dalam tab sekarang ke sebuah berkas + + + Backup Wallet + Cadangkan Dompet + + + Wallet Data (*.dat) + Data Dompet (*.dat) + + + Backup Failed + Cadangkgan Gagal + + + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. + Informasi dalam dompet berhasil disimpan di %1. + + + Backup Successful + Cadangkan Berhasil + + + + bitcoin-core + + Usage: + Penggunaan: + + + List commands + Daftar perintah + + + Get help for a command + Dapatkan bantuan untuk perintah + + + Options: + Pilihan: + + + Specify configuration file (default: myriadcoin.conf) + Tentukan berkas konfigurasi (standar: myriadcoin.conf) + + + Specify pid file (default: myriadcoind.pid) + Tentukan berkas pid (standar: myriadcoind.pid) + + + Specify data directory + Tentukan direktori data + + + Listen for connections on <port> (default: 8333 or testnet: 18333) + Menerima hubungan pada <port> (standar: 8333 atau testnet: 18333) + + + Maintain at most <n> connections to peers (default: 125) + Mengatur hubungan paling banyak <n> ke peer (standar: 125) + + + Connect to a node to retrieve peer addresses, and disconnect + Hubungkan ke node untuk menerima alamat peer, dan putuskan + + + Specify your own public address + Tentukan alamat publik Anda sendiri + + + Threshold for disconnecting misbehaving peers (default: 100) + Batas untuk memutuskan peer buruk (standar: 100) + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + Jumlah kedua untuk menjaga peer buruk dari hubung-ulang (standar: 86400) + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) + + + + Accept command line and JSON-RPC commands + Menerima perintah baris perintah dan JSON-RPC + + + Myriadcoin Core RPC client version + + + + Run in the background as a daemon and accept commands + Berjalan dibelakang sebagai daemin dan menerima perintah + + + Use the test network + Gunakan jaringan uji + + + Accept connections from outside (default: 1 if no -proxy or -connect) + Terima hubungan dari luar (standar: 1 kalau -proxy atau -connect tidak dipilih) + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=myriadcoinrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com + + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + Sandi yang diterima (biasanya: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + Bind to given address and always listen on it. Use [host]:port notation for IPv6 + + + + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) + + + + Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Gagal: Transaksi ditolak. Ini mungkin terjadi jika beberapa dari koin dalam dompet Anda telah digunakan, seperti ketika Anda menggunakan salinan wallet.dat dan beberapa koin telah dibelanjakan dalam salinan tersebut tetapi disini tidak tertandai sebagai terpakai. + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + Jalankan perintah ketika perubahan transaksi dompet (%s di cmd digantikan oleh TxID) + + + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + + + + This is a pre-release test build - use at your own risk - do not use for mining or merchant applications + + + + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + Tidak bisa mengikat dengan %s di computer ini. Kemungkinan Myriadcoin Core sudah mulai. + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + Gunakanlah proxy SOCKS5 yang tersendiri supaya menghubungkan peer dengan layanan tersembunyi Tor (biasanya: -proxy) + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + Peringatan: -paytxfee sangat besar! Ini adalah biaya pengiriman yang akan dibayar oleh Anda jika transaksi terkirim. + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. + Perhatian: Mohon diperiksa pengaturan tanggal dan waktu komputer anda apakah sudah benar! Jika pengaturan waktu salah aplikasi Myriadcoin tidak akan berjalan dengan tepat. + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + Peringatan: Jaringan tidak semua bersetuju! Beberapa penambang dapat persoalan. + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + Peringatan: Kami tidak bersetujuh dengan peer-peer kami! Kemungkinan Anda harus upgrade, atau node-node lain yang harus diupgrade. + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + Awas: wallet.dat tidak bisa dibaca! Berhasil periksakan kunci-kunci dalam arsipnya, tetapi ada kemungkinan informasi tentang transaksi atau isi-isi buku alamat salah atau terhilang. + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + (default: 1) + (pengaturan awal: 1) + + + (default: wallet.dat) + (pengaturan awal: wallet.dat) + + + <category> can be: + + + + Attempt to recover private keys from a corrupt wallet.dat + Coba memulihkan kunci-kunci pribadi dari wallet.dat yang rusak + + + Myriadcoin Core Daemon + Daemon Myriadcoin Core + + + Block creation options: + Pilihan pembuatan blok: + + + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + + Connect only to the specified node(s) + Jangan menghubungkan node(-node) selain yang di daftar + + + Connect through SOCKS proxy + Hubungkan melalui proxy SOCKS + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + Pilih koneksi: + + + Corrupted block database detected + Menemukan database blok yang rusak + + + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + + Discover own IP address (default: 1 when listening and no -externalip) + Cari alamat IP Anda sendiri (biasanya: 1 saat mendengarkan dan -externalip tidak terpilih) + + + Do not load the wallet and disable wallet RPC calls + + + + Do you want to rebuild the block database now? + Apakah Anda ingin coba membangun kembali database blok sekarang? + + + Error initializing block database + Kesalahan menginisialisasi database blok + + + Error initializing wallet database environment %s! + Kesalahan menginisialisasi dompet pada database%s! + + + Error loading block database + Gagal memuat database blok + + + Error opening block database + Menemukan masalah membukakan database blok + + + Error: Disk space is low! + Gagal: Hard disk hampir terisi! + + + Error: Wallet locked, unable to create transaction! + Gagal: Dompet terkunci, transaksi tidak bisa dibuat! + + + Error: system error: + Error: system error: + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + Failed to read block info + Gagal membaca informasi dari blok + + + Failed to read block + Gagal membaca blok + + + Failed to sync block index + Gagal menyamakan daftar isi blok + + + Failed to write block index + Gagal menulis daftar isi blok + + + Failed to write block info + Gagal menulis info blok + + + Failed to write block + Gagal menulis blok + + + Failed to write file info + Gagal menulis info arsip + + + Failed to write to coin database + + + + Failed to write transaction index + Gagal menulis daftar isi transaksi + + + Failed to write undo data + + + + Fee per kB to add to transactions you send + Biaya untuk setiap kB yang akan ditambahkan ke transaksi yang Anda kirim + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + + Find peers using DNS lookup (default: 1 unless -connect) + Cari peer dengan daftar alamat DNS (biasanya: 1 jika -connect tidak terpilih) + + + Force safe mode (default: 0) + + + + Generate coins (default: 0) + Buatlah koin (biasanya: 0) + + + How many blocks to check at startup (default: 288, 0 = all) + Periksakan berapa blok waktu mulai (biasanya: 288, 0 = setiapnya) + + + If <category> is not supplied, output all debugging information. + + + + Importing... + mengimpor... + + + Incorrect or no genesis block found. Wrong datadir for network? + Tidak bisa cari blok pertama, atau blok pertama salah. Salah direktori untuk jaringan? + + + Invalid -onion address: '%s' + Alamat -onion salah: '%s' + + + Not enough file descriptors available. + Deskripsi berkas tidak tersedia dengan cukup. + + + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + Pilihan RPC klien: + + + Rebuild block chain index from current blk000??.dat files + + + + Select SOCKS version for -proxy (4 or 5, default: 5) + Pililah versi SOCKS untuk -proxy (4 atau 5, biasanya: 5) + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + Atur ukuran maksimal untuk blok dalam byte (biasanya: %d) + + + Set the number of threads to service RPC calls (default: 4) + Mengatur jumlah urutan untuk layanan panggilan RPC (pengaturan awal: 4) + + + Specify wallet file (within data directory) + Tentukan arsip dompet (dalam direktori data) + + + Spend unconfirmed change when sending transactions (default: 1) + Perubahan saldo untuk transaksi yang belum dikonfirmasi setelah transaksi terkirim (default: 1) + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + + Verifying blocks... + Blok-blok sedang diverifikasi... + + + Verifying wallet... + Dompet sedang diverifikasi... + + + Wait for RPC server to start + Tunggu sampai server RPC dimulai + + + Wallet %s resides outside data directory %s + Dompet %s ada diluar direktori data %s + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + Harus membangun ulang database menggunakan -reindex supaya mengubah -txindex + + + Imports blocks from external blk000??.dat file + Impor blok dari eksternal berkas blk000???.dat + + + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + Tidak bisa mengunci data directory %s. Kemungkinan Myriadcoin Core sudah mulai. + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + + + + Information + Informasi + + + Invalid amount for -minrelaytxfee=<amount>: '%s' + Nilai yang salah untuk -minrelaytxfee=<amount>: '%s' + + + Invalid amount for -mintxfee=<amount>: '%s' + Nilai yang salah untuk -mintxfee=<amount>: '%s' + + + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + + Maintain a full transaction index (default: 0) + Jaga daftar transaksi yang lengkap (biasanya: 0) + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + Only accept block chain matching built-in checkpoints (default: 1) + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + Dilarang menghubungkan node-node selain <net> (IPv4, IPv6 atau Tor) + + + Print block on startup, if found in block index + + + + Print block tree on startup (default: 0) + + + + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + + + + SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + Pilihan SSL: (petunjuk pengaturan SSL lihat dalam Myriadcoin Wiki) + + + Send command to Myriadcoin Core + + + + Send trace/debug info to console instead of debug.log file + Kirim info jejak/debug ke konsol bukan berkas debug.log + + + Set minimum block size in bytes (default: 0) + Atur ukuran minimal untuk blok dalam byte (standar: 0) + + + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + Mengecilkan berkas debug.log saat klien berjalan (Standar: 1 jika tidak -debug) + + + Signing transaction failed + Tandatangani transaksi tergagal + + + Specify connection timeout in milliseconds (default: 5000) + Menetapkan waktu berakhir koneksi di milidetik (biasanya: 5000) + + + Start Myriadcoin Core Daemon + Memulai Myriadcoin Core Daemon + + + System error: + Kesalahan sistem: + + + Transaction amount too small + Nilai transaksi terlalu kecil + + + Transaction amounts must be positive + Nilai transaksi harus positif + + + Transaction too large + Transaksi terlalu besar + + + Use UPnP to map the listening port (default: 0) + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + Username for JSON-RPC connections + Nama pengguna untuk hubungan JSON-RPC + + + Warning + Peringatan + + + Warning: This version is obsolete, upgrade required! + Perhatian: Versi ini sudah lama, perlu ditingkatkan! + + + Zapping all transactions from wallet... + Setiap transaksi dalam dompet sedang di-'Zap'... + + + on startup + + + + version + versi + + + wallet.dat corrupt, salvage failed + wallet.dat rusak, tidak bisa diperbaiki + + + Password for JSON-RPC connections + Kata sandi untuk hubungan JSON-RPC + + + Allow JSON-RPC connections from specified IP address + Izinkan hubungan JSON-RPC dari alamat IP yang ditentukan + + + Send commands to node running on <ip> (default: 127.0.0.1) + Kirim perintah ke node berjalan pada <ip> (standar: 127.0.0.1) + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + Menjalankan perintah ketika perubahan blok terbaik (%s dalam cmd digantikan oleh hash blok) + + + Upgrade wallet to latest format + Perbarui dompet ke format terbaru + + + Set key pool size to <n> (default: 100) + Kirim ukuran kolam kunci ke <n> (standar: 100) + + + Rescan the block chain for missing wallet transactions + Pindai ulang rantai-blok untuk transaksi dompet yang hilang + + + Use OpenSSL (https) for JSON-RPC connections + Gunakan OpenSSL (https) untuk hubungan JSON-RPC + + + Server certificate file (default: server.cert) + Berkas sertifikat server (standar: server.cert) + + + Server private key (default: server.pem) + Kunci pribadi server (standar: server.pem) + + + This help message + Pesan bantuan ini + + + Unable to bind to %s on this computer (bind returned error %d, %s) + Tidak dapat mengikat ke %s dengan komputer ini (ikatan gagal %d, %s) + + + Allow DNS lookups for -addnode, -seednode and -connect + Izinkan peninjauan DNS untuk -addnote, -seednode dan -connect + + + Loading addresses... + Memuat alamat... + + + Error loading wallet.dat: Wallet corrupted + Gagal memuat wallet.dat: Dompet rusak + + + Error loading wallet.dat: Wallet requires newer version of Myriadcoin + Gagal memuat wallet.dat: Dompet memerlukan versi Myriadcoin yang terbaru + + + Wallet needed to be rewritten: restart Myriadcoin to complete + Dompet diperlukan untuk disimpan-ulang: nyala-ulangkan Myriadcoin untuk menyelesaikan + + + Error loading wallet.dat + Gagal memuat wallet.dat + + + Invalid -proxy address: '%s' + Alamat -proxy salah: '%s' + + + Unknown network specified in -onlynet: '%s' + Jaringan tidak diketahui yang ditentukan dalam -onlynet: '%s' + + + Unknown -socks proxy version requested: %i + Diminta versi proxy -socks tidak diketahui: %i + + + Cannot resolve -bind address: '%s' + Tidak dapat menyelesaikan alamat -bind: '%s' + + + Cannot resolve -externalip address: '%s' + Tidak dapat menyelesaikan alamat -externalip: '%s' + + + Invalid amount for -paytxfee=<amount>: '%s' + Nilai salah untuk -paytxfee=<amount>: '%s' + + + Invalid amount + Nilai salah + + + Insufficient funds + Saldo tidak mencukupi + + + Loading block index... + Memuat indeks blok... + + + Add a node to connect to and attempt to keep the connection open + Tambahkan node untuk dihubungkan dan upaya untuk menjaga hubungan tetap terbuka + + + Loading wallet... + Memuat dompet... + + + Cannot downgrade wallet + Tidak dapat menurunkan versi dompet + + + Cannot write default address + Tidak dapat menyimpan alamat standar + + + Rescanning... + Memindai ulang... + + + Done loading + Memuat selesai + + + To use the %s option + Gunakan pilihan %s + + + Error + Gagal + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + Anda harus mengatur rpcpassword=<kata sandi> dalam berkas konfigurasi: +%s +Jika berkas tidak ada, buatlah dengan permisi berkas hanya-dapat-dibaca-oleh-pemilik. + + + \ No newline at end of file diff --git a/src/qt/locale/bitcoin_it.ts b/src/qt/locale/bitcoin_it.ts index 27dd16b9..e949ef60 100644 --- a/src/qt/locale/bitcoin_it.ts +++ b/src/qt/locale/bitcoin_it.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - Info su Myriadcoin + About Myriadcoin Core + Info su Myriadcoin Core - - <b>Myriadcoin</b> version - Versione di <b>Myriadcoin</b> + <b>Myriadcoin Core</b> version + Versione <b>Myriadcoin Core</b> - This is experimental software. @@ -28,153 +24,128 @@ Distribuito sotto la licenza software MIT/X11, vedi il file COPYING incluso oppu Questo prodotto include software sviluppato dal progetto OpenSSL per l'uso del Toolkit OpenSSL (http://www.openssl.org/), software crittografico scritto da Eric Young (eay@cryptsoft.com) e software UPnP scritto da Thomas Bernard. - Copyright Copyright - - The Myriadcoin developers - Sviluppatori di Myriadcoin + The Myriadcoin Core developers + Gli sviluppatori del Myriadcoin Core + + + (%1-bit) + (%1-bit) AddressBookPage - - Address Book - Rubrica - - - Double-click to edit address or label - Fai doppio click per modificare o cancellare l'etichetta + Doppio click per modificare l'indirizzo o l'etichetta - Create a new address Crea un nuovo indirizzo - + &New + &Nuovo + + Copy the currently selected address to the system clipboard - Copia l'indirizzo attualmente selezionato nella clipboard + Copia l'indirizzo attualmente selezionato negli appunti - - &New Address - &Nuovo indirizzo + &Copy + &Copia - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Questi sono i tuoi indirizzi Myriadcoin per ricevere pagamenti. Potrai darne uno diverso ad ognuno per tenere così traccia di chi ti sta pagando. + C&lose + C&hiudi - &Copy Address &Copia l'indirizzo - - Show &QR Code - Mostra il codice &QR - - - - Sign a message to prove you own a Myriadcoin address - Firma un messaggio per dimostrare di possedere questo indirizzo - - - - Sign &Message - Firma il &messaggio - - - Delete the currently selected address from the list Cancella l'indirizzo attualmente selezionato dalla lista - Export the data in the current tab to a file - Esporta i dati nella tabella corrente su un file + Esporta su file i dati della tabella corrente - &Export - &Esporta... + &Esporta - - Verify a message to ensure it was signed with a specified Myriadcoin address - Verifica un messaggio per accertarsi che sia firmato con un indirizzo Myriadcoin specifico - - - - &Verify Message - &Verifica Messaggio - - - &Delete &Cancella - - These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - + Choose the address to send coins to + Scegli l'indirizzo a cui inviare bitcoin + + + Choose the address to receive coins with + Scegli l'indirizzo con cui ricevere bitcoin + + + C&hoose + Sc&egli + + + Sending addresses + Indirizzi d'invio + + + Receiving addresses + Indirizzi di ricezione + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + Questo è un elenco di indirizzi myriadcoin a cui puoi inviare pagamenti. Controlla sempre l'importo e l'indirizzo del beneficiario prima di inviare bitcoin. + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Questi sono i tuoi indirizzi myriadcoin che puoi usare per ricevere pagamenti. Si raccomanda di generare un nuovo indirizzo per ogni transazione. - Copy &Label Copia &l'etichetta - &Edit &Modifica - - Send &Coins - Invia &Myriadcoin + Export Address List + Esporta Lista Indirizzi - - Export Address Book Data - Esporta gli indirizzi della rubrica - - - Comma separated file (*.csv) Testo CSV (*.csv) - - Error exporting - Errore nell'esportazione + Exporting Failed + Esportazione Fallita. - - Could not write to file %1. - Impossibile scrivere sul file %1. + There was an error trying to save the address list to %1. + Si è verificato un errore tentando di salvare la lista degli indirizzi in %1. AddressTableModel - Label Etichetta - Address Indirizzo - (no label) (nessuna etichetta) @@ -182,140 +153,106 @@ Questo prodotto include software sviluppato dal progetto OpenSSL per l'uso AskPassphraseDialog - Passphrase Dialog Finestra passphrase - Enter passphrase Inserisci la passphrase - New passphrase Nuova passphrase - Repeat new passphrase - Ripeti la passphrase + Ripeti la nuova passphrase - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Inserisci la passphrase per il portamonete.<br/>Per piacere usare unapassphrase di <b>10 o più caratteri casuali</b>, o <b>otto o più parole</b>. + Inserisci la nuova passphrase per il portamonete.<br/>Si prega di usare una passphrase di <b>10 o più caratteri casuali</b>, o di <b>otto o più parole</b>. - Encrypt wallet Cifra il portamonete - This operation needs your wallet passphrase to unlock the wallet. Quest'operazione necessita della passphrase per sbloccare il portamonete. - Unlock wallet Sblocca il portamonete - This operation needs your wallet passphrase to decrypt the wallet. Quest'operazione necessita della passphrase per decifrare il portamonete, - Decrypt wallet Decifra il portamonete - Change passphrase Cambia la passphrase - Enter the old and new passphrase to the wallet. Inserisci la vecchia e la nuova passphrase per il portamonete. - Confirm wallet encryption Conferma la cifratura del portamonete - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! - Attenzione: se si cifra il portamonete e si perde la frase d'ordine, <b>SI PERDERANNO TUTTI I PROPRI MYRIADCOIN</b>! + Attenzione: se si cifra il portamonete e si perde la passphrase <b>TUTTI I PROPRI MYRIADCOIN ANDRANNO PERSI</b>! - Are you sure you wish to encrypt your wallet? Si è sicuri di voler cifrare il portamonete? - 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. - IMPORTANTE: qualsiasi backup del portafoglio effettuato precedentemente dovrebbe essere sostituito con il file del portafoglio criptato appena generato. Per ragioni di sicurezza, i backup precedenti del file del portafoglio non criptato diventeranno inservibili non appena si inizi ad usare il nuovo portafoglio criptato. + 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. - - Warning: The Caps Lock key is on! - Attenzione: tasto Blocco maiuscole attivo. + Attenzione: il tasto Blocco maiuscole è attivo! - - Wallet encrypted Portamonete cifrato - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. - Myriadcoin verrà ora chiuso per finire il processo di crittazione. Ricorda che criptare il tuo portamonete non può fornire una protezione totale contro furti causati da malware che dovessero infettare il tuo computer. + Myriadcoin si chiuderà per portare a termine il processo di cifratura. Ricorda che cifrare il tuo portamonete non può fornire una protezione totale contro i furti causati da infezioni malware. - - - - Wallet encryption failed Cifratura del portamonete fallita - Wallet encryption failed due to an internal error. Your wallet was not encrypted. Cifratura del portamonete fallita a causa di un errore interno. Il portamonete non è stato cifrato. - - The supplied passphrases do not match. Le passphrase inserite non corrispondono. - Wallet unlock failed Sblocco del portamonete fallito - - - The passphrase entered for the wallet decryption was incorrect. La passphrase inserita per la decifrazione del portamonete è errata. - Wallet decryption failed Decifrazione del portamonete fallita - Wallet passphrase was successfully changed. Passphrase del portamonete modificata con successo. @@ -323,319 +260,286 @@ Questo prodotto include software sviluppato dal progetto OpenSSL per l'uso BitcoinGUI - Sign &message... Firma il &messaggio... - Synchronizing with network... - Sto sincronizzando con la rete... + Sincronizzazione con la rete in corso... - &Overview &Sintesi - + Node + Nodo + + Show general overview of wallet Mostra lo stato generale del portamonete - &Transactions &Transazioni - Browse transaction history - Cerca nelle transazioni + Mostra la cronologia delle transazioni - - Edit the list of stored addresses and labels - Modifica la lista degli indirizzi salvati e delle etichette - - - - Show the list of addresses for receiving payments - Mostra la lista di indirizzi su cui ricevere pagamenti - - - E&xit &Esci - Quit application Chiudi applicazione - Show information about Myriadcoin Mostra informazioni su Myriadcoin - About &Qt Informazioni su &Qt - Show information about Qt Mostra informazioni su Qt - &Options... &Opzioni... - &Encrypt Wallet... &Cifra il portamonete... - &Backup Wallet... &Backup Portamonete... - &Change Passphrase... &Cambia la passphrase... - - Importing blocks from disk... - Importa blocchi dal disco... + &Sending addresses... + &Indirizzi d'invio... + + + &Receiving addresses... + Indirizzi di &ricezione... + + + Open &URI... + Apri &URI... + + + Importing blocks from disk... + Importazione blocchi dal disco... - Reindexing blocks on disk... Re-indicizzazione blocchi su disco... - Send coins to a Myriadcoin address - Invia monete ad un indirizzo myriadcoin + Invia monete ad un indirizzo bitcoin - Modify configuration options for Myriadcoin - Modifica configurazione opzioni per myriadcoin + Modifica opzioni di configurazione per bitcoin - Backup wallet to another location - Backup portamonete in un'altra locazione + Effettua il backup del portamonete - Change the passphrase used for wallet encryption - Cambia la passphrase per la cifratura del portamonete + Cambia la passphrase utilizzata per la cifratura del portamonete - &Debug window Finestra &Debug - Open debugging and diagnostic console - Apri la console di degugging e diagnostica + Apri la console di debugging e diagnostica - &Verify message... &Verifica messaggio... - - Myriadcoin Myriadcoin - Wallet Portamonete - &Send - &Spedisci + &Invia - &Receive &Ricevi - - &Addresses - &Indirizzi - - - - &About Myriadcoin - &Info su Myriadcoin - - - &Show / Hide - &Mostra/Nascondi + &Mostra / Nascondi - Show or hide the main Window Mostra o nascondi la Finestra principale - Encrypt the private keys that belong to your wallet - Crittografa le chiavi private che appartengono al tuo portafoglio + Cifra le chiavi private che appartengono al tuo portamonete - Sign messages with your Myriadcoin addresses to prove you own them - Firma i messaggi con il tuo indirizzo Myriadcoin per dimostrare di possederli + Firma i messaggi con il tuo indirizzo myriadcoin per dimostrarne il possesso - Verify messages to ensure they were signed with specified Myriadcoin addresses - Verifica i messaggi per accertarsi che siano stati firmati con gli indirizzi Myriadcoin specificati + Verifica i messaggi per accertare che siano stati firmati con gli indirizzi myriadcoin specificati - &File &File - &Settings &Impostazioni - &Help &Aiuto - Tabs toolbar Barra degli strumenti "Tabs" - - [testnet] [testnet] - + Myriadcoin Core + Myriadcoin Core + + + Request payments (generates QR codes and myriadcoin: URIs) + Richiedi pagamenti (genera codici QR e myriadcoin: URI) + + + &About Myriadcoin Core + Info su Myriadcoin Core + + + Show the list of used sending addresses and labels + Mostra la lista degli indirizzi di invio utilizzati + + + Show the list of used receiving addresses and labels + Mostra la lista degli indirizzi di ricezione utilizzati + + + Open a myriadcoin: URI or payment request + Apri un URI o una richiesta di pagamento + + + &Command-line options + Opzioni riga di &comando + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + Mostra il messaggio di aiuto di Myriadcoin Core per avere la lista di tutte le opzioni della riga di comando di Myriadcoin. + + Myriadcoin client Myriadcoin client - %n active connection(s) to Myriadcoin network %n connessione attiva alla rete Myriadcoin%n connessioni attive alla rete Myriadcoin - No block source available... - + Nessuna fonte di blocchi disponibile - Processed %1 of %2 (estimated) blocks of transaction history. - Processati %1 di %2 (circa) blocchi della cronologia transazioni. + Processati %1 di %2 blocchi totali (stimati) della cronologia transazioni. - Processed %1 blocks of transaction history. Processati %1 blocchi della cronologia transazioni. - %n hour(s) %n ora%n ore - %n day(s) %n giorno%n giorni - %n week(s) %n settimana%n settimane - - %1 behind - + %1 and %2 + %1 e %2 + + + %n year(s) + %n anno%n anni + + + %1 behind + Indietro di %1 - Last received block was generated %1 ago. L'ultimo blocco ricevuto è stato generato %1 fa. - Transactions after this will not yet be visible. - + Transazioni successive a questa non saranno ancora visibili. - Error Errore - Warning Attenzione - Information - Informazione + Informazioni - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - Questa transazione è superiore al limite di dimensione. È comunque possibile inviarla con una commissione di %1, che va ai nodi che processano la tua transazione e contribuisce a sostenere la rete. Vuoi pagare la commissione? - - - Up to date Aggiornato - Catching up... In aggiornamento... - - Confirm transaction fee - Conferma compenso transazione - - - Sent transaction Transazione inviata - Incoming transaction Transazione ricevuta - Date: %1 Amount: %2 Type: %3 @@ -649,360 +553,663 @@ Indirizzo: %4 - - - URI handling - Gestione URI - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - Impossibile interpretare l'URI! Ciò può essere causato da un indirizzo Myriadcoin invalido o da parametri URI non corretti. - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Il portamonete è <b>cifrato</b> e attualmente <b>sbloccato</b> + Il portamonete è <b>cifrato</b> ed attualmente <b>sbloccato</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> - Il portamonete è <b>cifrato</b> e attualmente <b>bloccato</b> + Il portamonete è <b>cifrato</b> ed attualmente <b>bloccato</b> - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. - Riscontrato un errore irreversibile. Myriadcoin non può più continuare in sicurezza e verrà terminato. + Riscontrato un errore irreversibile. Myriadcoin non può più continuare in sicurezza e sarà terminato. ClientModel - Network Alert Avviso di rete + + CoinControlDialog + + Coin Control Address Selection + Selezione Indirizzo Coin Control + + + Quantity: + Quantità: + + + Bytes: + Byte: + + + Amount: + Importo: + + + Priority: + Priorità: + + + Fee: + Commissione: + + + Low Output: + Low Output: + + + After Fee: + Dopo Commissione: + + + Change: + Resto: + + + (un)select all + (de)seleziona tutto + + + Tree mode + Modalità Albero + + + List mode + Modalità Lista + + + Amount + Importo + + + Address + Indirizzo + + + Date + Data + + + Confirmations + Conferme: + + + Confirmed + Confermato + + + Priority + Priorità + + + Copy address + Copia l'indirizzo + + + Copy label + Copia l'etichetta + + + Copy amount + Copia l'importo + + + Copy transaction ID + Copia l'ID transazione + + + Lock unspent + Bloccare non spesi + + + Unlock unspent + Sbloccare non spesi + + + Copy quantity + Copia quantità + + + Copy fee + Copia commissione + + + Copy after fee + Copia dopo commissione + + + Copy bytes + Copia byte + + + Copy priority + Copia priorità + + + Copy low output + Copia low output + + + Copy change + Copia resto + + + highest + massima + + + higher + superiore + + + high + alta + + + medium-high + medio-alta + + + medium + media + + + low-medium + medio-bassa + + + low + bassa + + + lower + minore + + + lowest + minima + + + (%1 locked) + (%1 bloccato) + + + none + nessuno + + + Dust + Trascurabile + + + yes + sì + + + no + no + + + This label turns red, if the transaction size is greater than 1000 bytes. + Questa etichetta diventa rossa se la dimensione della transazione supera i 1000 bytes + + + This means a fee of at least %1 per kB is required. + Questo significa che è richiesta una commissione di almeno %1 per ogni kB. + + + Can vary +/- 1 byte per input. + Può variare di +/- 1 byte per input. + + + Transactions with higher priority are more likely to get included into a block. + Le transazioni con priorità più alta hanno più probabilità di essere incluse in un blocco. + + + This label turns red, if the priority is smaller than "medium". + Questa etichetta diventa rossa se la priorità è inferiore a "media". + + + This label turns red, if any recipient receives an amount smaller than %1. + Questa etichetta diventa rossa se uno qualsiasi dei destinatari riceve un ammontare inferiore di %1. + + + This means a fee of at least %1 is required. + Questo significa che è richiesta una commissione di almeno %1 + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + Importi inferiori a 0,546 volte la commissione minima di trasferimento sono mostrati come trascurabili. + + + This label turns red, if the change is smaller than %1. + Questa etichetta diventa rossa se il resto è minore di %1. + + + (no label) + (nessuna etichetta) + + + change from %1 (%2) + resto da %1 (%2) + + + (change) + (resto) + + EditAddressDialog - Edit Address Modifica l'indirizzo - &Label &Etichetta - - The label associated with this address book entry - L'etichetta associata a questo indirizzo nella rubrica + The label associated with this address list entry + L'etichetta associata con questa voce della lista degli indirizzi + + + The address associated with this address list entry. This can only be modified for sending addresses. + L'indirizzo associato a questa voce della rubrica. Può essere modificato solo per gli indirizzi d'invio. - &Address &Indirizzo - - The address associated with this address book entry. This can only be modified for sending addresses. - L'indirizzo associato a questa voce della rubrica. Si può modificare solo negli indirizzi di spedizione. - - - New receiving address Nuovo indirizzo di ricezione - New sending address Nuovo indirizzo d'invio - Edit receiving address Modifica indirizzo di ricezione - Edit sending address Modifica indirizzo d'invio - The entered address "%1" is already in the address book. L'indirizzo inserito "%1" è già in rubrica. - The entered address "%1" is not a valid Myriadcoin address. L'indirizzo inserito "%1" non è un indirizzo myriadcoin valido. - Could not unlock wallet. Impossibile sbloccare il portamonete. - New key generation failed. Generazione della nuova chiave non riuscita. - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt - Myriadcoin-Qt + A new data directory will be created. + Sarà creata una nuova cartella dati. + + + name + Nome + + + Directory already exists. Add %1 if you intend to create a new directory here. + La cartella esiste già. Aggiungi %1 se intendi creare qui una nuova cartella. + + + Path already exists, and is not a directory. + Il percorso è già esistente e non è una cartella. + + + Cannot create data directory here. + Qui non è possibile creare una cartella dati. + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + Myriadcoin Core - Opzioni riga di comando + + + Myriadcoin Core + Myriadcoin Core - version versione - Usage: Utilizzo: - command-line options opzioni riga di comando - UI options UI opzioni - Set language, for example "de_DE" (default: system locale) Imposta lingua, ad esempio "it_IT" (predefinita: lingua di sistema) - Start minimized - Parti in icona - + Avvia ridotto a icona + + + Set SSL root certificates for payment request (default: -system-) + Imposta i certificati radice SSL per le richieste di pagamento (predefinito: -system-) - Show splash screen on startup (default: 1) - Mostra finestra di presentazione all'avvio (default: 1) + Mostra finestra di presentazione all'avvio (predefinito: 1) + + + Choose data directory on startup (default: 0) + Scegli una cartella dati all'avvio (predefinito: 0) + + + + Intro + + Welcome + Benvenuto + + + Welcome to Myriadcoin Core. + Benvenuti su Myriadcoin Core. + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + Visto che questa è la prima volta che il programma viene lanciato, puoi scegliere dove Myriadcoin Core salverà i propri dati. + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + Myriadcoin Core scaricherà e salverà una copia del block chain di Myriadcoin. Almeno %1GB di dati che andranno ad aumentare col tempo saranno salvati in questa cartella. Anche il portamonete sarà salvato in questa cartella. + + + Use the default data directory + Usa la cartella dati predefinita + + + Use a custom data directory: + Usa una cartella dati personalizzata: + + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" can not be created. + Errore: La cartella dati "%1" specificata non può essere creata. + + + Error + Errore + + + GB of free space available + GB di spazio libero disponibile + + + (of %1GB needed) + (di %1GB richiesti) + + + + OpenURIDialog + + Open URI + Apri URI + + + Open payment request from URI or file + Apri richiesta di pagamento da URI o file + + + URI: + URI: + + + Select payment request file + Seleziona il file di richiesta di pagamento + + + Select payment request file to open + Seleziona il file di richiesta di pagamento da aprire OptionsDialog - Options Opzioni - &Main &Principale - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. - + Commissione di transazione per kB: è opzionale e contribuisce ad assicurare che le transazioni siano elaborate velocemente. La maggior parte della transazioni ha dimensioni pari a 1 kB. - Pay transaction &fee Paga la &commissione - Automatically start Myriadcoin after logging in to the system. - Avvia automaticamente Myriadcoin all'accensione del computer + Avvia automaticamente Myriadcoin una volta effettuato l'accesso al sistema. - &Start Myriadcoin on system login - &Fai partire Myriadcoin all'avvio del sistema + &Avvia Myriadcoin all'accesso al sistema + + + Size of &database cache + Dimensione della cache del &database. + + + MB + MB + + + Number of script &verification threads + Numero di thread di &verifica degli script + + + Connect to the Myriadcoin network through a SOCKS proxy. + Connessione alla rete Myriadcoin attraverso un proxy SOCKS. + + + &Connect through SOCKS proxy (default proxy): + &Connessione attraverso proxy SOCKS (proxy predefinito): + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + Indirizzo IP del proxy (es: IPv4: 127.0.0.1 / IPv6: ::1) + + + 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 |. + URL di terze parti (es: un block explorer) che appaiono nella tabella delle transazioni come voci nel menu contestuale. %s nell'URL è sostituito dall'hash della transazione. +Più URL vengono separati da una barra verticale |. + + + Third party transaction URLs + URL di transazione di terze parti + + + Active command-line options that override above options: + Opzioni command-line attive che sostituiscono i settaggi sopra elencati: - Reset all client options to default. - Ripristina tutte le opzioni del client alle predefinite. + Reimposta tutte le opzioni del client allo stato predefinito. - &Reset Options &Ripristina Opzioni - &Network Rete - + (0 = auto, <0 = leave that many cores free) + (0 = automatico, <0 = lascia questo numero di core liberi) + + + W&allet + Port&amonete + + + Expert + Esperti + + + Enable coin &control features + Abilita le funzionalità di coin &control + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + Disabilitando l'uso di resti non confermati, il resto di una transazione non potrà essere speso fino a quando la transazione non avrà ottenuto almeno una conferma. Questa impostazione influisce inoltre sul calcolo saldo. + + + &Spend unconfirmed change + %Spendere resti non confermati + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. - Apri automaticamente la porta del client Myriadcoin sul router. Questo funziona solo se il router supporta UPnP ed è abilitato. + Apri automaticamente la porta del client Myriadcoin sul router. Il protocollo UPnP deve essere supportato da parte del router ed attivo. - Map port using &UPnP - Mappa le porte tramite l'&UPnP + Mappa le porte tramite &UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - Connettiti alla rete Bitcon attraverso un proxy SOCKS (ad esempio quando ci si collega via Tor) - - - - &Connect through SOCKS proxy: - &Collegati tramite SOCKS proxy: - - - Proxy &IP: &IP del proxy: - - IP address of the proxy (e.g. 127.0.0.1) - Indirizzo IP del proxy (ad esempio 127.0.0.1) - - - &Port: &Porta: - Port of the proxy (e.g. 9050) Porta del proxy (es. 9050) - SOCKS &Version: SOCKS &Version: - SOCKS version of the proxy (e.g. 5) Versione SOCKS del proxy (es. 5) - &Window &Finestra - Show only a tray icon after minimizing the window. - Mostra solo un'icona nel tray quando si minimizza la finestra + Mostra solo nella tray bar quando si riduce ad icona. - &Minimize to the tray instead of the taskbar - &Minimizza sul tray invece che sulla barra delle applicazioni + &Minimizza nella tray bar invece che sulla barra delle applicazioni - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. - Riduci ad icona, invece di uscire dall'applicazione quando la finestra viene chiusa. Quando questa opzione è attivata, l'applicazione verrà chiusa solo dopo aver selezionato Esci nel menu. + Riduci ad icona invece di uscire dall'applicazione quando la finestra viene chiusa. Se l'opzione è attiva, l'applicazione terminerà solo dopo aver selezionato Esci dal menu File. - M&inimize on close M&inimizza alla chiusura - &Display &Mostra - User Interface &language: &Lingua Interfaccia Utente: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. La lingua dell'interfaccia utente può essere impostata qui. L'impostazione avrà effetto dopo il riavvio di Myriadcoin. - &Unit to show amounts in: - &Unità di misura degli importi in: + &Unità di misura con cui visualizzare gli importi: - Choose the default subdivision unit to show in the interface and when sending coins. - Scegli l'unità di suddivisione di default per l'interfaccia e per l'invio di monete + Scegli l'unità di suddivisione predefinita da utilizzare per l'interfaccia e per l'invio di monete. - Whether to show Myriadcoin addresses in the transaction list or not. - Se mostrare l'indirizzo Myriadcoin nella transazione o meno. + Specifica se gli indirizzi saranno visualizzati nella lista delle transazioni. - &Display addresses in transaction list &Mostra gli indirizzi nella lista delle transazioni - + Whether to show coin control features or not. + Specifica se le funzionalita di coin control saranno visualizzate. + + &OK &OK - &Cancel &Cancella - - &Apply - &Applica - - - default - default + predefinito + + + none + nessuno - Confirm options reset Conferma ripristino opzioni - - Some settings may require a client restart to take effect. - Alcune modifiche necessitano del riavvio del programma per essere salvate. + Client restart required to activate changes. + È necessario un riavvio del client per rendere attivi i cambiamenti. - - Do you want to proceed? - Vuoi procedere? + Client will be shutdown, do you want to proceed? + Il client sarà arrestato, vuoi procedere? - - - Warning - Attenzione + This change would require a client restart. + Questo cambiamento richiede un riavvio del client. - - - This setting will take effect after restarting Myriadcoin. - L'impostazione avrà effetto dopo il riavvio di Myriadcoin. - - - The supplied proxy address is invalid. L'indirizzo proxy che hai fornito è invalido. @@ -1010,639 +1217,911 @@ Indirizzo: %4 OverviewPage - Form Modulo - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. - Le informazioni visualizzate sono datate. Il tuo partafogli verrà sincronizzato automaticamente con il network Myriadcoin dopo che la connessione è stabilita, ma questo processo non può essere completato ora. + Le informazioni visualizzate potrebbero non essere aggiornate. Il portamonete si sincronizza automaticamente con la rete Myriadcoin una volta stabilita una connessione, ma questo processo non è ancora stato completato. - - Balance: - Saldo - - - - Unconfirmed: - Non confermato: - - - Wallet Portamonete - + Available: + Disponibile: + + + Your current spendable balance + Saldo spendibile attuale + + + Pending: + In attesa: + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + Totale delle transazioni in corso di conferma e che non sono ancora conteggiate nel saldo spendibile + + Immature: Immaturo: - Mined balance that has not yet matured - Importo scavato che non è ancora maturato + Importo generato dal mining e non ancora maturato + + + Total: + Totale: + + + Your current total balance + Saldo totale attuale - <b>Recent transactions</b> <b>Transazioni recenti</b> - - Your current balance - Saldo attuale - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - Totale delle transazioni in corso di conferma, che non sono ancora incluse nel saldo attuale - - - - out of sync - fuori sincrono + non sincronizzato PaymentServer - + URI handling + Gestione URI + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + Impossibile interpretare l'URI! Ciò può essere provocato da un indirizzo Myriadcoin non valido o da parametri URI non corretti. + + + Requested payment amount of %1 is too small (considered dust). + L'importo di pagamento richiesto di %1 è troppo basso (considerato come trascurabile). + + + Payment request error + Errore di richiesta di pagamento + + Cannot start myriadcoin: click-to-pay handler - + Impossibile avviare myriadcoin: gestore click-to-pay + + + Net manager warning + Avviso Net manager + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + Il proxy attualmente attivo non supporta SOCKS5, il quale è necessario per richieste di pagamento via proxy. + + + Payment request fetch URL is invalid: %1 + URL di recupero della Richiesta di pagamento non valido: %1 + + + Payment request file handling + Gestione del file di richiesta del pagamento + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + Il file di richiesta del pagamento non può essere letto o elaborato! Il file in questione potrebbe essere danneggiato. + + + Unverified payment requests to custom payment scripts are unsupported. + Le richieste di pagamento non verificate verso script di pagamento personalizzati non sono supportate. + + + Refund from %1 + Rimborso da %1 + + + Error communicating with %1: %2 + Errore di comunicazione con %1: %2 + + + Payment request can not be parsed or processed! + La richiesta di pagamento non può essere analizzata o processata! + + + Bad response from server %1 + Risposta errata da parte del server %1 + + + Payment acknowledged + Pagamento riconosciuto + + + Network request error + Errore di richiesta di rete - QRCodeDialog + QObject - - QR Code Dialog - Codice QR di dialogo + Myriadcoin + Myriadcoin - - Request Payment - Richiedi pagamento + Error: Specified data directory "%1" does not exist. + Errore: La cartella dati "%1" specificata non esiste. - - Amount: - Importo: + Error: Cannot parse configuration file: %1. Only use key=value syntax. + Errore: impossibile interpretare il file di configurazione: %1. Usare esclusivamente la sintassi chiave=valore. - - Label: - Etichetta: + Error: Invalid combination of -regtest and -testnet. + Errore: combinazione di -regtest e -testnet non valida. - - Message: - Messaggio: + Myriadcoin Core didn't yet exit safely... + Myriadcoin Core non si è ancora chiuso con sicurezza... - - &Save As... - &Salva come... + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Inserisci un indirizzo Myriadcoin (ad esempio 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + &Salva Immagine - - Error encoding URI into QR Code. - Errore nella codifica URI nel codice QR + &Copy Image + &Copia Immagine - - The entered amount is invalid, please check. - L'importo specificato non è valido, prego verificare. - - - - Resulting URI too long, try to reduce the text for label / message. - L'URI risulta troppo lungo, prova a ridurre il testo nell'etichetta / messaggio. - - - Save QR Code Salva codice QR - - PNG Images (*.png) - Immagini PNG (*.png) + PNG Image (*.png) + Immagine PNG (*.png) RPCConsole - Client name Nome del client - - - - - - - - - - N/A N/D - Client version Versione client - &Information - &Informazione + &Informazioni + + + Debug window + Finestra di debug + + + General + Generale - Using OpenSSL version Versione OpenSSL in uso - Startup time Tempo di avvio - Network Rete - + Name + Nome + + Number of connections - Numero connessioni + Numero di connessioni - - On testnet - Nel testnet - - - Block chain Block chain - Current number of blocks Numero attuale di blocchi - Estimated total blocks Numero totale stimato di blocchi - Last block time - Ora dell blocco piu recente + Ora del blocco più recente - &Open &Apri - - Command-line options - opzioni riga di comando - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - Mostra il messaggio di aiuto di Myriadcoin-QT per avere la lista di tutte le opzioni della riga di comando di Myriadcoin. - - - - &Show - &Mostra - - - &Console &Console - + &Network Traffic + &Traffico di Rete + + + &Clear + &Cancella + + + Totals + Totali + + + In: + Entrata: + + + Out: + Uscita: + + Build date Data di creazione - - Myriadcoin - Debug window - Myriadcoin - Finestra debug - - - - Myriadcoin Core - - - - Debug log file File log del Debug - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. Apri il file di log del debug di Myriadcoin dalla cartella attuale. Può richiedere alcuni secondi per file di log grandi. - Clear console - Svuota console + Cancella console - Welcome to the Myriadcoin RPC console. Benvenuto nella console RPC di Myriadcoin - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Usa le frecce direzionali per navigare la cronologia, and <b>Ctrl-L</b> per cancellarla. + Usa le frecce direzionali per navigare la cronologia, e <b>Ctrl-L</b> per cancellarla. - Type <b>help</b> for an overview of available commands. Scrivi <b>help</b> per un riassunto dei comandi disponibili + + %1 B + %1 B + + + %1 KB + %1 KB + + + %1 MB + %1 MB + + + %1 GB + %1 GB + + + %1 m + %1 m + + + %1 h + %1 h + + + %1 h %2 m + %1 h %2 m + + + + ReceiveCoinsDialog + + &Amount: + &Importo: + + + &Label: + &Etichetta + + + &Message: + &Messaggio: + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + Riutilizza uno degli indirizzi di ricezione generati in precedenza. Riutilizzare un indirizzo comporta problemi di sicurezza e privacy. Non utilizzare a meno che non si stia rigenerando una richiesta di pagamento creata in precedenza. + + + R&euse an existing receiving address (not recommended) + R&iusa un indirizzo di ricezione (non raccomandato) + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + Un messaggio opzionale da allegare alla richiesta di pagamento, il quale sarà mostrato all'apertura della richiesta. Nota: Il messaggio non sarà inviato con il pagamento sulla rete Myriadcoin. + + + An optional label to associate with the new receiving address. + Un'etichetta facoltativa da associare al nuovo indirizzo di ricezione + + + Use this form to request payments. All fields are <b>optional</b>. + Usa questo modulo per richiedere pagamenti. Tutti i campi sono <b>opzionali</b>. + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + Un importo opzionale da associare alla richiesta. Lasciare vuoto o a zero per non richiedere un importo specifico. + + + Clear all fields of the form. + Cancellare tutti i campi del modulo. + + + Clear + Cancella + + + Requested payments history + Cronologia pagamenti richiesti + + + &Request payment + &Richiedi pagamento + + + Show the selected request (does the same as double clicking an entry) + Mostra la richiesta selezionata (produce lo stesso effetto di un doppio click su una voce) + + + Show + Mostra + + + Remove the selected entries from the list + Rimuovi le voci selezionate dalla lista + + + Remove + Rimuovi + + + Copy label + Copia l'etichetta + + + Copy message + Copia messaggio + + + Copy amount + Copia l'importo + + + + ReceiveRequestDialog + + QR Code + Codice QR + + + Copy &URI + Copia &URI + + + Copy &Address + Copia &Indirizzo + + + &Save Image... + &Salva Immagine + + + Request payment to %1 + Richiesta di pagamento a %1 + + + Payment information + Informazioni pagamento + + + URI + URI + + + Address + Indirizzo + + + Amount + Importo + + + Label + Etichetta + + + Message + Messaggio + + + Resulting URI too long, try to reduce the text for label / message. + L'URI risultante è troppo lungo, prova a ridurre il testo nell'etichetta / messaggio. + + + Error encoding URI into QR Code. + Errore nella codifica dell'URI nel codice QR + + + + RecentRequestsTableModel + + Date + Data + + + Label + Etichetta + + + Message + Messaggio + + + Amount + Importo + + + (no label) + (nessuna etichetta) + + + (no message) + (nessun messaggio) + + + (no amount) + (nessun importo) + SendCoinsDialog - - - - - - - - Send Coins - Spedisci Myriadcoin + Invia Myriadcoin + + + Coin Control Features + Funzionalità di Coin Control + + + Inputs... + Input... + + + automatically selected + selezionato automaticamente + + + Insufficient funds! + Fondi insufficienti! + + + Quantity: + Quantità: + + + Bytes: + Byte: + + + Amount: + Importo: + + + Priority: + Priorità: + + + Fee: + Commissione: + + + Low Output: + Low Output: + + + After Fee: + Dopo Commissione: + + + Change: + Resto: + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + Se questo è abilitato e l'indirizzo per il resto è vuoto o invalido, il resto sarà inviato ad un nuovo indirizzo myriadcoin generato appositamente. + + + Custom change address + Personalizza indirizzo di resto - Send to multiple recipients at once - Spedisci a diversi beneficiari in una volta sola + Invia a diversi beneficiari in una volta sola - Add &Recipient &Aggiungi beneficiario - - Remove all transaction fields - Rimuovi tutti i campi della transazione + Clear all fields of the form. + Cancellare tutti i campi del modulo. - Clear &All Cancella &tutto - Balance: Saldo: - - 123.456 BTC - 123,456 BTC - - - Confirm the send action - Conferma la spedizione + Conferma l'azione di invio - S&end - &Spedisci + &Invia - - <b>%1</b> to %2 (%3) - <b>%1</b> to %2 (%3) - - - Confirm send coins - Conferma la spedizione di myriadcoin + Conferma l'invio di bitcoin - - Are you sure you want to send %1? - Si è sicuri di voler spedire %1? + %1 to %2 + %1 a %2 - - and - e + Copy quantity + Copia quantità + + + Copy amount + Copia l'importo + + + Copy fee + Copia commissione + + + Copy after fee + Copia dopo commissione + + + Copy bytes + Copia byte + + + Copy priority + Copia priorità + + + Copy low output + Copia low output + + + Copy change + Copia resto + + + Total Amount %1 (= %2) + Importo Totale %1 (= %2) + + + or + o - The recipient address is not valid, please recheck. - L'indirizzo del beneficiario non è valido, per cortesia controlla. + L'indirizzo del beneficiario non è valido, si prega di ricontrollare. - The amount to pay must be larger than 0. L'importo da pagare dev'essere maggiore di 0. - The amount exceeds your balance. - L'importo è superiore al saldo attuale + L'importo è superiore al tuo saldo attuale - The total exceeds your balance when the %1 transaction fee is included. - Il totale è superiore al saldo attuale includendo la commissione %1. + Il totale è superiore al tuo saldo attuale includendo la commissione di %1. - Duplicate address found, can only send to each address once per send operation. - Trovato un indirizzo doppio, si può spedire solo una volta a ciascun indirizzo in una singola operazione. + Rilevato un indirizzo duplicato, è possibile inviare myriadcoin una sola volta agli indirizzi durante un'operazione di invio. - - Error: Transaction creation failed! - Errore: Creazione transazione fallita! + Transaction creation failed! + Creazione transazione fallita! - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Errore: la transazione è stata rifiutata. Ciò accade se alcuni myriadcoin nel portamonete sono stati già spesi, ad esempio se è stata usata una copia del file wallet.dat e i myriadcoin sono stati spesi dalla copia ma non segnati come spesi qui. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + La transazione è stata rifiutata! Questo può accadere se alcuni myriadcoin nel tuo portamonete sono già stati spesi, ad esempio se hai utilizzato una copia del file wallet.dat per spendere myriadcoin e questi non sono stati considerati spesi dal portamonete corrente. + + + Warning: Invalid Myriadcoin address + Attenzione: Indirizzo Myriadcoin non valido + + + (no label) + (nessuna etichetta) + + + Warning: Unknown change address + Attenzione: Indirizzo per il resto sconosciuto + + + Are you sure you want to send? + Sei sicuro di voler inviare? + + + added as transaction fee + aggiunto come tassa di transazione + + + Payment request expired + Richiesta di pagamento scaduta + + + Invalid payment address %1 + Indirizzo di pagamento non valido %1 SendCoinsEntry - - Form - Modulo - - - A&mount: &Importo: - Pay &To: Paga &a: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) L'indirizzo del beneficiario a cui inviare il pagamento (ad esempio 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book Inserisci un'etichetta per questo indirizzo, per aggiungerlo nella rubrica - &Label: &Etichetta - - Choose address from address book - Scegli l'indirizzo dalla rubrica + Choose previously used address + Scegli un indirizzo usato precedentemente + + + This is a normal payment. + Questo è un normale pagamento. - Alt+A Alt+A - Paste address from clipboard Incollare l'indirizzo dagli appunti - Alt+P Alt+P - - Remove this recipient - Rimuovere questo beneficiario + Remove this entry + Rimuovi questa voce - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Inserisci un indirizzo Myriadcoin (ad esempio 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + Messaggio: + + + This is a verified payment request. + Questa è una richiesta di pagamento verificata. + + + Enter a label for this address to add it to the list of used addresses + Inserisci un'etichetta per questo indirizzo per aggiungerlo alla lista degli indirizzi utilizzati + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + Messaggio incluso nel myriadcoin URI e che sarà memorizzato con la transazione per vostro riferimento. Nota: Questo messaggio non sarà inviato attraverso la rete Myriadcoin. + + + This is an unverified payment request. + Questa è una richiesta di pagamento non verificata. + + + Pay To: + Pagare a: + + + Memo: + Memo: + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + Arresto di Myriadcoin Core in corso... + + + Do not shut down the computer until this window disappears. + Non spegnere il computer fino a quando questa finestra non si sarà chiusa. SignVerifyMessageDialog - Signatures - Sign / Verify a Message Firme - Firma / Verifica un messaggio - &Sign Message &Firma il messaggio - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. - Puoi firmare messeggi con i tuoi indirizzi per dimostrare che sono tuoi. Fai attenzione a non firmare niente di vago, visto che gli attacchi di phishing potrebbero cercare di spingerti a mettere la tua firma su di loro. Firma solo dichiarazioni completamente dettagliate con cui sei d'accordo. + Puoi firmare messaggi con i tuoi indirizzi in modo da dimostrarne il possesso. Presta attenzione a non firmare dichiarazioni vaghe, attacchi di phishing potrebbero cercare di spingerti ad apporre la tua firma su di esse. Firma solo dichiarazioni completamente dettagliate e delle quali condividi in pieno il contenuto. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Inserisci un indirizzo Myriadcoin (ad esempio 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + L'indirizzo con cui firmare il messaggio (ad esempio 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book - Scegli l'indirizzo dalla rubrica + Choose previously used address + Scegli un indirizzo usato precedentemente - - Alt+A Alt+A - Paste address from clipboard - Incollare l'indirizzo dagli appunti + Incolla l'indirizzo dagli appunti - Alt+P Alt+P - Enter the message you want to sign here Inserisci qui il messaggio che vuoi firmare - Signature Firma - Copy the current signature to the system clipboard Copia la firma corrente nella clipboard - Sign the message to prove you own this Myriadcoin address Firma un messaggio per dimostrare di possedere questo indirizzo - Sign &Message - Firma &messaggio + Firma &Messaggio - Reset all sign message fields - Reimposta tutti i campi della firma + Reimposta tutti i campi della firma messaggio - - Clear &All Cancella &tutto - &Verify Message &Verifica Messaggio - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. - + Inserisci l'indirizzo del firmatario, il messaggio (assicurati di copiare esattamente anche i ritorni a capo, gli spazi, le tabulazioni, etc..) e la firma qui sotto, per verificare il messaggio. Presta attenzione a non vedere nella firma più di quanto non sia riportato nel messaggio stesso, per evitare di cadere vittima di attacchi di tipo man-in-the-middle. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Inserisci un indirizzo Myriadcoin (ad esempio 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + L'indirizzo con cui è stato firmato il messaggio (ad esempio 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address - Verifica il messaggio per assicurarsi che sia stato firmato con l'indirizzo Myriadcoin specificato + Verifica il messaggio per accertare che sia stato firmato con l'indirizzo specificato - Verify &Message - &Verifica Messaggio + Verifica &Messaggio - Reset all verify message fields Reimposta tutti i campi della verifica messaggio - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Inserisci un indirizzo Myriadcoin (ad esempio 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature Clicca "Firma il messaggio" per ottenere la firma - - Enter Myriadcoin signature - Inserisci firma Myriadcoin - - - - The entered address is invalid. L'indirizzo inserito non è valido. - - - - Please check the address and try again. Per favore controlla l'indirizzo e prova ancora - - The entered address does not refer to a key. L'indirizzo myriadcoin inserito non è associato a nessuna chiave. - Wallet unlock was cancelled. - Sblocco del portafoglio annullato. + Sblocco del portamonete annullato. - Private key for the entered address is not available. La chiave privata per l'indirizzo inserito non è disponibile. - Message signing failed. Firma messaggio fallita. - Message signed. Messaggio firmato. - The signature could not be decoded. Non è stato possibile decodificare la firma. - - Please check the signature and try again. Per favore controlla la firma e prova ancora. - The signature did not match the message digest. - La firma non corrisponde al sunto del messaggio. + La firma non corrisponde al digest del messaggio. - Message verification failed. Verifica messaggio fallita. - Message verified. Messaggio verificato. @@ -1650,186 +2129,160 @@ Indirizzo: %4 SplashScreen - - The Myriadcoin developers - Sviluppatori di Myriadcoin + Myriadcoin Core + Myriadcoin Core + + + The Myriadcoin Core developers + Gli sviluppatori del Myriadcoin Core - [testnet] [testnet] + + TrafficGraphWidget + + KB/s + KB/s + + TransactionDesc - Open until %1 Aperto fino a %1 - + conflicted + in conflitto + + %1/offline %1/offline - %1/unconfirmed %1/non confermato - %1 confirmations %1 conferme - Status Stato - , broadcast through %n node(s) , trasmesso attraverso %n nodo, trasmesso attraverso %n nodi - Date Data - Source Sorgente - Generated Generato - - From Da - - - To A - - own address proprio indirizzo - label etichetta - - - - - Credit Credito - matures in %n more block(s) - matura in %n ulteriore bloccomatura in altri %n blocchi + matura tra %n bloccomatura tra %n blocchi - not accepted non accettate - - - - Debit Debito - Transaction fee - Tranzakciós díj + Commissione transazione - Net amount Importo netto - Message Messaggio - Comment Commento - Transaction ID ID della transazione - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Bisogna attendere 120 blocchi prima di spendere I myriadcoin generati. Quando è stato generato questo blocco, è stato trasmesso alla rete per aggiungerlo alla catena di blocchi. Se non riesce a entrare nella catena, verrà modificato in "non accettato" e non sarà spendibile. Questo può accadere a volte, se un altro nodo genera un blocco entro pochi secondi del tuo. + Merchant + Mercante + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + È necessario attendere %1 blocchi prima che i myriadcoin generati possano essere spesi. Quando è stato generato questo blocco, è stato trasmesso alla rete in modo da poter essere aggiunto alla block chain. Se l'inserimento avrà esito negativo il suo stato sarà modificato in "non accettato" e risulterà non spendibile. Questo può occasionalmente accadere se un altro nodo genera un blocco entro pochi secondi dal tuo. - Debug information Informazione di debug - Transaction Transazione - Inputs Input - Amount Importo - true vero - false falso - , has not been successfully broadcast yet , non è stato ancora trasmesso con successo - Open for %n more block(s) Aperto per %n altro bloccoAperto per altri %n blocchi - unknown sconosciuto @@ -1837,12 +2290,10 @@ Indirizzo: %4 TransactionDescDialog - Transaction details Dettagli sulla transazione - This pane shows a detailed description of the transaction Questo pannello mostra una descrizione dettagliata della transazione @@ -1850,117 +2301,102 @@ Indirizzo: %4 TransactionTableModel - Date Data - Type Tipo - Address Indirizzo - Amount Importo + + Immature (%1 confirmations, will be available after %2) + Immaturo (%1 conferme, sarà disponibile fra %2) + - Open for %n more block(s) Aperto per %n altro bloccoAperto per altri %n blocchi - Open until %1 Aperto fino a %1 - - Offline (%1 confirmations) - Offline (%1 conferme) - - - - Unconfirmed (%1 of %2 confirmations) - Non confermati (%1 su %2 conferme) - - - Confirmed (%1 confirmations) Confermato (%1 conferme) - - - Mined balance will be available when it matures in %n more block(s) - Il saldo generato sarà disponibile quando maturerà in %n altro bloccoIl saldo generato sarà disponibile quando maturerà in altri %n blocchi - - This block was not received by any other nodes and will probably not be accepted! - Questo blocco non è stato ricevuto da altri nodi e probabilmente non sarà accettato! + Questo blocco non è stato ricevuto dagli altri nodi e probabilmente non sarà accettato! - Generated but not accepted Generati, ma non accettati - + Offline + Offline + + + Unconfirmed + Non confermato: + + + Confirming (%1 of %2 recommended confirmations) + In conferma (%1 di %2 conferme raccomandate) + + + Conflicted + In conflitto + + Received with Ricevuto tramite - Received from Ricevuto da - Sent to - Spedito a + Inviato a - Payment to yourself Pagamento a te stesso - Mined Ottenuto dal mining - (n/a) (N / a) - Transaction status. Hover over this field to show number of confirmations. - Stato della transazione. Passare con il mouse su questo campo per vedere il numero di conferme. + Stato della transazione. Passare con il mouse su questo campo per visualizzare il numero di conferme. - Date and time that the transaction was received. Data e ora in cui la transazione è stata ricevuta. - Type of transaction. Tipo di transazione. - Destination address of transaction. Indirizzo di destinazione della transazione. - Amount removed from or added to balance. Importo rimosso o aggiunto al saldo. @@ -1968,347 +2404,278 @@ Indirizzo: %4 TransactionView - - All Tutti - Today Oggi - This week Questa settimana - This month Questo mese - Last month Il mese scorso - This year Quest'anno - Range... Intervallo... - Received with Ricevuto tramite - Sent to - Spedito a + Inviato a - To yourself - A te + A te stesso - Mined Ottenuto dal mining - Other Altro - Enter address or label to search Inserisci un indirizzo o un'etichetta da cercare - Min amount Importo minimo - Copy address Copia l'indirizzo - Copy label Copia l'etichetta - Copy amount Copia l'importo - Copy transaction ID - + Copia l'ID transazione - Edit label Modifica l'etichetta - Show transaction details Mostra i dettagli della transazione - - Export Transaction Data - Esporta i dati della transazione + Export Transaction History + Esporta lo storico delle transazioni + + + Exporting Failed + Esportazione Fallita. + + + There was an error trying to save the transaction history to %1. + Si è verificato un errore durante il salvataggio dello storico delle transazioni in %1. + + + Exporting Successful + Esportazione Riuscita + + + The transaction history was successfully saved to %1. + Lo storico delle transazioni e' stato salvato con successo in %1. - Comma separated file (*.csv) Testo CSV (*.csv) - Confirmed Confermato - Date Data - Type Tipo - Label Etichetta - Address Indirizzo - Amount Importo - ID ID - - Error exporting - Errore nell'esportazione - - - - Could not write to file %1. - Impossibile scrivere sul file %1. - - - Range: Intervallo: - to a + + WalletFrame + + No wallet has been loaded. + Non è stato caricato alcun portamonete. + + WalletModel - Send Coins - Spedisci Myriadcoin + Invia Myriadcoin WalletView - &Export - + &Esporta - Export the data in the current tab to a file - Esporta i dati nella tabella corrente su un file + Esporta su file i dati della tabella corrente - Backup Wallet - + Backup Portamonete - Wallet Data (*.dat) - + Dati Portamonete (*.dat) - Backup Failed - Backup fallito + Backup Fallito - - There was an error trying to save the wallet data to the new location. - + There was an error trying to save the wallet data to %1. + Si è verificato un errore durante il salvataggio dei dati del portamonete in %1. + + + The wallet data was successfully saved to %1. + Il portamonete è stato correttamente salvato in %1. - Backup Successful Backup eseguito con successo - - - The wallet data was successfully saved to the new location. - Il portafoglio è stato correttamente salvato nella nuova cartella. - bitcoin-core - - Myriadcoin version - Versione di Myriadcoin - - - Usage: Utilizzo: - - Send command to -server or myriadcoind - Manda il comando a -server o myriadcoind - - - - List commands - Lista comandi - + Elenca comandi - Get help for a command - Aiuto su un comando - + Aiuto su un comando - Options: - Opzioni: - + Opzioni: - Specify configuration file (default: myriadcoin.conf) - Specifica il file di configurazione (di default: myriadcoin.conf) - + Specifica il file di configurazione (predefinito: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) - Specifica il file pid (default: myriadcoind.pid) - + Specifica il file pid (predefinito: myriadcoind.pid) - Specify data directory - Specifica la cartella dati - + Specifica la cartella dati - - Set database cache size in megabytes (default: 25) - Imposta la dimensione cache del database in megabyte (default: 25) - - - Listen for connections on <port> (default: 8333 or testnet: 18333) - Ascolta le connessioni JSON-RPC su <porta> (default: 8333 o testnet: 18333) + Attendi le connessioni su <porta> (predefinita: 8333 o testnet: 18333) - Maintain at most <n> connections to peers (default: 125) - Mantieni al massimo <n> connessioni ai peer (default: 125) + Mantieni al massimo <n> connessioni ai peer (predefinite: 125) - Connect to a node to retrieve peer addresses, and disconnect - Connessione ad un nodo per ricevere l'indirizzo del peer, e disconnessione + Connettiti ad un nodo per recuperare gli indirizzi dei peer e scollegati - Specify your own public address Specifica il tuo indirizzo pubblico - Threshold for disconnecting misbehaving peers (default: 100) - Soglia di disconnessione dei peer di cattiva qualità (default: 100) + Soglia di disconnessione dei peer di cattiva qualità (predefinita: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Numero di secondi di sospensione che i peer di cattiva qualità devono trascorrere prima di riconnettersi (default: 86400) + Numero di secondi di sospensione che i peer di cattiva qualità devono attendere prima di potersi riconnettere (predefiniti: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s Errore riscontrato durante l'impostazione della porta RPC %u per l'ascolto su IPv4: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) - Attendi le connessioni JSON-RPC su <porta> (default: 8332 or testnet: 18332) + Attendi le connessioni JSON-RPC su <porta> (predefinita: 8332 or testnet: 18332) - Accept command line and JSON-RPC commands - Accetta da linea di comando e da comandi JSON-RPC - + Accetta comandi da riga di comando e JSON-RPC + + + Myriadcoin Core RPC client version + Versione client RPC di Myriadcoin Core - Run in the background as a daemon and accept commands - Esegui in background come demone e accetta i comandi - + Esegui in background come demone ed accetta i comandi - Use the test network - Utilizza la rete di prova - + Utilizza la rete di prova - Accept connections from outside (default: 1 if no -proxy or -connect) - Accetta connessioni dall'esterno (default: 1 se no -proxy o -connect) + Accetta connessioni dall'esterno (predefinito: 1 se no -proxy o -connect) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2320,631 +2687,711 @@ If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com - + %s, devi impostare una rpcpassword nel file di configurazione: +%s +Si raccomanda l'uso della seguente password generata casualmente: +rpcuser=myriadcoinrpc +rpcpassword=%s +(non serve ricordare questa password) +Il nome utente e la password NON DEVONO essere uguali. +Se il file non esiste, crealo concedendo permessi di lettura al solo proprietario del file. +Si raccomanda anche di impostare alertnotify così sarai avvisato di eventuali problemi; +ad esempio: alertnotify=echo %%s | mail -s "Allarme Bitcoin" admin@foo.com + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + Cifrature accettabili (predefinito: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s Errore riscontrato durante l'impostazione della porta RPC %u per l'ascolto su IPv6, tornando su IPv4: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 - Collega all'indirizzo indicato e resta sempre in ascolto su questo. Usa la notazione [host]:porta per l'IPv6 + Associa all'indirizzo indicato e resta permanentemente in ascolto su questo. Usa la notazione [host]:porta per l'IPv6 - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. - Non è possibile ottenere i dati sulla cartella %s. Probabilmente Myriadcoin è già in esecuzione. + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + Limita la quantità di transazioni gratuite ad <n>*1000 byte al minuto (predefinito: 15) + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + Entra in modalità di test di regressione, la quale usa una speciale catena in cui i blocchi sono risolti istantaneamente. Questo è fatto per lo sviluppo di strumenti e applicazioni per test di regressione. + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + Entra in modalità di test di regressione, la quale usa una speciale catena in cui i blocchi possono essere risolti istantaneamente. + + + Error: Listening for incoming connections failed (listen returned error %d) + Errore: l'ascolto per le connessioni in ingresso non è riuscito (errore riportato %d) - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Errore: la transazione è stata rifiutata. Ciò accade se alcuni myriadcoin nel portamonete sono stati già spesi, ad esempio se è stata usata una copia del file wallet.dat e i myriadcoin sono stati spesi dalla copia ma non segnati come spesi qui. + Errore: la transazione è stata rifiutata! Questo può accadere se alcuni myriadcoin nel tuo portamonete sono già stati spesi, ad esempio se hai utilizzato una copia del file wallet.dat per spendere myriadcoin e questi non sono stati considerati spesi dal portamonete corrente. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! Errore: questa transazione necessita di una commissione di almeno %s a causa del suo ammontare, della sua complessità, o dell'uso di fondi recentemente ricevuti! - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - Esegui comando quando una transazione del portafoglio cambia (%s in cmd è sostituito da TxID) + Esegui comando quando una transazione del portamonete cambia (%s in cmd è sostituito da TxID) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - Imposta dimensione massima delle transazioni ad alta priorità/bassa-tassa in bytes (predefinito: 27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + Le commissioni inferiori a questo valore saranno considerate nulle (per la creazione della transazione) (prefedinito: + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + Scarica l'attività del database dalla memoria al log su disco ogni <n> megabytes (predefinito: 100) + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + Determina quanto sarà approfondita la verifica da parte di -checkblocks (0-4, predefinito: 3) + + + In this mode -genproclimit controls how many blocks are generated immediately. + In questa modalità -genproclimit determina quanti blocchi saranno generati immediatamente. + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + 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) + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + Imposta il limite della cpu quando la generazione è abilitata (-1 = non limitato, predefinito: -1) - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications Questa versione è una compilazione pre-rilascio - usala a tuo rischio - non utilizzarla per la generazione o per applicazioni di commercio - + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + Impossibile associarsi a %s su questo computer. Probabilmente Myriadcoin Core è già in esecuzione. + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + Usa un SOCKS5 proxy separato per raggiungere servizi nascosti di Tor (predefinito: -proxy) + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Attenzione: -paytxfee è molto alta. Questa è la commissione che si paga quando si invia una transazione. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - Attenzione: le transazioni mostrate potrebbero essere sbagliate! Potresti aver bisogno di aggiornare, o altri nodi ne hanno bisogno. - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. - Attenzione: si prega di controllare che la data del computer e l'ora siano corrette. Se il vostro orologio è sbagliato Myriadcoin non funziona correttamente. + Attenzione: si prega di controllare che la data e l'ora del computer siano corrette. Se l'ora di sistema è errata Myriadcoin non funzionerà correttamente. + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + Attenzione: La rete non sembra essere d'accordo pienamente! Alcuni minatori sembrano riscontrare problemi. + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + Attenzione: Sembra che non ci sia completo accordo con i nostri peer! Un aggiornamento da parte tua o degli altri nodi potrebbe essere necessario. - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Attenzione: errore di lettura di wallet.dat! Tutte le chiave lette correttamente, ma i dati delle transazioni o le voci in rubrica potrebbero mancare o non essere corretti. + Attenzione: errore di lettura di wallet.dat! Tutte le chiavi sono state lette correttamente, ma i dati delle transazioni o le voci in rubrica potrebbero mancare o non essere corretti. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - Attenzione: wallet.dat corrotto, dati salvati! Il wallet.dat originale salvato come wallet.{timestamp}.bak in %s; se il tuo bilancio o le transazioni non sono corrette dovresti ripristinare da un backup. + Attenzione: wallet.dat corrotto, dati recuperati! Il wallet.dat originale è stato salvato come wallet.{timestamp}.bak in %s; se il tuo saldo o le transazioni non sono corrette dovresti ripristinare da un backup. + + + (default: 1) + (predefinito: 1) + + + (default: wallet.dat) + (predefinito: wallet.dat) + + + <category> can be: + <category> può essere: - Attempt to recover private keys from a corrupt wallet.dat Tenta di recuperare le chiavi private da un wallet.dat corrotto - + Myriadcoin Core Daemon + Myriadcoin Core Daemon + + Block creation options: Opzioni creazione blocco: - + Clear list of wallet transactions (diagnostic tool; implies -rescan) + Cancella elenco delle transazioni sul portamonete (strumento di diagnostica; implica -rescan) + + Connect only to the specified node(s) Connetti solo al nodo specificato - + Connect through SOCKS proxy + Connetti attraverso SOCKS proxy + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + Connetti al JSON-RPC su <port> (predefinita: 8332 o testnet: 18332) + + + Connection options: + Opzioni di connessione: + + Corrupted block database detected Rilevato database blocchi corrotto - - Discover own IP address (default: 1 when listening and no -externalip) - Scopri proprio indirizzo IP (default: 1 se in ascolto e no -externalip) + Debugging/Testing options: + Opzioni di Debug/Test: + + + Disable safemode, override a real safe mode event (default: 0) + Disabilita la modalità sicura, escludi effettivamente gli eventi di modalità sicura (predefinito: 0) + + + Discover own IP address (default: 1 when listening and no -externalip) + Scopre il proprio indirizzo IP (predefinito: 1 se in ascolto e no -externalip) + + + Do not load the wallet and disable wallet RPC calls + Non caricare il portamonete e disabilita le chiamate RPC al portamonete - Do you want to rebuild the block database now? Vuoi ricostruire ora il database dei blocchi? - Error initializing block database - + Errore durante l'inizializzazione del database dei blocchi - Error initializing wallet database environment %s! - + Errore durante l'inizializzazione dell'ambiente %s del database del portamonete! - Error loading block database Errore caricamento database blocchi - Error opening block database Errore caricamento database blocchi - Error: Disk space is low! - Errore: la spazio libero sul disco è poco! + Errore: la spazio libero sul disco è insufficiente! - Error: Wallet locked, unable to create transaction! - Errore: portafoglio bloccato, impossibile creare la transazione! + Errore: portamonete bloccato, impossibile creare la transazione! - Error: system error: Errore: errore di sistema: - Failed to listen on any port. Use -listen=0 if you want this. - Impossibile mettersi in ascolto su una porta. Usa -listen=0 se vuoi usare questa opzione. + Nessuna porta disponibile per l'ascolto. Usa -listen=0 se vuoi procedere comunque. - Failed to read block info Lettura informazioni blocco fallita - Failed to read block Lettura blocco fallita - Failed to sync block index - + Sincronizzazione dell'indice del blocco fallita - Failed to write block index - + Scrittura dell'indice del blocco fallita - Failed to write block info Scrittura informazioni blocco fallita - Failed to write block Scrittura blocco fallita - Failed to write file info Scrittura informazioni file fallita - Failed to write to coin database Scrittura nel database dei myriadcoin fallita - Failed to write transaction index - + Scrittura dell'indice di transazione fallita - Failed to write undo data - + Scrittura dei dati di ripristino fallita + + + Fee per kB to add to transactions you send + Commissione per kB da aggiungere alle transazioni in uscita + + + Fees smaller than this are considered zero fee (for relaying) (default: + Le commissioni inferiori a questo valore saranno considerate nulle (per la trasmissione) (prefedinito: - Find peers using DNS lookup (default: 1 unless -connect) - Trova peer utilizzando la ricerca DNS (predefinito: 1 finché utilizzato -connect) + Trova peer utilizzando la ricerca DNS (predefinito: 1 a meno che non si usi -connect) + + + Force safe mode (default: 0) + Forza modalità provvisoria (predefinito: 0) - Generate coins (default: 0) - + Genera Myriadcoin (predefinito: 0) - How many blocks to check at startup (default: 288, 0 = all) - Quanti blocchi da controllare all'avvio (predefinito: 288, 0 = tutti) + Numero di blocchi da controllare all'avvio (predefinito: 288, 0 = tutti) - - How thorough the block verification is (0-4, default: 3) - + If <category> is not supplied, output all debugging information. + Se <category> non è specificata, mostra tutte le informazioni di debug. + + + Importing... + Importazione... + + + Incorrect or no genesis block found. Wrong datadir for network? + Blocco genesis non corretto o non trovato. Cartella dati errata? + + + Invalid -onion address: '%s' + Indirizzo -onion non valido: '%s' - Not enough file descriptors available. - + Non ci sono abbastanza descrittori di file disponibili. + + + Prepend debug output with timestamp (default: 1) + Preponi timestamp all'output di debug (predefinito: 1) + + + RPC client options: + Opzioni client RPC: - Rebuild block chain index from current blk000??.dat files - + Ricreare l'indice della catena di blocchi dai file blk000??.dat correnti + + + Select SOCKS version for -proxy (4 or 5, default: 5) + Selezionare la versione SOCKS per -proxy (4 o 5, predefinito: 5) + + + Set database cache size in megabytes (%d to %d, default: %d) + Imposta la dimensione cache del database in megabyte (%d a %d, predefinito: %d) + + + Set maximum block size in bytes (default: %d) + Imposta la dimensione massima del blocco in byte (predefinita: %d) - Set the number of threads to service RPC calls (default: 4) - + Specifica il numero massimo di richieste RPC in parallelo (predefinito: 4) + + + Specify wallet file (within data directory) + Specifica il file portamonete (all'interno della cartella dati) + + + Spend unconfirmed change when sending transactions (default: 1) + Spendi il resto non confermato quando si inviano transazioni (predefinito: 1) + + + This is intended for regression testing tools and app development. + Questo è previsto per l'uso con test di regressione e per lo sviluppo di applicazioni. + + + Usage (deprecated, use myriadcoin-cli): + Usage (deprecato, usare myriadcoin-cli): - Verifying blocks... Verifica blocchi... - Verifying wallet... - Verifica portafoglio... + Verifica portamonete... + + + Wait for RPC server to start + Attendere l'avvio dell'RPC server + + + Wallet %s resides outside data directory %s + Il portamonete %s si trova al di fuori dalla cartella dati %s + + + Wallet options: + Opzioni portamonete: + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + Attenzione: Argomento deprecato -debugnet ignorato, usare -debug=net + + + You need to rebuild the database using -reindex to change -txindex + È necessario ricostruire il database usando -reindex per cambiare -txindex - Imports blocks from external blk000??.dat file Importa blocchi da un file blk000??.dat esterno - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) - + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + Non è possibile ottenere un lock sulla cartella %s. Probabilmente Myriadcoin Core è già in esecuzione. + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + Esegue un comando quando viene ricevuto un allarme rilevante o quando vediamo un fork veramente lungo (%s in cmd è sostituito dal messaggio) + + + Output debugging information (default: 0, supplying <category> is optional) + Emette informazioni di debug in output (predefinito: 0, fornire <category> è opzionale) + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + Imposta la dimensione massima in byte delle transazioni ad alta-priorità/basse-commissioni (predefinita: %d) - Information - Informazione + Informazioni - - Invalid -tor address: '%s' - Indirizzo -tor non valido: '%s' - - - Invalid amount for -minrelaytxfee=<amount>: '%s' - + Importo non valido per -minrelaytxfee=<amount>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' - + Importo non valido per -mintxfee=<amount>: '%s' + + + Limit size of signature cache to <n> entries (default: 50000) + Limita la dimensione della cache delle firme a <n> voci (predefinito: 50000) + + + Log transaction priority and fee per kB when mining blocks (default: 0) + Abilita il log della priorità di transazione e della commissione per kB quando si generano blocchi (default: 0) - Maintain a full transaction index (default: 0) - + Mantieni un indice di transazione completo (predefinito: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Buffer di ricezione massimo per connessione, <n>*1000 byte (default: 5000) + Buffer di ricezione massimo per connessione, <n>*1000 byte (predefinito: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Buffer di invio massimo per connessione, <n>*1000 byte (default: 1000) + Buffer di invio massimo per connessione, <n>*1000 byte (predefinito: 1000) - Only accept block chain matching built-in checkpoints (default: 1) - + Accetta solo una catena di blocchi che corrisponde ai checkpoint predefiniti (predefinito: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Connetti solo a nodi nella rete <net> (IPv4, IPv6 o Tor) - - Output extra debugging information. Implies all other -debug* options - Produci informazioni extra utili al debug. Implies all other -debug* options + Print block on startup, if found in block index + Stampa il blocco all'avvio, se presente nell'indice dei blocchi - - Output extra network debugging information - Genera informazioni extra utili al debug della rete + Print block tree on startup (default: 0) + Stampa l'albero dei blocchi all'avvio (default: 0) - - Prepend debug output with timestamp - Anteponi all'output di debug una marca temporale + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + Opzioni RPC SSL: (consulta la Myriadcoin Wiki per le istruzioni relative alla configurazione SSL) + + + RPC server options: + Opzioni server RPC: + + + Randomly drop 1 of every <n> network messages + Scarta casualmente 1 ogni <n> messaggi di rete + + + Randomly fuzz 1 of every <n> network messages + Altera casualmente 1 ogni <n> messaggi di rete + + + Run a thread to flush wallet periodically (default: 1) + Mantieni in esecuzione un thread per scaricare periodicamente il portafoglio (predefinito: 1) - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) Opzioni SSL: (vedi il wiki di Myriadcoin per le istruzioni di configurazione SSL) - - Select the version of socks proxy to use (4-5, default: 5) - Selezionare la versione del proxy socks da usare (4-5, default: 5) + Send command to Myriadcoin Core + Invia comando a Myriadcoin Core - Send trace/debug info to console instead of debug.log file Invia le informazioni di trace/debug alla console invece che al file debug.log - - Send trace/debug info to debugger - Invia le informazioni di trace/debug al debugger - - - - Set maximum block size in bytes (default: 250000) - Imposta dimensione massima del blocco in bytes (predefinito: 250000) - - - Set minimum block size in bytes (default: 0) - Imposta dimensione minima del blocco in bytes (predefinito: 0) + Imposta dimensione minima del blocco in bytes (predefinita: 0) + + + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + Imposta il flag DB_PRIVATE nell'ambiente di database del portamonete (predefinito: 1) + + + Show all debugging options (usage: --help -help-debug) + Mostra tutte le opzioni di debug (utilizzo: --help -help-debug) + + + Show benchmark information (default: 0) + Visualizza le informazioni relative al benchmark (predefinito: 0) - Shrink debug.log file on client startup (default: 1 when no -debug) Riduci il file debug.log all'avvio del client (predefinito: 1 se non impostato -debug) - Signing transaction failed - + Transazione di firma fallita - Specify connection timeout in milliseconds (default: 5000) - Specifica il timeout di connessione in millisecondi (default: 5000) + Specifica il timeout di connessione in millisecondi (predefinito: 5000) + + + Start Myriadcoin Core Daemon + Avvia Myriadcoin Core Daemon - System error: Errore di sistema: - Transaction amount too small - + Importo transazione troppo piccolo - Transaction amounts must be positive - + L'importo della transazione deve essere positivo - Transaction too large - + Transazione troppo grande - Use UPnP to map the listening port (default: 0) - UPnP-használat engedélyezése a figyelő port feltérképezésénél (default: 0) + Usa UPnP per mappare la porta in ascolto (predefinito: 0) - Use UPnP to map the listening port (default: 1 when listening) - UPnP-használat engedélyezése a figyelő port feltérképezésénél (default: 1 when listening) + Usa UPnP per mappare la porta in ascolto (predefinito: 1 when listening) - - Use proxy to reach tor hidden services (default: same as -proxy) - Usa un proxy per raggiungere servizi nascosti di tor (predefinito: uguale a -proxy) - - - Username for JSON-RPC connections Nome utente per connessioni JSON-RPC - Warning Attenzione - Warning: This version is obsolete, upgrade required! Attenzione: questa versione è obsoleta, aggiornamento necessario! - - You need to rebuild the databases using -reindex to change -txindex - + Zapping all transactions from wallet... + Cancella e ricompila tutte le transazioni dal wallet... + + + on startup + all'avvio + + + version + versione - wallet.dat corrupt, salvage failed - wallet.dat corrotto, salvataggio fallito + wallet.dat corrotto, recupero fallito - Password for JSON-RPC connections Password per connessioni JSON-RPC - Allow JSON-RPC connections from specified IP address Consenti connessioni JSON-RPC dall'indirizzo IP specificato - Send commands to node running on <ip> (default: 127.0.0.1) - Inviare comandi al nodo in esecuzione su <ip> (default: 127.0.0.1) - + Inviare comandi al nodo in esecuzione su <ip> (predefinito: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) - Esegui il comando quando il miglior block cambia(%s nel cmd è sostituito dall'hash del blocco) + Esegui il comando quando il migliore blocco cambia(%s nel cmd è sostituito dall'hash del blocco) - Upgrade wallet to latest format Aggiorna il wallet all'ultimo formato - Set key pool size to <n> (default: 100) - Impostare la quantità di chiavi di riserva a <n> (default: 100) - + Impostare la quantità di chiavi nel key pool a <n> (predefinita: 100) - Rescan the block chain for missing wallet transactions - Ripeti analisi della catena dei blocchi per cercare le transazioni mancanti dal portamonete + Ripeti analisi della catena dei blocchi per cercare le transazioni mancanti dal portamonete - Use OpenSSL (https) for JSON-RPC connections - Utilizzare OpenSSL (https) per le connessioni JSON-RPC + Utilizzare OpenSSL (https) per le connessioni JSON-RPC - Server certificate file (default: server.cert) - File certificato del server (default: server.cert) - + File certificato del server (predefinito: server.cert) - Server private key (default: server.pem) - Chiave privata del server (default: server.pem) - + Chiave privata del server (predefinito: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Cifrari accettabili (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - This help message Questo messaggio di aiuto - Unable to bind to %s on this computer (bind returned error %d, %s) - Impossibile collegarsi alla %s su questo computer (bind returned error %d, %s) + Impossibile associarsi alla %s su questo computer (bind returned error %d, %s) - - Connect through socks proxy - Connessione tramite socks proxy - - - Allow DNS lookups for -addnode, -seednode and -connect - Consenti ricerche DNS per aggiungere nodi e collegare - + Consenti ricerche DNS per -addnode, -seednode e -connect - Loading addresses... Caricamento indirizzi... - Error loading wallet.dat: Wallet corrupted - Errore caricamento wallet.dat: Wallet corrotto + Errore caricamento wallet.dat: Portamonete corrotto - Error loading wallet.dat: Wallet requires newer version of Myriadcoin - Errore caricamento wallet.dat: il wallet richiede una versione nuova di Myriadcoin + Errore caricamento wallet.dat: il portamonete richiede una versione di Myriadcoin più recente - Wallet needed to be rewritten: restart Myriadcoin to complete - Il portamonete deve essere riscritto: riavviare Myriadcoin per completare + Il portamonete necessitava di essere riscritto: riavviare Myriadcoin per completare - Error loading wallet.dat Errore caricamento wallet.dat - Invalid -proxy address: '%s' Indirizzo -proxy non valido: '%s' - Unknown network specified in -onlynet: '%s' Rete sconosciuta specificata in -onlynet: '%s' - Unknown -socks proxy version requested: %i Versione -socks proxy sconosciuta richiesta: %i - Cannot resolve -bind address: '%s' Impossibile risolvere -bind address: '%s' - Cannot resolve -externalip address: '%s' Impossibile risolvere indirizzo -externalip: '%s' - Invalid amount for -paytxfee=<amount>: '%s' Importo non valido per -paytxfee=<amount>: '%s' - Invalid amount Importo non valido - Insufficient funds Fondi insufficienti - Loading block index... Caricamento dell'indice del blocco... - Add a node to connect to and attempt to keep the connection open - Elérendő csomópont megadása and attempt to keep the connection open + Aggiunge un nodo a cui connettersi e tenta di tenere aperta la connessione - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - Impossibile collegarsi alla %s su questo computer. Probabilmente Myriadcoin è già in esecuzione. - - - - Fee per KB to add to transactions you send - Commissione per KB da aggiungere alle transazioni in uscita - - - Loading wallet... Caricamento portamonete... - Cannot downgrade wallet - Non è possibile retrocedere il wallet + Non è possibile effettuare il downgrade del portamonete - Cannot write default address - Non è possibile scrivere l'indirizzo di default + Non è possibile scrivere l'indirizzo predefinito - Rescanning... - Ripetere la scansione... + Ripetizione scansione... - Done loading Caricamento completato - To use the %s option - Per usare la opzione %s + Per usare l'opzione %s - Error Errore - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. - Devi settare rpcpassword=<password> nel file di configurazione: %s Se il file non esiste, crealo con i permessi di amministratore + Devi settare rpcpassword=<password> nel file di configurazione: +%s +Se il file non esiste, crealo assegnando i permessi di lettura solamente al proprietario. \ No newline at end of file diff --git a/src/qt/locale/bitcoin_ja.ts b/src/qt/locale/bitcoin_ja.ts index 1440e013..55201273 100644 --- a/src/qt/locale/bitcoin_ja.ts +++ b/src/qt/locale/bitcoin_ja.ts @@ -1,175 +1,151 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - Myriadcoinについて + About Myriadcoin Core + - - <b>Myriadcoin</b> version - <b>Myriadcoin</b> バージョン + <b>Myriadcoin Core</b> version + <b>ビットコインコア</b> バージョン - This is experimental software. Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - + +これは実験的なソフトウェアです。 + +MIT/X11 ソフトウェア ライセンスの下で配布されています。詳しくは添付の COPYING ファイルやhttp://www.opensource.org/licenses/mit-license.php を参照してください。 + +この製品は OpenSSL Toolkit (http://www.openssl.org/) に用いられる Eric Young (eay@cryptsoft.com) が開発した暗号化ソフトウェアと Thomas Bernard が開発した UPnP ソフトウェアを含んでいます。 - Copyright - + Copyright - - The Myriadcoin developers + The Myriadcoin Core developers + ビットコインコアの開発者 + + + (%1-bit) AddressBookPage - - Address Book - アドレス帳 - - - Double-click to edit address or label アドレスまたはラベルを編集するにはダブルクリック - Create a new address 新規アドレスの作成 - + &New + 新規(&N) + + Copy the currently selected address to the system clipboard 現在選択されているアドレスをシステムのクリップボードにコピーする - - &New Address - + &Copy + コピー(&C) - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - + C&lose + 閉じる(&C) - &Copy Address - + アドレスをコピー (&C) - - Show &QR Code - - - - - Sign a message to prove you own a Myriadcoin address - - - - - Sign &Message - - - - Delete the currently selected address from the list - + 選択されたアドレスを一覧から削除する - Export the data in the current tab to a file - + ファイルに現在のタブのデータをエクスポート - &Export - + エクスポート (&E) - - Verify a message to ensure it was signed with a specified Myriadcoin address - - - - - &Verify Message - - - - &Delete 削除(&D) - + Choose the address to send coins to + 送信先のアドレスを選択 + + + Choose the address to receive coins with + 支払いを受け取るアドレスを指定する + + + C&hoose + 選択(&C) + + + Sending addresses + アドレス送信中 + + + Receiving addresses + アドレス受信中 + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + これらは支払いを送信するためのあなたの Myriadcoin アドレスです。コインを送信する前に、常に額と受信アドレスを確認してください。 + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. - Copy &Label - + ラベルをコピー (&L) - &Edit - + 編集 (&E) - - Send &Coins - + Export Address List + アドレス帳をエクスポート - - Export Address Book Data - アドレス帳データをエクスポートする - - - Comma separated file (*.csv) CSVファイル (*.csv) - - Error exporting - エクスポートエラー + Exporting Failed + エクスポート失敗 - - Could not write to file %1. - %1のファイルに書き込めませんでした。 + There was an error trying to save the address list to %1. + AddressTableModel - Label ラベル - Address アドレス - (no label) (ラベル無し) @@ -177,2117 +153,2528 @@ This product includes software developed by the OpenSSL Project for use in the O AskPassphraseDialog - Passphrase Dialog - + パスフレーズ ダイアログ - Enter passphrase パスフレーズを入力 - New passphrase 新しいパスフレーズ - Repeat new passphrase 新しいパスフレーズをもう一度 - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. ウォレットの新しいパスフレーズを入力してください。<br/><b>8個以上の単語か10個以上のランダムな文字</b>を使ってください。 - Encrypt wallet ウォレットを暗号化する - This operation needs your wallet passphrase to unlock the wallet. この操作はウォレットをアンロックするためにパスフレーズが必要です。 - Unlock wallet ウォレットをアンロックする - This operation needs your wallet passphrase to decrypt the wallet. この操作はウォレットの暗号化解除のためにパスフレーズが必要です。 - Decrypt wallet ウォレットの暗号化を解除する - Change passphrase パスフレーズの変更 - Enter the old and new passphrase to the wallet. 新旧両方のパスフレーズを入力してください。 - Confirm wallet encryption ウォレットの暗号化を確認する - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! - + 警告: もしもあなたのウォレットを暗号化してパスフレーズを失ってしまったなら、<b>あなたの Myriadcoin はすべて失われます</b>! - Are you sure you wish to encrypt your wallet? - + 本当にウォレットを暗号化しますか? - 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. - + 重要: 過去のウォレット ファイルのバックアップは、暗号化された新しいウォレット ファイルに取り替える必要があります。セキュリティ上の理由により、暗号化された新しいウォレットを使い始めると、暗号化されていないウォレット ファイルのバックアップはすぐに使えなくなります。 - - Warning: The Caps Lock key is on! - + 警告: Caps Lock キーがオンになっています! - - Wallet encrypted ウォレットは暗号化されました - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. - + Myriadcoin は暗号化プロセスを終了するために今すぐ終了します。あなたのコンピュータがマルウェアに感染してコインを盗まれることもあるので、暗号化してもあなたのウォレットを完全に保護できないことを覚えていてください。 - - - - Wallet encryption failed ウォレットの暗号化に失敗しました - Wallet encryption failed due to an internal error. Your wallet was not encrypted. 内部エラーによりウォレットの暗号化が失敗しました。ウォレットは暗号化されませんでした。 - - The supplied passphrases do not match. パスフレーズが同じではありません。 - Wallet unlock failed ウォレットのアンロックに失敗しました - - - The passphrase entered for the wallet decryption was incorrect. ウォレットの暗号化解除のパスフレーズが正しくありません。 - Wallet decryption failed ウォレットの暗号化解除に失敗しました - Wallet passphrase was successfully changed. - + ウォレットのパスフレーズの変更が成功しました。 BitcoinGUI - Sign &message... - + メッセージの署名... (&m) - Synchronizing with network... ネットワークに同期中…… - &Overview 概要(&O) - + Node + ノード + + Show general overview of wallet ウォレットの概要を見る - &Transactions 取引(&T) - Browse transaction history 取引履歴を閲覧 - - Edit the list of stored addresses and labels - 保存されたアドレスとラベルのリストを編集 - - - - Show the list of addresses for receiving payments - 支払い受け取り用アドレスのリストを見る - - - E&xit - + 終了(&E) - Quit application アプリケーションを終了 - Show information about Myriadcoin - Myriadcoinに関する情報を見る + Bitcoinに関する情報を見る - About &Qt - + Qt について(&Q) - Show information about Qt - + Qt の情報を表示 - &Options... - オプション(&O) + オプション... (&O) - &Encrypt Wallet... - + ウォレットの暗号化... (&E) - &Backup Wallet... - + ウォレットのバックアップ... (&B) - &Change Passphrase... - + パスフレーズの変更... (&C) + + + &Sending addresses... + 送金先アドレス一覧 (&S)... + + + &Receiving addresses... + 受け取り用アドレス一覧 (&R)... + + + Open &URI... + URI を開く (&U)... - Importing blocks from disk... - + ディスクからブロックをインポートしています... - Reindexing blocks on disk... - + ディスク上のブロックのインデックスを再作成中... - Send coins to a Myriadcoin address - + Myriadcoin アドレスにコインを送る - Modify configuration options for Myriadcoin - + Myriadcoin の設定を変更する - Backup wallet to another location - + ウォレットを他の場所にバックアップ - Change the passphrase used for wallet encryption ウォレット暗号化用パスフレーズの変更 - &Debug window - + デバッグ ウインドウ (&D) - Open debugging and diagnostic console - + デバッグと診断コンソールを開く - &Verify message... - + メッセージの検証... (&V) - - Myriadcoin - + Myriadcoin - Wallet - + ウォレット - &Send - + 送る (&S) - &Receive - + 受信 (&R) - - &Addresses - - - - - &About Myriadcoin - - - - &Show / Hide - + 見る/隠す (&S) - Show or hide the main Window - + メイン ウインドウを表示または非表示 - Encrypt the private keys that belong to your wallet - + あなたのウォレットの秘密鍵を暗号化します - Sign messages with your Myriadcoin addresses to prove you own them - + あなたが所有していることを証明するために、あなたの Myriadcoin アドレスでメッセージに署名してください - Verify messages to ensure they were signed with specified Myriadcoin addresses - + 指定された Myriadcoin アドレスで署名されたことを確認するためにメッセージを検証します - &File ファイル(&F) - &Settings 設定(&S) - &Help ヘルプ(&H) - Tabs toolbar タブツールバー - - [testnet] [testnet] - + Myriadcoin Core + Myriadcoin のコア + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + ビットコインコアについて (&A) + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + 支払いを受け取るアドレスとラベルのリストを表示する + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + コマンドラインオプション (&C) + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + Myriadcoin client - + Myriadcoin クライアント - %n active connection(s) to Myriadcoin network - + %n の Myriadcoin ネットワークへのアクティブな接続 - No block source available... - + 利用可能なブロックがありません... - Processed %1 of %2 (estimated) blocks of transaction history. - + 取引履歴の %2 (推定値) の内 %1 ブロックを処理しました。 - Processed %1 blocks of transaction history. - + 取引履歴の %1 ブロックを処理しました。 - %n hour(s) - + %n 時間 - %n day(s) - + %n 日 - %n week(s) - + %n 週間 + + + %1 and %2 + %1 と %2 + + + %n year(s) + %n 年 - %1 behind - + %1 遅延 - Last received block was generated %1 ago. - + 最後に受信されたブロックは %1 前に生成されました。 - Transactions after this will not yet be visible. - + この後の取引はまだ表示されません。 - Error - + エラー - Warning - + 警告 - Information - + 情報 - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - Up to date バージョンは最新です - Catching up... - + 追跡中... - - Confirm transaction fee - - - - Sent transaction 送金取引 - Incoming transaction 着金取引 - Date: %1 Amount: %2 Type: %3 Address: %4 - + 日付: %1 +総額: %2 +種類: %3 +アドレス: %4 - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - ウォレットは<b>暗号化され、アンロックされています</b> + ウォレットは<b>暗号化されて、アンロックされています</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> - ウォレットは<b>暗号化され、ロックされています</b> + ウォレットは<b>暗号化されて、ロックされています</b> - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. - + 致命的なエラーが発生しました。Bitcoin は安全に継続することができず終了するでしょう。 + ClientModel - Network Alert + ネットワーク警告 + + + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + 数量: + + + Bytes: + バイト: + + + Amount: + 総額: + + + Priority: + 優先度: + + + Fee: + 手数料: + + + Low Output: + + + + After Fee: + 手数料差引後: + + + Change: + + + + (un)select all + すべて選択/選択解除 + + + Tree mode + ツリーモード + + + List mode + リストモード + + + Amount + 総額 + + + Address + アドレス + + + Date + 日付 + + + Confirmations + 検証数 + + + Confirmed + 検証済み + + + Priority + 優先度 + + + Copy address + アドレスをコピーする + + + Copy label + ラベルをコピーする + + + Copy amount + 総額のコピー + + + Copy transaction ID + 取引 ID をコピー + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + 数量をコピーする + + + Copy fee + 手数料をコピーする + + + Copy after fee + 手数料差引後の値をコピーする + + + Copy bytes + バイト数をコピーする + + + Copy priority + 優先度をコピーする + + + Copy low output + + + + Copy change + + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + なし + + + Dust + + + + yes + はい + + + no + いいえ + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + 優先度が「中」未満の場合には、このラベルは赤くなります。 + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + (ラベル無し) + + + change from %1 (%2) + + + + (change) EditAddressDialog - Edit Address アドレスの編集 - &Label ラベル(&L) - - The label associated with this address book entry - このアドレス帳の入った事と関係のレーベル - - - - &Address - &アドレス - - - - The address associated with this address book entry. This can only be modified for sending addresses. - アドレス帳の入った事の関係のアドレスです。これは遅れるのアドレスのためだけに編集出来ます。 - - - - New receiving address - 新しいの受け入れのアドレス - - - - New sending address - 新しいの送るのアドレス - - - - Edit receiving address - 受け入れのアドレスを編集する - - - - Edit sending address - 送るのアドレスを編集する - - - - The entered address "%1" is already in the address book. - 入ったのアドレス「%1」はもうアドレス帳にあります。 - - - - The entered address "%1" is not a valid Myriadcoin address. + The label associated with this address list entry - - Could not unlock wallet. - 財布をアンロックするのは出来ませんでした。 + The address associated with this address list entry. This can only be modified for sending addresses. + + + + &Address + アドレス帳 (&A) + + + New receiving address + 新しい受信アドレス + + + New sending address + 新しい送信アドレス + + + Edit receiving address + 受信アドレスを編集 + + + Edit sending address + 送信アドレスを編集 + + + The entered address "%1" is already in the address book. + 入力されたアドレス "%1" は既にアドレス帳にあります。 + + + The entered address "%1" is not a valid Myriadcoin address. + 入力されたアドレス "%1" は無効な Myriadcoin アドレスです。 + + + Could not unlock wallet. + ウォレットをアンロックできませんでした。 - New key generation failed. - 新しいのキーの生成は失敗しました。 + 新しいキーの生成に失敗しました。 - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt + A new data directory will be created. + 新しいデータ ディレクトリが作成されます。 + + + name + name + + + Directory already exists. Add %1 if you intend to create a new directory here. + ディレクトリがもうあります。 新しいのディレクトリを作るつもりなら%1を書いてください。 + + + Path already exists, and is not a directory. + パスが存在しますがディレクトリではありません。 + + + Cannot create data directory here. + ここにデータ ディレクトリを作成することはできません。 + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options - + Myriadcoin Core + Myriadcoin のコア + + version - + バージョン - Usage: - + 使用法: - command-line options - + コマンドライン オプション - UI options - + UI オプション - Set language, for example "de_DE" (default: system locale) - + 言語設定 例: "de_DE" (初期値: システムの言語) - Start minimized + 最小化された状態で起動する + + + Set SSL root certificates for payment request (default: -system-) - Show splash screen on startup (default: 1) + 起動時にスプラッシュ画面を表示する (初期値: 1) + + + Choose data directory on startup (default: 0) + 起動時にデータ ディレクトリを選ぶ (初期値: 0) + + + + Intro + + Welcome + ようこそ + + + Welcome to Myriadcoin Core. + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + 初期値のデータ ディレクトリを使用 + + + Use a custom data directory: + 任意のデータ ディレクトリを使用: + + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" can not be created. + エラー: 指定のデータ ディレクトリ "%1" を作成できません。 + + + Error + エラー + + + GB of free space available + GBの利用可能な空き領域 + + + (of %1GB needed) + (%1GB が必要) + + + + OpenURIDialog + + Open URI + URI を開く + + + Open payment request from URI or file + URI またはファイルから支払いリクエストを開く + + + URI: + URI: + + + Select payment request file + 支払いリクエストファイルを選択してください + + + Select payment request file to open + 開きたい支払いリクエストファイルを選択してください + OptionsDialog - Options - オプションズ + 設定 - &Main - + メイン (&M) - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. - + あたなの取引が早く処理されるように任意で kB 毎の取引手数料を設定します。ほとんどの取引は 1 kB です。 - Pay transaction &fee - + 支払う取引手数料 (&f) - Automatically start Myriadcoin after logging in to the system. - + システムにログインした時に自動的に Myriadcoin を起動します。 - &Start Myriadcoin on system login + システムにログインした時に Myriadcoin を起動 (&S) + + + Size of &database cache + データベースキャッシュのサイズ (&D) + + + MB + MB + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + プロキシのIPアドレス (例えば IPv4: 127.0.0.1 / IPv6: ::1) + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: - Reset all client options to default. - + すべてのオプションを初期値に戻します。 - &Reset Options - + オプションをリセット (&R) - &Network + ネットワーク (&N) + + + (0 = auto, <0 = leave that many cores free) + + + + W&allet + ウォレット (&A) + + + Expert + エクスポート + + + Enable coin &control features + コインコントロール機能を有効化する (&C) + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change - Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. - + 自動的にルーター上の Myriadcoin クライアントのポートを開きます。あなたのルーターが UPnP に対応していて、それが有効になっている場合に作動します。 - Map port using &UPnP - + UPnP を使ってポートを割り当てる (&U) - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - - - - - &Connect through SOCKS proxy: - - - - Proxy &IP: - + プロキシの IP (&I) : - - IP address of the proxy (e.g. 127.0.0.1) - - - - &Port: - + ポート (&P) : - Port of the proxy (e.g. 9050) - + プロキシのポート番号 (例 9050) - SOCKS &Version: - + SOCKS バージョン (&V) : - SOCKS version of the proxy (e.g. 5) - + SOCKS プロキシのバージョン (例 5) - &Window - + ウインドウ (&W) - Show only a tray icon after minimizing the window. - + ウインドウを最小化したあとトレイ アイコンだけを表示する。 - &Minimize to the tray instead of the taskbar - + タスクバーの代わりにトレイに最小化 (&M) - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. - + ウインドウが閉じられる時アプリケーションを終了せずに最小化します。このオプションが有効な時にアプリケーションを終了するにはメニューから終了を選択します。 - M&inimize on close - + 閉じる時に最小化 (&i) - &Display - + 表示 (&D) - User Interface &language: - + ユーザインターフェースの言語 (&l) : - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. - + ここでユーザインターフェースの言語を設定できます。設定を反映するには Myriadcoin を再起動します。 - &Unit to show amounts in: - + 額を表示する単位 (&U) : - Choose the default subdivision unit to show in the interface and when sending coins. - + インターフェース上の表示とコインの送信で使用する単位を選択します。 - Whether to show Myriadcoin addresses in the transaction list or not. - + 最近の取引履歴で Myriadcoin アドレスを表示するかしないか。 - &Display addresses in transaction list + 取引履歴にアドレスを表示 (&D) + + + Whether to show coin control features or not. - &OK - + &OK - &Cancel - + キャンセル (&C) - - &Apply - - - - default - + 初期値 + + + none + なし - Confirm options reset + オプションのリセットの確認 + + + Client restart required to activate changes. - - Some settings may require a client restart to take effect. + Client will be shutdown, do you want to proceed? - - Do you want to proceed? + This change would require a client restart. - - - Warning - - - - - - This setting will take effect after restarting Myriadcoin. - - - - The supplied proxy address is invalid. - + プロキシアドレスが無効です。 OverviewPage - Form フォーム - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. - + 表示された情報は古いかもしれません。接続が確立されると、あなたのウォレットは Myriadcoin ネットワークと自動的に同期しますが、このプロセスはまだ完了していません。 - - Balance: - 残高: - - - - Unconfirmed: - 未確認: - - - Wallet + ウォレット + + + Available: - + Your current spendable balance + あなたの利用可能残高 + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + 未検証の取引で利用可能残高に反映されていない数 + + Immature: - + 未完成: - Mined balance that has not yet matured - + 完成していない採掘された残高 + + + Total: + 合計: + + + Your current total balance + あなたの現在の残高 - <b>Recent transactions</b> <b>最近の取引</b> - - Your current balance - 今の残高 - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - - - - - out of sync - + 同期していない PaymentServer - - Cannot start myriadcoin: click-to-pay handler + URI handling + URI の操作 + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + URI を解析できません! これは無効な Myriadcoin アドレスあるいや不正な形式の URI パラメーターによって引き起こされる場合があります。 + + + + Requested payment amount of %1 is too small (considered dust). + + Payment request error + 支払いのリクエストのエラーです + + + Cannot start myriadcoin: click-to-pay handler + Myriadcoin を起動できません: click-to-pay handler + + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + %1: %2とコミュニケーション・エラーです + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + サーバーの返事は無効 %1 + + + Payment acknowledged + 支払いは確認しました + + + Network request error + ネットワーク・リクエストのエラーです + - QRCodeDialog + QObject - - QR Code Dialog + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" does not exist. + エラー: 指定のデータ ディレクトリ "%1" は存在しません。 + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. - - Request Payment + Error: Invalid combination of -regtest and -testnet. + エラー: -regtestと-testnetは一緒にするのは無効です。 + + + Myriadcoin Core didn't yet exit safely... - - Amount: - + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Myriadcoin アドレスを入力します (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + 画像を保存(&S) - - Label: - + &Copy Image + 画像をコピー(&C) - - Message: - - - - - &Save As... - - - - - Error encoding URI into QR Code. - - - - - The entered amount is invalid, please check. - - - - - Resulting URI too long, try to reduce the text for label / message. - - - - Save QR Code - + QR コードの保存 - - PNG Images (*.png) - + PNG Image (*.png) + PNG画像ファイル(*.png) RPCConsole - Client name - + クライアント名 - - - - - - - - - - N/A - + N/A - Client version - + クライアントのバージョン - &Information + 情報 (&I) + + + Debug window + デバッグ ウインドウ + + + General - Using OpenSSL version - + 使用中の OpenSSL のバージョン - Startup time - + 起動した日時 - Network - + ネットワーク + + + Name + 名前 - Number of connections - + 接続数 - - On testnet - - - - Block chain - + ブロック チェーン - Current number of blocks - + 現在のブロック数 - Estimated total blocks - + 推定総ブロック数 - Last block time - + 最終ブロックの日時 - &Open - + 開く (&O) - - Command-line options - - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - - - - - &Show - - - - &Console - + コンソール (&C) + + + &Network Traffic + ネットワーク (&N) + + + &Clear + クリア(&C) + + + Totals + 合計 + + + In: + 入力: + + + Out: + 出力: - Build date - + ビルドの日付 - - Myriadcoin - Debug window - - - - - Myriadcoin Core - - - - Debug log file - + デバッグ用ログファイル - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. - + 現在のデータ ディレクトリから Myriadcoin のデバッグ用ログファイルを開きます。ログファイルが大規模な場合には数秒かかることがあります。 - Clear console - + コンソールをクリア - Welcome to the Myriadcoin RPC console. - + Myriadcoin RPC コンソールへようこそ。 - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + 上下の矢印で履歴をたどれます。 <b>Ctrl-L</b> でスクリーンを消去できます。 + + + Type <b>help</b> for an overview of available commands. + 使用可能なコマンドを見るには <b>help</b> と入力します。 + + + %1 B + %1 B + + + %1 KB + %1 KB + + + %1 MB + %1 MB + + + %1 GB + %1 GB + + + %1 m + %1 m + + + %1 h + %1 h + + + %1 h %2 m + %1 h %2 m + + + + ReceiveCoinsDialog + + &Amount: + 総額:(&A) + + + &Label: + ラベル(&L): + + + &Message: + メッセージ (&M): + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. - - Type <b>help</b> for an overview of available commands. + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + + + + Clear + クリア + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + 表示 + + + Remove the selected entries from the list + + + + Remove + + + + Copy label + ラベルをコピーする + + + Copy message + メッセージをコピーする + + + Copy amount + 総額のコピー + + + + ReceiveRequestDialog + + QR Code + QR コード + + + Copy &URI + URI をコピーする (&U) + + + Copy &Address + アドレスをコピーする (&A) + + + &Save Image... + 画像を保存(&S) + + + Request payment to %1 + %1 への支払いリクエストを行う + + + Payment information + 支払い情報 + + + URI + URI + + + Address + アドレス + + + Amount + 総額 + + + Label + ラベル + + + Message + メッセージ + + + Resulting URI too long, try to reduce the text for label / message. + URI が長くなり過ぎます。ラベルやメッセージのテキストを短くしてください。 + + + Error encoding URI into QR Code. + QR コード用の URI エンコードでエラー。 + + + + RecentRequestsTableModel + + Date + 日付 + + + Label + ラベル + + + Message + メッセージ + + + Amount + 総額 + + + (no label) + (ラベル無し) + + + (no message) + + + + (no amount) SendCoinsDialog - - - - - - - - Send Coins コインを送る - + Coin Control Features + コインコントロール機能 + + + Inputs... + 入力... + + + automatically selected + 自動選択 + + + Insufficient funds! + 残高不足です! + + + Quantity: + 数量: + + + Bytes: + バイト: + + + Amount: + 総額: + + + Priority: + 優先度: + + + Fee: + 手数料: + + + Low Output: + + + + After Fee: + 手数料差引後: + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + Send to multiple recipients at once - + 一度に複数の人に送る - Add &Recipient + 受取人を追加 (&R) + + + Clear all fields of the form. - - Remove all transaction fields - - - - Clear &All - + すべてクリア (&A) - Balance: - 残高: + 残高: - - 123.456 BTC - - - - Confirm the send action - + 送る操作を確認する - S&end - + 送る (&e) - - <b>%1</b> to %2 (%3) - - - - Confirm send coins + コインを送る確認 + + + %1 to %2 - - Are you sure you want to send %1? + Copy quantity + 数量をコピーする + + + Copy amount + 総額のコピー + + + Copy fee + 手数料をコピーする + + + Copy after fee + 手数料差引後の値をコピーする + + + Copy bytes + バイト数をコピーする + + + Copy priority + 優先度をコピーする + + + Copy low output - - and + Copy change + + + + Total Amount %1 (= %2) + + + + or - The recipient address is not valid, please recheck. - + 受取人のアドレスが不正です。再確認してください。 - The amount to pay must be larger than 0. - + 支払額は0より大きくないといけません。 - The amount exceeds your balance. - + 額が残高を超えています。 - The total exceeds your balance when the %1 transaction fee is included. - + %1 の取引手数料を含めると額が残高を超えています。 - Duplicate address found, can only send to each address once per send operation. + 重複しているアドレスが見つかりました。1回の送信で同じアドレスに送ることは出来ません。 + + + Transaction creation failed! - - Error: Transaction creation failed! + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Warning: Invalid Myriadcoin address + + (no label) + (ラベル無し) + + + Warning: Unknown change address + + + + Are you sure you want to send? + 送ってよろしいですか? + + + added as transaction fee + 取引手数料として追加された + + + Payment request expired + 支払いのリクエストは期限切れです + + + Invalid payment address %1 + 支払いのアドレス「%1」は無効です + SendCoinsEntry - - Form - フォーム - - - A&mount: - + 金額(&A): - Pay &To: - + 送り先(&T): - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - + 支払い送信するアドレス (例 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book - + アドレス帳に追加するには、このアドレスのラベルを入力します - &Label: + ラベル(&L): + + + Choose previously used address + 前に使用したアドレスを選ぶ + + + This is a normal payment. - - Choose address from address book - - - - Alt+A - + Alt+A - Paste address from clipboard - + クリップボードからアドレスを貼付ける - Alt+P + Alt+P + + + Remove this entry - - Remove this recipient + Message: + メッセージ: + + + This is a verified payment request. - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + 支払先: + + + Memo: + メモ: + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. SignVerifyMessageDialog - Signatures - Sign / Verify a Message - + 署名 - メッセージの署名/検証 - &Sign Message - + メッセージの署名 (&S) - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. - + あなた自身を立証するためにあなたのアドレスでメッセージに署名することができます。フィッシング攻撃によってあなたを騙して署名を譲渡させようとするかもしれないので、不明確なものは絶対に署名しないように注意してください。あなたが同意する完全に詳細な声明にだけ署名してください。 - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - + メッセージの署名に使うアドレス (例 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book - + Choose previously used address + 前に使用したアドレスを選ぶ - - Alt+A - + Alt+A - Paste address from clipboard - + クリップボードからアドレスを貼付ける - Alt+P - + Alt+P - Enter the message you want to sign here - + ここにあなたが署名するメッセージを入力します - Signature - + 署名 - Copy the current signature to the system clipboard - + 現在の署名をシステムのクリップボードにコピーする - Sign the message to prove you own this Myriadcoin address - + この Myriadcoin アドレスを所有していることを証明するためにメッセージに署名 - Sign &Message - + メッセージの署名 (&M) - Reset all sign message fields - + 入力項目の内容をすべて消去します - - Clear &All - + すべてクリア (&A) - &Verify Message - + メッセージの検証 (&V) - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. - + メッセージを検証するために、署名するアドレスとメッセージ(改行、スペース、タブなどを正確にコピーしてください)、そして署名を入力します。中間者攻撃によってだまされることを避けるために、署名されたメッセージそのものよりも、署名を読み取られないように注意してください。 - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - + メッセージが署名されたアドレス (例 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address - + 指定された Myriadcoin アドレスで署名されたことを保証するメッセージを検証 - Verify &Message - + メッセージの検証 (&M) - Reset all verify message fields - + 入力項目の内容をすべて消去します - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - + Myriadcoin アドレスを入力します (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature - + 署名を作成するには"メッセージの署名"をクリック - - Enter Myriadcoin signature - - - - - The entered address is invalid. - + 不正なアドレスが入力されました。 - - - - Please check the address and try again. - + アドレスを確かめてからもう一度試してください。 - - The entered address does not refer to a key. - + 入力されたアドレスに関連するキーがありません。 - Wallet unlock was cancelled. - + ウォレットのアンロックはキャンセルされました。 - Private key for the entered address is not available. - + 入力されたアドレスのプライベート キーが無効です。 - Message signing failed. - + メッセージの署名に失敗しました。 - Message signed. - + メッセージに署名しました。 - The signature could not be decoded. - + 署名がデコードできません。 - - Please check the signature and try again. - + 署名を確認してからもう一度試してください。 - The signature did not match the message digest. - + 署名はメッセージ ダイジェストと一致しませんでした。 - Message verification failed. - + メッセージの検証に失敗しました。 - Message verified. - + メッセージは検証されました。 SplashScreen - - The Myriadcoin developers - + Myriadcoin Core + Myriadcoin のコア + + + The Myriadcoin Core developers + ビットコインコアの開発者 - [testnet] [testnet] + + TrafficGraphWidget + + KB/s + KB/s + + TransactionDesc - Open until %1 + ユニット %1 を開く + + + conflicted - %1/offline - + %1/オフライン - %1/unconfirmed - + %1/未検証 - %1 confirmations - + %1 確認 - Status - + ステータス - , broadcast through %n node(s) - + %n ノードにブロードキャスト - Date - + 日付 - Source - + ソース - Generated - + 生成された - - From - + 送信 - - - To - + 受信 - - own address - + 自分のアドレス - label - + ラベル - - - - - Credit - + クレジット - matures in %n more block(s) - + %n 以上のブロックが満期 - not accepted - + 承認されなかった - - - - Debit - + 引き落とし額 - Transaction fee - + 取引手数料 - Net amount - + 正味金額 - Message - + メッセージ - Comment - + コメント - Transaction ID + 取引 ID + + + Merchant + 商人 + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - Debug information - + デバッグ情報 - Transaction - + 取引 - Inputs - + 入力 - Amount - + 総額 - true - + 正しい - false - + 正しくない - , has not been successfully broadcast yet - + まだブロードキャストが成功していません - Open for %n more block(s) - + %n 以上のブロックを開く - unknown - + 未確認 TransactionDescDialog - Transaction details - + 取引の詳細 - This pane shows a detailed description of the transaction - + ここでは取引の詳細を表示しています TransactionTableModel - Date - + 日付 - Type - + タイプ - Address Helbidea - Amount + 総額 + + + Immature (%1 confirmations, will be available after %2) - Open for %n more block(s) - + %n 以上のブロックを開く - Open until %1 - + ユニット %1 を開く - - Offline (%1 confirmations) - - - - - Unconfirmed (%1 of %2 confirmations) - - - - Confirmed (%1 confirmations) - - - - - Mined balance will be available when it matures in %n more block(s) - + 検証されました (%1 検証済み) - This block was not received by any other nodes and will probably not be accepted! - + このブロックは他のどのノードによっても受け取られないで、多分受け入れられないでしょう! - Generated but not accepted + 生成されましたが承認されませんでした + + + Offline + オフライン + + + Unconfirmed + 未検証 + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted - Received with - + 受信元 - Received from - + 送り主 - Sent to - + 送り先 - Payment to yourself - + 自分自身への支払い - Mined - + 発掘した - (n/a) - + (n/a) - Transaction status. Hover over this field to show number of confirmations. - + 取引の状況。このフィールドの上にカーソルを置くと検証の数を表示します。 - Date and time that the transaction was received. - + 取引を受信した日時。 - Type of transaction. - + 取引の種類。 - Destination address of transaction. - + 取引の宛先アドレス。 - Amount removed from or added to balance. - + 残高に追加または削除された総額。 TransactionView - - All - + すべて - Today - + 今日 - This week - + 今週 - This month - + 今月 - Last month - + 先月 - This year - + 今年 - Range... - + 期間... - Received with - + 送り主 - Sent to - + 送り先 - To yourself - + 自分自身 - Mined - + 発掘した - Other - + その他 - Enter address or label to search - + 検索するアドレスまたはラベルを入力 - Min amount - + 最小の額 - Copy address - + アドレスをコピーする - Copy label - + ラベルをコピーする - Copy amount - + 総額のコピー - Copy transaction ID - + 取引 ID をコピー - Edit label - + ラベルの編集 - Show transaction details + 取引の詳細を表示 + + + Export Transaction History + トランザクション履歴をエクスポートする + + + Exporting Failed + エクスポートに失敗しました + + + There was an error trying to save the transaction history to %1. + トランザクション履歴を %1 へ保存する際にエラーが発生しました。 + + + Exporting Successful + エクスポートに成功しました + + + The transaction history was successfully saved to %1. - - Export Transaction Data - - - - Comma separated file (*.csv) テキスト CSV (*.csv) - Confirmed - + 検証済み - Date - + 日付 - Type - + タイプ - Label - レーベル + ラベル - Address Helbidea - Amount - + 総額 - ID - + ID - - Error exporting - エラー輸出 - - - - Could not write to file %1. - %1のファイルに書き込めませんでした。 - - - Range: - + 期間: - to + から + + + + WalletFrame + + No wallet has been loaded. WalletModel - Send Coins - + コインを送る WalletView - &Export - + エクスポート (&E) - Export the data in the current tab to a file - + ファイルに現在のタブのデータをエクスポート - Backup Wallet - + ウォレットのバックアップ - Wallet Data (*.dat) - + ウォレット データ (*.dat) - Backup Failed + バックアップに失敗しました + + + There was an error trying to save the wallet data to %1. - - There was an error trying to save the wallet data to the new location. + The wallet data was successfully saved to %1. - Backup Successful - - - - - The wallet data was successfully saved to the new location. - + バックアップ成功 bitcoin-core - - Myriadcoin version - Myriadcoin Bertsio - - - Usage: - + 使用法: - - Send command to -server or myriadcoind - - - - List commands - + コマンド一覧 - Get help for a command - + コマンドのヘルプ - Options: - + オプション: - Specify configuration file (default: myriadcoin.conf) - + 設定ファイルの指定 (初期値: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) - + pid ファイルの指定 (初期値: myriadcoind.pid) - Specify data directory - + データ ディレクトリの指定 - - Set database cache size in megabytes (default: 25) - - - - Listen for connections on <port> (default: 8333 or testnet: 18333) - + 接続のポート番号 (初期値: 8333、testnet: 18333) - Maintain at most <n> connections to peers (default: 125) - + ピアの最大接続数 (初期値: 125) - Connect to a node to retrieve peer addresses, and disconnect - + ピア アドレスを取得するためにノードに接続し、そして切断します - Specify your own public address - + あなた自身のパブリックなアドレスを指定 - Threshold for disconnecting misbehaving peers (default: 100) - + 不正なピアを切断するためのしきい値 (初期値: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - + 不正なピアを再接続するまでの秒数 (初期値: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s - + IPv4 でリスンする RPC ポート %u の設定中にエラーが発生しました: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) - + <port> で JSON-RPC 接続をリスン (初期値: 8332、testnet は 18332) - Accept command line and JSON-RPC commands - + コマンドラインと JSON-RPC コマンドを許可 + + + Myriadcoin Core RPC client version + ビットコインコアRPCクライアントのバージョン - Run in the background as a daemon and accept commands - + デーモンとしてバックグランドで実行しコマンドを許可 - Use the test network - + テストのためのネットワークを使用 - Accept connections from outside (default: 1 if no -proxy or -connect) - + 外部からの接続を許可 (初期値: -proxy または -connect を使用していない場合は1) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2299,619 +2686,705 @@ If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com + %s, rpcpassword を設定ファイルで設定してください: +%s +下記のランダムなパスワードの使用を推奨します: +rpcuser=myriadcoinrpc +rpcpassword=%s +(このパスワードを覚える必要はありません) +ユーザー名とパスワードが同じであってはいけません。 +もしもファイルが存在しないなら、所有者だけが読み取れる権限で作成してください。 +また、問題が通知されるように alertnotify を設定することをお勧めします; +例えば: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - + IPv6 でリスンする RPC ポート %u の設定中にエラーが発生したので IPv4 に切り替えます: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 + 指定のアドレスへバインドし、その上で常にリスンします。IPv6 は [ホスト名]:ポート番号 と表記します + + + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + ブロックを瞬時に解決することができる特別なチェーンを使用して、リグレッションテストモードに入る。これはリグレッションテストツールやアプリケーション開発を対象としています。 + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + エラー: 取引は拒否されました。wallet.dat のコピーを使い、そしてコピーしたウォレットからコインを使用したことがマークされなかったときなど、ウォレットのいくつかのコインがすでに使用されている場合に、このエラーは起こるかもしれません。 - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! - + エラー: この取引は、額、複雑さ、あるいは最近受け取った資金の使用のために、少なくとも %s の手数料が必要です! - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + ウォレットの取引を変更する際にコマンドを実行 (cmd の %s は TxID に置換される) + + + Fees smaller than this are considered zero fee (for transaction creation) (default: - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications + これはリリース前のテストビルドです - 各自の責任で利用すること - 採掘や商取引に使用しないでください + + + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - + 警告: -paytxfee が非常に高く設定されています! これは取引を送信する場合に支払う取引手数料です。 - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. - + 警告: あなたのコンピュータの日時が正しいことを確認してください! 時計が間違っていると Myriadcoin は正常に動作しません。 + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + 警告: ネットワークは完全に同意しないみたいです。マイナーは何かの問題を経験してるみたいなんです。 + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + 警告: ピアーと完全に同意しないみたいです!アップグレードは必要かもしれません、それとも他のノードはアップグレードは必要かもしれません。 - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + 警告: wallet.dat の読み込みエラー! すべてのキーは正しく読み取れますが、取引データやアドレス帳のエントリが失われたか、正しくない可能性があります。 - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + 警告: wallet.dat が壊れたのでデータを復旧しました! オリジナルの wallet.dat は wallet.{timestamp}.bak として %s に保存されました; もしもあなたの残高や取引が正しくないならバックアップから復元してください。 + + + (default: 1) + (デフォルト: 1) + + + (default: wallet.dat) + (デフォルト: wallet.dat) + + + <category> can be: - Attempt to recover private keys from a corrupt wallet.dat + 壊れた wallet.dat から秘密鍵を復旧することを試す + + + Myriadcoin Core Daemon - Block creation options: + ブロック作成オプション: + + + Clear list of wallet transactions (diagnostic tool; implies -rescan) - Connect only to the specified node(s) + 指定したノードだけに接続 + + + Connect through SOCKS proxy + SOCKS プロキシ経由で接続する + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: - Corrupted block database detected + 破損したブロック データベースが見つかりました + + + + Debugging/Testing options: + デバッグ/テスト用オプション: + + + Disable safemode, override a real safe mode event (default: 0) - Discover own IP address (default: 1 when listening and no -externalip) + 自分の IP アドレスを発見 (初期値: リスン中と -externalip を使用していない場合は1) + + + Do not load the wallet and disable wallet RPC calls - Do you want to rebuild the block database now? - + ブロック データベースを今すぐ再構築しますか? - Error initializing block database - + ブロック データベースの初期化中にエラー - Error initializing wallet database environment %s! - + ウォレットのデータベース環境 %s 初期化エラー! - Error loading block database - + ブロック データベースの読み込みエラー - Error opening block database - + ブロック データベースの開始エラー - Error: Disk space is low! - + エラー: ディスク容量不足! - Error: Wallet locked, unable to create transaction! - + エラー: ウォレットはロックされ、取引を作成できません! - Error: system error: - + エラー: システム エラー: - Failed to listen on any port. Use -listen=0 if you want this. - + ポートのリスンに失敗しました。必要であれば -listen=0 を使用してください。 - Failed to read block info - + ブロック情報の読み取りに失敗しました - Failed to read block - + ブロックの読み取りに失敗しました - Failed to sync block index - + ブロック インデックスの同期に失敗しました - Failed to write block index - + ブロック インデックスの書き込みに失敗しました - Failed to write block info - + ブロック情報の書き込みに失敗しました - Failed to write block - + ブロックの書き込みに失敗しました - Failed to write file info - + ファイル情報の書き込みに失敗しました - Failed to write to coin database - + コインデータベースへの書き込みに失敗しました - Failed to write transaction index - + 取引インデックスの書き込みに失敗しました - Failed to write undo data - + 元へ戻すデータの書き込みに失敗しました + + + Fee per kB to add to transactions you send + 送信するトランザクションの1kBあたりの手数料 + + + Fees smaller than this are considered zero fee (for relaying) (default: + この値未満の (中継) 手数料はゼロであるとみなす (デフォルト: - Find peers using DNS lookup (default: 1 unless -connect) - + DNS ルックアップでピアを探す (初期値: -connect を使っていなければ1) + + + Force safe mode (default: 0) + セーフモードを矯正する (デフォルト: 0) - Generate coins (default: 0) - + コインを生成 (初期値: 0) - How many blocks to check at startup (default: 288, 0 = all) + 起動時に点検するブロック数 (初期値: 288, 0=すべて) + + + If <category> is not supplied, output all debugging information. + <category> が与えられなかった場合には、すべてのデバッグ情報が出力されます。 + + + Importing... - - How thorough the block verification is (0-4, default: 3) + Incorrect or no genesis block found. Wrong datadir for network? + 不正なブロックあるいは、生成されていないブロックが見つかりました。ネットワークの datadir が間違っていませんか? + + + Invalid -onion address: '%s' - Not enough file descriptors available. + 使用可能なファイルディスクリプタが不足しています。 + + + Prepend debug output with timestamp (default: 1) - + RPC client options: + RPC クライアントのオプション: + + Rebuild block chain index from current blk000??.dat files + 現在の blk000??.dat ファイルからブロック チェーンのインデックスを再構築 + + + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) - Set the number of threads to service RPC calls (default: 4) + RPC サービスのスレッド数を設定 (初期値: 4) + + + Specify wallet file (within data directory) + ウォレットのファイルを指定 (データ・ディレクトリの中に) + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): - Verifying blocks... - + ブロックの検証中... - Verifying wallet... + ウォレットの検証中... + + + Wait for RPC server to start + RPC サーバが開始するのを待つ + + + Wallet %s resides outside data directory %s + 財布 %s はデータ・ディレクトリ%sの外にあります + + + Wallet options: - + Warning: Deprecated argument -debugnet ignored, use -debug=net + 警告: 非推奨の引数 -debugnet は無視されました。-debug=net を使用してください + + + You need to rebuild the database using -reindex to change -txindex + -txindex を変更するには -reindex を使用してデータベースを再構築する必要があります + + Imports blocks from external blk000??.dat file + 外部の blk000??.dat ファイルからブロックをインポート + + + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + 関連のアラートをもらってもすごく長いのフォークを見てもコマンドを実行 (コマンドの中にあるの%sはメッセージから置き換えさせる) + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) - Information - + 情報 - - Invalid -tor address: '%s' - - - - Invalid amount for -minrelaytxfee=<amount>: '%s' - + 不正な額 -minrelaytxfee=<amount>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' - + 不正な額 -minrelaytxfee=<amount>: '%s' + + + Limit size of signature cache to <n> entries (default: 50000) + 署名キャッシュのサイズを <n> エントリーに制限する (デフォルト: 50000) + + + Log transaction priority and fee per kB when mining blocks (default: 0) + ブロックの採掘時にトランザクションの優先度と1kBあたりの手数料をログに残す (デフォルト: 0) - Maintain a full transaction index (default: 0) - + 完全な取引インデックスを維持する (初期値: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - + 接続毎の最大受信バッファ <n>*1000 バイト (初期値: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - + 接続毎の最大送信バッファ <n>*1000 バイト (初期値: 1000) - Only accept block chain matching built-in checkpoints (default: 1) - + 内蔵のチェックポイントと一致するブロック チェーンのみを許可 (初期値: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + <net> (IPv4, IPv6, Tor) ネットワーク内のノードだけに接続する + + + Print block on startup, if found in block index - - Output extra debugging information. Implies all other -debug* options + Print block tree on startup (default: 0) - - Output extra network debugging information + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + RPC SSL オプション: (SSLのセットアップ手順はビットコインWikiを参照してください) + + + RPC server options: + RPCサーバのオプション: + + + Randomly drop 1 of every <n> network messages - - Prepend debug output with timestamp + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + SSL オプション: (SSLのセットアップ手順は Myriadcoin Wiki をご覧下さい) + + + Send command to Myriadcoin Core - - Select the version of socks proxy to use (4-5, default: 5) - - - - Send trace/debug info to console instead of debug.log file - + トレース/デバッグ情報を debug.log ファイルの代わりにコンソールへ送る - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - Set minimum block size in bytes (default: 0) + 最小ブロックサイズをバイトで設定 (初期値: 0) + + + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) - Shrink debug.log file on client startup (default: 1 when no -debug) - + クライアント起動時に debug.log ファイルを縮小 (初期値: -debug オプションを指定しない場合は1) - Signing transaction failed - + 取引の署名に失敗しました - Specify connection timeout in milliseconds (default: 5000) + 接続のタイムアウトをミリセコンドで指定 (初期値: 5000) + + + Start Myriadcoin Core Daemon - System error: - + システム エラー: - Transaction amount too small - + 取引の額が小さ過ぎます - Transaction amounts must be positive - + 取引の額は0より大きくしてください - Transaction too large - + 取引が大き過ぎます - Use UPnP to map the listening port (default: 0) - + リスン ポートの割当に UPnP を使用 (初期値: 0) - Use UPnP to map the listening port (default: 1 when listening) - + リスン ポートの割当に UPnP を使用 (初期値: リスン中は1) - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - Username for JSON-RPC connections - + JSON-RPC 接続のユーザー名 - Warning - + 警告 - Warning: This version is obsolete, upgrade required! + 警告: このバージョンは古いのでアップグレードが必要です! + + + Zapping all transactions from wallet... - - You need to rebuild the databases using -reindex to change -txindex + on startup - + version + バージョン + + wallet.dat corrupt, salvage failed - + wallet.dat が壊れ、復旧に失敗しました - Password for JSON-RPC connections - + JSON-RPC 接続のパスワード - Allow JSON-RPC connections from specified IP address - + 指定した IP アドレスからの JSON-RPC 接続を許可 - Send commands to node running on <ip> (default: 127.0.0.1) - + <ip> (初期値: 127.0.0.1) で実行中のノードにコマンドを送信 - Execute command when the best block changes (%s in cmd is replaced by block hash) - + 最良のブロックに変更する際にコマンドを実行 (cmd の %s はブロック ハッシュに置換される) - Upgrade wallet to latest format - + ウォレットを最新のフォーマットにアップグレード - Set key pool size to <n> (default: 100) - + key pool のサイズを <n> (初期値: 100) にセット - Rescan the block chain for missing wallet transactions - + 失ったウォレットの取引のブロック チェーンを再スキャン - Use OpenSSL (https) for JSON-RPC connections - + JSON-RPC 接続に OpenSSL (https) を使用 - Server certificate file (default: server.cert) - + サーバ証明書ファイル (初期値: server.cert) - Server private key (default: server.pem) - + サーバの秘密鍵 (初期値: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - This help message - + このヘルプ メッセージ - Unable to bind to %s on this computer (bind returned error %d, %s) - + このコンピュータの %s にバインドすることができません (バインドが返したエラーは %d, %s) - - Connect through socks proxy - - - - Allow DNS lookups for -addnode, -seednode and -connect - + -addnode, -seednode と -connect で DNS ルックアップを許可する - Loading addresses... - + アドレスを読み込んでいます... - Error loading wallet.dat: Wallet corrupted - + wallet.dat 読み込みエラー: ウォレットが壊れました - Error loading wallet.dat: Wallet requires newer version of Myriadcoin - + wallet.dat 読み込みエラー: ウォレットは Myriadcoin の最新バージョンを必要とします - Wallet needed to be rewritten: restart Myriadcoin to complete - + ウォレットが書き直される必要がありました: 完了するために Myriadcoin を再起動します - Error loading wallet.dat - + wallet.dat 読み込みエラー - Invalid -proxy address: '%s' - + 無効な -proxy アドレス: '%s' - Unknown network specified in -onlynet: '%s' - + -onlynet で指定された '%s' は未知のネットワークです - Unknown -socks proxy version requested: %i - + -socks で指定された %i は未知のバージョンです - Cannot resolve -bind address: '%s' - + -bind のアドレス '%s' を解決できません - Cannot resolve -externalip address: '%s' - + -externalip のアドレス '%s' を解決できません - Invalid amount for -paytxfee=<amount>: '%s' - + -paytxfee=<amount> の額 '%s' が無効です - Invalid amount - + 無効な総額 - Insufficient funds - + 残高不足 - Loading block index... - + ブロック インデックスを読み込んでいます... - Add a node to connect to and attempt to keep the connection open - + 接続するノードを追加し接続を持続するように試します - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - Loading wallet... - + ウォレットを読み込んでいます... - Cannot downgrade wallet - + ウォレットのダウングレードはできません - Cannot write default address - + 初期値のアドレスを書き込むことができません - Rescanning... - + 再スキャン中... - Done loading - + 読み込み完了 - To use the %s option - + %s オプションを使うには - Error - + エラー - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. - + rpcpassword=<password> を設定ファイルでセットしてください: +%s +ファイルが無い場合は、オーナーだけが読み取れる権限でファイルを作成してください。 \ No newline at end of file diff --git a/src/qt/locale/bitcoin_ka.ts b/src/qt/locale/bitcoin_ka.ts new file mode 100644 index 00000000..3a87a2f9 --- /dev/null +++ b/src/qt/locale/bitcoin_ka.ts @@ -0,0 +1,3389 @@ + + + AboutDialog + + About Myriadcoin Core + Myriadcoin Core-ს შესახებ + + + <b>Myriadcoin Core</b> version + <b>Myriadcoin Core</b>-ს ვერსია + + + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. + +პროგრამა ექსპერიმენტულია. + +ვრცელდება MIT/X11 ლიცენზიით, იხილე თანდართული ფაილი COPYING ან http://www.opensource.org/licenses/mit-license.php. + +პროდუქტი შეიცავს OpenSSL პროექტის ფარგლებში შემუშავებულ პროგრამულ უზრუნველყოფას OpenSSL Toolkit-ში გამოყენებისათვის (http://www.openssl.org/), კრიპტოგრაფიულ პროგრამას, ავტორი ერიქ იანგი (Eric Young, eay@cryptsoft.com) და UPnP-პროგრამას, ავტორი თომას ბერნარდი (Thomas Bernard). + + + Copyright + საავტორო უფლებები + + + The Myriadcoin Core developers + Myriadcoin Core-ს ავტორები + + + (%1-bit) + + + + + AddressBookPage + + Double-click to edit address or label + დააკლიკეთ ორჯერ მისამართის ან ნიშნულის შესაცვლელად + + + Create a new address + ახალი მისამართის შექმნა + + + &New + შექმ&ნა + + + Copy the currently selected address to the system clipboard + მონიშნული მისამართის კოპირება სისტემურ კლიპბორდში + + + &Copy + &კოპირება + + + C&lose + &დახურვა + + + &Copy Address + &მისამართის კოპირება + + + Delete the currently selected address from the list + მონიშნული მისამართის წაშლა სიიდან + + + Export the data in the current tab to a file + ამ ბარათიდან მონაცემების ექსპორტი ფაილში + + + &Export + &ექსპორტი + + + &Delete + &წაშლა + + + Choose the address to send coins to + აირჩიეთ მონეტების გაგზავნის მისამართი + + + Choose the address to receive coins with + აირჩიეთ მონეტების მიღების მისამართი + + + C&hoose + &არჩევა + + + Sending addresses + გაგზავნის მისამართი + + + Receiving addresses + მიღების მისამართი + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + ეს არის თქვენი Bitcoin-მისამართები გადახდების შესასრულებლად. მონეტების გაგზავნამდე ყოველთვის შეამოწმეთ თანხა და მიმღების მისამართი. + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + ეს არის თქვენი Bitcoin-მისამართები გადახდების მისაღებად. რეკომენდებულია ყოველი ტრანსაქციისათვის ახალი მიღების მისამართის გამოყენება. + + + Copy &Label + ნიშნუ&ლის კოპირება + + + &Edit + რ&ედაქტირება + + + Export Address List + მისამართების სიის ექსპორტი + + + Comma separated file (*.csv) + CSV-ფაილი (*.csv) + + + Exporting Failed + ექსპორტი ვერ განხორციელდა + + + There was an error trying to save the address list to %1. + შეცდომა მისამართების სიის %1-ში შენახვის მცდელობისას. + + + + AddressTableModel + + Label + ნიშნული + + + Address + მისამართი + + + (no label) + (არ არის ნიშნული) + + + + AskPassphraseDialog + + Passphrase Dialog + ფრაზა-პაროლის დიალოგი + + + Enter passphrase + შეიყვანეთ ფრაზა-პაროლი + + + New passphrase + ახალი ფრაზა-პაროლი + + + Repeat new passphrase + გაიმეორეთ ახალი ფრაზა-პაროლი + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + შეიყვანეთ საფულის ახალი ფრაზა-პაროლი.<br/>ფრაზა-პაროლი შეადგინეთ <b>არანაკლებ 10 შემთხვევითი სიმბოლოსაგან</b>, ან <b>რვა და მეტი სიტყვისაგან</b>. + + + Encrypt wallet + საფულის დაშიფრვა + + + This operation needs your wallet passphrase to unlock the wallet. + ეს ოპერაცია მოითხოვს თქვენი საფულის ფრაზა-პაროლს საფულის განსაბლოკად. + + + Unlock wallet + საფულის განბლოკვა + + + This operation needs your wallet passphrase to decrypt the wallet. + ეს ოპერაცია მოითხოვს თქვენი საფულის ფრაზა-პაროლს საფულის გასაშიფრად. + + + Decrypt wallet + საფულის გაშიფრვა + + + Change passphrase + ფრაზა-პაროლის შეცვლა + + + Enter the old and new passphrase to the wallet. + შეიყვანეთ საფულის ძველი და ახალი ფრაზა-პაროლი. + + + Confirm wallet encryption + დაადასტურეთ საფულის დაშიფრვა + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! + ყურადღება: საფულის დაშიფრვის შემდეგ თუ თქვენ დაკარგავთ ფრაზა-პაროლს, <b>ყველა ბიტქოინი დაგეკარგებათ</b>! + + + Are you sure you wish to encrypt your wallet? + დარწმუნებული ხართ, რომ გინდათ საფულის დაშიფრვა? + + + 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. + მნიშვნელოვანია: თქვენი საფულის ყველა ადრინდელი არქივი შეიცვლება ახლადგენერირებული დაშიფრული საფულის ფაილით. უსაფრთხოების მოსაზრებებით დაუშიფრავი საფულის ძველი არქივები ძალას დაკარგავს, როგორც კი დაიწყებთ ახალი, დაშიფრული საფულის გამოყენებას. + + + Warning: The Caps Lock key is on! + ყურადღება: ჩართულია Caps Lock რეჟიმი! + + + Wallet encrypted + საფულე დაშიფრულია + + + Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. + ახლა Myriadcoin დაიხურება დაშიფრვის პროცესის დასასრულებლად. გაითვალისწინეთ, რომ დაშიფრვა სრულად ვერ დაიცავს თქვენს ბითქოინებს თქვენს კომპიუტერში შემოპარული მავნე პროგრამების საშუალებით დატაცებისაგან. + + + Wallet encryption failed + ვერ მოხერხდა საფულის დაშიფრვა + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + საფულის დაშიფრვა ვერ მოხერხდა სისტემაში შეცდომის გამო. თქვენი საფულე არ არის დაშფრული. + + + The supplied passphrases do not match. + ფრაზა-პაროლები არ ემთხვევა ერთმანეთს. + + + Wallet unlock failed + საფულის განბლოკვა ვერ მოხერხდა + + + The passphrase entered for the wallet decryption was incorrect. + საფულის განშიფრვის ფრაზა-პაროლი არაწორია + + + Wallet decryption failed + საფულის განშიფრვა ვერ მოხერხდა + + + Wallet passphrase was successfully changed. + საფულის ფრაზა-პაროლი შეცვლილია. + + + + BitcoinGUI + + Sign &message... + ხელ&მოწერა + + + Synchronizing with network... + ქსელთან სინქრონიზება... + + + &Overview + მიმ&ოხილვა + + + Node + კვანძი + + + Show general overview of wallet + საფულის ზოგადი მიმოხილვა + + + &Transactions + &ტრანსაქციები + + + Browse transaction history + ტრანსაქციების ისტორიის დათვალიერება + + + E&xit + &გასვლა + + + Quit application + გასვლა + + + Show information about Myriadcoin + ინფორმაცია Bitcoin-ის შესახებ + + + About &Qt + &Qt-ს შესახებ + + + Show information about Qt + ინფორმაცია Qt-ს შესახებ + + + &Options... + &ოპციები + + + &Encrypt Wallet... + საფულის &დაშიფრვა + + + &Backup Wallet... + საფულის &არქივირება + + + &Change Passphrase... + ფრაზა-პაროლის შე&ცვლა + + + &Sending addresses... + გაგზავნის მი&სამართი + + + &Receiving addresses... + მიღების მისამა&რთი + + + Open &URI... + &URI-ის გახსნა... + + + Importing blocks from disk... + ბლოკების იმპორტი დისკიდან... + + + Reindexing blocks on disk... + დისკზე ბლოკების რეინდექსაცია... + + + Send coins to a Myriadcoin address + მონეტების გაგზავნა Bitcoin-მისამართზე + + + Modify configuration options for Myriadcoin + Bitcoin-ის საკონფიგურაციო პარამეტრების ცვლილება + + + Backup wallet to another location + საფულის არქივირება სხვა ადგილზე + + + Change the passphrase used for wallet encryption + საფულის დაშიფრვის ფრაზა-პაროლის შეცვლა + + + &Debug window + და&ხვეწის ფანჯარა + + + Open debugging and diagnostic console + დახვეწისა და გიაგნოსტიკის კონსოლის გაშვება + + + &Verify message... + &ვერიფიკაცია + + + Myriadcoin + Myriadcoin + + + Wallet + საფულე + + + &Send + &გაგზავნა + + + &Receive + &მიღება + + + &Show / Hide + &ჩვენება/დაფარვა + + + Show or hide the main Window + მთავარი ფანჯრის ჩვენება/დაფარვა + + + Encrypt the private keys that belong to your wallet + თქვენი საფულის პირადი გასაღებების დაშიფრვა + + + Sign messages with your Myriadcoin addresses to prove you own them + მესიჯებზე ხელმოწერა თქვენი Bitcoin-მისამართებით იმის დასტურად, რომ ის თქვენია + + + Verify messages to ensure they were signed with specified Myriadcoin addresses + შეამოწმეთ, რომ მესიჯები ხელმოწერილია მითითებული Bitcoin-მისამართით + + + &File + &ფაილი + + + &Settings + &პარამეტრები + + + &Help + &დახმარება + + + Tabs toolbar + ბარათების პანელი + + + [testnet] + [testnet] + + + Myriadcoin Core + Myriadcoin Core + + + Request payments (generates QR codes and myriadcoin: URIs) + გადახდის მოთხოვნა (შეიქმნება QR-კოდები და myriadcoin: ბმულები) + + + &About Myriadcoin Core + Myriadcoin Core-ს შეს&ახებ + + + Show the list of used sending addresses and labels + გამოყენებული გაგზავნის მისამართებისა და ნიშნულების სიის ჩვენება + + + Show the list of used receiving addresses and labels + გამოყენებული მიღების მისამართებისა და ნიშნულების სიის ჩვენება + + + Open a myriadcoin: URI or payment request + myriadcoin: URI-ის ან გადახდის მოთხოვნის გახსნა + + + &Command-line options + საკომანდო სტრიქონის ოპ&ციები + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + Myriadcoin Core-ს დახმარების ჩვენება Bitcoin-ის საკომანდო სტრიქონის დასაშვები ოპციების სანახავად + + + Myriadcoin client + Bitcoin-კლიენტი + + + %n active connection(s) to Myriadcoin network + აქტიური მიერთებები ბითქოინის ქსელთან: %n + + + No block source available... + ბლოკების წყარო მიუწვდომელია... + + + Processed %1 of %2 (estimated) blocks of transaction history. + დამუშავებულია ტრანსაქციების ისტორიის %2-დან (სავარაუდოდ) %1 ბლოკი. + + + Processed %1 blocks of transaction history. + დამუშავებულია ტრანსაქციების ისტორიის %1 ბლოკი. + + + %n hour(s) + %n საათი + + + %n day(s) + %n დღე + + + %n week(s) + %n კვირა + + + %1 and %2 + %1 და %2 + + + %n year(s) + %n წელი + + + %1 behind + %1 გავლილია + + + Last received block was generated %1 ago. + ბოლო მიღებული ბლოკის გენერირებიდან გასულია %1 + + + Transactions after this will not yet be visible. + შემდგომი ტრანსაქციები ნაჩვენები ჯერ არ იქნება. + + + Error + შეცდომა + + + Warning + გაფრთხილება + + + Information + ინფორმაცია + + + Up to date + განახლებულია + + + Catching up... + ჩართვა... + + + Sent transaction + გაგზავნილი ტრანსაქციები + + + Incoming transaction + მიღებული ტრანსაქციები + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + თარიღი: %1 +თანხა: %2 +ტიპი: %3 +მისამართი: %4 + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + საფულე <b>დაშიფრულია</b> და ამჟამად <b>განბლოკილია</b> + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + საფულე <b>დაშიფრულია</b> და ამჟამად <b>დაბლოკილია</b> + + + A fatal error occurred. Myriadcoin can no longer continue safely and will quit. + ფატალური შეცდომა. Myriadcoin ვერ უზრუნველყოფს უსაფრთხო გაგრძელებას, ამიტომ იხურება. + + + + ClientModel + + Network Alert + ქსელური განგაში + + + + CoinControlDialog + + Coin Control Address Selection + მონეტების კონტროლის მისამართის არჩევა + + + Quantity: + რაოდენობა: + + + Bytes: + ბაიტები: + + + Amount: + თანხა: + + + Priority: + პრიორიტეტი: + + + Fee: + საკომისიო: + + + Low Output: + ქვედა ზღვარი: + + + After Fee: + დამატებითი საკომისიო: + + + Change: + ხურდა: + + + (un)select all + ყველას მონიშვნა/(მოხსნა) + + + Tree mode + განტოტვილი + + + List mode + სია + + + Amount + რაოდენობა + + + Address + მისამართი + + + Date + თარიღი + + + Confirmations + დადასტურება + + + Confirmed + დადასტურებულია + + + Priority + პრიორიტეტი + + + Copy address + მისამართის კოპირება + + + Copy label + ნიშნულის კოპირება + + + Copy amount + თანხის კოპირება + + + Copy transaction ID + ტრანსაქციის ID-ს კოპირება + + + Lock unspent + დაუხარჯავის დაბლოკვა + + + Unlock unspent + დაუხარჯავის განბლოკვა + + + Copy quantity + რაოდენობის კოპირება + + + Copy fee + საკომისიოს კოპირება + + + Copy after fee + დამატებითი საკომისიოს კოპირება + + + Copy bytes + ბაიტების კოპირება + + + Copy priority + პრიორიტეტის კოპირება + + + Copy low output + ქვედა ზღვრის კოპირება + + + Copy change + ხურდის კოპირება + + + highest + უმაღლესი + + + higher + უფრო მაღალი + + + high + მაღალი + + + medium-high + საშუალოზე მაღალი + + + medium + საშუალო + + + low-medium + საშუალოზე დაბალი + + + low + დაბალი + + + lower + უფრო დაბალი + + + lowest + უდაბლესი + + + (%1 locked) + (%1 დაბლოკილია) + + + none + ცარიელი + + + Dust + მტვერი + + + yes + კი + + + no + არა + + + This label turns red, if the transaction size is greater than 1000 bytes. + ნიშნული წითლდება, როცა ტრანსაქციის ზომა 1000 ბაიტზე მეტია. + + + This means a fee of at least %1 per kB is required. + ეს ნიშნავს, რომ კილობაიტზე საკომისიო იქნება მინიმუმ %1 + + + Can vary +/- 1 byte per input. + შეიძლება იყოს +/- 1 ბაიტი ყოველ შესავალზე. + + + Transactions with higher priority are more likely to get included into a block. + მეტი პრიორიტეტის ტრანსაქციებს მეტი შანსი აქვს მოხვდეს ბლოკში. + + + This label turns red, if the priority is smaller than "medium". + ნიშნული წითლდება, როცა პრიორიტეტი "საშუალო"-ზე დაბალია. + + + This label turns red, if any recipient receives an amount smaller than %1. + ნიშნული წითლდება, როცა რომელიმე რეციპიენტი მიიღებს %1-ზე ნაკლებს. + + + This means a fee of at least %1 is required. + ეს ნიშნავს, რომ საკომისიო იქნება მინიმუმ %1. + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + რეტრანსლაციის მინიმალური საკომისიოს 0.546-ზე ნაკლები თანხები ნაჩვენები იქნება როგორც მტვერი. + + + This label turns red, if the change is smaller than %1. + ნიშნული წითლდება, როცა ხურდა ნაკლებია %1-ზე. + + + (no label) + (არ არის ნიშნული) + + + change from %1 (%2) + ხურდა %1-დან (%2) + + + (change) + (ხურდა) + + + + EditAddressDialog + + Edit Address + მისამართის შეცვლა + + + &Label + ნიშნუ&ლი + + + The label associated with this address list entry + მისამართების სიის ამ ჩანაწერთან ასოცირებული ნიშნული + + + The address associated with this address list entry. This can only be modified for sending addresses. + მისამართების სიის ამ ჩანაწერთან მისამართი ასოცირებული. მისი შეცვლა შეიძლება მხოლოდ გაგზავნის მისამართის შემთხვევაში. + + + &Address + მის&ამართი + + + New receiving address + ახალი მიღების მისამართი + + + New sending address + ახალი გაგზავნის მისამართი + + + Edit receiving address + მიღების მისამართის შეცვლა + + + Edit sending address + გაგზავნის მისამართის შეცვლა + + + The entered address "%1" is already in the address book. + მისამართი "%1" უკვე არის მისამართების წიგნში. + + + The entered address "%1" is not a valid Myriadcoin address. + შეყვანილი მისამართი "%1" არ არის ვალიდური Bitcoin-მისამართი. + + + Could not unlock wallet. + საფულის განბლოკვა ვერ მოხერხდა. + + + New key generation failed. + ახალი გასაღების გენერირება ვერ მოხერხდა + + + + FreespaceChecker + + A new data directory will be created. + შეიქმნება ახალი მონაცემთა კატალოგი. + + + name + სახელი + + + Directory already exists. Add %1 if you intend to create a new directory here. + კატალოგი უკვე არსებობს. დაამატეთ %1 თუ გინდათ ახალი კატალოგის აქვე შექმნა. + + + Path already exists, and is not a directory. + მისამართი უკვე არსებობს და არ წარმოადგენს კატალოგს. + + + Cannot create data directory here. + კატალოგის აქ შექმნა შეუძლებელია. + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + Myriadcoin Core - საკომანდო სტრიქონის ოპციები + + + Myriadcoin Core + Myriadcoin Core + + + version + ვერსია + + + Usage: + გამოყენება: + + + command-line options + კომანდების ზოლის ოპციები + + + UI options + ინტერფეისის პარამეტრები + + + Set language, for example "de_DE" (default: system locale) + აირჩიეთ ენა, მაგალითად "de_DE" (ნაგულისხმევია სისტემური ლოკალი) + + + Start minimized + გაშვება მინიმიზებული ეკრანით + + + Set SSL root certificates for payment request (default: -system-) + + + + Show splash screen on startup (default: 1) + მისალმების ეკრანის ჩვენება გაშვებისას (ნაგულისხმევი:1) + + + Choose data directory on startup (default: 0) + მონაცემთა კატალოგის მითითება ყოველი გაშვებისას (ნაგულისხმევი: 0) + + + + Intro + + Welcome + მოგესალმებით + + + Welcome to Myriadcoin Core. + მოგესალმებათ Myriadcoin Core. + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + ეს პროგრამის პირველი გაშვებაა; შეგიძლიათ მიუთითოთ, სად შეინახოს მონაცემები Myriadcoin Core-მ. + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + Myriadcoin Core გადმოტვირთავს და შეინახავს Bitcoin-ის ბლოკთა ჯაჭვს. მითითებულ კატალოგში დაგროვდება სულ ცოტა 1 გბ მონაცემები, და მომავალში უფრო გაიზრდება. საფულეც ამავე კატალოგში შეინახება. + + + Use the default data directory + ნაგულისხმევი კატალოგის გამოყენება + + + Use a custom data directory: + მითითებული კატალოგის გამოყენება: + + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" can not be created. + შეცდომა: მითითებული მონაცემთა კატალოგი "%1" ვერ შეიქმნა. + + + Error + შეცდომა + + + GB of free space available + გიგაბაიტია თავისუფალი + + + (of %1GB needed) + (საჭიროა %1GB) + + + + OpenURIDialog + + Open URI + URI-ის გახსნა + + + Open payment request from URI or file + გადახდის მოთხოვნის შექმნა URI-იდან ან ფაილიდან + + + URI: + URI: + + + Select payment request file + გადახდის მოთხოვნის ფაილის არჩევა + + + Select payment request file to open + გადახდის მოთხოვნის ფაილის არჩევა გასახსნელად + + + + OptionsDialog + + Options + ოპციები + + + &Main + &მთავარი + + + Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. + დამატებითი საკომისიო თითო კილობაიტზე; აჩქარებს ტრანსაქციის შესრულებას. ტრანსაქციების უმეტესობა არის 1 კბ. + + + Pay transaction &fee + ტრანსაქციის სა&ფასურის გადახდა + + + Automatically start Myriadcoin after logging in to the system. + სისტემაში შესვლის შემდეგ Bitcoin-ის ავტომატური გაშვება. + + + &Start Myriadcoin on system login + &სისტემაში შესვლისას გაშვება + + + Size of &database cache + მონაცემთა ბაზის კეშის სი&დიდე + + + MB + MB + + + Number of script &verification threads + სკრიპტის &ვერიფიცირების ნაკადების რაოდენობა + + + Connect to the Myriadcoin network through a SOCKS proxy. + Bitcoin-ქსელზე მიერთება SOCKS-პროქსით. + + + &Connect through SOCKS proxy (default proxy): + SO&CKS (ნაგულისხმევი) პროქსი მიერთებისათვის: + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + პროქსის IP-მისამართი (მაგ.: IPv4: 127.0.0.1 / IPv6: ::1) + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + საკომანდო სტრიქონის აქტიური ოპციები, რომლებიც გადაფარავენ ზემოთნაჩვენებს: + + + Reset all client options to default. + კლიენტის ყველა პარამეტრის დაბრუნება ნაგულისხმევ მნიშვნელობებზე. + + + &Reset Options + დაბ&რუნების ოპციები + + + &Network + &ქსელი + + + (0 = auto, <0 = leave that many cores free) + + + + W&allet + ს&აფულე + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + დაუდასტურებელი ხურდის გამოყენების აკრძალვის შემდეგ მათი გამოყენება შეუძლებელი იქნება, სანამ ტრანსაქციას არ ექნება ერთი დასტური მაინც. ეს აისახება თქვენი ნაშთის დათვლაზეც. + + + &Spend unconfirmed change + + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. + როუტერში Bitcoin-კლიენტის პორტის ავტომატური გახსნა. მუშაობს, თუ თქვენს როუტერს ჩართული აქვს UPnP. + + + Map port using &UPnP + პორტის გადამისამართება &UPnP-ით + + + Proxy &IP: + პროქსის &IP: + + + &Port: + &პორტი + + + Port of the proxy (e.g. 9050) + პროქსის პორტი (მაგ.: 9050) + + + SOCKS &Version: + SOCKS &ვერსია: + + + SOCKS version of the proxy (e.g. 5) + პროქსის SOCKS-ვერსია (მაგ.: 5) + + + &Window + &ფანჯარა + + + Show only a tray icon after minimizing the window. + ფანჯრის მინიმიზებისას მხოლოდ იკონა სისტემურ ზონაში + + + &Minimize to the tray instead of the taskbar + &მინიმიზება სისტემურ ზონაში პროგრამების პანელის ნაცვლად + + + Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. + პროგრამის მინიმიზება ფანჯრის დახურვისას. ოპციის ჩართვის შემდეგ პროგრამის დახურვა შესაძლებელი იქნება მხოლოდ მენიუდან - პუნქტი "გასვლა". + + + M&inimize on close + მ&ინიმიზება დახურვისას + + + &Display + &ჩვენება + + + User Interface &language: + სამომხმარებ&ლო ენა: + + + The user interface language can be set here. This setting will take effect after restarting Myriadcoin. + აქ შეგიძლიათ აირჩიოთ სამომხმარებლო ენა. ძალაში შევა Bitcoin-ის რესტარტის შემდეგ. + + + &Unit to show amounts in: + ერთეუ&ლი: + + + Choose the default subdivision unit to show in the interface and when sending coins. + აირჩიეთ გასაგზავნი თანხის ნაგულისხმევი ერთეული. + + + Whether to show Myriadcoin addresses in the transaction list or not. + ტრანსაქციების სიაში იყოს თუ არა ნაჩვენები Bitcoin-მისამართები. + + + &Display addresses in transaction list + მისამართების &ჩვენება სიაში + + + Whether to show coin control features or not. + ვაჩვენოთ თუ არა მონეტების მართვის პარამეტრები. + + + &OK + &OK + + + &Cancel + &გაუქმება + + + default + ნაგულისხმევი + + + none + ცარიელი + + + Confirm options reset + დაადასტურეთ პარამეტრების დაბრუნება ნაგულისხმევზე + + + Client restart required to activate changes. + ცვლილებები ძალაში შევა კლიენტის ხელახალი გაშვების შემდეგ. + + + Client will be shutdown, do you want to proceed? + კლიენტი დაიხურება, გავაგრძელოთ? + + + This change would require a client restart. + ამ ცვლილებების ძალაში შესასვლელად საჭიროა კლიენტის დახურვა და ხელახალი გაშვება. + + + The supplied proxy address is invalid. + პროქსის მისამართი არასწორია. + + + + OverviewPage + + Form + ფორმა + + + The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. + ნაჩვენები ინფორმაცია შეიძლება მოძველებული იყოს. თქვენი საფულე ავტომატურად სინქრონიზდება Bitcoin-ის ქსელთან კავშირის დამყარების შემდეგ, ეს პროცესი ჯერ არ არის დასრულებული. + + + Wallet + საფულე + + + Available: + ხელმისაწვდომია: + + + Your current spendable balance + თქვენი ხელმისაწვდომი ნაშთი + + + Pending: + იგზავნება: + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + დასადასტურებელი ტრანსაქციების საერთო რაოდენობა, რომლებიც ჯერ არ არის ასახული ბალანსში + + + Immature: + მოუმზადებელია: + + + Mined balance that has not yet matured + მოპოვებული თანხა, რომელიც ჯერ არ არის მზადყოფნაში + + + Total: + სულ: + + + Your current total balance + თქვენი სრული მიმდინარე ბალანსი + + + <b>Recent transactions</b> + <b>ბოლო ტრანსაქციები</b> + + + out of sync + არ არის სინქრონიზებული + + + + PaymentServer + + URI handling + URI-ების დამუშავება + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + URI-ის დამუშავება ვერ მოხერხდა. შესაძლოა არასწორია Bitcoin-მისამართი ან URI-ის პარამეტრები. + + + Requested payment amount of %1 is too small (considered dust). + მოთხოვნილი გადახდის %1 მოცულობა ძალიან მცირეა (ითვლება "მტვრად") + + + Payment request error + გადახდის მოთხოვნის შეცდომა + + + Cannot start myriadcoin: click-to-pay handler + ვერ გაიშვა myriadcoin: click-to-pay + + + Net manager warning + გაფრთხილება ქსელის მენეჯერისაგან + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + თქვენს აქტიურ პროქსის არა აქვს SOCKS5-ის მხარდაჭერა, რაც საჭიროა გადახდების პროქსით განხორციელებისათვის. + + + Payment request fetch URL is invalid: %1 + არასწორია გადახდის მოთხოვნის URL: %1 + + + Payment request file handling + გადახდის მოთხოვნის ფაილის დამუშავება + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + ვერ ხერხდება გადახდის მოთხოვნის ფაილის წაკითხვა ან დამუშავება! შესაძლოა დაზიანებულია გადახდის მოთხოვნის ფაილი. + + + Unverified payment requests to custom payment scripts are unsupported. + არავერიფიცირებული გადახდის მოთხოვნები გადახდის სამომხმარებლო სკრიპტებისათვის არ არის მხარდაჭერილი. + + + Refund from %1 + დაბრუნება %1-საგან + + + Error communicating with %1: %2 + ვერ გამოდის კავშირზე %1: %2 + + + Payment request can not be parsed or processed! + ვერ ხერხდება გადახდის მოთხოვნის გარჩევა ან დამუშავება! + + + Bad response from server %1 + ცუდი პასუხი სერვერისაგან %1 + + + Payment acknowledged + გადახდა მიღებულია + + + Network request error + ქსელური მოთხოვნის შეცდომა + + + + QObject + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" does not exist. + შეცდომა: მითითებული მონაცემთა კატალოგი "%1" არ არსებობს. + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + + + + Error: Invalid combination of -regtest and -testnet. + შეცდომა: -regtest-ისა და -testnet-ის დაუშვებელი კომბინაცია. + + + Myriadcoin Core didn't yet exit safely... + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + შეიყვანეთ ბიტკოინ-მისამართი (მაგ. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + გამო&სახულების შენახვა + + + &Copy Image + გამოსახულების &კოპირება + + + Save QR Code + QR-კოდის შენახვა + + + PNG Image (*.png) + PNG სურათი (*.png) + + + + RPCConsole + + Client name + კლიენტი + + + N/A + მიუწვდ. + + + Client version + კლიენტის ვერსია + + + &Information + &ინფორმაცია + + + Debug window + დახვეწის ფანჯარა + + + General + საერთო + + + Using OpenSSL version + OpenSSL-ის ვერსია + + + Startup time + სტარტის დრო + + + Network + ქსელი + + + Name + სახელი + + + Number of connections + შეერთებების რაოდენობა + + + Block chain + ბლოკთა ჯაჭვი + + + Current number of blocks + ბლოკების მიმდინარე რაოდენობა + + + Estimated total blocks + ბლოკების სავარაუდო რაოდენობა + + + Last block time + ბოლო ბლოკის დრო + + + &Open + &შექმნა + + + &Console + &კონსოლი + + + &Network Traffic + &ქსელის ტრაფიკი + + + &Clear + &წაშლა + + + Totals + ჯამი + + + In: + შემომავალი: + + + Out: + გამავალი: + + + Build date + შექმნის დრო + + + Debug log file + დახვეწის ლოგ-ფაილი + + + Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. + გახსენით Bitcoin-ის დახვეწის ლოგ-ფაილი მიმდინარე კატალოგიდან. დიდი ლოგ-ფაილის შემთხვევაში ამას შეიძლება რამდენიმე წამი მოუნდეს. + + + Clear console + კონსოლის გასუფთავება + + + Welcome to the Myriadcoin RPC console. + მოგესალმებათ Bitcoin-ის RPC კონსოლი. + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + კლავიშები "ზევით" და "ქვევით" - ისტორიაში მოძრაობა, <b>Ctrl-L</b> - ეკრანის გასუფთავება. + + + Type <b>help</b> for an overview of available commands. + აკრიფეთ <b>help</b> ფაშვებული ბრძანებების სანახავად. + + + %1 B + %1 B + + + %1 KB + %1 KB + + + %1 MB + %1 MB + + + %1 GB + %1 GB + + + %1 m + %1 წთ + + + %1 h + %1 სთ + + + %1 h %2 m + %1 სთ %2 წთ + + + + ReceiveCoinsDialog + + &Amount: + თ&ანხა: + + + &Label: + ნიშნუ&ლი: + + + &Message: + &მესიჯი: + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + რომელიმე ადრე გამოყენებული მიღების მისამართის გამოყენება. ეს ამცირებს უსაფრთხოებასა და პრივატულობას. ნუ გამოიყენებთ ამ ოპციას, თუ არ ახდენთ ადრე მოთხოვნილი გადახდის ხელახლა გენერირებას. + + + R&euse an existing receiving address (not recommended) + ად&რე გამოყენებული მიღების მისამართის გამოყენება (არ არის რეკომენდებული) + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + არააუცილებელი მესიჯი, რომელიც ერთვის გადახდის მოთხოვნას და ნაჩვენები იქნება მოთხოვნის გახსნისას. შენიშვნა: მესიჯი არ გაყვება გადახდას ბითქოინის ქსელში. + + + An optional label to associate with the new receiving address. + არააუცილებელი ნიშნული ახალ მიღების მისამართთან ასოცირებისათვის. + + + Use this form to request payments. All fields are <b>optional</b>. + გამოიყენეთ ეს ფორმა გადახდის მოთხოვნისათვის. ყველა ველი <b>არააუცილებელია</b>. + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + მოთხოვნის მოცულობა. არააუცილებელია. ჩაწერეთ 0 ან დატოვეთ ცარიელი, თუ არ მოითხოვება კონკრეტული მოცულობა. + + + Clear all fields of the form. + ფორმის ყველა ველის წაშლა + + + Clear + წაშლა + + + Requested payments history + მოთხოვნილი გადახდების ისტორია + + + &Request payment + &გადახდის მოთხოვნა + + + Show the selected request (does the same as double clicking an entry) + არჩეული მოთხოვნის ჩვენება (იგივეა, რაც ჩანაწერზე ორჯერ ჩხვლეტა) + + + Show + ჩვენება + + + Remove the selected entries from the list + მონიშნული ჩანაწერების წაშლა სიიდან + + + Remove + წაშლა + + + Copy label + ნიშნულის კოპირება + + + Copy message + მესიჯის კოპირება + + + Copy amount + თანხის კოპირება + + + + ReceiveRequestDialog + + QR Code + QR-კოდი + + + Copy &URI + &URI-ის კოპირება + + + Copy &Address + მის&ამართის კოპირება + + + &Save Image... + გამო&სახულების შენახვა... + + + Request payment to %1 + %1-ის გადაზდის მოთხოვნა + + + Payment information + ინფორმაცია გადახდის შესახებ + + + URI + URI + + + Address + მისამართი + + + Amount + რაოდენობა + + + Label + ნიშნული + + + Message + მესიჯი + + + Resulting URI too long, try to reduce the text for label / message. + URI ძალიან გრძელი გამოდის, შეამოკლეთ ნიშნულის/მესიჯის ტექსტი. + + + Error encoding URI into QR Code. + შედომა URI-ის QR-კოდში გადაყვანისას. + + + + RecentRequestsTableModel + + Date + თარიღი + + + Label + ნიშნული + + + Message + მესიჯი + + + Amount + რაოდენობა + + + (no label) + (არ არის ნიშნული) + + + (no message) + (მესიჯები არ არის) + + + (no amount) + (თანხა არ არის) + + + + SendCoinsDialog + + Send Coins + მონეტების გაგზავნა + + + Coin Control Features + მონეტების კონტროლის პარამეტრები + + + Inputs... + ხარჯები... + + + automatically selected + არჩეულია ავტომატურად + + + Insufficient funds! + არ არის საკმარისი თანხა! + + + Quantity: + რაოდენობა: + + + Bytes: + ბაიტები: + + + Amount: + თანხა: + + + Priority: + პრიორიტეტი: + + + Fee: + საკომისიო: + + + Low Output: + ქვედა ზღვარი: + + + After Fee: + დამატებითი საკომისიო: + + + Change: + ხურდა: + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + ამის გააქტიურებისას თუ ხურდის მისამართი ცარიელია ან არასწორია, ხურდა გაიგზავნება ახლად გენერირებულ მისამართებზე. + + + Custom change address + ხურდის მისამართი + + + Send to multiple recipients at once + გაგზავნა რამდენიმე რეციპიენტთან ერთდროულად + + + Add &Recipient + &რეციპიენტის დამატება + + + Clear all fields of the form. + ფორმის ყველა ველის წაშლა + + + Clear &All + გ&ასუფთავება + + + Balance: + ბალანსი: + + + Confirm the send action + გაგზავნის დადასტურება + + + S&end + გაგ&ზავნა + + + Confirm send coins + მონეტების გაგზავნის დადასტურება + + + %1 to %2 + %1-დან %2-ში + + + Copy quantity + რაოდენობის კოპირება + + + Copy amount + თანხის კოპირება + + + Copy fee + საკომისიოს კოპირება + + + Copy after fee + დამატებითი საკომისიოს კოპირება + + + Copy bytes + ბაიტების კოპირება + + + Copy priority + პრიორიტეტის კოპირება + + + Copy low output + ქვედა ზღვრის კოპირება + + + Copy change + ხურდის კოპირება + + + Total Amount %1 (= %2) + ჯამური თანხა %1 (= %2) + + + or + ან + + + The recipient address is not valid, please recheck. + მიმღების მისამართი არასწორია, შეამოწმეთ. + + + The amount to pay must be larger than 0. + გადახდის მოცულობა 0-ზე მეტი უნდა იყოს + + + The amount exceeds your balance. + თანხა აღემატება თქვენს ბალანსს + + + The total exceeds your balance when the %1 transaction fee is included. + საკომისიო 1%-ის დამატების შემდეგ თანხა აჭარბებს თქვენს ბალანსს + + + Duplicate address found, can only send to each address once per send operation. + მისამართები დუბლირებულია, დაშვებულია ერთ ჯერზე თითო მისამართზე ერთხელ გაგზავნა. + + + Transaction creation failed! + შეცდომა ტრანსაქციის შექმნისას! + + + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + ტრანსაქცია უარყოფილია! შესაძლოა მონეტების ნაწილი თქვენი საფულიდან უკვე გამოყენებულია, რაც შეიძლება მოხდეს wallet.dat-ის ასლის გამოყენებისას, როცა მონეტები გაიგზავნა სხვა ასლიდან, აქ კი არ არის გაგზავნილად მონიშნული. + + + Warning: Invalid Myriadcoin address + ყურადღება: არასწორია Bitcoin-მისამართი + + + (no label) + (არ არის ნიშნული) + + + Warning: Unknown change address + ყურადღება: უცნობია ხურდის მისამართი + + + Are you sure you want to send? + დარწმუნებული ხართ, რომ გინდათ გაგზავნა? + + + added as transaction fee + დამატებულია საკომისიო + + + Payment request expired + გადახდის მოთხოვნას ვადა გაუვიდა + + + Invalid payment address %1 + გადახდის მისამართი არასწორია: %1 + + + + SendCoinsEntry + + A&mount: + &რაოდენობა + + + Pay &To: + ადრესა&ტი: + + + The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + მისამართი, რომლითაც ასრულებთ გადახდას (მაგ.: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + Enter a label for this address to add it to your address book + შეიყვანეთ ამ მისამართის ნიშნული მისამართების წიგნში დასამატებლად + + + &Label: + ნიშნუ&ლი: + + + Choose previously used address + აირჩიეთ ადრე გამოყენებული მისამართი + + + This is a normal payment. + ეს არის ჩვეულებრივი გადახდა. + + + Alt+A + Alt+A + + + Paste address from clipboard + მისამართის ჩასმა კლიპბორდიდან + + + Alt+P + Alt+P + + + Remove this entry + ჩანაწერის წაშლა + + + Message: + მესიჯი: + + + This is a verified payment request. + ეს არის ვერიფიცირებული გადახდის მოთხოვნა. + + + Enter a label for this address to add it to the list of used addresses + შეიყვანეთ ამ მისამართის ნიშნული გამოყენებული მისამართების სიაში დასამატებლად + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + მესიჯი, რომელიც თან ერთვის მონეტებს: URI, რომელიც შეინახება ტრანსაქციასთან ერთად თქვენთვის. შენიშვნა: მესიჯი არ გაყვება გადახდას ბითქოინის ქსელში. + + + This is an unverified payment request. + ეს არის არავერიფიცირებული გადახდის მოთხოვნა. + + + Pay To: + ადრესატი: + + + Memo: + შენიშვნა: + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + Myriadcoin Core იხურება... + + + Do not shut down the computer until this window disappears. + არ გამორთოთ კომპიუტერი ამ ფანჯრის გაქრობამდე. + + + + SignVerifyMessageDialog + + Signatures - Sign / Verify a Message + ხელმოწერები - მესიჯის ხელმოწერა/ვერიფიკაცია + + + &Sign Message + მე&სიჯის ხელმოწერა + + + You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. + ხელმოწერით თქვენ ადასტურებთ, რომ მესიჯი თქვენია. ფრთხილად - არ მოაწეროთ ხელი რაიმე საეჭვოს: ფიშინგური ხრიკებით შეიძლება ის თქვენს მესიჯად გაასაღონ. მოაწერეთ ხელი მხოლოდ იმას, რასაც ყველა წვრილმანში ეთანხმებით. + + + The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + მისამართი, რომლითაც ხელს აწერთ (მაგ.: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + Choose previously used address + აირჩიეთ ადრე გამოყენებული მისამართი + + + Alt+A + Alt+A + + + Paste address from clipboard + მისამართის ჩასმა კლიპბორდიდან + + + Alt+P + Alt+P + + + Enter the message you want to sign here + აკრიფეთ ხელმოსაწერი მესიჯი + + + Signature + ხელმოწერა + + + Copy the current signature to the system clipboard + მიმდინარე ხელმოწერის კოპირება კლიპბორდში + + + Sign the message to prove you own this Myriadcoin address + მოაწერეთ ხელი იმის დასადასტურებლად, რომ ეს მისამართი თქვენია + + + Sign &Message + &მესიჯის ხელმოწერა + + + Reset all sign message fields + ხელმოწერის ყველა ველის წაშლა + + + Clear &All + გ&ასუფთავება + + + &Verify Message + მესიჯის &ვერიფიკაცია + + + Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. + შეიყვანეთ ხელმოწერის მისამართი, მესიჯი (დაუკვირდით, რომ ზუსტად იყოს კოპირებული სტრიქონის გადატანები, ჰარები, ტაბულაციები და სხვ) და ხელმოწერა მესიჯის ვერიფიკაციისათვის. მიაქციეთ ყურადღება, რომ რაიმე ზედმეტი არ გაგყვეთ კოპირებისას, რათა არ გახდეთ "man-in-the-middle" შეტევის ობიექტი. + + + The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + მისამართი, რომლითაც ხელმოწერილია მესიჯი (მაგ.: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + Verify the message to ensure it was signed with the specified Myriadcoin address + შეამოწმეთ, რომ მესიჯი ხელმოწერილია მითითებული Bitcoin-მისამართით + + + Verify &Message + &მესიჯის ვერიფიკაცია + + + Reset all verify message fields + ვერიფიკაციის ყველა ველის წაშლა + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + შეიყვანეთ ბიტკოინ-მისამართი (მაგ. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + Click "Sign Message" to generate signature + ხელმოწერის გენერირებისათვის დააჭირეთ "მესიჯის ხელმოწერა"-ს + + + The entered address is invalid. + შეყვანილი მისამართი არასწორია. + + + Please check the address and try again. + შეამოწმეთ მისამართი და სცადეთ ხელახლა. + + + The entered address does not refer to a key. + შეყვანილი მისამართი არ არის კავშირში გასაღებთან. + + + Wallet unlock was cancelled. + საფულის განბლოკვა შეწყვეტილია. + + + Private key for the entered address is not available. + ამ მისამართისათვის პირადი გასაღები მიუწვდომელია. + + + Message signing failed. + ვერ მოხერხდა მესიჯის ხელმოწერა. + + + Message signed. + მესიჯი ხელმოწერილია. + + + The signature could not be decoded. + ხელმოწერის დეკოდირება ვერ ხერხდება. + + + Please check the signature and try again. + შეამოწმეთ ხელმოწერა და სცადეთ ხელახლა. + + + The signature did not match the message digest. + ხელმოწერა არ შეესაბამება მესიჯის დაიჯესტს. + + + Message verification failed. + მესიჯის ვერიფიკაცია ვერ მოხერხდა. + + + Message verified. + მესიჯი ვერიფიცირებულია. + + + + SplashScreen + + Myriadcoin Core + Myriadcoin Core + + + The Myriadcoin Core developers + Myriadcoin Core-ს ავტორები + + + [testnet] + [testnet] + + + + TrafficGraphWidget + + KB/s + KB/s + + + + TransactionDesc + + Open until %1 + ღია იქნება სანამ %1 + + + conflicted + კონფლიქტშია + + + %1/offline + %1/გათიშულია + + + %1/unconfirmed + %1/დაუდასტურებელია + + + %1 confirmations + %1 დადასტურებულია + + + Status + სტატუსი + + + , broadcast through %n node(s) + , დაგზავნილია %n კვანძისათვის + + + Date + თარიღი + + + Source + წყარო + + + Generated + გენერირებულია + + + From + გამგზავნი + + + To + მიმღები + + + own address + საკუთარი მისამართი + + + label + ნიშნული + + + Credit + კრედიტი + + + matures in %n more block(s) + მზად იქნება %n ბლოკის შემდეგ + + + not accepted + უარყოფილია + + + Debit + დებიტი + + + Transaction fee + ტრანსაქციის საფასური - საკომისიო + + + Net amount + სუფთა თანხა + + + Message + მესიჯი + + + Comment + შენიშვნა + + + Transaction ID + ტრანსაქციის ID + + + Merchant + გამყიდველი + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + გენერირებული მონეტები გასაგზავნად მომწიფდება %1 ბლოკის შემდეგ. ეს ბლოკი გენერირების შემდეგ გავრცელებულ იქნა ქსელში ბლოკთა ჯაჭვზე დასამატებლად. თუ ის ვერ ჩაჯდა ჯაჭვში, მიეცემა სტატუსი "უარყოფილია" და ამ მონეტებს ვერ გამოიყენებთ. ასეთი რამ შეიძლება მოხდეს, თუ რომელიმე კვანძმა რამდენიმე წამით დაგასწროთ ბლოკის გენერირება. + + + Debug information + დახვეწის ინფორმაცია + + + Transaction + ტრანსაქცია + + + Inputs + ხარჯები + + + Amount + თანხა + + + true + ჭეშმარიტი + + + false + მცდარი + + + , has not been successfully broadcast yet + , დაგზავნა არ არის წარმატებით დასრულებული + + + Open for %n more block(s) + ღიაა კიდევ %n ბლოკისათვის + + + unknown + უცნობია + + + + TransactionDescDialog + + Transaction details + ტრანსაქციის დეტალები + + + This pane shows a detailed description of the transaction + ტრანსაქციის დაწვრილებითი აღწერილობა + + + + TransactionTableModel + + Date + თარიღი + + + Type + ტიპი + + + Address + მისამართი + + + Amount + რაოდენობა + + + Immature (%1 confirmations, will be available after %2) + არ არის მომწიფებული (%1 დასტური, საჭიროა სულ %2) + + + Open for %n more block(s) + ღიაა კიდევ %n ბლოკისათვის + + + Open until %1 + ღია იქნება სანამ %1 + + + Confirmed (%1 confirmations) + დადასტურებულია (%1დასტური) + + + This block was not received by any other nodes and will probably not be accepted! + ეს ბლოკი არ არის მიღებული არცერთი კვანძის მიერ და სავარაუდოდ უარყოფილია! + + + Generated but not accepted + გენერირებულია, მაგრამ უარყოფილია + + + Offline + ოფლაინშია + + + Unconfirmed + დაუდასტურებელია + + + Confirming (%1 of %2 recommended confirmations) + დადასტურებულია (%1, რეკომენდებულია %2) + + + Conflicted + კონფლიქტშია + + + Received with + მიღებულია + + + Received from + გამომგზავნი + + + Sent to + გაგზავნილია ადრესატთან + + + Payment to yourself + გადახდილია საკუთარი თავისათვის + + + Mined + მოპოვებულია + + + (n/a) + (მიუწვდ.) + + + Transaction status. Hover over this field to show number of confirmations. + ტრანსაქციის სტატუსი. ველზე კურსორის შეყვანისას გამოჩნდება დასტურების რაოდენობა. + + + Date and time that the transaction was received. + ტრანსაქციის მიღების თარიღი და დრო. + + + Type of transaction. + ტრანსაქციის ტიპი. + + + Destination address of transaction. + ტრანსაქიის დანიშნულების მისამართი. + + + Amount removed from or added to balance. + ბალანსიდან მოხსნილი ან დამატებული თანხა. + + + + TransactionView + + All + ყველა + + + Today + დღეს + + + This week + ამ კვირის + + + This month + ამ თვის + + + Last month + ბოლო თვის + + + This year + ამ წლის + + + Range... + შუალედი... + + + Received with + შემოსულია + + + Sent to + გაგზავნილია + + + To yourself + საკუთარი თავისათვის + + + Mined + მოპოვებულია + + + Other + სხვა + + + Enter address or label to search + შეიყვანეთ საძებნი მისამართი ან ნიშნული + + + Min amount + მინ. თანხა + + + Copy address + მისამართის კოპირება + + + Copy label + ნიშნულის კოპირება + + + Copy amount + თანხის კოპირება + + + Copy transaction ID + ტრანსაქციის ID-ს კოპირება + + + Edit label + ნიშნულის რედაქტირება + + + Show transaction details + ტრანსაქციის დეტალების ჩვენება + + + Export Transaction History + ტრანსაქციების ისტორიის ექსპორტი + + + Exporting Failed + ექსპორტი ვერ განხორციელდა + + + There was an error trying to save the transaction history to %1. + შეცდომა %1-ში ტრანსაქციების შენახვის მცდელობისას. + + + Exporting Successful + ეხპორტი განხორციელებულია + + + The transaction history was successfully saved to %1. + ტრანსაქციების ისტორია შენახულია %1-ში. + + + Comma separated file (*.csv) + CSV-ფაილი (*.csv) + + + Confirmed + დადასტურებულია + + + Date + თარიღი + + + Type + ტიპი + + + Label + ნიშნული + + + Address + მისამართი + + + Amount + თანხა + + + ID + ID + + + Range: + შუალედი: + + + to + - + + + + WalletFrame + + No wallet has been loaded. + არ არის ჩატვირთული საფულე. + + + + WalletModel + + Send Coins + მონეტების გაგზავნა + + + + WalletView + + &Export + &ექსპორტი + + + Export the data in the current tab to a file + ამ ბარათიდან მონაცემების ექსპორტი ფაილში + + + Backup Wallet + საფულის არქივირება + + + Wallet Data (*.dat) + საფულის მონაცემები (*.dat) + + + Backup Failed + არქივირება ვერ მოხერხდა + + + There was an error trying to save the wallet data to %1. + შეცდომა %1-ში საფულის მონაცემების შენახვის მცდელობისას. + + + The wallet data was successfully saved to %1. + საფულის მონაცემები შენახულია %1-ში. + + + Backup Successful + არქივირება შესრულებულია + + + + bitcoin-core + + Usage: + გამოყენება: + + + List commands + ბრძანებები + + + Get help for a command + ბრძანების აღწერილობა + + + Options: + ოპციები: + + + Specify configuration file (default: myriadcoin.conf) + მიუთითეთ საკონფიგურაციო ფაილი (ნაგულისხმევია: myriadcoin.conf) + + + Specify pid file (default: myriadcoind.pid) + მიუთითეთ pid ფაილი (ნაგულისხმევია: myriadcoind.pid) + + + Specify data directory + მიუთითეთ მონაცემთა კატალოგი + + + Listen for connections on <port> (default: 8333 or testnet: 18333) + მიყურადება პორტზე <port> (ნაგულისხმევი: 8333 ან სატესტო ქსელში: 18333) + + + Maintain at most <n> connections to peers (default: 125) + არაუმეტეს <n> შეერთებისა პირებზე (ნაგულისხმევი: 125) + + + Connect to a node to retrieve peer addresses, and disconnect + მიერთება კვანძთან, პირების მისამართების მიღება და გათიშვა + + + Specify your own public address + მიუთითეთ თქვენი საჯარო მისამართი + + + Threshold for disconnecting misbehaving peers (default: 100) + არასწორად მოქმედი პირების გათიშვის ზღვარი (ნაგულისხმევი:100) + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + არასწორად მოქმედი პირების ბლოკირების დრო წამებში (ნაგულისხმევი: 86400) + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + შეცდომა %u RPC-პორტის მიყურადების ჩართვისას IPv4 მისამართზე: %s + + + Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) + JSON-RPC-შეერთებების მიყურადება პორტზე <port> (ნაგულისხმევი: 8332 ან სატესტო ქსელში: 18332) + + + Accept command line and JSON-RPC commands + საკომანდო სტრიქონისა და JSON-RPC-კომამდების ნებართვა + + + Myriadcoin Core RPC client version + + + + Run in the background as a daemon and accept commands + რეზიდენტულად გაშვება და კომანდების მიღება + + + Use the test network + სატესტო ქსელის გამოყენება + + + Accept connections from outside (default: 1 if no -proxy or -connect) + გარედან შეერთებების დაშვება (ნაგულისხმევი: 1 თუ არ გამოიყენება -proxy ან -connect) + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=myriadcoinrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com + + %s, მიუთითეთ rpcpassword საკონფიგურაციო ფაილში: +%s +რეკომენდებულია შემდეგი შემთხვევითი პაროლი: +rpcuser=myriadcoinrpc +rpcpassword=%s +(ამის დამახსოვრება არ გჭირდებათ) +სახელი და პაროლი ერთმანეთს არ უნდა ემთხვეოდეს. +თუ ფაილი არ არსებობს, შექმენით იგი უფლებებით owner-readable-only. +ასევე რეკომენდებულია დააყენოთ alertnotify რათა მიიღოთ შეტყობინებები პრობლემების შესახებ; +მაგალითად: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + დაშვებული ალგორითმები (ნაგულისხმევი: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + შეცდომა %u RPC-პორტის მიყურადების ჩართვისას IPv6 მისამართზე, ვბრუნდებით IPv4-ზე : %s + + + Bind to given address and always listen on it. Use [host]:port notation for IPv6 + მოცემულ მისამართზე მიჯაჭვა მუდმივად მასზე მიყურადებით. გამოიყენეთ [host]:port ფორმა IPv6-სათვის + + + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + შესვლა რეგრესული ტესტირების რეჟიმში; სპეციალური ჯაჭვის გამოყენებით ბლოკების პოვნა ხდება დაუყოვნებლივ. გამოიყენება რეგრესული ტესტირების ინსტრუმენტებისა და პროგრამების შემუშავებისას. + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + გადასვლა რეგრესული ტესტირების რეჟიმში, რომელიც იყენებს სპეციალურ ჯაჭვს ბლოკების დაუყოვნებლივი პოვნის შესაძლებლობით. + + + Error: Listening for incoming connections failed (listen returned error %d) + + + + Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + შეცდომა: ტრანსაქცია უარყოფილია! შესაძლოა მონეტების ნაწილი თქვენი საფულიდან უკვე გამოყენებულია, რაც შეიძლება მოხდეს wallet.dat-ის ასლის გამოყენებისას, როცა მონეტები გაიგზავნა სხვა ასლიდან, აქ კი არ არის გაგზავნილად მონიშნული. + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! + შეცდომა: ტრანსაქცია მოითხოვს საკომისიოს მინიმუმ %s რაოდენობის, სირთულის ან ბოლოს მიღებული თანხების შესაბამისად! + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + კომანდის შესრულება საფულის ტრანსაქციის ცვლილებისას (%s კომანდაში ჩანაცვლდება TxID-ით) + + + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + + + + This is a pre-release test build - use at your own risk - do not use for mining or merchant applications + ეს არის წინასწარი სატესტო ვერსია - გამოიყენეთ საკუთარი რისკით - არ გამოიყენოთ მოპოვებისა ან კომერციული მიზნებისათვის + + + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + ფარული Tor-სერვისებით პირების წვდომისათვის სხვა SOCKS5 პროქსის გამოყენება (ნაგულისხმევია: -proxy) + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + ყურადღება: ძალიან მაღალია -paytxfee - საკომისო, რომელსაც თქვენ გადაიხდით ამ ტრანსაქციის გაგზავნის საფასურად. + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. + ყურადღება: შეამოწმეთ თქვენი კომპიუტერის სისტემური თარიღი და დრო! თუ ისინი არასწორია, Myriadcoin ვერ იმუშავებს კორექტულად. + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + ყურადღება: ქსელში შეუთანხმებლობაა. შესაძლოა ცალკეულ მომპოვებლებს პრობლემები ექმნებათ! + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + ყურადღება: ჩვენ არ ვეთანხმებით ყველა პირს. შესაძლოა თქვენ ან სხვა კვანძებს განახლება გჭირდებათ. + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + ყურადღება: არ იკითხება wallet.dat! ყველა გასაღები წაკითხულია, მაგრამ გამორჩენილი ან არასწორია ტრანსაქციის თარიღი ან ჩანაწერები მისამართების წიგნში. + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + ყურადღება: wallet.dat დაზიანებულია! ორიგინალური wallet.dat შენახულია როგორც wallet.{timestamp}.bak %s-ში; თუ შეამჩნიეთ უზუსტობა ნაშთში ან ტრანსაქციებში, აღადგინეთ არქივიდან. + + + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + <category> შეიძლება იყოს: + + + Attempt to recover private keys from a corrupt wallet.dat + პირადი გასაღებების აღდგენის მცდელობა wallet.dat-იდან + + + Myriadcoin Core Daemon + Myriadcoin Core დემონი + + + Block creation options: + ბლოკის შექმნის ოპციები: + + + Clear list of wallet transactions (diagnostic tool; implies -rescan) + საფულის ტრანსაქციების სიის წაშლა (დიაგნოსტიკის საშუალება; მოიცავს -rescan-ს) + + + Connect only to the specified node(s) + შეერთება მხოლოდ მითითებულ კვანძ(ებ)თან + + + Connect through SOCKS proxy + შეერთება SOCKS-პროქსით + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + JSON-RPC-შეერთება პორტზე <port> (ნაგულისხმევი: 8332 ან სატესტო ქსელში: 18332) + + + Connection options: + + + + Corrupted block database detected + შენიშნულია ბლოკთა ბაზის დაზიანება + + + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + + Discover own IP address (default: 1 when listening and no -externalip) + საკუთარი IP-მისამართის განსაზღვრა (ნაგულისხმევი: 1 თუ ჩართულია მიყურადება და არ გამოიყენება -externalip) + + + Do not load the wallet and disable wallet RPC calls + არ ჩაიტვირთოს საფულე და აიკრძალოს საფულისადმი RPC-მიმართვები + + + Do you want to rebuild the block database now? + გავუშვათ ბლოკთა ბაზის ხელახლა აგება ეხლა? + + + Error initializing block database + ვერ ინიციალიზდება ბლოკების ბაზა + + + Error initializing wallet database environment %s! + ვერ ინიციალიზდება საფულის ბაზის გარემო %s! + + + Error loading block database + არ იტვირთება ბლოკების ბაზა + + + Error opening block database + ბლოკთა ბაზის შექმნა ვერ მოხერხდა + + + Error: Disk space is low! + შეცდომა: დისზე არ არის ადგილი! + + + Error: Wallet locked, unable to create transaction! + შეცდომა: საფულე დაბლოკილია, ტრანსაქცია ვერ შეიქმნება! + + + Error: system error: + შეცდომა: სისტემური შეცდომა: + + + Failed to listen on any port. Use -listen=0 if you want this. + ვერ ხერხდება პორტების მიყურადება. თუ გსურთ, გამოიყენეთ -listen=0. + + + Failed to read block info + ბლოკის ინფორმაცია არ იკითხება + + + Failed to read block + ბლოკი არ იკითხება + + + Failed to sync block index + ბლოკების ინდექსის სინქრონიზება ვერ მოხერხდა + + + Failed to write block index + ბლოკების ინდექსის ჩაწერა ვერ მოხერხდა + + + Failed to write block info + ბლოკის ინფორმაციის ჩაწერა ვერ მოხერხდა + + + Failed to write block + ბლოკის ჩაწერა ვერ მოხერხდა + + + Failed to write file info + ფაილის ინფორმაციის ჩაწერა ვერ მოხერხდა + + + Failed to write to coin database + მონეტების ბაზის ჩაწერა ვერ მოხერხდა + + + Failed to write transaction index + ტრანსაქციების ინდექსის ჩაწერა ვერ მოხერხდა + + + Failed to write undo data + ცვლილებების გაუქმების მონაცემთა ჩაწერა ვერ მოხერხდა + + + Fee per kB to add to transactions you send + საკომისო კბ-ზე, რომელიც დაემატება გაგზავნილ ტრანსაქციას + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + + Find peers using DNS lookup (default: 1 unless -connect) + პირების ძებნა DNS-ით (ნაგულისხმევი: 1 გარდა -connect-ისა) + + + Force safe mode (default: 0) + + + + Generate coins (default: 0) + მონეტების გენერირება (ნაგულისხმევი: 0) + + + How many blocks to check at startup (default: 288, 0 = all) + რამდენი ბლოკი შემოწმდეს გაშვებისას (ნაგულისხმევი: 288, 0 - ყველა) + + + If <category> is not supplied, output all debugging information. + თუ <category> არ არის მითითებული, ნაჩვენები იქნება სრული დახვეწის ინფორმაცია. + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + საწყისი ბლოკი არ არსებობს ან არასწორია. ქსელის მონაცემთა კატალოგი datadir ხომ არის არასწორი? + + + Invalid -onion address: '%s' + არასწორია მისამართი -onion: '%s' + + + Not enough file descriptors available. + არ არის საკმარისი ფაილ-დესკრიპტორები. + + + Prepend debug output with timestamp (default: 1) + დაემატოს დახვეწის ინფორმაციას დროის ჭდეები (ნაგულისხმევი: 1) + + + RPC client options: + RPC კლიენტის ოპციები: + + + Rebuild block chain index from current blk000??.dat files + ბლოკთა ჯაჭვის ინდექსის ხელახლა აგება blk000??.dat ფაილიდან + + + Select SOCKS version for -proxy (4 or 5, default: 5) + SOCKS-ვერსიის არჩევა -proxy-სათვის (4 ან 5, ნაგულისხმევი: 5) + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + ბლოკის მაქსიმალური ზომის განსაზღვრა ბაიტებში (ნადულისხმევი: %d) + + + Set the number of threads to service RPC calls (default: 4) + RPC-ნაკადების რაოდენობა (ნაგულისხმევი: 4) + + + Specify wallet file (within data directory) + მიუთითეთ საფულის ფაილი (კატალოგში) + + + Spend unconfirmed change when sending transactions (default: 1) + დაუდასტურებელი ხურდის გამოყენება ტრანსაქციის გაგზავნისას (ნაგულისხმევი: 1) + + + This is intended for regression testing tools and app development. + გამოიყენება რეგრესული ტესტირების ინსტრუმენტებისა და პროგრამების შემუშავებისას. + + + Usage (deprecated, use myriadcoin-cli): + გამოყენება (მოძველებულია, გამოიყენეთ myriadcoin-cli): + + + Verifying blocks... + ბლოკების ვერიფიკაცია... + + + Verifying wallet... + საფულის ვერიფიკაცია... + + + Wait for RPC server to start + RPC-სერვერის დალოდება გაშვებისათვის + + + Wallet %s resides outside data directory %s + საფულე %s მდებარეობს მონაცემთა კატალოგის %s გარეთ + + + Wallet options: + სფულის ოპციები: + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + ყურადღება: მოძველებული არგუმენტი -debugnet იგნორირდება. გამოიყენეთ -debug=net + + + You need to rebuild the database using -reindex to change -txindex + საჭიროა ბაზის ხელახალი აგება, გამოიყენეთ -reindex რათა შეცვალოთ -txindex + + + Imports blocks from external blk000??.dat file + ბლოკების იმპორტი გარე blk000??.dat ფაილიდან + + + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + ბრძანების შესრულება შესაბამისი უწყების მიღებისას ან როცა შეინიშნება საგრძნობი გახლეჩა (cmd-ში %s შეიცვლება მესიჯით) + + + Output debugging information (default: 0, supplying <category> is optional) + დახვეწის ინფორმაციის გამოყვანა (ნაგულისხმევი: 0, <category> - არააუცილებელი არგუმენტია) + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + მაღალპრიორიტეტული/დაბალსაკომისიოიანი ტრანსაქციების მაქსიმალური ზომა ბაიტებში (ნაგულისხმევი: %d) + + + Information + ინფორმაცია + + + Invalid amount for -minrelaytxfee=<amount>: '%s' + დაუშვებელი მნიშვნელობა -minrelaytxfee=<amount>: '%s' + + + Invalid amount for -mintxfee=<amount>: '%s' + დაუშვებელი მნიშვნელობა -mintxfee=<amount>: '%s' + + + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + + Maintain a full transaction index (default: 0) + ტრანსაქციის სრული ინდექსი (ნაგულისხმევი: 0) + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + მიღების ბუფერის მაქსიმალური ზომა შეერთებაზე, <n>*1000 ბაიტი (ნაგულისხმევი: 5000) + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + გაგზავნის ბუფერის მაქსიმალური ზომა შეერთებაზე, <n>*1000 ბაიტი (ნაგულისხმევი: 5000) + + + Only accept block chain matching built-in checkpoints (default: 1) + ბლოკთა ჯაჭვი მიიღეთ მხოლოდ მაშინ, თუ ემთხვევა შიდა ჩეკპოინტები (ნაგულისხმევი: 1) + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + შეერთება მხოლოდ <net> ქსელის კვანძებთან (IPv4, IPv6 ან Tor) + + + Print block on startup, if found in block index + + + + Print block tree on startup (default: 0) + + + + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + + + + SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + SSL ოპციები: (იხილე Myriadcoin Wiki-ში SSL-ს მოწყობის ინსტრუქციები) + + + Send command to Myriadcoin Core + + + + Send trace/debug info to console instead of debug.log file + ტრასირების/დახვეწის ინფოს გაგზავნა კონსოლზე debug.log ფაილის ნაცვლად + + + Set minimum block size in bytes (default: 0) + დააყენეთ ბლოკის მინიმალური ზომა ბაიტებში (ნაგულისხმევი: 0) + + + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + debug.log ფაილის შეკუმშვა გაშვებისას (ნაგულისხმევია: 1 როცა არ აყენია -debug) + + + Signing transaction failed + ტრანსაქციების ხელმოწერა ვერ მოხერხდა + + + Specify connection timeout in milliseconds (default: 5000) + მიუთითეთ შეერთების ტაიმაუტი მილიწამებში (ნაგულისხმევი: 5000) + + + Start Myriadcoin Core Daemon + + + + System error: + სისტემური შეცდომა: + + + Transaction amount too small + ტრანსაქციების რაოდენობა ძალიან ცოტაა + + + Transaction amounts must be positive + ტრანსაქციების რაოდენობა დადებითი რიცხვი უნდა იყოს + + + Transaction too large + ტრანსაქცია ძალიან დიდია + + + Use UPnP to map the listening port (default: 0) + გამოიყენეთ UPnP მისაყურადებელი პორტის გადასამისამართებლად (ნაგულისხმევი: 0) + + + Use UPnP to map the listening port (default: 1 when listening) + გამოიყენეთ UPnP მისაყურადებელი პორტის გადასამისამართებლად (ნაგულისხმევი: 1 როცა ჩართულია მიყურადება) + + + Username for JSON-RPC connections + მომხმარებლის სახელი JSON-RPC-შეერთებისათვის + + + Warning + გაფრთხილება + + + Warning: This version is obsolete, upgrade required! + ყურადღება: ვერსია მოძველებულია, საჭიროა განახლება! + + + Zapping all transactions from wallet... + ტრანსაქციების ჩახსნა საფულიდან... + + + on startup + + + + version + ვერსია + + + wallet.dat corrupt, salvage failed + wallet.dat დაზიანებულია, აღდგენა ვერ მოხერხდა + + + Password for JSON-RPC connections + პაროლი JSON-RPC-შეერთებისათვის + + + Allow JSON-RPC connections from specified IP address + JSON-RPC-შეერთების ნებართვა მითითებული IP მისამართიდან + + + Send commands to node running on <ip> (default: 127.0.0.1) + კომანდის გაგზავნა კვანძისათვის, რომელიც გაშვებულია მისამართზე <ip> (ნაგულისხმევი: 127.0.0.1) + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + კომანდის შესრულება უკეთესი ბლოკის გამოჩენისას (%s კომანდაში ჩანაცვლდება ბლოკის ჰეშით) + + + Upgrade wallet to latest format + საფულის ფორმატის განახლება + + + Set key pool size to <n> (default: 100) + გასაღების პულის ზომა იქნება <n> (ნაგულისხმევი: 100) + + + Rescan the block chain for missing wallet transactions + ბლოკების ჯაჭვის გადამოწმება საფულეში გამორჩენილ ტრანსაქციებზე + + + Use OpenSSL (https) for JSON-RPC connections + OpenSSL-ის (https) გამოყენება JSON-RPC-შეერთებებისათვის + + + Server certificate file (default: server.cert) + სერვერის სერტიფიკატის ფაილი (ნაგულისხმევი: server.cert) + + + Server private key (default: server.pem) + სერვერის პირადი გასაღები (ნაგულისხმევი: server.pem) + + + This help message + ეს ტექსტი + + + Unable to bind to %s on this computer (bind returned error %d, %s) + ვერ ხერხდება მიბმა %s-თან ამ კომპიუტერზე (მიღებულია შეცდომა %d, %s) + + + Allow DNS lookups for -addnode, -seednode and -connect + DNS-ძებნის დაშვება -addnode, -seednode და -connect-სათვის + + + Loading addresses... + მისამართების ჩატვირთვა... + + + Error loading wallet.dat: Wallet corrupted + არ იტვირთება wallet.dat: საფულე დაზიანებულია + + + Error loading wallet.dat: Wallet requires newer version of Myriadcoin + არ იტვირთება wallet.dat: საფულეს სჭირდება Bitcoin-ის ახალი ვერსია + + + Wallet needed to be rewritten: restart Myriadcoin to complete + საჭიროა საფულის აღდგენა: დაარესტარტეთ Myriadcoin + + + Error loading wallet.dat + არ იტვირთება wallet.dat + + + Invalid -proxy address: '%s' + არასწორია მისამართი -proxy: '%s' + + + Unknown network specified in -onlynet: '%s' + -onlynet-ში მითითებულია უცნობი ქსელი: '%s' + + + Unknown -socks proxy version requested: %i + მოთხოვნილია -socks პროქსის უცნობი ვერსია: %i + + + Cannot resolve -bind address: '%s' + ვერ ხერხდება -bind მისამართის გარკვევა: '%s' + + + Cannot resolve -externalip address: '%s' + ვერ ხერხდება -externalip მისამართის გარკვევა: '%s' + + + Invalid amount for -paytxfee=<amount>: '%s' + დაუშვებელი მნიშვნელობა -paytxfee=<amount>: '%s' + + + Invalid amount + დაუშვებელი თანხა + + + Insufficient funds + არ არის საკმარისი თანხა + + + Loading block index... + ბლოკების ინდექსის ჩატვირთვა... + + + Add a node to connect to and attempt to keep the connection open + მისაერთებელი კვანძის დამატება და მიერთების შეძლებისდაგვარად შენარჩუნება + + + Loading wallet... + საფულის ჩატვირთვა... + + + Cannot downgrade wallet + საფულის ძველ ვერსიაზე გადაყვანა შეუძლებელია + + + Cannot write default address + ვერ ხერხდება ნაგულისხმევი მისამართის ჩაწერა + + + Rescanning... + სკანირება... + + + Done loading + ჩატვირთვა დასრულებულია + + + To use the %s option + %s ოპციის გამოსაყენებლად + + + Error + შეცდომა + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + უნდა დააყენოთ rpcpassword=<password> საკონფიგურაციო ფაილში: +%s +თუ ეს ფაილი არ არსებობს, შექმენით იგი უფლებებით owner-readable-only. + + + \ No newline at end of file diff --git a/src/qt/locale/bitcoin_kk_KZ.ts b/src/qt/locale/bitcoin_kk_KZ.ts new file mode 100644 index 00000000..51801b5c --- /dev/null +++ b/src/qt/locale/bitcoin_kk_KZ.ts @@ -0,0 +1,3368 @@ + + + AboutDialog + + About Myriadcoin Core + + + + <b>Myriadcoin Core</b> version + + + + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. + + + + Copyright + + + + The Myriadcoin Core developers + + + + (%1-bit) + + + + + AddressBookPage + + Double-click to edit address or label + Адресті немесе белгіні өзгерту үшін екі рет шертіңіз + + + Create a new address + Жаңа адрес енгізу + + + &New + + + + Copy the currently selected address to the system clipboard + Таңдаған адресті тізімнен жою + + + &Copy + + + + C&lose + + + + &Copy Address + + + + Delete the currently selected address from the list + + + + Export the data in the current tab to a file + + + + &Export + + + + &Delete + Жою + + + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + + Copy &Label + + + + &Edit + + + + Export Address List + + + + Comma separated file (*.csv) + Үтірмен бөлінген текст (*.csv) + + + Exporting Failed + + + + There was an error trying to save the address list to %1. + + + + + AddressTableModel + + Label + таңба + + + Address + Адрес + + + (no label) + (таңбасыз) + + + + AskPassphraseDialog + + Passphrase Dialog + + + + Enter passphrase + Құпия сөзді енгізу + + + New passphrase + Жаңа құпия сөзі + + + Repeat new passphrase + Жаңа құпия сөзді қайта енгізу + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Әмиянға жаңа қүпия сөзді енгізіңіз.<br/><b>10 немесе одан әрі кездейсоқ белгілерді</b>, әлде <b>сегіз немесе одан әрі сөздерді</b>құпия сөзіңізде пайдалану өтінеміз. + + + Encrypt wallet + Әмиянді шифрлау + + + This operation needs your wallet passphrase to unlock the wallet. + Бұл операциясы бойынша сіздің әмиянізді қоршаудан шығару үшін әмиянның құпия сөзі керек + + + Unlock wallet + Әмиянізді қоршаудан шығару + + + This operation needs your wallet passphrase to decrypt the wallet. + Бұл операциясы бойынша сіздің әмиянізді шифрлап тастау үшін әмиянның құпия сөзі керек + + + Decrypt wallet + Әмиянізді шифрлап тастау + + + Change passphrase + Құпия сөзді өзгерту + + + Enter the old and new passphrase to the wallet. + + + + Confirm wallet encryption + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! + + + + Are you sure you wish to encrypt your wallet? + + + + 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. + + + + Warning: The Caps Lock key is on! + + + + Wallet encrypted + + + + Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. + + + + Wallet encryption failed + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + + + + The supplied passphrases do not match. + + + + Wallet unlock failed + + + + The passphrase entered for the wallet decryption was incorrect. + + + + Wallet decryption failed + + + + Wallet passphrase was successfully changed. + + + + + BitcoinGUI + + Sign &message... + + + + Synchronizing with network... + + + + &Overview + + + + Node + + + + Show general overview of wallet + + + + &Transactions + + + + Browse transaction history + + + + E&xit + + + + Quit application + + + + Show information about Myriadcoin + + + + About &Qt + + + + Show information about Qt + + + + &Options... + + + + &Encrypt Wallet... + + + + &Backup Wallet... + + + + &Change Passphrase... + + + + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + + Importing blocks from disk... + + + + Reindexing blocks on disk... + + + + Send coins to a Myriadcoin address + + + + Modify configuration options for Myriadcoin + + + + Backup wallet to another location + + + + Change the passphrase used for wallet encryption + + + + &Debug window + + + + Open debugging and diagnostic console + + + + &Verify message... + + + + Myriadcoin + + + + Wallet + + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your Myriadcoin addresses to prove you own them + + + + Verify messages to ensure they were signed with specified Myriadcoin addresses + + + + &File + + + + &Settings + + + + &Help + + + + Tabs toolbar + + + + [testnet] + + + + Myriadcoin Core + + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + + Myriadcoin client + + + + %n active connection(s) to Myriadcoin network + + + + No block source available... + + + + Processed %1 of %2 (estimated) blocks of transaction history. + + + + Processed %1 blocks of transaction history. + + + + %n hour(s) + + + + %n day(s) + + + + %n week(s) + + + + %1 and %2 + + + + %n year(s) + + + + %1 behind + + + + Last received block was generated %1 ago. + + + + Transactions after this will not yet be visible. + + + + Error + + + + Warning + + + + Information + + + + Up to date + + + + Catching up... + + + + Sent transaction + + + + Incoming transaction + + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + A fatal error occurred. Myriadcoin can no longer continue safely and will quit. + + + + + ClientModel + + Network Alert + + + + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + + + + Address + Адрес + + + Date + + + + Confirmations + + + + Confirmed + + + + Priority + + + + Copy address + + + + Copy label + + + + Copy amount + + + + Copy transaction ID + + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + + + + Dust + + + + yes + + + + no + + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + (таңбасыз) + + + change from %1 (%2) + + + + (change) + + + + + EditAddressDialog + + Edit Address + + + + &Label + + + + The label associated with this address list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + + + + &Address + + + + New receiving address + + + + New sending address + + + + Edit receiving address + + + + Edit sending address + + + + The entered address "%1" is already in the address book. + + + + The entered address "%1" is not a valid Myriadcoin address. + + + + Could not unlock wallet. + + + + New key generation failed. + + + + + FreespaceChecker + + A new data directory will be created. + + + + name + + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core + + + + version + + + + Usage: + + + + command-line options + + + + UI options + + + + Set language, for example "de_DE" (default: system locale) + + + + Start minimized + + + + Set SSL root certificates for payment request (default: -system-) + + + + Show splash screen on startup (default: 1) + + + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + + + + Error: Specified data directory "%1" can not be created. + + + + Error + + + + GB of free space available + + + + (of %1GB needed) + + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open + + + + + OptionsDialog + + Options + + + + &Main + + + + Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. + + + + Pay transaction &fee + + + + Automatically start Myriadcoin after logging in to the system. + + + + &Start Myriadcoin on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + + Reset all client options to default. + + + + &Reset Options + + + + &Network + + + + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. + + + + Map port using &UPnP + + + + Proxy &IP: + + + + &Port: + + + + Port of the proxy (e.g. 9050) + + + + SOCKS &Version: + + + + SOCKS version of the proxy (e.g. 5) + + + + &Window + + + + Show only a tray icon after minimizing the window. + + + + &Minimize to the tray instead of the taskbar + + + + Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. + + + + M&inimize on close + + + + &Display + + + + User Interface &language: + + + + The user interface language can be set here. This setting will take effect after restarting Myriadcoin. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show Myriadcoin addresses in the transaction list or not. + + + + &Display addresses in transaction list + + + + Whether to show coin control features or not. + + + + &OK + + + + &Cancel + + + + default + + + + none + + + + Confirm options reset + + + + Client restart required to activate changes. + + + + Client will be shutdown, do you want to proceed? + + + + This change would require a client restart. + + + + The supplied proxy address is invalid. + + + + + OverviewPage + + Form + + + + The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. + + + + Wallet + + + + Available: + + + + Your current spendable balance + + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + + + + Immature: + + + + Mined balance that has not yet matured + + + + Total: + + + + Your current total balance + + + + <b>Recent transactions</b> + + + + out of sync + + + + + PaymentServer + + URI handling + + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start myriadcoin: click-to-pay handler + + + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + + + + Network request error + + + + + QObject + + Myriadcoin + + + + Error: Specified data directory "%1" does not exist. + + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + + + + Error: Invalid combination of -regtest and -testnet. + + + + Myriadcoin Core didn't yet exit safely... + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + + QRImageWidget + + &Save Image... + + + + &Copy Image + + + + Save QR Code + + + + PNG Image (*.png) + + + + + RPCConsole + + Client name + + + + N/A + + + + Client version + + + + &Information + + + + Debug window + + + + General + + + + Using OpenSSL version + + + + Startup time + + + + Network + + + + Name + + + + Number of connections + + + + Block chain + + + + Current number of blocks + + + + Estimated total blocks + + + + Last block time + + + + &Open + + + + &Console + + + + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + + Build date + + + + Debug log file + + + + Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the Myriadcoin RPC console. + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + Type <b>help</b> for an overview of available commands. + + + + %1 B + + + + %1 KB + + + + %1 MB + + + + %1 GB + + + + %1 m + + + + %1 h + + + + %1 h %2 m + + + + + ReceiveCoinsDialog + + &Amount: + + + + &Label: + + + + &Message: + + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + + + + Clear + + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + + + + Remove the selected entries from the list + + + + Remove + + + + Copy label + + + + Copy message + + + + Copy amount + + + + + ReceiveRequestDialog + + QR Code + + + + Copy &URI + + + + Copy &Address + + + + &Save Image... + + + + Request payment to %1 + + + + Payment information + + + + URI + + + + Address + Адрес + + + Amount + + + + Label + таңба + + + Message + + + + Resulting URI too long, try to reduce the text for label / message. + + + + Error encoding URI into QR Code. + + + + + RecentRequestsTableModel + + Date + + + + Label + таңба + + + Message + + + + Amount + + + + (no label) + (таңбасыз) + + + (no message) + + + + (no amount) + + + + + SendCoinsDialog + + Send Coins + + + + Coin Control Features + + + + Inputs... + + + + automatically selected + + + + Insufficient funds! + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + + Send to multiple recipients at once + + + + Add &Recipient + + + + Clear all fields of the form. + + + + Clear &All + + + + Balance: + + + + Confirm the send action + + + + S&end + + + + Confirm send coins + + + + %1 to %2 + + + + Copy quantity + + + + Copy amount + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + + + + or + + + + The recipient address is not valid, please recheck. + + + + The amount to pay must be larger than 0. + + + + The amount exceeds your balance. + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + Duplicate address found, can only send to each address once per send operation. + + + + Transaction creation failed! + + + + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + + + + (no label) + (таңбасыз) + + + Warning: Unknown change address + + + + Are you sure you want to send? + + + + added as transaction fee + + + + Payment request expired + + + + Invalid payment address %1 + + + + + SendCoinsEntry + + A&mount: + + + + Pay &To: + + + + The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Enter a label for this address to add it to your address book + + + + &Label: + + + + Choose previously used address + + + + This is a normal payment. + + + + Alt+A + + + + Paste address from clipboard + + + + Alt+P + + + + Remove this entry + + + + Message: + + + + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. + + + + + SignVerifyMessageDialog + + Signatures - Sign / Verify a Message + + + + &Sign Message + + + + You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. + + + + The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Choose previously used address + + + + Alt+A + + + + Paste address from clipboard + + + + Alt+P + + + + Enter the message you want to sign here + + + + Signature + + + + Copy the current signature to the system clipboard + + + + Sign the message to prove you own this Myriadcoin address + + + + Sign &Message + + + + Reset all sign message fields + + + + Clear &All + + + + &Verify Message + + + + Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. + + + + The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Verify the message to ensure it was signed with the specified Myriadcoin address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Click "Sign Message" to generate signature + + + + The entered address is invalid. + + + + Please check the address and try again. + + + + The entered address does not refer to a key. + + + + Wallet unlock was cancelled. + + + + Private key for the entered address is not available. + + + + Message signing failed. + + + + Message signed. + + + + The signature could not be decoded. + + + + Please check the signature and try again. + + + + The signature did not match the message digest. + + + + Message verification failed. + + + + Message verified. + + + + + SplashScreen + + Myriadcoin Core + + + + The Myriadcoin Core developers + + + + [testnet] + + + + + TrafficGraphWidget + + KB/s + + + + + TransactionDesc + + Open until %1 + + + + conflicted + + + + %1/offline + + + + %1/unconfirmed + + + + %1 confirmations + + + + Status + + + + , broadcast through %n node(s) + + + + Date + + + + Source + + + + Generated + + + + From + + + + To + + + + own address + + + + label + + + + Credit + + + + matures in %n more block(s) + + + + not accepted + + + + Debit + + + + Transaction fee + + + + Net amount + + + + Message + + + + Comment + + + + Transaction ID + + + + Merchant + + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + Debug information + + + + Transaction + + + + Inputs + + + + Amount + + + + true + + + + false + + + + , has not been successfully broadcast yet + + + + Open for %n more block(s) + + + + unknown + + + + + TransactionDescDialog + + Transaction details + + + + This pane shows a detailed description of the transaction + + + + + TransactionTableModel + + Date + + + + Type + + + + Address + Адрес + + + Amount + + + + Immature (%1 confirmations, will be available after %2) + + + + Open for %n more block(s) + + + + Open until %1 + + + + Confirmed (%1 confirmations) + + + + This block was not received by any other nodes and will probably not be accepted! + + + + Generated but not accepted + + + + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + + Received with + + + + Received from + + + + Sent to + + + + Payment to yourself + + + + Mined + + + + (n/a) + + + + Transaction status. Hover over this field to show number of confirmations. + + + + Date and time that the transaction was received. + + + + Type of transaction. + + + + Destination address of transaction. + + + + Amount removed from or added to balance. + + + + + TransactionView + + All + + + + Today + + + + This week + + + + This month + + + + Last month + + + + This year + + + + Range... + + + + Received with + + + + Sent to + + + + To yourself + + + + Mined + + + + Other + + + + Enter address or label to search + + + + Min amount + + + + Copy address + + + + Copy label + + + + Copy amount + + + + Copy transaction ID + + + + Edit label + + + + Show transaction details + + + + Export Transaction History + + + + Exporting Failed + + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + + + + The transaction history was successfully saved to %1. + + + + Comma separated file (*.csv) + Үтірмен бөлінген файл (*.csv) + + + Confirmed + + + + Date + + + + Type + + + + Label + таңба + + + Address + Адрес + + + Amount + + + + ID + + + + Range: + + + + to + + + + + WalletFrame + + No wallet has been loaded. + + + + + WalletModel + + Send Coins + + + + + WalletView + + &Export + + + + Export the data in the current tab to a file + + + + Backup Wallet + + + + Wallet Data (*.dat) + + + + Backup Failed + + + + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. + + + + Backup Successful + + + + + bitcoin-core + + Usage: + + + + List commands + + + + Get help for a command + + + + Options: + + + + Specify configuration file (default: myriadcoin.conf) + + + + Specify pid file (default: myriadcoind.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 8333 or testnet: 18333) + + + + Maintain at most <n> connections to peers (default: 125) + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + Specify your own public address + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) + + + + Accept command line and JSON-RPC commands + + + + Myriadcoin Core RPC client version + + + + Run in the background as a daemon and accept commands + + + + Use the test network + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=myriadcoinrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + Bind to given address and always listen on it. Use [host]:port notation for IPv6 + + + + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) + + + + Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + + + + This is a pre-release test build - use at your own risk - do not use for mining or merchant applications + + + + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. + + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + Myriadcoin Core Daemon + + + + Block creation options: + + + + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + + Connect only to the specified node(s) + + + + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + + Corrupted block database detected + + + + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + Do not load the wallet and disable wallet RPC calls + + + + Do you want to rebuild the block database now? + + + + Error initializing block database + + + + Error initializing wallet database environment %s! + + + + Error loading block database + + + + Error opening block database + + + + Error: Disk space is low! + + + + Error: Wallet locked, unable to create transaction! + + + + Error: system error: + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + Failed to read block info + + + + Failed to read block + + + + Failed to sync block index + + + + Failed to write block index + + + + Failed to write block info + + + + Failed to write block + + + + Failed to write file info + + + + Failed to write to coin database + + + + Failed to write transaction index + + + + Failed to write undo data + + + + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + + Find peers using DNS lookup (default: 1 unless -connect) + + + + Force safe mode (default: 0) + + + + Generate coins (default: 0) + + + + How many blocks to check at startup (default: 288, 0 = all) + + + + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' + + + + Not enough file descriptors available. + + + + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + + Rebuild block chain index from current blk000??.dat files + + + + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + + Set the number of threads to service RPC calls (default: 4) + + + + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + + Verifying blocks... + + + + Verifying wallet... + + + + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + + + + Imports blocks from external blk000??.dat file + + + + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + + + + Information + + + + Invalid amount for -minrelaytxfee=<amount>: '%s' + + + + Invalid amount for -mintxfee=<amount>: '%s' + + + + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + + Maintain a full transaction index (default: 0) + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + Only accept block chain matching built-in checkpoints (default: 1) + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + Print block on startup, if found in block index + + + + Print block tree on startup (default: 0) + + + + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + + + + SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + Send command to Myriadcoin Core + + + + Send trace/debug info to console instead of debug.log file + + + + Set minimum block size in bytes (default: 0) + + + + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + Signing transaction failed + + + + Specify connection timeout in milliseconds (default: 5000) + + + + Start Myriadcoin Core Daemon + + + + System error: + + + + Transaction amount too small + Транзакция өте кішкентай + + + Transaction amounts must be positive + + + + Transaction too large + Транзакция өте үлкен + + + Use UPnP to map the listening port (default: 0) + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + Username for JSON-RPC connections + + + + Warning + + + + Warning: This version is obsolete, upgrade required! + + + + Zapping all transactions from wallet... + + + + on startup + + + + version + + + + wallet.dat corrupt, salvage failed + + + + Password for JSON-RPC connections + + + + Allow JSON-RPC connections from specified IP address + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + Upgrade wallet to latest format + + + + Set key pool size to <n> (default: 100) + + + + Rescan the block chain for missing wallet transactions + + + + Use OpenSSL (https) for JSON-RPC connections + + + + Server certificate file (default: server.cert) + + + + Server private key (default: server.pem) + + + + This help message + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + Loading addresses... + + + + Error loading wallet.dat: Wallet corrupted + + + + Error loading wallet.dat: Wallet requires newer version of Myriadcoin + + + + Wallet needed to be rewritten: restart Myriadcoin to complete + + + + Error loading wallet.dat + + + + Invalid -proxy address: '%s' + + + + Unknown network specified in -onlynet: '%s' + + + + Unknown -socks proxy version requested: %i + + + + Cannot resolve -bind address: '%s' + + + + Cannot resolve -externalip address: '%s' + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + Invalid amount + + + + Insufficient funds + + + + Loading block index... + + + + Add a node to connect to and attempt to keep the connection open + + + + Loading wallet... + + + + Cannot downgrade wallet + + + + Cannot write default address + + + + Rescanning... + + + + Done loading + + + + To use the %s option + + + + Error + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + \ No newline at end of file diff --git a/src/qt/locale/bitcoin_ko_KR.ts b/src/qt/locale/bitcoin_ko_KR.ts new file mode 100644 index 00000000..8c44db63 --- /dev/null +++ b/src/qt/locale/bitcoin_ko_KR.ts @@ -0,0 +1,3381 @@ + + + AboutDialog + + About Myriadcoin Core + 비트코인 코어 소개 + + + <b>Myriadcoin Core</b> version + <b>비트코인 코어</b> 버젼 + + + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. + +이 프로그램은 시험용입니다. + +MIT/X11 프로그램 라이선스에 따라 배포합니다. COPYING 또는 http://www.opensource.org/licenses/mit-license.php를 참조하십시오. + +이 프로그램에는 OpenSSL 툴킷(http://www.openssl.org) 사용 목적으로 개발한 OpenSSL 프로젝트를 포함하고 있으며, 암호화 프로그램은 Eric Young(eay@cryptsoft.com)이, UPnP 프로그램은 Thomas Bernard가 작성했습니다. + + + Copyright + Copyright + + + The Myriadcoin Core developers + 비트코인코어 개발자들 + + + (%1-bit) + (%1-비트) + + + + AddressBookPage + + Double-click to edit address or label + 지갑 주소나 제목을 수정하려면 더블클릭하세요. + + + Create a new address + 새 주소 만들기 + + + &New + 새 항목(N) + + + Copy the currently selected address to the system clipboard + 현재 선택한 주소를 시스템 클립보드로 복사하기 + + + &Copy + 복사 + + + C&lose + 닫기 (L) + + + &Copy Address + 계좌 복사(&C) + + + Delete the currently selected address from the list + 현재 목록에 선택한 주소 삭제 + + + Export the data in the current tab to a file + 현재 탭에 있는 데이터를 파일로 내보내기 + + + &Export + &내보내기 + + + &Delete + &삭제 + + + Choose the address to send coins to + 코인을 보내실 주소를 선택하세요 + + + Choose the address to receive coins with + 코인을 받으실 주소를 선택하세요 + + + C&hoose + 선택하기 (H) + + + Sending addresses + 보내는 주소들 + + + Receiving addresses + 받은 주소들 + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + 이것이 비트코인 금액을 보내는 주소이다. 항상 코인을 보내기전에 잔고와 받는 주소를 확인하시오 + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + 비트코인을 받을 수 있는 계좌 주소입니다. 매 거래마다 새로운 주소 사용을 권장합니다. + + + Copy &Label + 표 복사 + + + &Edit + 편집& + + + Export Address List + 주소 목록 내보내기 + + + Comma separated file (*.csv) + 각각의 파일에 쉼표하기(*.csv) + + + Exporting Failed + 내보내기 실패 + + + There was an error trying to save the address list to %1. + + + + + AddressTableModel + + Label + 표 + + + Address + 주소 + + + (no label) + (표 없음) + + + + AskPassphraseDialog + + Passphrase Dialog + 암호문 대화상자 + + + Enter passphrase + 암호 입력하기 + + + New passphrase + 새로운 암호 + + + Repeat new passphrase + 새 암호 반복 + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + 새로운 암호를 지갑에 입력. 8자보다 많은 단어를 입력하거나 10 자보다 많은 여러 종류를 암호에 사용하세요. + + + Encrypt wallet + 지갑 암호화 + + + This operation needs your wallet passphrase to unlock the wallet. + 이 작업은 지갑을 열기위해 사용자의 지갑의 암호가 필요합니다. + + + Unlock wallet + 지갑 열기 + + + This operation needs your wallet passphrase to decrypt the wallet. + 이 작업은 지갑을 해독하기 위해 사용자의 지갑 암호가 필요합니다. + + + Decrypt wallet + 지갑 해독 + + + Change passphrase + 암호 변경 + + + Enter the old and new passphrase to the wallet. + 지갑의 예전 암호와 새로운 암호를 입력 + + + Confirm wallet encryption + 지갑의 암호화를 확정 + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! + 경고: 만약 당신의 지갑을 암호화 하고 비밀번호를 잃어 버릴 경우, 당신의 모든 비트코인들을 잃어버릴 수 있습니다! + + + Are you sure you wish to encrypt your wallet? + 지갑 암호화를 허용하시겠습니까? + + + 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. + + + + Warning: The Caps Lock key is on! + 경고: 캡스록 키가 켜져있습니다! + + + Wallet encrypted + 지갑 암호화 완료 + + + Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. + 암호화 처리 과정을 끝내기 위해 비트코인을 닫겠습니다. 지갑 암호화는 컴퓨터로의 멀웨어 감염으로 인한 비트코인 도난을 완전히 막아주지 못함을 기억하십시오. + + + Wallet encryption failed + 지갑 암호화 실패 + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + 지갑 암호화는 내부 에러로 인해 실패했습니다. 당신의 지갑은 암호화 되지 않았습니다. + + + The supplied passphrases do not match. + 지정한 암호가 일치하지 않습니다. + + + Wallet unlock failed + 지갑 열기를 실패하였습니다. + + + The passphrase entered for the wallet decryption was incorrect. + 지갑 해독을 위한 암호가 틀렸습니다. + + + Wallet decryption failed + 지갑 해독에 실패하였습니다. + + + Wallet passphrase was successfully changed. + 지갑 비밀번호가 성공적으로 변경되었습니다 + + + + BitcoinGUI + + Sign &message... + 메시지 서명&... + + + Synchronizing with network... + 네트워크와 동기화중... + + + &Overview + &개요 + + + Node + 노드 + + + Show general overview of wallet + 지갑의 일반적 개요를 보여 줍니다. + + + &Transactions + &거래 + + + Browse transaction history + 거래내역을 검색합니다. + + + E&xit + 나가기(&X) + + + Quit application + 적용 중단 + + + Show information about Myriadcoin + 비트코인에 대한 정보를 보여줍니다. + + + About &Qt + Qt 정보(&Q) + + + Show information about Qt + Qt 정보를 표시합니다 + + + &Options... + &옵션 + + + &Encrypt Wallet... + 지갑 암호화&... + + + &Backup Wallet... + 지갑 백업&... + + + &Change Passphrase... + 암호문 변경&... + + + &Sending addresses... + &주소 보내는 중 + + + &Receiving addresses... + & 주소 받는 중 + + + Open &URI... + URI&열기 + + + Importing blocks from disk... + 디스크에서 블록 가져오는 중... + + + Reindexing blocks on disk... + 디스크에서 블록 다시 색인중... + + + Send coins to a Myriadcoin address + 비트코인 주소로 코인 전송 + + + Modify configuration options for Myriadcoin + 비트코인 설정 옵션 수정 + + + Backup wallet to another location + 지갑을 다른장소에 백업 + + + Change the passphrase used for wallet encryption + 지갑 암호화에 사용되는 암호를 변경합니다 + + + &Debug window + 디버그 창& + + + Open debugging and diagnostic console + 디버깅 및 진단 콘솔을 엽니다 + + + &Verify message... + 메시지 확인&... + + + Myriadcoin + 비트코인 + + + Wallet + 지갑 + + + &Send + 보내기(&S) + + + &Receive + 받기(&R) + + + &Show / Hide + 보이기/숨기기(&S) + + + Show or hide the main Window + 주 창 보이기 또는 숨기기 + + + Encrypt the private keys that belong to your wallet + 소유 지갑 개인키 암호화 + + + Sign messages with your Myriadcoin addresses to prove you own them + 지갑 주소가 자신 소유의 것인지 증명하기 위해 비트코인 주소에 서명할 수 있습니다. + + + Verify messages to ensure they were signed with specified Myriadcoin addresses + 비트코인 주소의 전자 서명 확인을 위해 첨부된 메시지가 있을 경우 이를 검증할 수 있습니다. + + + &File + &파일 + + + &Settings + &설정 + + + &Help + &도움말 + + + Tabs toolbar + 툴바 색인표 + + + [testnet] + [테스트넷] + + + Myriadcoin Core + 비트코인코어 + + + Request payments (generates QR codes and myriadcoin: URIs) + 지불 요청하기 (QR코드와 비트코인이 생성됩니다: URIs) + + + &About Myriadcoin Core + &비트코인 코어 소개 + + + Show the list of used sending addresses and labels + 한번 이상 사용된 보내는 주소와 주소 제목의 목록을 보여줍니다. + + + Show the list of used receiving addresses and labels + 한번 이상 사용된 받는 주소와 주소 제목의 목록을 보여줍니다. + + + Open a myriadcoin: URI or payment request + 비트코인: URI 또는 지불요청 열기 + + + &Command-line options + 명령어-라인 옵션 + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + + Myriadcoin client + 비트코인 고객 + + + %n active connection(s) to Myriadcoin network + 비트코인 네트워크와 %n 개의 활성연결 + + + No block source available... + 사용 가능한 블락 소스가 없습니다... + + + Processed %1 of %2 (estimated) blocks of transaction history. + 송금 기록 %1/%2개 블록 (추산) 처리됨. + + + Processed %1 blocks of transaction history. + %1 블락의 거래 기록들이 처리됨. + + + %n hour(s) + 시간 + + + %n day(s) + 일 + + + %n week(s) + 주 + + + %1 and %2 + %1 그리고 %2 + + + %n year(s) + %n 년 + + + %1 behind + %1 뒤에 + + + Last received block was generated %1 ago. + 최근에 받은 블록은 %1 전에 생성되었습니다. + + + Transactions after this will not yet be visible. + 이것 후의 거래들은 아직 보이지 않을 것입니다. + + + Error + 오류 + + + Warning + 경고 + + + Information + 정보 + + + Up to date + 현재까지 + + + Catching up... + 따라잡기... + + + Sent transaction + 거래 보내기 + + + Incoming transaction + 거래 들어오는 중 + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + 날짜: %1 +거래액: %2 +형식: %3 +주소: %4 + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + 지갑이 암호화 되었고 현재 차단해제 되었습니다 + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + 지갑이 암호화 되었고 현재 잠겨져 있습니다 + + + A fatal error occurred. Myriadcoin can no longer continue safely and will quit. + 치명적인 오류가 있습니다. 비트코인을 더이상 안전하게 진행할 수 없어 빠져나갑니다. + + + + ClientModel + + Network Alert + 네트워크 경고 + + + + CoinControlDialog + + Coin Control Address Selection + 코인컨트롤 주소 선택 + + + Quantity: + 수량: + + + Bytes: + Bytes: + + + Amount: + 거래량 + + + Priority: + 우선도: + + + Fee: + 수수료: + + + Low Output: + + + + After Fee: + 수수료 이후: + + + Change: + + + + (un)select all + 모두 선택(하지 않음) + + + Tree mode + 트리 모드 + + + List mode + 리스트 모드 + + + Amount + 거래량 + + + Address + 주소 + + + Date + 날짜 + + + Confirmations + 확인 + + + Confirmed + 확인됨 + + + Priority + 우선도 + + + Copy address + 주소 복사하기 + + + Copy label + 라벨 복사하기 + + + Copy amount + 거래액 복사 + + + Copy transaction ID + 송금 ID 복사 + + + Lock unspent + 비트코인이 사용되지 않은 주소를 잠금 처리합니다. + + + Unlock unspent + 비트코인이 사용되지 않은 주소를 잠금 해제합니다. + + + Copy quantity + 수량 복사 + + + Copy fee + 수수료 복사 + + + Copy after fee + 수수료 이후 복사 + + + Copy bytes + bytes를 복사 + + + Copy priority + 우선도 복사 + + + Copy low output + + + + Copy change + + + + highest + 최상 + + + higher + + + + high + 상 + + + medium-high + 중상 + + + medium + 중 + + + low-medium + 중하 + + + low + 하 + + + lower + + + + lowest + + + + (%1 locked) + (%1 잠금) + + + none + 없음 + + + Dust + + + + yes + 예 + + + no + 아니요 + + + This label turns red, if the transaction size is greater than 1000 bytes. + 만약 거래 양이 1000bytes 보다 크면 제목이 빨간색으로 변합니다 + + + This means a fee of at least %1 per kB is required. + 이 의미는 수수료가 최소한 %1 per 키로바이트 필요합니다 + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + 우선 순위가 높은 거래의 경우 블럭에 포함될 가능성이 더 많습니다. + + + This label turns red, if the priority is smaller than "medium". + 우선권이 중간보다 작으면 제목이 빨간색으로 변합니다. + + + This label turns red, if any recipient receives an amount smaller than %1. + 만약 수령인이 받은 액수가 잔고의 1%보다 작으면 이 제목이 빨간색으로 변합니다. + + + This means a fee of at least %1 is required. + 최소 %1의 거래 수수료가 필요하다는 뜻입니다. + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + 노드 릴레이를 위한 최저 수수료의 0.546배보다 낮은 거래는 먼지 거래로 표현됩니다. + + + This label turns red, if the change is smaller than %1. + 만약 잔돈이 1%보다 작다면 제목이 빨간색으로 변합니다 + + + (no label) + (표 없슴) + + + change from %1 (%2) + ~로부터 변경 %1 (%2) + + + (change) + + + + + EditAddressDialog + + Edit Address + 주소 편집 + + + &Label + &표 + + + The label associated with this address list entry + 현재 선택된 주소 필드의 제목입니다. + + + The address associated with this address list entry. This can only be modified for sending addresses. + + + + &Address + &주소 + + + New receiving address + 새로 받는 주소 + + + New sending address + 새로 보내는 주소 + + + Edit receiving address + 받는 주소 편집 + + + Edit sending address + 보내는 주소 편집 + + + The entered address "%1" is already in the address book. + 입력된 주소는"%1" 이미 주소록에 있습니다. + + + The entered address "%1" is not a valid Myriadcoin address. + 입력한 "%1" 주소는 올바른 비트코인 주소가 아닙니다. + + + Could not unlock wallet. + 지갑을 열 수 없습니다. + + + New key generation failed. + 새로운 키 생성이 실패하였습니다 + + + + FreespaceChecker + + A new data directory will be created. + 새로운 데이터 폴더가 생성됩니다. + + + name + 이름 + + + Directory already exists. Add %1 if you intend to create a new directory here. + 폴더가 이미 존재합니다. 새로운 폴더 생성을 원한다면 %1 명령어를 추가하세요. + + + Path already exists, and is not a directory. + 경로가 이미 존재합니다. 그리고 그것은 폴더가 아닙니다. + + + Cannot create data directory here. + 데이터 폴더를 여기 생성할 수 없습니다. + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + 비트코인 코어 - 명령어-라인 옵션 + + + Myriadcoin Core + 비트코인코어 + + + version + 버전 + + + Usage: + 사용법: + + + command-line options + 명령줄 옵션 + + + UI options + UI 옵션 + + + Set language, for example "de_DE" (default: system locale) + "de_DE"와 같이 언어를 설정하십시오 (기본값: 시스템 로캘) + + + Start minimized + 최소화 상태에서 시작 + + + Set SSL root certificates for payment request (default: -system-) + 지불 요청을 위해 SSL 최상위 인증을 설정합니다. (기본값: -system-) + + + Show splash screen on startup (default: 1) + 시작시 시작 화면 표시 (기본값: 1) + + + Choose data directory on startup (default: 0) + 파일목록을 선택하여 시작하시오(기본값: 0) + + + + Intro + + Welcome + 환영합니다 + + + Welcome to Myriadcoin Core. + 비트코인 코어에 오신것을 환영합니. + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + 프로그램이 처음으로 실행되고 있습니다. 비트코인 코어가 어디에 데이터를 저장할지 선택할 수 있습니다. + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + 비트코인 코어가 블럭체인의 복사본을 다운로드 저장합니다. 적어도 %1GB의 데이터가 이 폴더에 저장되며 시간이 경과할수록 점차 증가합니다. 그리고 지갑 또한 이 폴더에 저장됩니다. + + + Use the default data directory + 기본 데이터 폴더를 사용하기 + + + Use a custom data directory: + 커스텀 데이터 폴더 사용: + + + Myriadcoin + 비트코인 + + + Error: Specified data directory "%1" can not be created. + 오류 : 별도 정의한 폴더명 "%1" 생성에 실패했습니다. + + + Error + 오류 + + + GB of free space available + GB가 사용가능 + + + (of %1GB needed) + (%1GB가 필요) + + + + OpenURIDialog + + Open URI + URI 열기 + + + Open payment request from URI or file + 지급 요청 URI 또는 파일 열기 + + + URI: + URI: + + + Select payment request file + 지불 요청 파일을 선택하세요 + + + Select payment request file to open + 지불 요청 파일을 열기 위해서 선택하세요 + + + + OptionsDialog + + Options + 선택들 + + + &Main + 메인(&M) + + + Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. + 당신의 거래가 더욱 빠르게 처리될 수 있도록 선택적으로 kBd당 거래 수수료를 지정합니다. 참고로 대부분의 거래들은 1kB입니다. + + + Pay transaction &fee + 송금 수수료(&F) + + + Automatically start Myriadcoin after logging in to the system. + 시스템 로그인후에 비트코인을 자동으로 시작합니다. + + + &Start Myriadcoin on system login + 시스템 로그인시 비트코인 시작(&S) + + + Size of &database cache + 데이터베이스 캐시 크기 + + + MB + 메가바이트 + + + Number of script &verification threads + 스크립트 인증 쓰레드의 개수 + + + Connect to the Myriadcoin network through a SOCKS proxy. + SOCKS 프록시를 통해 비트코인 네트워크 연결 + + + &Connect through SOCKS proxy (default proxy): + SOCKS 프록시를 거쳐 연결합니다 (기본값 프록시): + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + 프록시 아이피 주소(예. IPv4:127.0.0.1 / IPv6: ::1) + + + 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 |. + + + + Third party transaction URLs + 제 3자 거래 URLs + + + Active command-line options that override above options: + + + + Reset all client options to default. + 모든 클라이언트 옵션을 기본값으로 재설정 + + + &Reset Options + 옵션 재설정(&R) + + + &Network + 네트워크(&N) + + + (0 = auto, <0 = leave that many cores free) + + + + W&allet + 지갑 + + + Expert + 전문가 + + + Enable coin &control features + 코인 상세 제어기능을 활성화합니다 - &C + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + &확인되지 않은 돈을 쓰다 + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. + 라우터의 비트코인 클라이언트 포트를 자동으로 엽니다. 라우터에서 UPnP를 지원하고 활성화 했을 경우에만 동작합니다. + + + Map port using &UPnP + 사용중인 UPnP 포트 매핑(&U) + + + Proxy &IP: + 프록시 IP(&I): + + + &Port: + 포트(&P): + + + Port of the proxy (e.g. 9050) + 프록시의 포트번호입니다(예: 9050) + + + SOCKS &Version: + SOCKS 버전(&V): + + + SOCKS version of the proxy (e.g. 5) + 프록시의 SOCKS 버전입니다(예: 5) + + + &Window + 창(&W) + + + Show only a tray icon after minimizing the window. + 창을 최소화 하면 트레이에 아이콘만 표시합니다. + + + &Minimize to the tray instead of the taskbar + 작업 표시줄 대신 트레이로 최소화(&M) + + + Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. + 창을 닫으면 프로그램에서 나가지 않고 최소화합니다. 이 옵션을 활성화하면, 프로그램은 메뉴에서 나가기를 선택한 후에만 닫힙니다. + + + M&inimize on close + 닫을때 최소화(&I) + + + &Display + 표시(&D) + + + User Interface &language: + 사용자 인터페이스 언어(&L): + + + The user interface language can be set here. This setting will take effect after restarting Myriadcoin. + 사용자 인터페이스 언어를 여기서 설정할 수 있습니다. 이 설정은 비트코인을 다시 시작할때 적용됩니다. + + + &Unit to show amounts in: + 거래액을 표시할 단위(&U): + + + Choose the default subdivision unit to show in the interface and when sending coins. + 인터페이스에 표시하고 코인을 보낼때 사용할 기본 최소화 단위를 선택하십시오. + + + Whether to show Myriadcoin addresses in the transaction list or not. + 송금 목록에 비트코인 주소를 표시할지의 여부입니다. + + + &Display addresses in transaction list + 송금 목록에 주소 표시(&D) + + + Whether to show coin control features or not. + 코인 상세 제어기능에 대한 표시 여부를 선택할 수 있습니다. + + + &OK + 확인(&O) + + + &Cancel + 취소(&C) + + + default + 기본값 + + + none + 없음 + + + Confirm options reset + 옵션 초기화를 확인 + + + Client restart required to activate changes. + 변경 사항을 적용하기 위해서는 프로그램이 종료 후 재시작되어야 합니다. + + + Client will be shutdown, do you want to proceed? + 클라이언트가 종료됩니다, 계속 진행하시겠습니까? + + + This change would require a client restart. + 이 변경 사항 적용을 위해 프로그램 재시작이 필요합니다. + + + The supplied proxy address is invalid. + 지정한 프록시 주소가 잘못되었습니다. + + + + OverviewPage + + Form + 유형 + + + The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. + 표시한 정보가 오래된 것 같습니다. 비트코인 네트워크에 연결하고 난 다음에 지갑을 자동으로 동기화 하지만, 아직 과정이 끝나지는 않았습니다. + + + Wallet + 지갑 + + + Available: + 유용한 + + + Your current spendable balance + 당신의 현재 사용 가능한 잔액 + + + Pending: + 미정 + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + 전체 거래들은 아직 확인되지 않았고, 그리고 현재 잔액에 아직 반영되지 않았습니다. + + + Immature: + 아직 사용 불가능: + + + Mined balance that has not yet matured + 아직 사용 가능하지 않은 채굴된 잔액 + + + Total: + 총액: + + + Your current total balance + 당신의 현재 총액 + + + <b>Recent transactions</b> + <b>최근 거래내역</b> + + + out of sync + 오래됨 + + + + PaymentServer + + URI handling + URI 조작중 + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + URI의 파싱에 문제가 발생했습니다. 잘못된 비트코인 주소나 URI 파라미터 구성에 오류가 존재할 수 있습니다. + + + Requested payment amount of %1 is too small (considered dust). + 요청한 금액 %1의 양이 너무 적습니다. (스팸성 거래로 간주) + + + Payment request error + 지불 요청 애러 + + + Cannot start myriadcoin: click-to-pay handler + 비트코인을 시작할 수 없습니다: 지급제어기를 클릭하시오 + + + Net manager warning + 네트워크 관리인 경고 + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + 현재의 프록시가 SOCKS5를 지원하지 않아 지불 요청을 수행할 수 없습니다. + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + 지불이 파일 처리를 요청합니다 + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + %1 으로부터의 환불 + + + Error communicating with %1: %2 + %1과 소통하는데 애러: %2 + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + 서버로 부터 반응이 없습니다 %1 + + + Payment acknowledged + 지불이 승인됨 + + + Network request error + 네트워크 요청 애러 + + + + QObject + + Myriadcoin + 비트코인 + + + Error: Specified data directory "%1" does not exist. + 애러: 지정한 데이터 폴더 "%1"은 존재하지 않습니다. + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + + + + Error: Invalid combination of -regtest and -testnet. + 오류: 잘못된 -regtest 와 -testnet의 조합입니다. + + + Myriadcoin Core didn't yet exit safely... + 비트코인 코어가 아직 안전하게 종료되지 않았습니다. + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + 비트코인 주소를 입력하기 (예 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + 이미지 저장(&S)... + + + &Copy Image + 이미지 복사(&C) + + + Save QR Code + QR코드 저장 + + + PNG Image (*.png) + PNG 이미지(*.png) + + + + RPCConsole + + Client name + 클라이언트 이름 + + + N/A + 없음 + + + Client version + 클라이언트 버전 + + + &Information + 정보& + + + Debug window + 디버그 창 + + + General + 일반 + + + Using OpenSSL version + 오픈SSL 버전을 사용합니다 + + + Startup time + 시작 시간 + + + Network + 네트워크 + + + Name + 이름 + + + Number of connections + 연결 수 + + + Block chain + 블럭 체인 + + + Current number of blocks + 현재 블럭 수 + + + Estimated total blocks + 예상 전체 블럭 + + + Last block time + 최종 블럭 시각 + + + &Open + 열기(&O) + + + &Console + 콘솔(&C) + + + &Network Traffic + &네트워크 트래픽 + + + &Clear + &지우기 + + + Totals + 총액 + + + In: + + + + Out: + + + + Build date + 빌드 날짜 + + + Debug log file + 로그 파일 디버그 + + + Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. + 비트코인 디버그 로그파일을 현재 데이터 폴더에서 여십시요. 용량이 큰 로그 파일들은 몇 초가 걸릴 수 있습니다. + + + Clear console + 콘솔 초기화 + + + Welcome to the Myriadcoin RPC console. + 비트코인 RPC 콘솔에 오신걸 환영합니다 + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + 기록을 찾아보려면 위 아래 화살표 키를, 화면을 지우려면 <b>Ctrl-L</b>키를 사용하십시오. + + + Type <b>help</b> for an overview of available commands. + 사용할 수 있는 명령을 둘러보려면 <b>help</b>를 입력하십시오. + + + %1 B + % 1 바이트 + + + %1 KB + % 1 킬로바이트 + + + %1 MB + % 1 메가바이트 + + + %1 GB + % 1 기가바이트 + + + %1 m + % 1 분 + + + %1 h + % 1 시간 + + + %1 h %2 m + % 1시 %2 분 + + + + ReceiveCoinsDialog + + &Amount: + &거래량: + + + &Label: + 표: + + + &Message: + &메시지: + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + 이전에 사용된 수취용 주소를 사용할려고 합니다. 주소의 재사용은 보안과 개인정보 보호 측면에서 문제를 초래할 수 있습니다. 이전 지불 요청을 재생성하는 경우가 아니라면 주소 재사용을 권하지 않습니다. + + + R&euse an existing receiving address (not recommended) + 현재의 수취용 주소를 재사용합니다만 권장하지는 않습니다. (R&) + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + 지급을 요청하기 위해 아래 형식을 사용하세요. 입력값은 <b>선택 사항</b> 입니다. + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + 요청할 금액 입력칸으로 선택 사항입니다. 빈 칸으로 두거나 특정 금액이 필요하지 않는 경우 0을 입력하세요. + + + Clear all fields of the form. + 양식의 모든 필드를 지웁니다 + + + Clear + 지우기 + + + Requested payments history + 지출기록 확인 + + + &Request payment + 지불 요청(&R) + + + Show the selected request (does the same as double clicking an entry) + + + + Show + 보기 + + + Remove the selected entries from the list + 목록에서 삭제할 항목을 선택하시오 + + + Remove + 삭제 + + + Copy label + 표 복사하기 + + + Copy message + 메시지 복사 + + + Copy amount + 거래량 복사 + + + + ReceiveRequestDialog + + QR Code + QR 코드 + + + Copy &URI + URI 복사(&U) + + + Copy &Address + 주소 복사(&A) + + + &Save Image... + 이미지 저장(&S)... + + + Request payment to %1 + %1에 지불을 요청했습니다 + + + Payment information + 지불 정보 + + + URI + URI + + + Address + 주소 + + + Amount + 거래량 + + + Label + 표 + + + Message + 메시지 + + + Resulting URI too long, try to reduce the text for label / message. + URI 결과가 너무 길음, 표/메세지의 글을 줄이도록 하세요. + + + Error encoding URI into QR Code. + QR코드 인코딩 오류 + + + + RecentRequestsTableModel + + Date + 날짜 + + + Label + 표 + + + Message + 메시지 + + + Amount + 거래량 + + + (no label) + (표 없슴) + + + (no message) + (메세지가 없습니다) + + + (no amount) + (거래량 없음) + + + + SendCoinsDialog + + Send Coins + 코인들 보내기 + + + Coin Control Features + 코인 컨트롤 기능들 + + + Inputs... + 입력... + + + automatically selected + 자동 선택 + + + Insufficient funds! + 자금이 부족합니다! + + + Quantity: + 수량: + + + Bytes: + Bytes: + + + Amount: + 거래량: + + + Priority: + 우선도: + + + Fee: + 수수료: + + + Low Output: + + + + After Fee: + 수수료 이후: + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + 주소변경 + + + Send to multiple recipients at once + 다수의 수령인들에게 한번에 보내기 + + + Add &Recipient + 수령인 추가하기 + + + Clear all fields of the form. + 양식의 모든 필드를 지웁니다 + + + Clear &All + 모두 지우기(&A) + + + Balance: + 잔액: + + + Confirm the send action + 전송 기능 확인 + + + S&end + 보내기(&E) + + + Confirm send coins + 코인 전송을 확인 + + + %1 to %2 + %1을(를) %2(으)로 + + + Copy quantity + 수량 복사 + + + Copy amount + 거래액 복사 + + + Copy fee + 수수료 복사 + + + Copy after fee + 수수료 이후 복사 + + + Copy bytes + bytes 복사 + + + Copy priority + 우선도 복사 + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + 총 액수 %1(=%2) + + + or + 또는 + + + The recipient address is not valid, please recheck. + 수령인 주소가 정확하지 않습니다. 재확인 바랍니다 + + + The amount to pay must be larger than 0. + 지불하는 금액은 0 보다 커야 합니다. + + + The amount exceeds your balance. + 잔고를 초과하였습니다. + + + The total exceeds your balance when the %1 transaction fee is included. + %1 의 거래수수료를 포함하면 잔고를 초과합니다. + + + Duplicate address found, can only send to each address once per send operation. + 두개 이상의 주소입니다. 한번에 하나의 주소에만 작업할 수 있습니다. + + + Transaction creation failed! + 거래를 생성하는 것을 실패하였습니다 + + + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + 거래가 거부되었습니다. 몇몇 코인들이 지갑에서 이미 사용된 경우, 예를 들어 코인을 이미 사용한 wallet.dat를 복사해서 사용한 경우 지금 지갑에 기록이 안되있어 이런 일이 생길 수 있습니다. + + + Warning: Invalid Myriadcoin address + 경고: 잘못된 비트코인주소입니다 + + + (no label) + (표 없슴) + + + Warning: Unknown change address + 경고: 알려지지 않은 주소변경입니다 + + + Are you sure you want to send? + 정말로 보내시겠습니까? + + + added as transaction fee + 거래 수수료로 추가됨 + + + Payment request expired + 지불 요청 만료 + + + Invalid payment address %1 + 잘못된 지불 주소입니다 %1 + + + + SendCoinsEntry + + A&mount: + 금액: + + + Pay &To: + 지급&수신: + + + The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + 비트코인을 송금할 지갑 주소 입력하기 (예 : 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + Enter a label for this address to add it to your address book + 당신의 주소록에 이 주소를 추가하기 위하여 표를 입역하세요 + + + &Label: + 표: + + + Choose previously used address + 이전에 사용한 주소를 선택하십시오 + + + This is a normal payment. + 평균지급입니다 + + + Alt+A + Alt+A + + + Paste address from clipboard + 클립보드로 부터 주소를 붙이세요 + + + Alt+P + Alt+P + + + Remove this entry + 항목을 지우시오 + + + Message: + 메시지: + + + This is a verified payment request. + 지급 확인요청입니다. + + + Enter a label for this address to add it to the list of used addresses + 사용된 주소 목록에 새 주소를 추가하기 위해 제목을 입력합니다. + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + 지급요청 미확인입니다 + + + Pay To: + 송금할 대상 : + + + Memo: + 메모: + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + 비트코인코어가 닫아지고 있습니다 + + + Do not shut down the computer until this window disappears. + 창이 사라지기 전까지 컴퓨터를 끄지마시오. + + + + SignVerifyMessageDialog + + Signatures - Sign / Verify a Message + 서명 - 싸인 / 메시지 확인 + + + &Sign Message + 메시지 서명(&S) + + + You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. + 여러분 자신을 증명하기 위해 주소를 첨가하고 섬여할 수 있습니다. 피싱 공격으로 말미암아 여러분의 서명을 통해 속아 넘어가게 할 수 있으므로, 서명하지 않은 어떤 모호한 요소든 주의하십시오. 동의하는 완전 무결한 조항에만 서명하십시오. + + + The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + 메시지를 서명할 주소 (예: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + Choose previously used address + 이전에 사용한 주소를 선택하십시오 + + + Alt+A + Alt+A + + + Paste address from clipboard + 클립보드로 부터 주소를 붙이세요 + + + Alt+P + Alt+P + + + Enter the message you want to sign here + 여기에 서명하려는 메시지를 입력하십시오 + + + Signature + 서명 + + + Copy the current signature to the system clipboard + 현재 서명을 시스템 클립보드에 복사 + + + Sign the message to prove you own this Myriadcoin address + 여러분의 비트코인 주소를 증명하려면 메시지 서명하십시오 + + + Sign &Message + 메시지에 서명(&M) + + + Reset all sign message fields + 메시지 필드의 모든 서명 재설정 + + + Clear &All + 모두 지우기(&A) + + + &Verify Message + 메시지 검증(&V) + + + Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. + 메시지를 검증하기 위해 아래 칸에 각각 지갑 주소와 메시지, 전자서명을 입력하세요. (메시지 원본의 띄어쓰기, 들여쓰기, 행 나눔 등이 정확하게 입력되어야 하므로 원본을 복사해서 입력하세요) 이 기능은 메시지 검증이 주 목적이며, 네트워크 침입자에 의해 변조되지 않도록 전자서명 해독에 불필요한 시간을 소모하지 마세요. + + + The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + 서명한 메시지의 주소입니다 (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + Verify the message to ensure it was signed with the specified Myriadcoin address + 정확한 비트코인주소가 입력됬는지 메시지를 확인하시오 + + + Verify &Message + 메시지 검증(&M) + + + Reset all verify message fields + 모든 검증 메시지 필드 재설정 + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + 비트코인 주소를 입력하기 (예 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + Click "Sign Message" to generate signature + 서명을 만들려면 "메시지 서명"을 누르십시오 + + + The entered address is invalid. + 입력한 주소가 잘못되었습니다. + + + Please check the address and try again. + 주소를 확인하고 다시 시도하십시오. + + + The entered address does not refer to a key. + 입력한 주소는 키에서 참조하지 않습니다. + + + Wallet unlock was cancelled. + 지갑 잠금 해제를 취소했습니다. + + + Private key for the entered address is not available. + 입력한 주소에 대한 개인키가 없습니다. + + + Message signing failed. + 메시지 서명에 실패했습니다. + + + Message signed. + 메시지를 서명했습니다. + + + The signature could not be decoded. + 서명을 해독할 수 없습니다. + + + Please check the signature and try again. + 서명을 확인하고 다시 시도하십시오. + + + The signature did not match the message digest. + 메시지 다이제스트와 서명이 일치하지 않습니다. + + + Message verification failed. + 메시지 검증에 실패했습니다. + + + Message verified. + 메시지를 검증했습니다. + + + + SplashScreen + + Myriadcoin Core + 비트코인코어 + + + The Myriadcoin Core developers + 비트코인코어 개발자들 + + + [testnet] + [테스트넷] + + + + TrafficGraphWidget + + KB/s + KB/s + + + + TransactionDesc + + Open until %1 + %1 까지 열림 + + + conflicted + 충돌 + + + %1/offline + %1/오프라인 + + + %1/unconfirmed + %1/미확인 + + + %1 confirmations + %1 확인됨 + + + Status + 상태 + + + , broadcast through %n node(s) + %n 노드를 거쳐 전파합니다. + + + Date + 날짜 + + + Source + 소스 + + + Generated + 생성하다 + + + From + 으로부터 + + + To + 에게 + + + own address + 자신의 주소 + + + label + 라벨 + + + Credit + 예금 + + + matures in %n more block(s) + + + + not accepted + 허용되지 않는다 + + + Debit + 차변 + + + Transaction fee + 송금 수수료 + + + Net amount + 총액 + + + Message + 메시지 + + + Comment + 설명 + + + Transaction ID + 송금 ID + + + Merchant + 상인 + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + 신규 채굴된 코인이 사용되기 위해서는 %1 개의 블럭이 경과되어야 합니다. 블럭을 생성할 때 블럭체인에 추가되도록 네트워크에 전파되는 과정을 거치는데, 블럭체인에 포함되지 못하고 실패한다면 해당 블럭의 상태는 '미승인'으로 표현되고 비트코인 또한 사용될 수 없습니다. 이 현상은 다른 노드가 비슷한 시간대에 동시에 블럭을 생성할 때 종종 발생할 수 있습니다. + + + Debug information + 디버깅 정보 + + + Transaction + 송금 + + + Inputs + 입력 + + + Amount + 거래량 + + + true + 참 + + + false + 거짓 + + + , has not been successfully broadcast yet + . 아직 성공적으로 통보하지 않음 + + + Open for %n more block(s) + %n 개의 추가 블럭을 읽습니다. + + + unknown + 알수없음 + + + + TransactionDescDialog + + Transaction details + 거래 세부 내역 + + + This pane shows a detailed description of the transaction + 이 창은 거래의 세부내역을 보여줍니다 + + + + TransactionTableModel + + Date + 날짜 + + + Type + 형식 + + + Address + 주소 + + + Amount + 수량 + + + Immature (%1 confirmations, will be available after %2) + 충분히 숙성되지 않은 상태 (%1 승인, %2 후에 사용 가능합니다) + + + Open for %n more block(s) + %n 개의 추가 블럭을 읽습니다. + + + Open until %1 + %1 까지 열림 + + + Confirmed (%1 confirmations) + 확인됨(%1 확인됨) + + + This block was not received by any other nodes and will probably not be accepted! + 이 블럭은 다른 노드로부터 받지 않아 허용되지 않을 것임. + + + Generated but not accepted + 생성되었으나 거절됨 + + + Offline + 오프라인 + + + Unconfirmed + 미확인 + + + Confirming (%1 of %2 recommended confirmations) + 승인 중 (권장되는 승인 회수 %2 대비 현재 승인 수 %1) + + + Conflicted + 충돌 + + + Received with + 다음과 함께 받음 : + + + Received from + 보낸 주소 + + + Sent to + 다음에게 보냄 : + + + Payment to yourself + 자신에게 지불 + + + Mined + 채굴됨 + + + (n/a) + (없음) + + + Transaction status. Hover over this field to show number of confirmations. + 거래상황. 마우스를 올리면 승인횟수가 표시됩니다. + + + Date and time that the transaction was received. + 거래가 이루어진 날짜와 시각. + + + Type of transaction. + 거래의 종류. + + + Destination address of transaction. + 거래가 도달할 주소 + + + Amount removed from or added to balance. + 변경된 잔고. + + + + TransactionView + + All + 전체 + + + Today + 오늘 + + + This week + 이번주 + + + This month + 이번 달 + + + Last month + 지난 달 + + + This year + 올 해 + + + Range... + 범위... + + + Received with + 보낸 주소 + + + Sent to + 받는 주소 + + + To yourself + 자기거래 + + + Mined + 채굴 + + + Other + 기타 + + + Enter address or label to search + 검색하기 위한 주소 또는 표 입력 + + + Min amount + 최소 거래량 + + + Copy address + 주소 복사하기 + + + Copy label + 표 복사하기 + + + Copy amount + 거래액 복사 + + + Copy transaction ID + 송금 ID 복사 + + + Edit label + 표 수정하기 + + + Show transaction details + 거래 내역 확인 + + + Export Transaction History + 거래 기록 내보내기 + + + Exporting Failed + 내보내기 실패 + + + There was an error trying to save the transaction history to %1. + %1으로 거래 기록을 저장하는데 애러가 있었습니다. + + + Exporting Successful + 내보내기 성공 + + + The transaction history was successfully saved to %1. + 거래 기록이 성공적으로 %1에 저장되었습니다. + + + Comma separated file (*.csv) + 각각의 파일에 쉼표하기(*.csv) + + + Confirmed + 확인됨 + + + Date + 날짜 + + + Type + 종류 + + + Label + 표 + + + Address + 주소 + + + Amount + 거래량 + + + ID + 아이디 + + + Range: + 범위: + + + to + 상대방 + + + + WalletFrame + + No wallet has been loaded. + 지갑 불러오기가 안됩니다 + + + + WalletModel + + Send Coins + 코인들 보내기 + + + + WalletView + + &Export + &내보내기 + + + Export the data in the current tab to a file + 현재 탭에 있는 데이터를 파일로 내보내기 + + + Backup Wallet + 지갑 백업 + + + Wallet Data (*.dat) + 지갑 데이터(*.dat) + + + Backup Failed + 백업 실패 + + + There was an error trying to save the wallet data to %1. + 지갑 데이터를 %1 폴더에 저장하는 동안 오류가 발생했습니다. + + + The wallet data was successfully saved to %1. + 지갑 정보가 %1에 성공적으로 저장되었습니다 + + + Backup Successful + 백업 성공 + + + + bitcoin-core + + Usage: + 사용법: + + + List commands + 커맨드 목록 + + + Get help for a command + 커맨드 도움말 + + + Options: + 옵션: + + + Specify configuration file (default: myriadcoin.conf) + 설정파일 지정 (기본값: myriadcoin.conf) + + + Specify pid file (default: myriadcoind.pid) + pid 파일 지정 (기본값: myriadcoind.pid) + + + Specify data directory + 데이터 폴더 지정 + + + Listen for connections on <port> (default: 8333 or testnet: 18333) + <port>로 연결을 허용한다 (기본값: 8333 또는 테스트넷: 18333) + + + Maintain at most <n> connections to peers (default: 125) + 가장 잘 연결되는 사용자를 유지합니다(기본값: 125) + + + Connect to a node to retrieve peer addresses, and disconnect + 피어 주소를 받기 위해 노드에 연결하고, 받은 후에 연결을 끊습니다 + + + Specify your own public address + 공인 주소를 지정하십시오 + + + Threshold for disconnecting misbehaving peers (default: 100) + 이상행동 네트워크 참여자의 연결을 차단시키기 위한 한계치 (기본값: 100) + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + 이상행동을 하는 네트워크 참여자들을 다시 연결시키는데 걸리는 시간 (기본값: 86400초) + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + IPv4 감청을 위한 RPC 포트 %u번을 설정중 오류가 발생했습니다: %s + + + Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) + 포트 <port>을 통해 JSON-RPC 연결 (기본값: 8332 또는 testnet: 18332) + + + Accept command line and JSON-RPC commands + 명령줄과 JSON-RPC 명령 수락 + + + Myriadcoin Core RPC client version + 비트코인 코어 RPC 클라이언트 버전 + + + Run in the background as a daemon and accept commands + 데몬으로 백그라운드에서 실행하고 명령을 허용 + + + Use the test network + 테스트 네트워크 사용 + + + Accept connections from outside (default: 1 if no -proxy or -connect) + 외부 접속을 승인합니다 + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=myriadcoinrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + 암호 허용(기본값: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + IPv6 연결을 위해 RPC port %u 설정 중 오류가 발생했습니다. IPv4: %s 환경으로 돌아갑니다. + + + Bind to given address and always listen on it. Use [host]:port notation for IPv6 + + + + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) + + + + Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + 에러: 거래가 거부되었습니다! 이런 일이 생길 수 있습니다 만약 몇개의 코인들을 지갑에서 이미 사용했다면요, 예를 들어 만약 당신이 wallet.dat를 복사해서 사용했거나 코인들을 사용 후에 복사했다면 여기선 표시가 안되서 사용할 수 없습니다 + +-번역은 했으나 약간 이상한점이 있어서 수정해야함- + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! + 오류 : 해당 거래는 송금액, 다중 거래, 최근 수령한 금액의 사용 등의 이유로 최소 %s 이상의 송금 수수료가 필요합니다. + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + 지갑 거래가 바뀌면 명령을 실행합니다.(%s 안의 명령어가 TxID로 바뀝니다) + + + Fees smaller than this are considered zero fee (for transaction creation) (default: + 해당 금액보다 적은 수수료는 수수료 면제로 간주됩니다. (거래 생성의 목적)(기본값: + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + + + + This is a pre-release test build - use at your own risk - do not use for mining or merchant applications + 이 빌드 버전은 정식 출시 전 테스트의 목적이며, 예기치 않은 위험과 오류가 발생할 수 있습니다. 채굴과 상점용 소프트웨어로 사용하는 것을 권하지 않습니다. + + + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + Tor 서비스를 이용하여 네트워크에 참여하기 위해서 SOCKS5 프록시를 따로 사용함 (기본값: -proxy) + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + 경고: -paytxfee값이 너무 큽니다! 이 값은 송금할때 지불할 송금 수수료입니다. + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. + 경고: 컴퓨터의 날짜와 시간이 올바른지 확인하십시오! 시간이 잘못되면 비트코인은 제대로 동작하지 않습니다. + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + 경고 : 모든 네트워크가 동의해야 하나, 일부 채굴자들에게 문제가 있는 것으로 보입니다. + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + 경고: 현재 비트코인 버전이 다른 네트워크 참여자들과 동일하지 않는 것 같습니다. 당신 또는 다른 참여자들이 동일한 비트코인 버전으로 업그레이드 할 필요가 있습니다. + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + 경고 : wallet.dat 파일을 읽는 중 에러가 발생했습니다. 주소 키는 모두 정확하게 로딩되었으나 거래 데이터와 주소록 필드에서 누락이나 오류가 존재할 수 있습니다. + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + 경고 : wallet.dat가 손상되어 데이터가 복구되었습니다. 원래의 wallet.dat 파일은 %s 후에 wallet.{timestamp}.bak 이름으로 저장됩니다. 잔액과 거래 내역이 정확하지 않다면 백업 파일로 부터 복원해야 합니다. + + + (default: 1) + (기본값: 1) + + + (default: wallet.dat) + (기본값: wallet.dat) + + + <category> can be: + + + + Attempt to recover private keys from a corrupt wallet.dat + 손상된 wallet.dat에서 개인키 복원을 시도합니다 + + + Myriadcoin Core Daemon + 비트코인 코어 데몬 + + + Block creation options: + 블록 생성 옵션: + + + Clear list of wallet transactions (diagnostic tool; implies -rescan) + 거래내역 삭제(진단도구; 재스캔 포함) + + + Connect only to the specified node(s) + 지정된 노드에만 연결하기 + + + Connect through SOCKS proxy + SOCKS 프록시를 통해 연결 + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + JSON-RPC에 연결 <포트>(기본값:8332 또는 테스트넷: 18332) + + + Connection options: + 연결 설정 : + + + Corrupted block database detected + 손상된 블록 데이터베이스가 감지되었습니다 + + + Debugging/Testing options: + 디버그 및 테스트 설정 + + + Disable safemode, override a real safe mode event (default: 0) + 안전 모드를 비활성화하고 안전 모드의 이벤트가 발생하더라도 무시합니다. (기본값: 0, 비활성화) + + + Discover own IP address (default: 1 when listening and no -externalip) + 자신의 아이피 주소를 발견합니다 (기본값: 1 반응이 없거나 외부 아이피가 없을 때) + + + Do not load the wallet and disable wallet RPC calls + + + + Do you want to rebuild the block database now? + 블락 데이터베이스를 다시 생성하시겠습니까? + + + Error initializing block database + 블록 데이터베이스를 초기화하는데 오류 + + + Error initializing wallet database environment %s! + 지갑 데이터베이스 환경 초기화하는데 오류 + + + Error loading block database + 블록 데이터베이스를 불러오는데 오류 + + + Error opening block database + 블록 데이터베이스를 여는데 오류 + + + Error: Disk space is low! + 오류: 디스크 공간이 부족합니다! + + + Error: Wallet locked, unable to create transaction! + 오류: 지갑이 잠금상태여서 거래를 생성할 수 없습니다! + + + Error: system error: + 오류: 시스템 오류: + + + Failed to listen on any port. Use -listen=0 if you want this. + 어떤 포트도 반응하지 않습니다. 사용자 반응=0 만약 원한다면 + + + Failed to read block info + 블록 정보를 읽는데 실패했습니다 + + + Failed to read block + 블록을 읽는데 실패했습니다 + + + Failed to sync block index + 블록 인덱스를 동기화하는데 실패했습니다 + + + Failed to write block index + 블록 인덱스를 기록하는데 실패했습니다 + + + Failed to write block info + 블록 정보를 기록하는데 실패했습니다 + + + Failed to write block + 블록을 기록하는데 실패했습니다 + + + Failed to write file info + 파일 정보를 기록하는데 실패했습니다 + + + Failed to write to coin database + 코인 데이터베이스에 기록하는데 실패했습니다 + + + Failed to write transaction index + 송금 인덱스에 기록하는데 실패했습니다 + + + Failed to write undo data + 데이터 실행 취소를 기록하는데 실패했습니다 + + + Fee per kB to add to transactions you send + 송금 거래시 추가되는 KB 당 수수료입니다. + + + Fees smaller than this are considered zero fee (for relaying) (default: + 해당 금액보다 적은 수수료는 수수료 면제로 간주됩니다. (릴레이 목적)(기본값: + + + Find peers using DNS lookup (default: 1 unless -connect) + DNS 찾기를 이용하여 사용자를 찾으시오(기본값: 1 연결 되면) + + + Force safe mode (default: 0) + 안전 모드로 강제 진입하는 기능입니다.(기본값: 0) + + + Generate coins (default: 0) + 코인 생성(기본값: 0) + + + How many blocks to check at startup (default: 288, 0 = all) + 시작할때 검사할 블록 갯수입니다(기본값: 288, 0 = 모두) + + + If <category> is not supplied, output all debugging information. + + + + Importing... + 들여오기 중... + + + Incorrect or no genesis block found. Wrong datadir for network? + 올바르지 않거나 생성된 블록을 찾을 수 없습니다. 잘못된 네트워크 자료 디렉토리? + + + Invalid -onion address: '%s' + 잘못된 -onion 주소입니다: '%s' + + + Not enough file descriptors available. + 사용 가능한 파일 디스크립터-File Descriptor-가 부족합니다. + + + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + RPC 클라이언트 옵션 + + + Rebuild block chain index from current blk000??.dat files + 현재의 blk000??.dat 파일들로부터 블록체인 색인을 재구성합니다. + + + Select SOCKS version for -proxy (4 or 5, default: 5) + -proxy를 위한 SOCKS 버전을 선택하세요 (4 또는 5, 기본: 5) + + + Set database cache size in megabytes (%d to %d, default: %d) + 데이터베이스 케시 크기를 메가바이트로 설정(%d 부터 %d, 기본값: %d) + + + Set maximum block size in bytes (default: %d) + 최대 블락 크기를 Bytes로 지정하세요 (기본: %d) + + + Set the number of threads to service RPC calls (default: 4) + 원격 프로시져 호출 서비스를 위한 쓰레드 개수를 설정합니다 (기본값 : 4) + + + Specify wallet file (within data directory) + 데이터 폴더 안에 지갑 파일을 선택하세요. + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + 사용법 (오래되었습니다. myriadcoin-cli를 사용하십시오): + + + Verifying blocks... + 블록 검증중... + + + Verifying wallet... + 지갑 검증중... + + + Wait for RPC server to start + RPC서버가 시작되길 기다리십시요 + + + Wallet %s resides outside data directory %s + + + + Wallet options: + 지갑 옵션: + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + -txindex를 바꾸기 위해서는 -reindex를 사용해서 데이터베이스를 재구성해야 합니다. + + + Imports blocks from external blk000??.dat file + 외부 blk000??.dat 파일에서 블록을 가져옵니다. + + + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + 이 사항과 관련있는 경고가 발생하거나 아주 긴 포크가 발생했을 때 명령어를 실행해 주세요. (cmd 명령어 목록에서 %s는 메시지로 대체됩니다) + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + 최대 크기를 최우선으로 설정 / 바이트당 최소 수수료로 거래(기본값: %d) + + + Information + 정보 + + + Invalid amount for -minrelaytxfee=<amount>: '%s' + 노드로 전달하기 위한 최저 거래 수수료가 부족합니다. - minrelaytxfee=<amount>: '%s' - + + + Invalid amount for -mintxfee=<amount>: '%s' + 최저 거래 수수료가 부족합니다. -mintxfee=<amount>: '%s' + + + Limit size of signature cache to <n> entries (default: 50000) + <n>번 째 순서에서 전자서명 캐쉬의 용량을 제한합니다. (기본값: 50000) + + + Log transaction priority and fee per kB when mining blocks (default: 0) + 블럭을 채굴할 때 kB당 거래 우선 순위와 수수료를 로그에 남깁니다. (기본값: 0, 비활성화) + + + Maintain a full transaction index (default: 0) + 전체 거래 지수를 유지합니다(기본값: 0) + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + 최대 연결마다 1000bytes 버퍼를 받는다. (기본값: 5000) + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + 최대 연결 마다 1000bytes 버퍼를 보낸다.(기본값: 1000) + + + Only accept block chain matching built-in checkpoints (default: 1) + 내부 중단점에 일치하는 블록 체인만 수용(기본값: 1) + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + 노드가 있는 네트워크에만 접속 합니다(IPv4, IPv6 또는 Tor) + + + Print block on startup, if found in block index + 블럭 색인을 발견하면 구동 시 블럭을 출력합니다. + + + Print block tree on startup (default: 0) + 구동 시 블럭 트리를 출력합니다. (기본값: 0, 비활성화) + + + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + RPC SSL 옵션: (비트코인 위키의 SSL 설정 설명서 참고) + + + RPC server options: + RPC 서버 설정 + + + Randomly drop 1 of every <n> network messages + 모든 네트워크 메시지 마다 무작위로 1이 떨어진다 + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + + + + SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + SSL 옵션: (SSL 설정 절차를 보혀면 비트코인 위키를 참조하십시오) + + + Send command to Myriadcoin Core + 비트코인 코어로 명령 보내기 + + + Send trace/debug info to console instead of debug.log file + 추적오류 정보를 degug.log 자료로 보내는 대신 콘솔로 보내기 + + + Set minimum block size in bytes (default: 0) + 바이트 단위의 최소 블록 크기 설정(기본값: 0) + + + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + 전자지갑 데이터베이스 환경에 DB_PRIVATE 플래그를 설정합니다. (기본값: 1, 활성화) + + + Show all debugging options (usage: --help -help-debug) + 모든 디버그 설정 보기(설정: --help -help-debug) + + + Show benchmark information (default: 0) + 벤치마크 정보 보기(기본값: 0) + + + Shrink debug.log file on client startup (default: 1 when no -debug) + 클라이언트 시작시 debug.log 파일 비우기(기본값: 디버그 안할때 1) + + + Signing transaction failed + 거래를 서명하는것을 실패하였습니다. + + + Specify connection timeout in milliseconds (default: 5000) + 밀리초 단위로 연결 제한시간을 설정하십시오(기본값: 5000) + + + Start Myriadcoin Core Daemon + 비트코인 코어의 데몬 프로그램을 실행합니다. + + + System error: + 시스템 오류: + + + Transaction amount too small + 거래량이 너무 적습니다 + + + Transaction amounts must be positive + 거래량은 반드시 정수여야합니다. + + + Transaction too large + 너무 큰 거래 + + + Use UPnP to map the listening port (default: 0) + UPnP사용하여 지도에서 포트 반응기다리는 중 (기본값: 0) + + + Use UPnP to map the listening port (default: 1 when listening) + UPnP사용하여 지도에서 포트 반응기다리는 중 (기본값: 1 반응이 생기면) + + + Username for JSON-RPC connections + JSON-RPC 연결에 사용할 사용자 이름 + + + Warning + 경고 + + + Warning: This version is obsolete, upgrade required! + 경고: 이 버전이 오래되어 업그레이드가 필요합니다! + + + Zapping all transactions from wallet... + 지갑의 모든거래내역 건너뛰기... + + + on startup + 구동 중 + + + version + 버전 + + + wallet.dat corrupt, salvage failed + wallet.dat 파일이 손상되었고 복구가 실패하였습니다. + + + Password for JSON-RPC connections + JSON-RPC 연결에 사용할 암호 + + + Allow JSON-RPC connections from specified IP address + 지정한 IP 주소의 JSON-RPC 연결 허용 + + + Send commands to node running on <ip> (default: 127.0.0.1) + 실행 중인 노드로 명령 전송 <ip> (기본값: 127.0.0.1) + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + 최고의 블럭이 변하면 명령을 실행(cmd 에 있는 %s 는 블럭 해시에 의해 대체되어 짐) + + + Upgrade wallet to latest format + 지갑을 최근 형식으로 개선하시오 + + + Set key pool size to <n> (default: 100) + 키 풀 크기 설정 <n>(기본값: 100) + + + Rescan the block chain for missing wallet transactions + 누락된 지갑 송금에 대한 블록 체인 다시 검색 + + + Use OpenSSL (https) for JSON-RPC connections + JSON-RPC 연결에 OpenSSL(https) 사용 + + + Server certificate file (default: server.cert) + 서버 인증 파일 (기본값: server.cert) + + + Server private key (default: server.pem) + 서버 개인 키(기본값: server.pem) + + + This help message + 도움말 메시지입니다 + + + Unable to bind to %s on this computer (bind returned error %d, %s) + 이 컴퓨터의 %s에 바인딩할 수 없습니다 (바인딩 과정에 %d 오류 발생, %s) + + + Allow DNS lookups for -addnode, -seednode and -connect + -addnode, -seednode, -connect 옵션에 대해 DNS 탐색 허용 + + + Loading addresses... + 주소를 불러오는 중... + + + Error loading wallet.dat: Wallet corrupted + wallet.dat 불러오기 에러: 지갑 오류 + + + Error loading wallet.dat: Wallet requires newer version of Myriadcoin + wallet.dat 불러오기 에러: 지갑은 새버전의 비트코인이 필요합니다. + + + Wallet needed to be rewritten: restart Myriadcoin to complete + 지갑을 새로 써야 합니다.: 완성하기 위하여 비트코인을 다시 시작하십시오. + + + Error loading wallet.dat + wallet.dat 불러오기 에러 + + + Invalid -proxy address: '%s' + 잘못된 -proxy 주소입니다: '%s' + + + Unknown network specified in -onlynet: '%s' + -onlynet에 지정한 네트워크를 알 수 없습니다: '%s' + + + Unknown -socks proxy version requested: %i + 요청한 -socks 프록히 버전을 알 수 없습니다: %i + + + Cannot resolve -bind address: '%s' + -bind 주소를 확인할 수 없습니다: '%s' + + + Cannot resolve -externalip address: '%s' + -externalip 주소를 확인할 수 없습니다: '%s' + + + Invalid amount for -paytxfee=<amount>: '%s' + -paytxfee=<amount>에 대한 양이 잘못되었습니다: '%s' + + + Invalid amount + 효력없는 금액 + + + Insufficient funds + 자금 부족 + + + Loading block index... + 블럭 인덱스를 불러오는 중... + + + Add a node to connect to and attempt to keep the connection open + 노드를 추가하여 연결하고 연결상태를 계속 유지하려고 시도합니다. + + + Loading wallet... + 지갑을 불러오는 중... + + + Cannot downgrade wallet + 지갑을 다운그레이드 할 수 없습니다 + + + Cannot write default address + 기본 계좌에 기록할 수 없습니다 + + + Rescanning... + 재검색 중... + + + Done loading + 로딩 완료 + + + To use the %s option + %s 옵션을 사용하려면 + + + Error + 오류 + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + 설정 파일에 rpcpassword=<암호>를 설정해야 합니다: +%s +파일이 없으면 소유자 읽기 전용 파일 권한으로 만들어야 합니다. + + + \ No newline at end of file diff --git a/src/qt/locale/bitcoin_ky.ts b/src/qt/locale/bitcoin_ky.ts new file mode 100644 index 00000000..e99d242f --- /dev/null +++ b/src/qt/locale/bitcoin_ky.ts @@ -0,0 +1,3368 @@ + + + AboutDialog + + About Myriadcoin Core + + + + <b>Myriadcoin Core</b> version + + + + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. + + + + Copyright + + + + The Myriadcoin Core developers + + + + (%1-bit) + + + + + AddressBookPage + + Double-click to edit address or label + + + + Create a new address + Жаң даректи жасоо + + + &New + + + + Copy the currently selected address to the system clipboard + + + + &Copy + + + + C&lose + + + + &Copy Address + + + + Delete the currently selected address from the list + + + + Export the data in the current tab to a file + + + + &Export + + + + &Delete + Ө&чүрүү + + + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + + Copy &Label + + + + &Edit + + + + Export Address List + + + + Comma separated file (*.csv) + + + + Exporting Failed + + + + There was an error trying to save the address list to %1. + + + + + AddressTableModel + + Label + + + + Address + Дарек + + + (no label) + (аты жок) + + + + AskPassphraseDialog + + Passphrase Dialog + + + + Enter passphrase + + + + New passphrase + + + + Repeat new passphrase + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + + + + Encrypt wallet + + + + This operation needs your wallet passphrase to unlock the wallet. + + + + Unlock wallet + + + + This operation needs your wallet passphrase to decrypt the wallet. + + + + Decrypt wallet + + + + Change passphrase + + + + Enter the old and new passphrase to the wallet. + + + + Confirm wallet encryption + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! + + + + Are you sure you wish to encrypt your wallet? + + + + 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. + + + + Warning: The Caps Lock key is on! + + + + Wallet encrypted + + + + Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. + + + + Wallet encryption failed + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + + + + The supplied passphrases do not match. + + + + Wallet unlock failed + + + + The passphrase entered for the wallet decryption was incorrect. + + + + Wallet decryption failed + + + + Wallet passphrase was successfully changed. + + + + + BitcoinGUI + + Sign &message... + + + + Synchronizing with network... + + + + &Overview + + + + Node + + + + Show general overview of wallet + + + + &Transactions + &Транзакциялар + + + Browse transaction history + + + + E&xit + + + + Quit application + + + + Show information about Myriadcoin + + + + About &Qt + + + + Show information about Qt + + + + &Options... + + + + &Encrypt Wallet... + + + + &Backup Wallet... + + + + &Change Passphrase... + + + + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + + Importing blocks from disk... + + + + Reindexing blocks on disk... + + + + Send coins to a Myriadcoin address + + + + Modify configuration options for Myriadcoin + + + + Backup wallet to another location + + + + Change the passphrase used for wallet encryption + + + + &Debug window + + + + Open debugging and diagnostic console + + + + &Verify message... + Билдирүүнү &текшерүү... + + + Myriadcoin + Myriadcoin + + + Wallet + Капчык + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your Myriadcoin addresses to prove you own them + + + + Verify messages to ensure they were signed with specified Myriadcoin addresses + + + + &File + &Файл + + + &Settings + + + + &Help + &Жардам + + + Tabs toolbar + + + + [testnet] + + + + Myriadcoin Core + + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + + Myriadcoin client + + + + %n active connection(s) to Myriadcoin network + + + + No block source available... + + + + Processed %1 of %2 (estimated) blocks of transaction history. + + + + Processed %1 blocks of transaction history. + + + + %n hour(s) + + + + %n day(s) + + + + %n week(s) + + + + %1 and %2 + + + + %n year(s) + + + + %1 behind + + + + Last received block was generated %1 ago. + + + + Transactions after this will not yet be visible. + + + + Error + Ката + + + Warning + Эскертүү + + + Information + Маалымат + + + Up to date + Жаңыланган + + + Catching up... + + + + Sent transaction + + + + Incoming transaction + + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + A fatal error occurred. Myriadcoin can no longer continue safely and will quit. + + + + + ClientModel + + Network Alert + + + + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + + + + Address + Дарек + + + Date + Дата + + + Confirmations + + + + Confirmed + + + + Priority + + + + Copy address + + + + Copy label + + + + Copy amount + + + + Copy transaction ID + + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + жок + + + Dust + + + + yes + + + + no + + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + (аты жок) + + + change from %1 (%2) + + + + (change) + + + + + EditAddressDialog + + Edit Address + + + + &Label + + + + The label associated with this address list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + + + + &Address + &Дарек + + + New receiving address + + + + New sending address + + + + Edit receiving address + + + + Edit sending address + + + + The entered address "%1" is already in the address book. + + + + The entered address "%1" is not a valid Myriadcoin address. + + + + Could not unlock wallet. + + + + New key generation failed. + + + + + FreespaceChecker + + A new data directory will be created. + + + + name + + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core + + + + version + версия + + + Usage: + + + + command-line options + + + + UI options + + + + Set language, for example "de_DE" (default: system locale) + + + + Start minimized + + + + Set SSL root certificates for payment request (default: -system-) + + + + Show splash screen on startup (default: 1) + + + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" can not be created. + + + + Error + Ката + + + GB of free space available + + + + (of %1GB needed) + + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open + + + + + OptionsDialog + + Options + + + + &Main + + + + Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. + + + + Pay transaction &fee + + + + Automatically start Myriadcoin after logging in to the system. + + + + &Start Myriadcoin on system login + + + + Size of &database cache + + + + MB + МБ + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + + Reset all client options to default. + + + + &Reset Options + + + + &Network + &Тармак + + + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. + + + + Map port using &UPnP + + + + Proxy &IP: + + + + &Port: + &Порт: + + + Port of the proxy (e.g. 9050) + + + + SOCKS &Version: + + + + SOCKS version of the proxy (e.g. 5) + + + + &Window + &Терезе + + + Show only a tray icon after minimizing the window. + + + + &Minimize to the tray instead of the taskbar + + + + Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. + + + + M&inimize on close + + + + &Display + + + + User Interface &language: + + + + The user interface language can be set here. This setting will take effect after restarting Myriadcoin. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show Myriadcoin addresses in the transaction list or not. + + + + &Display addresses in transaction list + + + + Whether to show coin control features or not. + + + + &OK + &Жарайт + + + &Cancel + &Жокко чыгаруу + + + default + жарыяланбаган + + + none + жок + + + Confirm options reset + + + + Client restart required to activate changes. + + + + Client will be shutdown, do you want to proceed? + + + + This change would require a client restart. + + + + The supplied proxy address is invalid. + + + + + OverviewPage + + Form + + + + The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. + + + + Wallet + Капчык + + + Available: + + + + Your current spendable balance + + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + + + + Immature: + + + + Mined balance that has not yet matured + + + + Total: + + + + Your current total balance + + + + <b>Recent transactions</b> + + + + out of sync + синхрондоштурулган эмес + + + + PaymentServer + + URI handling + + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start myriadcoin: click-to-pay handler + + + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + + + + Network request error + + + + + QObject + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" does not exist. + + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + + + + Error: Invalid combination of -regtest and -testnet. + + + + Myriadcoin Core didn't yet exit safely... + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + + QRImageWidget + + &Save Image... + + + + &Copy Image + + + + Save QR Code + + + + PNG Image (*.png) + + + + + RPCConsole + + Client name + + + + N/A + + + + Client version + + + + &Information + + + + Debug window + + + + General + Жалпы + + + Using OpenSSL version + + + + Startup time + + + + Network + + + + Name + Аты + + + Number of connections + + + + Block chain + + + + Current number of blocks + + + + Estimated total blocks + + + + Last block time + + + + &Open + &Ачуу + + + &Console + &Консоль + + + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + + Build date + + + + Debug log file + + + + Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + Консолду тазалоо + + + Welcome to the Myriadcoin RPC console. + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + Type <b>help</b> for an overview of available commands. + + + + %1 B + + + + %1 KB + + + + %1 MB + + + + %1 GB + + + + %1 m + + + + %1 h + + + + %1 h %2 m + + + + + ReceiveCoinsDialog + + &Amount: + + + + &Label: + + + + &Message: + + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + + + + Clear + + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + + + + Remove the selected entries from the list + + + + Remove + + + + Copy label + + + + Copy message + + + + Copy amount + + + + + ReceiveRequestDialog + + QR Code + + + + Copy &URI + + + + Copy &Address + + + + &Save Image... + + + + Request payment to %1 + + + + Payment information + + + + URI + + + + Address + Дарек + + + Amount + + + + Label + + + + Message + Билдирүү + + + Resulting URI too long, try to reduce the text for label / message. + + + + Error encoding URI into QR Code. + + + + + RecentRequestsTableModel + + Date + Дата + + + Label + + + + Message + Билдирүү + + + Amount + + + + (no label) + (аты жок) + + + (no message) + + + + (no amount) + + + + + SendCoinsDialog + + Send Coins + + + + Coin Control Features + + + + Inputs... + + + + automatically selected + + + + Insufficient funds! + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + + Send to multiple recipients at once + + + + Add &Recipient + + + + Clear all fields of the form. + + + + Clear &All + &Бардыгын тазалоо + + + Balance: + + + + Confirm the send action + + + + S&end + &Жөнөтүү + + + Confirm send coins + + + + %1 to %2 + + + + Copy quantity + + + + Copy amount + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + + + + or + + + + The recipient address is not valid, please recheck. + + + + The amount to pay must be larger than 0. + + + + The amount exceeds your balance. + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + Duplicate address found, can only send to each address once per send operation. + + + + Transaction creation failed! + + + + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + + + + (no label) + (аты жок) + + + Warning: Unknown change address + + + + Are you sure you want to send? + + + + added as transaction fee + + + + Payment request expired + + + + Invalid payment address %1 + + + + + SendCoinsEntry + + A&mount: + + + + Pay &To: + + + + The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Enter a label for this address to add it to your address book + + + + &Label: + + + + Choose previously used address + + + + This is a normal payment. + + + + Alt+A + + + + Paste address from clipboard + Даректи алмашуу буферинен коюу + + + Alt+P + + + + Remove this entry + + + + Message: + Билдирүү: + + + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. + + + + + SignVerifyMessageDialog + + Signatures - Sign / Verify a Message + + + + &Sign Message + + + + You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. + + + + The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Choose previously used address + + + + Alt+A + + + + Paste address from clipboard + Даректи алмашуу буферинен коюу + + + Alt+P + + + + Enter the message you want to sign here + + + + Signature + + + + Copy the current signature to the system clipboard + + + + Sign the message to prove you own this Myriadcoin address + + + + Sign &Message + + + + Reset all sign message fields + + + + Clear &All + &Бардыгын тазалоо + + + &Verify Message + + + + Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. + + + + The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Verify the message to ensure it was signed with the specified Myriadcoin address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Click "Sign Message" to generate signature + + + + The entered address is invalid. + + + + Please check the address and try again. + + + + The entered address does not refer to a key. + + + + Wallet unlock was cancelled. + + + + Private key for the entered address is not available. + + + + Message signing failed. + + + + Message signed. + + + + The signature could not be decoded. + + + + Please check the signature and try again. + + + + The signature did not match the message digest. + + + + Message verification failed. + + + + Message verified. + + + + + SplashScreen + + Myriadcoin Core + + + + The Myriadcoin Core developers + + + + [testnet] + + + + + TrafficGraphWidget + + KB/s + + + + + TransactionDesc + + Open until %1 + + + + conflicted + + + + %1/offline + %1/тармакта эмес + + + %1/unconfirmed + + + + %1 confirmations + + + + Status + + + + , broadcast through %n node(s) + + + + Date + Дата + + + Source + + + + Generated + + + + From + + + + To + + + + own address + + + + label + + + + Credit + + + + matures in %n more block(s) + + + + not accepted + + + + Debit + + + + Transaction fee + + + + Net amount + + + + Message + Билдирүү + + + Comment + + + + Transaction ID + + + + Merchant + + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + Debug information + + + + Transaction + + + + Inputs + + + + Amount + + + + true + + + + false + + + + , has not been successfully broadcast yet + + + + Open for %n more block(s) + + + + unknown + + + + + TransactionDescDialog + + Transaction details + + + + This pane shows a detailed description of the transaction + + + + + TransactionTableModel + + Date + Дата + + + Type + + + + Address + Дарек + + + Amount + + + + Immature (%1 confirmations, will be available after %2) + + + + Open for %n more block(s) + + + + Open until %1 + + + + Confirmed (%1 confirmations) + + + + This block was not received by any other nodes and will probably not be accepted! + + + + Generated but not accepted + + + + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + + Received with + + + + Received from + + + + Sent to + + + + Payment to yourself + + + + Mined + + + + (n/a) + + + + Transaction status. Hover over this field to show number of confirmations. + + + + Date and time that the transaction was received. + + + + Type of transaction. + + + + Destination address of transaction. + + + + Amount removed from or added to balance. + + + + + TransactionView + + All + + + + Today + + + + This week + + + + This month + + + + Last month + + + + This year + + + + Range... + + + + Received with + + + + Sent to + + + + To yourself + + + + Mined + + + + Other + + + + Enter address or label to search + + + + Min amount + + + + Copy address + + + + Copy label + + + + Copy amount + + + + Copy transaction ID + + + + Edit label + + + + Show transaction details + + + + Export Transaction History + + + + Exporting Failed + + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + + + + The transaction history was successfully saved to %1. + + + + Comma separated file (*.csv) + + + + Confirmed + + + + Date + Дата + + + Type + + + + Label + + + + Address + Дарек + + + Amount + + + + ID + + + + Range: + + + + to + + + + + WalletFrame + + No wallet has been loaded. + + + + + WalletModel + + Send Coins + + + + + WalletView + + &Export + + + + Export the data in the current tab to a file + + + + Backup Wallet + + + + Wallet Data (*.dat) + + + + Backup Failed + + + + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. + + + + Backup Successful + + + + + bitcoin-core + + Usage: + + + + List commands + + + + Get help for a command + + + + Options: + + + + Specify configuration file (default: myriadcoin.conf) + + + + Specify pid file (default: myriadcoind.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 8333 or testnet: 18333) + + + + Maintain at most <n> connections to peers (default: 125) + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + Specify your own public address + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) + + + + Accept command line and JSON-RPC commands + + + + Myriadcoin Core RPC client version + + + + Run in the background as a daemon and accept commands + + + + Use the test network + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=myriadcoinrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + Bind to given address and always listen on it. Use [host]:port notation for IPv6 + + + + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) + + + + Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + + + + This is a pre-release test build - use at your own risk - do not use for mining or merchant applications + + + + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. + + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + Myriadcoin Core Daemon + + + + Block creation options: + + + + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + + Connect only to the specified node(s) + + + + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + + Corrupted block database detected + + + + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + Do not load the wallet and disable wallet RPC calls + + + + Do you want to rebuild the block database now? + + + + Error initializing block database + + + + Error initializing wallet database environment %s! + + + + Error loading block database + + + + Error opening block database + + + + Error: Disk space is low! + + + + Error: Wallet locked, unable to create transaction! + + + + Error: system error: + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + Failed to read block info + + + + Failed to read block + + + + Failed to sync block index + + + + Failed to write block index + + + + Failed to write block info + + + + Failed to write block + + + + Failed to write file info + + + + Failed to write to coin database + + + + Failed to write transaction index + + + + Failed to write undo data + + + + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + + Find peers using DNS lookup (default: 1 unless -connect) + + + + Force safe mode (default: 0) + + + + Generate coins (default: 0) + + + + How many blocks to check at startup (default: 288, 0 = all) + + + + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' + + + + Not enough file descriptors available. + + + + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + + Rebuild block chain index from current blk000??.dat files + + + + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + + Set the number of threads to service RPC calls (default: 4) + + + + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + + Verifying blocks... + + + + Verifying wallet... + + + + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + + + + Imports blocks from external blk000??.dat file + + + + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + + + + Information + Маалымат + + + Invalid amount for -minrelaytxfee=<amount>: '%s' + + + + Invalid amount for -mintxfee=<amount>: '%s' + + + + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + + Maintain a full transaction index (default: 0) + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + Only accept block chain matching built-in checkpoints (default: 1) + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + Print block on startup, if found in block index + + + + Print block tree on startup (default: 0) + + + + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + + + + SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + Send command to Myriadcoin Core + + + + Send trace/debug info to console instead of debug.log file + + + + Set minimum block size in bytes (default: 0) + + + + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + Signing transaction failed + + + + Specify connection timeout in milliseconds (default: 5000) + + + + Start Myriadcoin Core Daemon + + + + System error: + + + + Transaction amount too small + + + + Transaction amounts must be positive + + + + Transaction too large + + + + Use UPnP to map the listening port (default: 0) + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + Username for JSON-RPC connections + + + + Warning + Эскертүү + + + Warning: This version is obsolete, upgrade required! + + + + Zapping all transactions from wallet... + + + + on startup + + + + version + версия + + + wallet.dat corrupt, salvage failed + + + + Password for JSON-RPC connections + + + + Allow JSON-RPC connections from specified IP address + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + Upgrade wallet to latest format + + + + Set key pool size to <n> (default: 100) + + + + Rescan the block chain for missing wallet transactions + + + + Use OpenSSL (https) for JSON-RPC connections + + + + Server certificate file (default: server.cert) + + + + Server private key (default: server.pem) + + + + This help message + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + Loading addresses... + + + + Error loading wallet.dat: Wallet corrupted + + + + Error loading wallet.dat: Wallet requires newer version of Myriadcoin + + + + Wallet needed to be rewritten: restart Myriadcoin to complete + + + + Error loading wallet.dat + + + + Invalid -proxy address: '%s' + + + + Unknown network specified in -onlynet: '%s' + + + + Unknown -socks proxy version requested: %i + + + + Cannot resolve -bind address: '%s' + + + + Cannot resolve -externalip address: '%s' + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + Invalid amount + + + + Insufficient funds + + + + Loading block index... + + + + Add a node to connect to and attempt to keep the connection open + + + + Loading wallet... + + + + Cannot downgrade wallet + + + + Cannot write default address + + + + Rescanning... + + + + Done loading + + + + To use the %s option + + + + Error + Ката + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + \ No newline at end of file diff --git a/src/qt/locale/bitcoin_la.ts b/src/qt/locale/bitcoin_la.ts index ee5b9c63..e8e362f9 100644 --- a/src/qt/locale/bitcoin_la.ts +++ b/src/qt/locale/bitcoin_la.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - Informatio de Myriadcoin + About Myriadcoin Core + - - <b>Myriadcoin</b> version - <b>Myriadcoin</b> versio + <b>Myriadcoin Core</b> version + - This is experimental software. @@ -27,153 +23,128 @@ Distributum sub MIT/X11 licentia programmatum, vide comitantem plicam COPYING ve Hoc productum continet programmata composita ab OpenSSL Project pro utendo in OpenSSL Toolkit (http://www.openssl.org/) et programmata cifrarum scripta ab Eric Young (eay@cryptsoft.com) et UPnP programmata scripta ab Thomas Bernard. - Copyright Copyright - - The Myriadcoin developers - Myriadcoin curatores + The Myriadcoin Core developers + + + + (%1-bit) + AddressBookPage - - Address Book - Liber Inscriptionum - - - Double-click to edit address or label Dupliciter-clicca ut inscriptionem vel titulum mutes - Create a new address Crea novam inscriptionem - + &New + + + Copy the currently selected address to the system clipboard Copia inscriptionem iam selectam in latibulum systematis - - &New Address - &Nova Inscriptio + &Copy + - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Haec sunt inscriptiones Myriadcoin tuae pro accipendo pensitationes. Cupias variam ad quemque mittentem dare ut melius scias quem tibi pensare. + C&lose + - &Copy Address &Copia Inscriptionem - - Show &QR Code - Monstra codicem &QR - - - - Sign a message to prove you own a Myriadcoin address - Signa nuntium ut demonstres inscriptionem Myriadcoin a te possessam esse - - - - Sign &Message - Signa &Nuntium - - - Delete the currently selected address from the list Dele active selectam inscriptionem ex enumeratione - Export the data in the current tab to a file Exporta data in hac tabella in plicam - &Export &Exporta - - Verify a message to ensure it was signed with a specified Myriadcoin address - Verifica nuntium ut cures signatum esse cum specificata inscriptione Myriadcoin - - - - &Verify Message - &Verifica Nuntium - - - &Delete &Dele - + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. Hae sunt inscriptiones mittendi pensitationes. Semper inspice quantitatem et inscriptionem accipiendi antequam nummos mittis. - + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + Copy &Label Copia &Titulum - &Edit &Muta - - Send &Coins - Mitte &Nummos + Export Address List + - - Export Address Book Data - Exporta Data Libri Inscriptionum - - - Comma separated file (*.csv) Comma Separata Plica (*.csv) - - Error exporting - Error exportandi + Exporting Failed + - - Could not write to file %1. - Non potuisse scribere in plicam %1. + There was an error trying to save the address list to %1. + AddressTableModel - Label Titulus - Address Inscriptio - (no label) (nullus titulus) @@ -181,140 +152,106 @@ Hoc productum continet programmata composita ab OpenSSL Project pro utendo in Op AskPassphraseDialog - Passphrase Dialog Dialogus Tesserae - Enter passphrase Insere tesseram - New passphrase Nova tessera - Repeat new passphrase Itera novam tesseram - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. Insero novam tesseram cassidili.<br/>Sodes tessera <b>10 pluriumve fortuitarum litterarum</b> utere aut <b>octo pluriumve verborum</b>. - Encrypt wallet Cifra cassidile - This operation needs your wallet passphrase to unlock the wallet. Huic operationi necesse est tessera cassidili tuo ut cassidile reseret. - Unlock wallet Resera cassidile - This operation needs your wallet passphrase to decrypt the wallet. Huic operationi necesse est tessera cassidili tuo ut cassidile decifret. - Decrypt wallet Decifra cassidile - Change passphrase Muta tesseram - Enter the old and new passphrase to the wallet. Insero veterem novamque tesseram cassidili. - Confirm wallet encryption Confirma cifrationem cassidilis - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! Monitio: Si cassidile tuum cifras et tesseram amittis, tu <b>AMITTES OMNES TUOS NUMMOS BITOS</b>! - Are you sure you wish to encrypt your wallet? Certusne es te velle tuum cassidile cifrare? - 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. GRAVE: Oportet ulla prioria conservata quae fecisti de plica tui cassidilis reponi a nove generata cifrata plica cassidilis. Propter securitatem, prioria conservata de plica non cifrata cassidilis inutilia fiet simul atque incipis uti novo cifrato cassidili. - - Warning: The Caps Lock key is on! Monitio: Litterae ut capitales seratae sunt! - - Wallet encrypted Cassidile cifratum - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. Myriadcoin iam desinet ut finiat actionem cifrandi. Memento cassidile cifrare non posse cuncte curare ne tui nummi clepantur ab malis programatibus in tuo computatro. - - - - Wallet encryption failed Cassidile cifrare abortum est - Wallet encryption failed due to an internal error. Your wallet was not encrypted. Cassidile cifrare abortum est propter internum errorem. Tuum cassidile cifratum non est. - - The supplied passphrases do not match. Tesserae datae non eaedem sunt. - Wallet unlock failed Cassidile reserare abortum est. - - - The passphrase entered for the wallet decryption was incorrect. Tessera inserta pro cassidilis decifrando prava erat. - Wallet decryption failed Cassidile decifrare abortum est. - Wallet passphrase was successfully changed. Tessera cassidilis successa est in mutando. @@ -322,319 +259,286 @@ Hoc productum continet programmata composita ab OpenSSL Project pro utendo in Op BitcoinGUI - Sign &message... Signa &nuntium... - Synchronizing with network... Synchronizans cum rete... - &Overview &Summarium - + Node + + + Show general overview of wallet Monstra generale summarium cassidilis - &Transactions &Transactiones - Browse transaction history Inspicio historiam transactionum - - Edit the list of stored addresses and labels - Muta indicem salvatarum inscriptionum titulorumque - - - - Show the list of addresses for receiving payments - Monstra indicem inscriptionum quibus pensitationes acceptandae - - - E&xit E&xi - Quit application Exi applicatione - Show information about Myriadcoin Monstra informationem de Myriadcoin - About &Qt Informatio de &Qt - Show information about Qt Monstra informationem de Qt - &Options... &Optiones - &Encrypt Wallet... &Cifra Cassidile... - &Backup Wallet... &Conserva Cassidile... - &Change Passphrase... &Muta tesseram... - + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + Importing blocks from disk... Importans frusta ab disco... - Reindexing blocks on disk... Recreans indicem frustorum in disco... - Send coins to a Myriadcoin address Mitte nummos ad inscriptionem Myriadcoin - Modify configuration options for Myriadcoin Muta configurationis optiones pro Myriadcoin - Backup wallet to another location Conserva cassidile in locum alium - Change the passphrase used for wallet encryption Muta tesseram utam pro cassidilis cifrando - &Debug window Fenestra &Debug - Open debugging and diagnostic console Aperi terminalem debug et diagnosticalem - &Verify message... &Verifica nuntium... - - Myriadcoin Myriadcoin - Wallet Cassidile - &Send &Mitte - &Receive &Accipe - - &Addresses - &Inscriptiones - - - - &About Myriadcoin - &Informatio de Myriadcoin - - - &Show / Hide &Monstra/Occulta - Show or hide the main Window Monstra vel occulta Fenestram principem - Encrypt the private keys that belong to your wallet Cifra claves privatas quae cassidili tui sunt - Sign messages with your Myriadcoin addresses to prove you own them Signa nuntios cum tuis inscriptionibus Myriadcoin ut demonstres te eas possidere - Verify messages to ensure they were signed with specified Myriadcoin addresses Verifica nuntios ut certus sis eos signatos esse cum specificatis inscriptionibus Myriadcoin - &File &Plica - &Settings &Configuratio - &Help &Auxilium - Tabs toolbar Tabella instrumentorum "Tabs" - - [testnet] [testnet] - + Myriadcoin Core + Myriadcoin Nucleus + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + Myriadcoin client Myriadcoin cliens - %n active connection(s) to Myriadcoin network %n activa conexio ad rete Myriadcoin%n activae conexiones ad rete Myriadcoin - No block source available... Nulla fons frustorum absens... - Processed %1 of %2 (estimated) blocks of transaction history. Perfecta %1 de %2 (aestimato) frusta historiae transactionum. - Processed %1 blocks of transaction history. Processae %1 frusta historiae transactionum. - %n hour(s) %n hora%n horae - %n day(s) %n dies%n dies - %n week(s) %n hebdomas%n hebdomades - + %1 and %2 + + + + %n year(s) + + + %1 behind %1 post - Last received block was generated %1 ago. Postremum acceptum frustum generatum est %1 abhinc. - Transactions after this will not yet be visible. Transactiones post hoc nondum visibiles erunt. - Error Error - Warning Monitio - Information Informatio - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - Haec transactio maior est quam limen magnitudinis. Adhuc potes id mittere mercede %1, quae it nodis qui procedunt tuam transactionem et adiuvat sustinere rete. Visne mercedem solvere? - - - Up to date Recentissimo - Catching up... Persequens... - - Confirm transaction fee - Confirma mercedem transactionis - - - Sent transaction Transactio missa - Incoming transaction Transactio incipiens - Date: %1 Amount: %2 Type: %3 @@ -647,29 +551,14 @@ Inscriptio: %4 - - - URI handling - Tractatio URI - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - URI intellegi non posse! Huius causa possit inscriptionem Myriadcoin non validam aut URI parametra maleformata. - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> Cassidile <b>cifratum</b> est et iam nunc <b>reseratum</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> Cassidile <b>cifratum</b> est et iam nunc <b>seratum</b> - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. Error fatalis accidit. Myriadcoin nondum pergere tute potest, et exibit. @@ -677,329 +566,647 @@ Inscriptio: %4 ClientModel - Network Alert Monitio Retis + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + + + + Bytes: + + + + Amount: + Quantitas: + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + Quantitas + + + Address + Inscriptio + + + Date + Dies + + + Confirmations + + + + Confirmed + Confirmatum + + + Priority + + + + Copy address + Copia inscriptionem + + + Copy label + Copia titulum + + + Copy amount + Copia quantitatem + + + Copy transaction ID + Copia transactionis ID + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + + + + Dust + + + + yes + + + + no + + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + (nullus titulus) + + + change from %1 (%2) + + + + (change) + + + EditAddressDialog - Edit Address Muta Inscriptionem - &Label &Titulus - - The label associated with this address book entry - Titulus associatus huic insertione libri inscriptionum + The label associated with this address list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + - &Address &Inscriptio - - The address associated with this address book entry. This can only be modified for sending addresses. - Titulus associatus huic insertione libri inscriptionum. Haec tantum mutari potest pro inscriptionibus mittendi - - - New receiving address Nova inscriptio accipiendi - New sending address Nova inscriptio mittendi - Edit receiving address Muta inscriptionem accipiendi - Edit sending address Muta inscriptionem mittendi - The entered address "%1" is already in the address book. Inserta inscriptio "%1" iam in libro inscriptionum est. - The entered address "%1" is not a valid Myriadcoin address. Inscriptio inserta "%1" non valida inscriptio Myriadcoin est. - Could not unlock wallet. Non potuisse cassidile reserare - New key generation failed. Generare novam clavem abortum est. - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt - Myriadcoin-Qt + A new data directory will be created. + + + + name + + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core + Myriadcoin Nucleus - version versio - Usage: Usus: - command-line options Optiones mandati intiantis - UI options UI optiones - Set language, for example "de_DE" (default: system locale) Constitue linguam, exempli gratia "de_DE" (praedefinitum: lingua systematis) - Start minimized Incipe minifactum ut icon - + Set SSL root certificates for payment request (default: -system-) + + + Show splash screen on startup (default: 1) Monstra principem imaginem ad initium (praedefinitum: 1) + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" can not be created. + + + + Error + + + + GB of free space available + + + + (of %1GB needed) + + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open + + OptionsDialog - Options Optiones - &Main &Princeps - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Optionalis merces transactionum singulis kB quae adiuvat curare tuas transactiones processas esse celeriter. Plurimi transactiones 1kB sunt. - Pay transaction &fee Solve &mercedem transactionis - Automatically start Myriadcoin after logging in to the system. Pelle Myriadcoin per se postquam in systema inire. - &Start Myriadcoin on system login &Pelle Myriadcoin cum inire systema - + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + Reset all client options to default. Reconstitue omnes optiones clientis ad praedefinita. - &Reset Options &Reconstitue Optiones - &Network &Rete - + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. Aperi per se portam clientis Myriadcoin in itineratore. Hoc tantum effectivum est si itineratrum tuum supportat UPnP et id activum est. - Map port using &UPnP Designa portam utendo &UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - Connecte ad rete Myriadcoin per SOCKS vicarium (e.g. quando conectens per Tor). - - - - &Connect through SOCKS proxy: - &Conecte per SOCKS vicarium: - - - Proxy &IP: &IP vicarii: - - IP address of the proxy (e.g. 127.0.0.1) - Inscriptio IP vicarii (e.g. 127.0.0.1) - - - &Port: &Porta: - Port of the proxy (e.g. 9050) Porta vicarii (e.g. 9050) - SOCKS &Version: SOCKS &Versio: - SOCKS version of the proxy (e.g. 5) SOCKS versio vicarii (e.g. 5) - &Window &Fenestra - Show only a tray icon after minimizing the window. Monstra tantum iconem in tabella systematis postquam fenestram minifactam est. - &Minimize to the tray instead of the taskbar &Minifac in tabellam systematis potius quam applicationum - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. Minifac potius quam exire applicatione quando fenestra clausa sit. Si haec optio activa est, applicatio clausa erit tantum postquam selegeris Exi in menu. - M&inimize on close M&inifac ad claudendum - &Display &UI - User Interface &language: &Lingua monstranda utenti: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. Lingua monstranda utenti hic constitui potest. Haec configuratio effectiva erit postquam Myriadcoin iterum initiatum erit. - &Unit to show amounts in: &Unita qua quantitates monstrare: - Choose the default subdivision unit to show in the interface and when sending coins. Selige praedefinitam unitam subdivisionis monstrare in interfacie et quando nummos mittere - Whether to show Myriadcoin addresses in the transaction list or not. Num monstrare inscriptiones Myriadcoin in enumeratione transactionum. - &Display addresses in transaction list &Monstra inscriptiones in enumeratione transactionum - + Whether to show coin control features or not. + + + &OK &OK - &Cancel &Cancella - - &Apply - &Applica - - - default praedefinitum - + none + + + Confirm options reset Confirma optionum reconstituere - - Some settings may require a client restart to take effect. - Aliis configurationibus fortasse necesse est clientem iterum initiare ut effectivae sint. + Client restart required to activate changes. + - - Do you want to proceed? - Vis procedere? + Client will be shutdown, do you want to proceed? + - - - Warning - Monitio + This change would require a client restart. + - - - This setting will take effect after restarting Myriadcoin. - Haec configuratio effectiva erit postquam Myriadcoin iterum initiatum erit. - - - The supplied proxy address is invalid. Inscriptio vicarii tradita non valida est. @@ -1007,59 +1214,54 @@ Inscriptio: %4 OverviewPage - Form Schema - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. Monstrata informatio fortasse non recentissima est. Tuum cassidile per se synchronizat cum rete Myriadcoin postquam conexio constabilita est, sed hoc actio nondum perfecta est. - - Balance: - Pendendum: - - - - Unconfirmed: - Non confirmata: - - - Wallet Cassidile - + Available: + + + + Your current spendable balance + + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + + + Immature: Immatura: - Mined balance that has not yet matured Fossum pendendum quod nondum maturum est - + Total: + + + + Your current total balance + + + <b>Recent transactions</b> <b>Recentes transactiones</b> - - Your current balance - Tuum pendendum iam nunc - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - Totali nummi transactionum quae adhuc confirmandae sunt, et nondum afficiunt pendendum - - - - out of sync non synchronizato @@ -1067,579 +1269,856 @@ Inscriptio: %4 PaymentServer - + URI handling + Tractatio URI + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + URI intellegi non posse! Huius causa possit inscriptionem Myriadcoin non validam aut URI parametra maleformata. + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + Cannot start myriadcoin: click-to-pay handler Myriadcoin incipere non potest: cliccare-ad-pensandum handler + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + + + + Network request error + + - QRCodeDialog + QObject - - QR Code Dialog - Dialogus QR Codicis + Myriadcoin + Myriadcoin - - Request Payment - Posce Pensitationem + Error: Specified data directory "%1" does not exist. + - - Amount: - Quantitas: + Error: Cannot parse configuration file: %1. Only use key=value syntax. + - - Label: - Titulus: + Error: Invalid combination of -regtest and -testnet. + - - Message: - Nuntius: + Myriadcoin Core didn't yet exit safely... + - - &Save As... - &Salva ut... + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Insere inscriptionem Myriadcoin (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + - - Error encoding URI into QR Code. - Error codificandi URI in codicem QR. + &Copy Image + - - The entered amount is invalid, please check. - Inserta quantitas non est valida, sodes proba. - - - - Resulting URI too long, try to reduce the text for label / message. - Resultato URI nimis longo, conare minuere verba pro titulo / nuntio. - - - Save QR Code Salva codicem QR - - PNG Images (*.png) - Imagines PNG (*.png) + PNG Image (*.png) + RPCConsole - Client name Nomen clientis - - - - - - - - - - N/A N/A - Client version Versio clientis - &Information &Informatio - + Debug window + + + + General + + + Using OpenSSL version Utens OpenSSL versione - Startup time Tempus initiandi - Network Rete - + Name + + + Number of connections Numerus conexionum - - On testnet - In testnet - - - Block chain Catena frustorum - Current number of blocks Numerus frustorum iam nunc - Estimated total blocks Aestimatus totalis numerus frustorum - Last block time Hora postremi frusti - &Open &Aperi - - Command-line options - Optiones mandati initiantis - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - Monstra nuntium auxilii Myriadcoin-Qt ut videas enumerationem possibilium optionum Myriadcoin mandati initiantis. - - - - &Show - &Monstra - - - &Console &Terminale - + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + Build date Dies aedificandi - - Myriadcoin - Debug window - Myriadcoin - Fenestra debug - - - - Myriadcoin Core - Myriadcoin Nucleus - - - Debug log file Debug catalogi plica - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. Aperi plicam catalogi de Myriadcoin debug ex activo indice datorum. Hoc possit pauca secunda pro plicis magnis catalogi. - Clear console Vacuefac terminale - Welcome to the Myriadcoin RPC console. Bene ventio in terminale RPC de Myriadcoin. - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. Utere sagittis sursum deorsumque ut per historiam naviges, et <b>Ctrl+L</b> ut scrinium vacuefacias. - Type <b>help</b> for an overview of available commands. Scribe <b>help</b> pro summario possibilium mandatorum. + + %1 B + + + + %1 KB + + + + %1 MB + + + + %1 GB + + + + %1 m + + + + %1 h + + + + %1 h %2 m + + + + + ReceiveCoinsDialog + + &Amount: + + + + &Label: + &Titulus: + + + &Message: + + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + + + + Clear + + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + + + + Remove the selected entries from the list + + + + Remove + + + + Copy label + Copia titulum + + + Copy message + + + + Copy amount + Copia quantitatem + + + + ReceiveRequestDialog + + QR Code + + + + Copy &URI + + + + Copy &Address + + + + &Save Image... + + + + Request payment to %1 + + + + Payment information + + + + URI + + + + Address + Inscriptio + + + Amount + Quantitas + + + Label + Titulus + + + Message + Nuntius + + + Resulting URI too long, try to reduce the text for label / message. + Resultato URI nimis longo, conare minuere verba pro titulo / nuntio. + + + Error encoding URI into QR Code. + Error codificandi URI in codicem QR. + + + + RecentRequestsTableModel + + Date + Dies + + + Label + Titulus + + + Message + Nuntius + + + Amount + Quantitas + + + (no label) + (nullus titulus) + + + (no message) + + + + (no amount) + + SendCoinsDialog - - - - - - - - Send Coins Mitte Nummos - + Coin Control Features + + + + Inputs... + + + + automatically selected + + + + Insufficient funds! + + + + Quantity: + + + + Bytes: + + + + Amount: + Quantitas: + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + Send to multiple recipients at once Mitte pluribus accipientibus simul - Add &Recipient Adde &Accipientem - - Remove all transaction fields - Remove omnes campos transactionis + Clear all fields of the form. + - Clear &All - Vacuefac &Myriada + Vacuefac &Omnia - Balance: Pendendum: - - 123.456 BTC - 123.456 BTC - - - Confirm the send action Confirma actionem mittendi - S&end &Mitte - - <b>%1</b> to %2 (%3) - <b>%1</b> ad %2 (%3) - - - Confirm send coins Confirma mittendum nummorum - - Are you sure you want to send %1? - Certus es te velle mittere %1? + %1 to %2 + - - and - et + Copy quantity + + + + Copy amount + Copia quantitatem + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + + + + or + - The recipient address is not valid, please recheck. Inscriptio accipientis non est valida, sodes reproba. - The amount to pay must be larger than 0. Oportet quantitatem ad pensandum maiorem quam 0 esse. - The amount exceeds your balance. Quantitas est ultra quod habes. - The total exceeds your balance when the %1 transaction fee is included. Quantitas est ultra quod habes cum merces transactionis %1 includitur. - Duplicate address found, can only send to each address once per send operation. Geminata inscriptio inventa, tantum posse mittere ad quamque inscriptionem semel singulare operatione. - - Error: Transaction creation failed! - Error: Creare transactionem abortum est! + Transaction creation failed! + - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Error: transactio reiecta est. Hoc fiat si alii nummorum in tuo cassidili iam soluti sunt, ut si usus es exemplar de wallet.dat et nummi soluti sunt in exemplari sed non hic notati ut soluti. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + + + + (no label) + (nullus titulus) + + + Warning: Unknown change address + + + + Are you sure you want to send? + + + + added as transaction fee + + + + Payment request expired + + + + Invalid payment address %1 + SendCoinsEntry - - Form - Schema - - - A&mount: &Quantitas: - Pay &To: Pensa &Ad: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Inscriptio cui mittere pensitationem (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book Insero titulum huic inscriptioni ut eam in tuum librum inscriptionum addas. - &Label: &Titulus: - - Choose address from address book - Selige inscriptionem ex libro inscriptionum + Choose previously used address + + + + This is a normal payment. + - Alt+A Alt+A - Paste address from clipboard Conglutina inscriptionem ex latibulo - Alt+P Alt+P - - Remove this recipient - Remove hunc accipientem + Remove this entry + - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Insero inscriptionem Myriadcoin (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + Nuntius: + + + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. + SignVerifyMessageDialog - Signatures - Sign / Verify a Message Signationes - Signa / Verifica nuntium - &Sign Message &Signa Nuntium - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. Potes nuntios signare inscriptionibus tuis ut demonstres te eas possidere. Cautus es non amibiguum signare, quia impetus phiscatorum conentur te fallere ut signes identitatem tuam ad eos. Solas signa sententias cuncte descriptas quibus convenis. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Inscriptio qua signare nuntium (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book - Selige inscriptionem ex librum inscriptionum + Choose previously used address + - - Alt+A Alt+A - Paste address from clipboard Glutina inscriptionem ex latibulo - Alt+P Alt+P - Enter the message you want to sign here Insere hic nuntium quod vis signare - Signature Signatio - Copy the current signature to the system clipboard Copia signationem in latibulum systematis - Sign the message to prove you own this Myriadcoin address Signa nuntium ut demonstres hanc inscriptionem Myriadcoin a te possessa esse - Sign &Message Signa &Nuntium - Reset all sign message fields Reconstitue omnes campos signandi nuntii - - Clear &All - Vacuefac &Myriada + Vacuefac &Omnia - &Verify Message &Verifica Nuntium - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Insere inscriptionem signantem, nuntium (cura ut copias intermissiones linearum, spatia, tabs, et cetera exacte) et signationem infra ut nuntium verifices. Cautus esto ne magis legas in signationem quam in nuntio signato ipso est, ut vites falli ab impetu homo-in-medio. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Inscriptio qua nuntius signatus est (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address Verifica nuntium ut cures signatum esse cum specifica inscriptione Myriadcoin - Verify &Message Verifica &Nuntium - Reset all verify message fields Reconstitue omnes campos verificandi nuntii - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Insere inscriptionem Myriadcoin (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature Clicca "Signa Nuntium" ut signatio generetur - - Enter Myriadcoin signature - Insere signationem Myriadcoin - - - - The entered address is invalid. Inscriptio inserta non valida est. - - - - Please check the address and try again. Sodes inscriptionem proba et rursus conare. - - The entered address does not refer to a key. Inserta inscriptio clavem non refert. - Wallet unlock was cancelled. Cassidilis reserare cancellatum est. - Private key for the entered address is not available. Clavis privata absens est pro inserta inscriptione. - Message signing failed. Nuntium signare abortum est. - Message signed. Nuntius signatus. - The signature could not be decoded. Signatio decodificari non potuit. - - Please check the signature and try again. Sodes signationem proba et rursus conare. - The signature did not match the message digest. Signatio non convenit digesto nuntii - Message verification failed. Nuntium verificare abortum est. - Message verified. Nuntius verificatus. @@ -1647,186 +2126,160 @@ Inscriptio: %4 SplashScreen - - The Myriadcoin developers - Myriadcoin curatores + Myriadcoin Core + Myriadcoin Nucleus + + + The Myriadcoin Core developers + - [testnet] [testnet] + + TrafficGraphWidget + + KB/s + + + TransactionDesc - Open until %1 Apertum donec %1 - + conflicted + + + %1/offline %1/non conecto - %1/unconfirmed %1/non confirmata - %1 confirmations %1 confirmationes - Status Status - , broadcast through %n node(s) , disseminatum per %n nodo, disseminata per %n nodis - Date Dies - Source Fons - Generated Generatum - - From Ab - - - To Ad - - own address inscriptio propria - label titulus - - - - - Credit Creditum - matures in %n more block(s) maturum erit in %n plure frustomaturum erit in %n pluribus frustis - not accepted non acceptum - - - - Debit Debitum - Transaction fee Transactionis merces - Net amount Cuncta quantitas - Message Nuntius - Comment Annotatio - Transaction ID ID transactionis - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Nummis generatis necesse est maturitas 120 frustorum antequam illi transmitti possunt. Cum hoc frustum generavisti, disseminatum est ad rete ut addatur ad catenam frustorum. Si aboritur inire catenam, status eius mutabit in "non acceptum" et non transmittabile erit. Hoc interdum accidat si alter nodus frustum generat paucis secundis ante vel post tuum. + Merchant + + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + - Debug information Informatio de debug - Transaction Transactio - Inputs Lectenda - Amount Quantitas - true verum - false falsum - , has not been successfully broadcast yet , nondum prospere disseminatum est - Open for %n more block(s) Aperi pro %n pluribus frustis - unknown ignotum @@ -1834,12 +2287,10 @@ Inscriptio: %4 TransactionDescDialog - Transaction details Particularia transactionis - This pane shows a detailed description of the transaction Haec tabula monstrat descriptionem verbosam transactionis @@ -1847,117 +2298,102 @@ Inscriptio: %4 TransactionTableModel - Date Dies - Type Typus - Address Inscriptio - Amount Quantitas + + Immature (%1 confirmations, will be available after %2) + + - Open for %n more block(s) Aperi pro %n plure frustoAperi pro %n pluribus frustis - Open until %1 Apertum donec %1 - - Offline (%1 confirmations) - Non conectum (%1 confirmationes) - - - - Unconfirmed (%1 of %2 confirmations) - Non confirmatum (%1 de %2 confirmationibus) - - - Confirmed (%1 confirmations) Confirmatum (%1 confirmationes) - - - Mined balance will be available when it matures in %n more block(s) - Fossum pendendum utibile erit quando id maturum est post %n plus frustumFossum pendendum utibile erit quando id maturum est post %n pluria frusta - - This block was not received by any other nodes and will probably not be accepted! Hoc frustum non acceptum est ab ulla alia nodis et probabiliter non acceptum erit! - Generated but not accepted Generatum sed non acceptum - + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + Received with Acceptum cum - Received from Acceptum ab - Sent to Missum ad - Payment to yourself Pensitatio ad te ipsum - Mined Fossa - (n/a) (n/a) - Transaction status. Hover over this field to show number of confirmations. Status transactionis. Supervola cum mure ut monstretur numerus confirmationum. - Date and time that the transaction was received. Dies et tempus quando transactio accepta est. - Type of transaction. Typus transactionis. - Destination address of transaction. Inscriptio destinationis transactionis. - Amount removed from or added to balance. Quantitas remota ex pendendo aut addita ei. @@ -1965,176 +2401,156 @@ Inscriptio: %4 TransactionView - - All Omne - Today Hodie - This week Hac hebdomade - This month Hoc mense - Last month Postremo mense - This year Hoc anno - Range... Intervallum... - Received with Acceptum cum - Sent to Missum ad - To yourself Ad te ipsum - Mined Fossa - Other Alia - Enter address or label to search Insere inscriptionem vel titulum ut quaeras - Min amount Quantitas minima - Copy address Copia inscriptionem - Copy label Copia titulum - Copy amount Copia quantitatem - Copy transaction ID Copia transactionis ID - Edit label Muta titulum - Show transaction details Monstra particularia transactionis - - Export Transaction Data - Exporta Data Transactionum + Export Transaction History + + + + Exporting Failed + + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + + + + The transaction history was successfully saved to %1. + - Comma separated file (*.csv) Comma Separata Plica (*.csv) - Confirmed Confirmatum - Date Dies - Type Typus - Label Titulus - Address Inscriptio - Amount Quantitas - ID ID - - Error exporting - Error exportandi - - - - Could not write to file %1. - Non potuisse scribere ad plicam %1. - - - Range: Intervallum: - to ad + + WalletFrame + + No wallet has been loaded. + + + WalletModel - Send Coins Mitte Nummos @@ -2142,160 +2558,121 @@ Inscriptio: %4 WalletView - &Export &Exporta - Export the data in the current tab to a file Exporta data in hac tabella in plicam - Backup Wallet Conserva cassidile - Wallet Data (*.dat) Data cassidilis (*.dat) - Backup Failed Conservare abortum est. - - There was an error trying to save the wallet data to the new location. - Error erat conante salvare data cassidilis ad novum locum. + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. + - Backup Successful Successum in conservando - - - The wallet data was successfully saved to the new location. - Successum in salvando data cassidilis in novum locum. - bitcoin-core - - Myriadcoin version - Versio de Myriadcoin - - - Usage: Usus: - - Send command to -server or myriadcoind - Mitte mandatum ad -server vel myriadcoind - - - List commands Enumera mandata - Get help for a command Accipe auxilium pro mandato - Options: Optiones: - Specify configuration file (default: myriadcoin.conf) Specifica configurationis plicam (praedefinitum: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) - Specifica pid plicam (praedefinitum: myriadcoin.pid) + Specifica pid plicam (praedefinitum: bitcoin.pid) - Specify data directory Specifica indicem datorum - - Set database cache size in megabytes (default: 25) - Constitue magnitudinem databasis cache in megabytes (praedefinitum: 25) - - - Listen for connections on <port> (default: 8333 or testnet: 18333) Ausculta pro conexionibus in <porta> (praedefinitum: 8333 vel testnet: 18333) - Maintain at most <n> connections to peers (default: 125) Manutene non plures quam <n> conexiones ad paria (praedefinitum: 125) - Connect to a node to retrieve peer addresses, and disconnect Conecta ad nodum acceptare inscriptiones parium, et disconecte - Specify your own public address Specifica tuam propriam publicam inscriptionem - Threshold for disconnecting misbehaving peers (default: 100) Limen pro disconectendo paria improba (praedefinitum: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Numerum secundorum prohibere ne paria improba reconectant (praedefinitum: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s Error erat dum initians portam RPC %u pro auscultando in IPv4: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) Ausculta pro conexionibus JSON-RPC in <porta> (praedefinitum: 8332 vel testnet: 18332) - Accept command line and JSON-RPC commands Accipe terminalis et JSON-RPC mandata. - + Myriadcoin Core RPC client version + + + Run in the background as a daemon and accept commands Operare infere sicut daemon et mandata accipe - Use the test network Utere rete experimentale - Accept connections from outside (default: 1 if no -proxy or -connect) Accipe conexiones externas (praedefinitum: 1 nisi -proxy neque -connect) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2320,612 +2697,686 @@ exempli gratia: alertnotify=echo %%s | mail -s "Myriadcoin Notificatio" - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s Error erat dum initians portam RPC %u pro auscultando in IPv6, labens retrorsum ad IPv4: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 Conglutina ad inscriptionem datam et semper in eam ausculta. Utere [moderatrum]:porta notationem pro IPv6 - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. - Non posse serare datorum indicem %s. Myriadcoin probabiliter iam operatur. + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) + - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. Error: Transactio eiecta est! Hoc possit accidere si alii nummorum in cassidili tuo iam soluti sint, ut si usus es exemplar de wallet.dat et nummi soluti sunt in exemplari sed non hic notati ut soluti. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! Error: Huic transactioni necesse est merces saltem %s propter eius magnitudinem, complexitatem, vel usum recentum acceptorum nummorum! - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - Facere mandatum quotiescumque notificatio affinis accipitur (%s in mandato mutatur in nuntium) - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Facere mandatum quotiescumque cassidilis transactio mutet (%s in mandato sbstituitur ab TxID) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - Constitue magnitudinem maximam transactionum magnae-prioritatis/parvae-mercedis in octetis/bytes (praedefinitum: 27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications Hoc est prae-dimittum experimentala aedes - utere eo periculo tuo proprio - nolite utere fodendo vel applicationibus mercatoriis - + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Monitio: -paytxfee constitutum valde magnum! Hoc est merces transactionis solves si mittis transactionem. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - Monitio: Monstratae transactiones fortasse non recta sint! Forte oportet tibi progredere, an aliis nodis progredere. - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. Monitio: Sodes cura ut dies tempusque computatri tui recti sunt! Si horologium tuum pravum est, Myriadcoin non proprie fungetur. - + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Monitio: error legendo wallet.dat! Omnes claves recte lectae, sed data transactionum vel libri inscriptionum fortasse desint vel prava sint. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. Monitio: wallet.data corrupta, data salvata! Originalis wallet.dat salvata ut wallet.{timestamp}.bak in %s; si pendendum tuum vel transactiones pravae sunt, oportet ab conservato restituere. - + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + Attempt to recover private keys from a corrupt wallet.dat Conare recipere claves privatas de corrupto wallet.dat - + Myriadcoin Core Daemon + + + Block creation options: Optiones creandi frustorum: - + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + Connect only to the specified node(s) Conecte sole ad nodos specificatos (vel nodum specificatum) - + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + Corrupted block database detected Corruptum databasum frustorum invenitur - + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + Discover own IP address (default: 1 when listening and no -externalip) Discooperi propriam inscriptionem IP (praedefinitum: 1 quando auscultans et nullum -externalip) - + Do not load the wallet and disable wallet RPC calls + + + Do you want to rebuild the block database now? Visne reficere databasum frustorum iam? - Error initializing block database Error initiando databasem frustorum - Error initializing wallet database environment %s! Error initiando systematem databasi cassidilis %s! - Error loading block database Error legendo frustorum databasem - Error opening block database Error aperiendo databasum frustorum - Error: Disk space is low! Error: Inopia spatii disci! - Error: Wallet locked, unable to create transaction! Error: Cassidile seratum, non posse transactionem creare! - Error: system error: Error: systematis error: - Failed to listen on any port. Use -listen=0 if you want this. Non potuisse auscultare in ulla porta. Utere -listen=0 si hoc vis. - Failed to read block info Non potuisse informationem frusti legere - Failed to read block Non potuisse frustum legere - Failed to sync block index Synchronizare indicem frustorum abortum est - Failed to write block index Scribere indicem frustorum abortum est - Failed to write block info Scribere informationem abortum est - Failed to write block Scribere frustum abortum est - Failed to write file info Scribere informationem plicae abortum est - Failed to write to coin database Scribere databasem nummorum abortum est - Failed to write transaction index Scribere indicem transactionum abortum est - Failed to write undo data Scribere data pro cancellando mutationes abortum est - + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + Find peers using DNS lookup (default: 1 unless -connect) Inveni paria utendo DNS quaerendo (praedefinitum: 1 nisi -connect) - + Force safe mode (default: 0) + + + Generate coins (default: 0) Genera nummos (praedefinitum: 0) - How many blocks to check at startup (default: 288, 0 = all) - Quot frusta proba ad initium (praedefinitum: 288, 0 = myriada) + Quot frusta proba ad initium (praedefinitum: 288, 0 = omnia) - - How thorough the block verification is (0-4, default: 3) - Quam perfecta frustorum verificatio est (0-4, praedefinitum: 3) + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' + - Not enough file descriptors available. Inopia descriptorum plicarum. - + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + Rebuild block chain index from current blk000??.dat files Restituere indicem catenae frustorum ex activis plicis blk000??.dat - + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + Set the number of threads to service RPC calls (default: 4) Constitue numerum filorum ad tractandum RPC postulationes (praedefinitum: 4) - + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + Verifying blocks... Verificante frusta... - Verifying wallet... Verificante cassidilem... - + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + + + Imports blocks from external blk000??.dat file Importat frusta ab externa plica blk000??.dat - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) - Constitue numerum filorum verificationis scriptorum (Maximum 16, 0 = auto, <0 = tot corda libera erunt, praedefinitum: 0) + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + - Information Informatio - - Invalid -tor address: '%s' - Inscriptio -tor non valida: '%s' - - - Invalid amount for -minrelaytxfee=<amount>: '%s' Quantitas non valida pro -minrelaytxfee=<amount>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' Quantitas non valida pro -mintxfee=<amount>: '%s' - + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + Maintain a full transaction index (default: 0) Manutene completam indicem transactionum (praedefinitum: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) Maxima magnitudo memoriae pro datis accipendis singulis conexionibus, <n>*1000 octetis/bytes (praedefinitum: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) Maxima magnitudo memoriae pro datis mittendis singulis conexionibus, <n>*1000 octetis/bytes (praedefinitum: 1000) - Only accept block chain matching built-in checkpoints (default: 1) Tantum accipe catenam frustorum convenientem internis lapidibus (praedefinitum: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Tantum conecte ad nodos in rete <net> (IPv4, IPv6 aut Tor) - - Output extra debugging information. Implies all other -debug* options - Exscribe additiciam informationem pro debug. Implicat omnes alias optiones -debug* + Print block on startup, if found in block index + - - Output extra network debugging information - Exscribe additiciam informationem pro retis debug. + Print block tree on startup (default: 0) + - - Prepend debug output with timestamp - Antepone pittacium temporis ante exscriptum de debug + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) Optiones SSL: (vide vici de Myriadcoin pro instructionibus SSL configurationis) - - Select the version of socks proxy to use (4-5, default: 5) - Selige versionem socks vicarii utendam (4-5, praedefinitum: 5) + Send command to Myriadcoin Core + - Send trace/debug info to console instead of debug.log file Mitte informationem vestigii/debug ad terminale potius quam plicam debug.log - - Send trace/debug info to debugger - Mitte informationem vestigii/debug ad debugger - - - - Set maximum block size in bytes (default: 250000) - Constitue maximam magnitudinem frusti in octetis/bytes (praedefinitum: 250000) - - - Set minimum block size in bytes (default: 0) Constitue minimam magnitudinem frusti in octetis/bytes (praedefinitum: 0) - + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + Shrink debug.log file on client startup (default: 1 when no -debug) Diminue plicam debug.log ad initium clientis (praedefinitum: 1 nisi -debug) - Signing transaction failed Signandum transactionis abortum est - Specify connection timeout in milliseconds (default: 5000) Specifica tempumfati conexionis in millisecundis (praedefinitum: 5000) - + Start Myriadcoin Core Daemon + + + System error: Systematis error: - Transaction amount too small Magnitudo transactionis nimis parva - Transaction amounts must be positive Necesse est magnitudines transactionum positivas esse. - Transaction too large Transactio nimis magna - Use UPnP to map the listening port (default: 0) Utere UPnP designare portam auscultandi (praedefinitum: 0) - Use UPnP to map the listening port (default: 1 when listening) Utere UPnP designare portam auscultandi (praedefinitum: 1 quando auscultans) - - Use proxy to reach tor hidden services (default: same as -proxy) - Utere vicarium ut extendas ad tor servitia occulta (praedefinitum: idem ut -proxy) - - - Username for JSON-RPC connections Nomen utentis pro conexionibus JSON-RPC - Warning Monitio - Warning: This version is obsolete, upgrade required! Monitio: Haec versio obsoleta est, progressio postulata! - - You need to rebuild the databases using -reindex to change -txindex - Oportet recreare databases utendo -reindex ut mutes -txindex + Zapping all transactions from wallet... + + + + on startup + + + + version + versio - wallet.dat corrupt, salvage failed wallet.dat corrupta, salvare abortum est - Password for JSON-RPC connections Tessera pro conexionibus JSON-RPC - Allow JSON-RPC connections from specified IP address Permitte conexionibus JSON-RPC ex inscriptione specificata - Send commands to node running on <ip> (default: 127.0.0.1) Mitte mandata nodo operanti in <ip> (praedefinitum: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) Pelle mandatum quando optissimum frustum mutat (%s in mandato substituitur ab hash frusti) - Upgrade wallet to latest format Progredere cassidile ad formam recentissimam - Set key pool size to <n> (default: 100) Constitue magnitudinem stagni clavium ad <n> (praedefinitum: 100) - Rescan the block chain for missing wallet transactions Iterum perlege catenam frustorum propter absentes cassidilis transactiones - Use OpenSSL (https) for JSON-RPC connections Utere OpenSSL (https) pro conexionibus JSON-RPC - Server certificate file (default: server.cert) Plica certificationis daemonis moderantis (praedefinitum: server.cert) - Server private key (default: server.pem) Clavis privata daemonis moderans (praedefinitum: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Acceptabiles cifrae (praedefinitum: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - This help message Hic nuntius auxilii - Unable to bind to %s on this computer (bind returned error %d, %s) Non posse conglutinare ad %s in hoc computatro (conglutinare redidit errorem %d, %s) - - Connect through socks proxy - Conecte per socks vicarium - - - Allow DNS lookups for -addnode, -seednode and -connect Permitte quaerenda DNS pro -addnode, -seednode, et -connect - Loading addresses... Legens inscriptiones... - Error loading wallet.dat: Wallet corrupted Error legendi wallet.dat: Cassidile corruptum - Error loading wallet.dat: Wallet requires newer version of Myriadcoin Error legendi wallet.dat: Cassidili necesse est recentior versio Myriadcoin - Wallet needed to be rewritten: restart Myriadcoin to complete Cassidili necesse erat rescribi: Repelle Myriadcoin ut compleas - Error loading wallet.dat Error legendi wallet.dat - Invalid -proxy address: '%s' Inscriptio -proxy non valida: '%s' - Unknown network specified in -onlynet: '%s' Ignotum rete specificatum in -onlynet: '%s' - Unknown -socks proxy version requested: %i Ignota -socks vicarii versio postulata: %i - Cannot resolve -bind address: '%s' Non posse resolvere -bind inscriptonem: '%s' - Cannot resolve -externalip address: '%s' Non posse resolvere -externalip inscriptionem: '%s' - Invalid amount for -paytxfee=<amount>: '%s' Quantitas non valida pro -paytxfee=<quantitas>: '%s' - Invalid amount Quantitas non valida - Insufficient funds Inopia nummorum - Loading block index... Legens indicem frustorum... - Add a node to connect to and attempt to keep the connection open Adice nodum cui conectere et conare sustinere conexionem apertam - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - Non posse conglutinare ad %s in hoc cumputatro. Myriadcoin probabiliter iam operatur. - - - - Fee per KB to add to transactions you send - Merces per KB addere ad transactiones tu mittas - - - Loading wallet... Legens cassidile... - Cannot downgrade wallet Non posse cassidile regredi - Cannot write default address Non posse scribere praedefinitam inscriptionem - Rescanning... Iterum perlegens... - Done loading Completo lengendi - To use the %s option Ut utaris optione %s - Error Error - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_lt.ts b/src/qt/locale/bitcoin_lt.ts index c1fc844d..11b1fbae 100644 --- a/src/qt/locale/bitcoin_lt.ts +++ b/src/qt/locale/bitcoin_lt.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - Apie Myriadcoin + About Myriadcoin Core + - - <b>Myriadcoin</b> version - <b>Myriadcoin</b> versija + <b>Myriadcoin Core</b> version + - This is experimental software. @@ -27,153 +23,128 @@ Platinama pagal MIT/X11 licenciją, kurią rasite faile COPYING arba http://www. Šiame produkte yra OpenSSL projekto kuriamas OpenSSL Toolkit (http://www.openssl.org/), Eric Young parašyta kriptografinė programinė įranga bei Thomas Bernard sukurta UPnP programinė įranga. - Copyright + Copyright + + + The Myriadcoin Core developers - - The Myriadcoin developers + (%1-bit) AddressBookPage - - Address Book - Adresų knygelė - - - Double-click to edit address or label Spragtelėkite, kad pakeistumėte adresą arba žymę - Create a new address Sukurti naują adresą - + &New + &Naujas + + Copy the currently selected address to the system clipboard Kopijuoti esamą adresą į mainų atmintį - - &New Address - &Naujas adresas + &Copy + &Kopijuoti - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Tai yra jūsų Myriadcoin adresai mokėjimų gavimui. Galite duoti skirtingus adresus atskiriems siuntėjams, kad galėtumėte sekti, kas jums moka. + C&lose + &Užverti - &Copy Address &Kopijuoti adresą - - Show &QR Code - Rodyti &QR kodą - - - - Sign a message to prove you own a Myriadcoin address - Pasirašykite žinutę, kad įrodytume, jog esate Myriadcoin adreso savininkas - - - - Sign &Message - Registruoti praneši&mą - - - Delete the currently selected address from the list - Export the data in the current tab to a file - &Export - + &Eksportuoti - - Verify a message to ensure it was signed with a specified Myriadcoin address - Patikrinkite žinutę, jog įsitikintumėte, kad ją pasirašė nurodytas Myriadcoin adresas - - - - &Verify Message - &Tikrinti žinutę - - - &Delete &Trinti - + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + Copy &Label Kopijuoti ž&ymę - &Edit &Keisti - - Send &Coins + Export Address List - - Export Address Book Data - Eksportuoti adresų knygelės duomenis - - - Comma separated file (*.csv) Kableliais išskirtas failas (*.csv) - - Error exporting - Eksportavimo klaida + Exporting Failed + - - Could not write to file %1. - Nepavyko įrašyti į failą %1. + There was an error trying to save the address list to %1. + AddressTableModel - Label Žymė - Address Adresas - (no label) (nėra žymės) @@ -181,140 +152,106 @@ Platinama pagal MIT/X11 licenciją, kurią rasite faile COPYING arba http://www. AskPassphraseDialog - Passphrase Dialog Slaptafrazės dialogas - Enter passphrase Įvesti slaptafrazę - New passphrase Nauja slaptafrazė - Repeat new passphrase Pakartokite naują slaptafrazę - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. Įveskite naują piniginės slaptafrazę.<br/>Prašome naudoti slaptafrazę iš <b> 10 ar daugiau atsitiktinių simbolių</b> arba <b>aštuonių ar daugiau žodžių</b>. - Encrypt wallet Užšifruoti piniginę - This operation needs your wallet passphrase to unlock the wallet. Ši operacija reikalauja jūsų piniginės slaptafrazės jai atrakinti. - Unlock wallet Atrakinti piniginę - This operation needs your wallet passphrase to decrypt the wallet. Ši operacija reikalauja jūsų piniginės slaptafrazės jai iššifruoti. - Decrypt wallet Iššifruoti piniginę - Change passphrase Pakeisti slaptafrazę - Enter the old and new passphrase to the wallet. Įveskite seną ir naują piniginės slaptafrazes. - Confirm wallet encryption Patvirtinkite piniginės užšifravimą - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! Dėmesio: jei užšifruosite savo piniginę ir pamesite slaptafrazę, jūs<b>PRARASITE VISUS SAVO MYRIADCOINUS</b>! - Are you sure you wish to encrypt your wallet? Ar tikrai norite šifruoti savo piniginę? - 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. - - Warning: The Caps Lock key is on! Įspėjimas: įjungtas Caps Lock klavišas! - - Wallet encrypted Piniginė užšifruota - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. - Myriadcoin dabar užsidarys šifravimo proceso pabaigai. Atminkite, kad piniginės šifravimas negali pilnai apsaugoti myriadcoinų vagysčių kai tinkle esančios kenkėjiškos programos patenka į jūsų kompiuterį. + Myriadcoin dabar užsidarys šifravimo proceso pabaigai. Atminkite, kad piniginės šifravimas negali pilnai apsaugoti bitcoinų vagysčių kai tinkle esančios kenkėjiškos programos patenka į jūsų kompiuterį. - - - - Wallet encryption failed Nepavyko užšifruoti piniginę - Wallet encryption failed due to an internal error. Your wallet was not encrypted. Dėl vidinės klaidos nepavyko užšifruoti piniginę.Piniginė neužšifruota. - - The supplied passphrases do not match. Įvestos slaptafrazės nesutampa. - Wallet unlock failed Nepavyko atrakinti piniginę - - - The passphrase entered for the wallet decryption was incorrect. Neteisingai įvestas slaptažodis piniginės iššifravimui. - Wallet decryption failed Nepavyko iššifruoti piniginės - Wallet passphrase was successfully changed. Piniginės slaptažodis sėkmingai pakeistas. @@ -322,319 +259,286 @@ Platinama pagal MIT/X11 licenciją, kurią rasite faile COPYING arba http://www. BitcoinGUI - Sign &message... Pasirašyti ži&nutę... - Synchronizing with network... Sinchronizavimas su tinklu ... - &Overview &Apžvalga - + Node + + + Show general overview of wallet Rodyti piniginės bendrą apžvalgą - &Transactions &Sandoriai - Browse transaction history Apžvelgti sandorių istoriją - - Edit the list of stored addresses and labels - Redaguoti išsaugotus adresus bei žymes - - - - Show the list of addresses for receiving payments - Parodyti adresų sąraša mokėjimams gauti - - - E&xit &Išeiti - Quit application Išjungti programą - Show information about Myriadcoin Rodyti informaciją apie Myriadcoin - About &Qt Apie &Qt - Show information about Qt Rodyti informaciją apie Qt - &Options... &Parinktys... - &Encrypt Wallet... &Užšifruoti piniginę... - &Backup Wallet... &Backup piniginę... - &Change Passphrase... &Keisti slaptafrazę... - + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + Importing blocks from disk... - + Blokai importuojami iš disko... - Reindexing blocks on disk... - + Blokai iš naujo indeksuojami... - Send coins to a Myriadcoin address Siųsti monetas Myriadcoin adresui - Modify configuration options for Myriadcoin Keisti myriadcoin konfigūracijos galimybes - Backup wallet to another location Daryti piniginės atsarginę kopiją - Change the passphrase used for wallet encryption Pakeisti slaptafrazę naudojamą piniginės užšifravimui - &Debug window &Derinimo langas - Open debugging and diagnostic console Atverti derinimo ir diagnostikos konsolę - &Verify message... &Tikrinti žinutę... - - Myriadcoin Myriadcoin - Wallet Piniginė - &Send - + &Siųsti - &Receive - + &Gauti - - &Addresses - - - - - &About Myriadcoin - &Apie Myriadcoin - - - &Show / Hide &Rodyti / Slėpti - Show or hide the main Window - + Rodyti arba slėpti pagrindinį langą - Encrypt the private keys that belong to your wallet - Sign messages with your Myriadcoin addresses to prove you own them - Verify messages to ensure they were signed with specified Myriadcoin addresses - &File &Failas - &Settings &Nustatymai - &Help &Pagalba - Tabs toolbar Kortelių įrankinė - - [testnet] [testavimotinklas] - + Myriadcoin Core + Myriadcoin branduolys + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + Myriadcoin client Myriadcoin klientas - %n active connection(s) to Myriadcoin network %n Myriadcoin tinklo aktyvus ryšys%n Myriadcoin tinklo aktyvūs ryšiai%n Myriadcoin tinklo aktyvūs ryšiai - No block source available... - Processed %1 of %2 (estimated) blocks of transaction history. - Processed %1 blocks of transaction history. - %n hour(s) - + %n valanda%n valandos%n valandų - %n day(s) - + %n diena%n dienos%n dienų - %n week(s) + %n savaitė%n savaitės%n savaičių + + + %1 and %2 + + + + %n year(s) - %1 behind - Last received block was generated %1 ago. - Transactions after this will not yet be visible. - Error - + Klaida - Warning - Information - + Informacija - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - Up to date Atnaujinta - Catching up... Vejamasi... - - Confirm transaction fee - Patvirtinti sandorio mokestį - - - Sent transaction Sandoris nusiųstas - Incoming transaction Ateinantis sandoris - Date: %1 Amount: %2 Type: %3 @@ -646,29 +550,14 @@ Tipas: %3 Adresas: %4 - - - URI handling - URI apdorojimas - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> Piniginė <b>užšifruota</b> ir šiuo metu <b>atrakinta</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> Piniginė <b>užšifruota</b> ir šiuo metu <b>užrakinta</b> - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. @@ -676,329 +565,647 @@ Adresas: %4 ClientModel - Network Alert Tinklo įspėjimas + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + + + + Bytes: + + + + Amount: + Suma: + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + Suma + + + Address + Adresas + + + Date + Data + + + Confirmations + + + + Confirmed + Patvirtintas + + + Priority + + + + Copy address + Kopijuoti adresą + + + Copy label + Kopijuoti žymę + + + Copy amount + Kopijuoti sumą + + + Copy transaction ID + + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + + + + Dust + + + + yes + + + + no + + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + (nėra žymės) + + + change from %1 (%2) + + + + (change) + + + EditAddressDialog - Edit Address Keisti adresą - &Label Ž&ymė - - The label associated with this address book entry - Žymė yra susieta su šios adresų knygelęs turiniu + The label associated with this address list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + - &Address &Adresas - - The address associated with this address book entry. This can only be modified for sending addresses. - Adresas yra susietas su šios adresų knygelęs turiniu. Tai gali būti keičiama tik siuntimo adresams. - - - New receiving address Naujas gavimo adresas - New sending address Naujas siuntimo adresas - Edit receiving address Keisti gavimo adresą - Edit sending address Keisti siuntimo adresą - The entered address "%1" is already in the address book. Įvestas adresas „%1“ jau yra adresų knygelėje. - The entered address "%1" is not a valid Myriadcoin address. Įvestas adresas „%1“ nėra galiojantis Myriadcoin adresas. - Could not unlock wallet. Nepavyko atrakinti piniginės. - New key generation failed. Naujo rakto generavimas nepavyko. - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt - Myriadcoin-Qt + A new data directory will be created. + + + + name + + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core + Myriadcoin branduolys - version versija - Usage: Naudojimas: - command-line options komandinės eilutės parametrai - UI options Naudotoji sąsajos parametrai - Set language, for example "de_DE" (default: system locale) Nustatyti kalbą, pavyzdžiui "lt_LT" (numatyta: sistemos kalba) - Start minimized Paleisti sumažintą - + Set SSL root certificates for payment request (default: -system-) + + + Show splash screen on startup (default: 1) + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + Sveiki + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" can not be created. + + + + Error + Klaida + + + GB of free space available + + + + (of %1GB needed) + + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open + + OptionsDialog - Options Parinktys - &Main &Pagrindinės - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. - Pay transaction &fee &Mokėti sandorio mokestį - Automatically start Myriadcoin after logging in to the system. Automatiškai paleisti Bitkoin programą įjungus sistemą. - &Start Myriadcoin on system login &Paleisti Myriadcoin programą su window sistemos paleidimu - + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + Reset all client options to default. - &Reset Options - &Network &Tinklas - + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. Automatiškai atidaryti Myriadcoin kliento prievadą maršrutizatoriuje. Tai veikia tik tada, kai jūsų maršrutizatorius palaiko UPnP ir ji įjungta. - Map port using &UPnP Persiųsti prievadą naudojant &UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - Jungtis į Bitkoin tinklą per socks proxy (pvz. jungiantis per Tor) - - - - &Connect through SOCKS proxy: - &Jungtis per SOCKS tarpinį serverį: - - - Proxy &IP: Tarpinio serverio &IP: - - IP address of the proxy (e.g. 127.0.0.1) - Tarpinio serverio IP adresas (pvz. 127.0.0.1) - - - &Port: &Prievadas: - Port of the proxy (e.g. 9050) Tarpinio serverio preivadas (pvz, 9050) - SOCKS &Version: SOCKS &versija: - SOCKS version of the proxy (e.g. 5) Tarpinio serverio SOCKS versija (pvz., 5) - &Window &Langas - Show only a tray icon after minimizing the window. Po programos lango sumažinimo rodyti tik programos ikoną. - &Minimize to the tray instead of the taskbar &M sumažinti langą bet ne užduočių juostą - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. Uždarant langą neuždaryti programos. Kai ši parinktis įjungta, programa bus uždaryta tik pasirinkus meniu komandą Baigti. - M&inimize on close &Sumažinti uždarant - &Display &Rodymas - User Interface &language: Naudotojo sąsajos &kalba: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. Čia gali būti nustatyta naudotojo sąsajos kalba. Šis nustatymas įsigalios iš naujo paleidus Myriadcoin. - &Unit to show amounts in: &Vienetai, kuriais rodyti sumas: - Choose the default subdivision unit to show in the interface and when sending coins. Rodomų ir siunčiamų monetų kiekio matavimo vienetai - Whether to show Myriadcoin addresses in the transaction list or not. - &Display addresses in transaction list &Rodyti adresus sandorių sąraše - + Whether to show coin control features or not. + + + &OK &Gerai - &Cancel &Atšaukti - - &Apply - &Pritaikyti - - - default numatyta - + none + + + Confirm options reset - - Some settings may require a client restart to take effect. + Client restart required to activate changes. - - Do you want to proceed? + Client will be shutdown, do you want to proceed? - - - Warning - Įspėjimas - - - - - This setting will take effect after restarting Myriadcoin. + This change would require a client restart. - The supplied proxy address is invalid. Nurodytas tarpinio serverio adresas negalioja. @@ -1006,639 +1213,911 @@ Adresas: %4 OverviewPage - Form Forma - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. - - Balance: - Balansas: - - - - Unconfirmed: - Nepatvirtinti: - - - Wallet Piniginė - + Available: + + + + Your current spendable balance + + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + + + Immature: Nepribrendę: - Mined balance that has not yet matured - + Total: + Viso: + + + Your current total balance + Jūsų balansas + + <b>Recent transactions</b> <b>Naujausi sandoriai</b> - - Your current balance - Jūsų einamasis balansas - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - Iš viso sandorių, įskaitant tuos kurie dar turi būti patvirtinti, ir jie dar nėra įskaičiuotii į einamosios sąskaitos balansą - - - - out of sync - + nesinchronizuota PaymentServer - + URI handling + URI apdorojimas + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + Cannot start myriadcoin: click-to-pay handler - - - QRCodeDialog - - QR Code Dialog - QR kodo dialogas - - - - Request Payment - Prašau išmokėti - - - - Amount: - Suma: - - - - Label: - Žymė: - - - - Message: - Žinutė: - - - - &Save As... - Į&rašyti kaip... - - - - Error encoding URI into QR Code. - Klaida, koduojant URI į QR kodą. - - - - The entered amount is invalid, please check. - Įvesta suma neteisinga, prašom patikrinti. - - - - Resulting URI too long, try to reduce the text for label / message. + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + + + + Network request error + Tinklo užklausos klaida + + + + QObject + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" does not exist. + + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + + + + Error: Invalid combination of -regtest and -testnet. + + + + Myriadcoin Core didn't yet exit safely... + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Įveskite bitkoinų adresą (pvz. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + + + + &Copy Image - Save QR Code Įrašyti QR kodą - - PNG Images (*.png) - PNG paveikslėliai (*.png) + PNG Image (*.png) + RPCConsole - Client name Kliento pavadinimas - - - - - - - - - - N/A nėra - Client version Kliento versija - &Information &Informacija - + Debug window + + + + General + + + Using OpenSSL version Naudojama OpenSSL versija - Startup time Paleidimo laikas - Network Tinklas - + Name + + + Number of connections Prisijungimų kiekis - - On testnet - Testnete - - - Block chain Blokų grandinė - Current number of blocks Dabartinis blokų skaičius - Estimated total blocks - Last block time Paskutinio bloko laikas - &Open &Atverti - - Command-line options - Komandinės eilutės parametrai - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - - - - - &Show - &Rodyti - - - &Console &Konsolė - + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + Build date Kompiliavimo data - - Myriadcoin - Debug window - Myriadcoin - Derinimo langas - - - - Myriadcoin Core - Myriadcoin branduolys - - - Debug log file Derinimo žurnalo failas - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. - Clear console Išvalyti konsolę - Welcome to the Myriadcoin RPC console. - + Sveiki atvykę į Myriadcoin RPC konsolę. - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Type <b>help</b> for an overview of available commands. + + %1 B + %1 B + + + %1 KB + %1 KB + + + %1 MB + %1 MB + + + %1 GB + %1 GB + + + %1 m + %1 m + + + %1 h + %1 h + + + %1 h %2 m + %1 h %2 m + + + + ReceiveCoinsDialog + + &Amount: + + + + &Label: + Ž&ymė: + + + &Message: + + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + + + + Clear + + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + + + + Remove the selected entries from the list + + + + Remove + + + + Copy label + Kopijuoti žymę + + + Copy message + + + + Copy amount + Kopijuoti sumą + + + + ReceiveRequestDialog + + QR Code + QR kodas + + + Copy &URI + + + + Copy &Address + + + + &Save Image... + + + + Request payment to %1 + + + + Payment information + Mokėjimo informacija + + + URI + + + + Address + Adresas + + + Amount + Suma + + + Label + Žymė + + + Message + Žinutė + + + Resulting URI too long, try to reduce the text for label / message. + + + + Error encoding URI into QR Code. + Klaida, koduojant URI į QR kodą. + + + + RecentRequestsTableModel + + Date + Data + + + Label + Žymė + + + Message + Žinutė + + + Amount + Suma + + + (no label) + (nėra žymės) + + + (no message) + + + + (no amount) + + SendCoinsDialog - - - - - - - - Send Coins Siųsti monetas - + Coin Control Features + + + + Inputs... + + + + automatically selected + + + + Insufficient funds! + + + + Quantity: + + + + Bytes: + + + + Amount: + Suma: + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + Send to multiple recipients at once Siųsti keliems gavėjams vienu metu - Add &Recipient &A Pridėti gavėją - - Remove all transaction fields - Pašalinti visus sandorio laukus + Clear all fields of the form. + - Clear &All Išvalyti &viską - Balance: Balansas: - - 123.456 BTC - 123.456 BTC - - - Confirm the send action Patvirtinti siuntimo veiksmą - S&end &Siųsti - - <b>%1</b> to %2 (%3) - <b>%1</b> to %2 (%3) - - - Confirm send coins Patvirtinti monetų siuntimą - - Are you sure you want to send %1? - Ar tikrai norite siųsti %1? + %1 to %2 + - - and - ir + Copy quantity + + + + Copy amount + Kopijuoti sumą + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + + + + or + - The recipient address is not valid, please recheck. Negaliojantis gavėjo adresas. Patikrinkite. - The amount to pay must be larger than 0. Apmokėjimo suma turi būti didesnė nei 0. - The amount exceeds your balance. Suma viršija jūsų balansą. - The total exceeds your balance when the %1 transaction fee is included. Jei pridedame sandorio mokestį %1 bendra suma viršija jūsų balansą. - Duplicate address found, can only send to each address once per send operation. Rastas adreso dublikatas. - - Error: Transaction creation failed! + Transaction creation failed! - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Klaida: sandoris buvo atmestas.Tai gali įvykti, jei kai kurios monetos iš jūsų piniginėje jau buvo panaudotos, pvz. jei naudojote wallet.dat kopiją ir monetos buvo išleistos kopijoje, bet nepažymėtos kaip skirtos išleisti čia. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + + + + (no label) + (nėra žymės) + + + Warning: Unknown change address + + + + Are you sure you want to send? + + + + added as transaction fee + + + + Payment request expired + + + + Invalid payment address %1 + SendCoinsEntry - - Form - Forma - - - A&mount: Su&ma: - Pay &To: Mokėti &gavėjui: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book Įveskite žymę šiam adresui kad galėtumėte įtraukti ją į adresų knygelę - &Label: Ž&ymė: - - Choose address from address book - Pasirinkite adresą iš adresų knygelės + Choose previously used address + + + + This is a normal payment. + - Alt+A Alt+A - Paste address from clipboard Įvesti adresą iš mainų atminties - Alt+P Alt+P - - Remove this recipient - Pašalinti šį gavėją + Remove this entry + - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Įveskite bitkoinų adresą (pvz. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + Žinutė: + + + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. + SignVerifyMessageDialog - Signatures - Sign / Verify a Message - &Sign Message &Pasirašyti žinutę - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Įveskite bitkoinų adresą (pvz. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book - Pasirinkite adresą iš adresų knygelės + Choose previously used address + - - Alt+A Alt+A - Paste address from clipboard Įvesti adresą iš mainų atminties - Alt+P Alt+P - Enter the message you want to sign here Įveskite pranešimą, kurį norite pasirašyti čia - Signature - Copy the current signature to the system clipboard - Sign the message to prove you own this Myriadcoin address Registruotis žinute įrodymuii, kad turite šį adresą - Sign &Message - Reset all sign message fields - - Clear &All Išvalyti &viską - &Verify Message &Patikrinti žinutę - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Įveskite bitkoinų adresą (pvz. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address Patikrinkite žinutę, jog įsitikintumėte, kad ją pasirašė nurodytas Myriadcoin adresas - Verify &Message - Reset all verify message fields - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Įveskite bitkoinų adresą (pvz. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature Spragtelėkite "Registruotis žinutę" tam, kad gauti parašą - - Enter Myriadcoin signature - Įveskite Myriadcoin parašą - - - - The entered address is invalid. Įvestas adresas negalioja. - - - - Please check the address and try again. Prašom patikrinti adresą ir bandyti iš naujo. - - The entered address does not refer to a key. - Wallet unlock was cancelled. Piniginės atrakinimas atšauktas. - Private key for the entered address is not available. - Message signing failed. Žinutės pasirašymas nepavyko. - Message signed. Žinutė pasirašyta. - The signature could not be decoded. Nepavyko iškoduoti parašo. - - Please check the signature and try again. Prašom patikrinti parašą ir bandyti iš naujo. - The signature did not match the message digest. Parašas neatitinka žinutės. - Message verification failed. Žinutės tikrinimas nepavyko. - Message verified. Žinutė patikrinta. @@ -1646,186 +2125,160 @@ Adresas: %4 SplashScreen - - The Myriadcoin developers + Myriadcoin Core + Myriadcoin branduolys + + + The Myriadcoin Core developers - [testnet] [testavimotinklas] + + TrafficGraphWidget + + KB/s + KB/s + + TransactionDesc - Open until %1 Atidaryta iki %1 - + conflicted + + + %1/offline %1/neprisijungęs - %1/unconfirmed %1/nepatvirtintas - %1 confirmations %1 patvirtinimų - Status Būsena - , broadcast through %n node(s) - Date Data - Source Šaltinis - Generated Sugeneruotas - - From Nuo - - - To Kam - - own address savo adresas - label žymė - - - - - Credit Kreditas - matures in %n more block(s) - not accepted nepriimta - - - - Debit Debitas - Transaction fee Sandorio mokestis - Net amount Neto suma - Message Žinutė - Comment Komentaras - Transaction ID Sandorio ID - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Išgautos monetos turi sulaukti 120 blokų, kol jos gali būti naudojamos. Kai sukūrėte šį bloką, jis buvo transliuojamas tinkle ir turėjo būti įtrauktas į blokų grandinę. Jei nepavyksta patekti į grandinę, bus pakeista į "nepriėmė", o ne "vartojamas". Tai kartais gali atsitikti, jei kitas mazgas per keletą sekundžių sukuria bloką po jūsų bloko. + Merchant + + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + - Debug information Derinimo informacija - Transaction Sandoris - Inputs - Amount Suma - true tiesa - false netiesa - , has not been successfully broadcast yet , transliavimas dar nebuvo sėkmingas - Open for %n more block(s) - unknown nežinomas @@ -1833,12 +2286,10 @@ Adresas: %4 TransactionDescDialog - Transaction details Sandorio detelės - This pane shows a detailed description of the transaction Šis langas sandorio detalų aprašymą @@ -1846,117 +2297,102 @@ Adresas: %4 TransactionTableModel - Date Data - Type Tipas - Address Adresas - Amount Suma + + Immature (%1 confirmations, will be available after %2) + + - Open for %n more block(s) - Open until %1 Atidaryta iki %1 - - Offline (%1 confirmations) - Atjungta (%1 patvirtinimai) - - - - Unconfirmed (%1 of %2 confirmations) - Nepatvirtintos (%1 iš %2 patvirtinimų) - - - Confirmed (%1 confirmations) Patvirtinta (%1 patvirtinimai) - - - Mined balance will be available when it matures in %n more block(s) - - - This block was not received by any other nodes and will probably not be accepted! Šis blokas negautas nė vienu iš mazgų ir matomai nepriimtas - Generated but not accepted Išgauta bet nepriimta - + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + Received with Gauta su - Received from Gauta iš - Sent to Siųsta - Payment to yourself Mokėjimas sau - Mined Išgauta - (n/a) nepasiekiama - Transaction status. Hover over this field to show number of confirmations. Sandorio būklė. Užvedus pelės žymeklį ant šios srities matysite patvirtinimų skaičių. - Date and time that the transaction was received. Sandorio gavimo data ir laikas - Type of transaction. Sandorio tipas. - Destination address of transaction. Sandorio paskirties adresas - Amount removed from or added to balance. Suma pridėta ar išskaičiuota iš balanso @@ -1964,176 +2400,156 @@ Adresas: %4 TransactionView - - All Visi - Today Šiandien - This week Šią savaitę - This month Šį mėnesį - Last month Paskutinį mėnesį - This year Šiais metais - Range... Intervalas... - Received with Gauta su - Sent to Išsiųsta - To yourself Skirta sau - Mined Išgauta - Other Kita - Enter address or label to search Įveskite adresą ar žymę į paiešką - Min amount Minimali suma - Copy address Kopijuoti adresą - Copy label Kopijuoti žymę - Copy amount Kopijuoti sumą - Copy transaction ID - Edit label Taisyti žymę - Show transaction details Rodyti sandėrio detales - - Export Transaction Data - Sandorio duomenų eksportavimas + Export Transaction History + + + + Exporting Failed + + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + + + + The transaction history was successfully saved to %1. + - Comma separated file (*.csv) Kableliais atskirtų duomenų failas (*.csv) - Confirmed Patvirtintas - Date Data - Type Tipas - Label Žymė - Address Adresas - Amount Suma - ID ID - - Error exporting - Eksportavimo klaida - - - - Could not write to file %1. - Neįmanoma įrašyti į failą %1. - - - Range: Grupė: - to skirta + + WalletFrame + + No wallet has been loaded. + + + WalletModel - Send Coins Siųsti monetas @@ -2141,160 +2557,121 @@ Adresas: %4 WalletView - &Export - + &Eksportuoti - Export the data in the current tab to a file - Backup Wallet - Wallet Data (*.dat) - Backup Failed - - There was an error trying to save the wallet data to the new location. + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. - Backup Successful - - - - - The wallet data was successfully saved to the new location. - + Atsarginė kopija sėkmingai padaryta bitcoin-core - - Myriadcoin version - Myriadcoin versija - - - Usage: Naudojimas: - - Send command to -server or myriadcoind - Siųsti komandą serveriui arba myriadcoind - - - List commands Komandų sąrašas - Get help for a command Suteikti pagalba komandai - Options: Parinktys: - Specify configuration file (default: myriadcoin.conf) Nurodyti konfigūracijos failą (pagal nutylėjimąt: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) Nurodyti pid failą (pagal nutylėjimą: myriadcoind.pid) - Specify data directory Nustatyti duomenų aplanką - - Set database cache size in megabytes (default: 25) - - - - Listen for connections on <port> (default: 8333 or testnet: 18333) Sujungimo klausymas prijungčiai <port> (pagal nutylėjimą: 8333 arba testnet: 18333) - Maintain at most <n> connections to peers (default: 125) Palaikyti ne daugiau <n> jungčių kolegoms (pagal nutylėjimą: 125) - Connect to a node to retrieve peer addresses, and disconnect - Specify your own public address - + Nurodykite savo nuosavą viešą adresą - Threshold for disconnecting misbehaving peers (default: 100) Atjungimo dėl netinkamo kolegų elgesio riba (pagal nutylėjimą: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Sekundžių kiekis eikiamas palaikyti ryšį dėl lygiarangių nestabilumo (pagal nutylėjimą: 86.400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) Klausymas JSON-RPC sujungimui prijungčiai <port> (pagal nutylėjimą: 8332 or testnet: 18332) - Accept command line and JSON-RPC commands Priimti komandinę eilutę ir JSON-RPC komandas - + Myriadcoin Core RPC client version + + + Run in the background as a daemon and accept commands Dirbti fone kaip šešėlyje ir priimti komandas - Use the test network Naudoti testavimo tinklą - Accept connections from outside (default: 1 if no -proxy or -connect) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2309,612 +2686,686 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications - + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Įspėjimas: -paytxfee yra nustatytas per didelis. Tai sandorio mokestis, kurį turėsite mokėti, jei siųsite sandorį. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. + Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. + Įspėjimas: Patikrinkite, kad kompiuterio data ir laikas yra teisingi.Jei Jūsų laikrodis neteisingai nustatytas Bitcoin, veiks netinkamai. + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. - Įspėjimas: Patikrinkite, kad kompiuterio data ir laikas yra teisingi.Jei Jūsų laikrodis neteisingai nustatytas Myriadcoin, veiks netinkamai. + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + Attempt to recover private keys from a corrupt wallet.dat - + Myriadcoin Core Daemon + + + Block creation options: - + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + Connect only to the specified node(s) Prisijungti tik prie nurodyto mazgo - + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + Corrupted block database detected - + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + Discover own IP address (default: 1 when listening and no -externalip) - + Do not load the wallet and disable wallet RPC calls + + + Do you want to rebuild the block database now? - Error initializing block database - Error initializing wallet database environment %s! - Error loading block database - Error opening block database - + Klaida atveriant blokų duombazę - Error: Disk space is low! - Error: Wallet locked, unable to create transaction! - Error: system error: - + Klaida: sistemos klaida: - Failed to listen on any port. Use -listen=0 if you want this. - Failed to read block info - + Nepavyko nuskaityti bloko informacijos - Failed to read block - + Nepavyko nuskaityti bloko - Failed to sync block index - Failed to write block index - Failed to write block info - Failed to write block - + Nepavyko įrašyti bloko - Failed to write file info - + Nepavyko įrašyti failo informacijos - Failed to write to coin database - Failed to write transaction index - Failed to write undo data - + Fee per kB to add to transactions you send + Įtraukti mokestį už kB siunčiamiems sandoriams + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + Find peers using DNS lookup (default: 1 unless -connect) - - Generate coins (default: 0) + Force safe mode (default: 0) - + Generate coins (default: 0) + Generuoti monetas (numatyta: 0) + + How many blocks to check at startup (default: 288, 0 = all) - - How thorough the block verification is (0-4, default: 3) + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' - Not enough file descriptors available. - + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + Rebuild block chain index from current blk000??.dat files - + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + Set the number of threads to service RPC calls (default: 4) - + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + Verifying blocks... - + Tikrinami blokai... - Verifying wallet... + Tikrinama piniginė... + + + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex - Imports blocks from external blk000??.dat file - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) - Information - + Informacija - - Invalid -tor address: '%s' - Neteisingas tor adresas: '%s' - - - Invalid amount for -minrelaytxfee=<amount>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' - + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + Maintain a full transaction index (default: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) Maksimalus buferis priėmimo sujungimui <n>*1000 bitų (pagal nutylėjimą: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) Maksimalus buferis siuntimo sujungimui <n>*1000 bitų (pagal nutylėjimą: 1000) - Only accept block chain matching built-in checkpoints (default: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - Output extra debugging information. Implies all other -debug* options - Išvesti papildomą derinimo informaciją. Numanomi visi kiti -debug* parametrai + Print block on startup, if found in block index + - - Output extra network debugging information - Išvesti papildomą tinklo derinimo informaciją + Print block tree on startup (default: 0) + - - Prepend debug output with timestamp - Prideėti laiko žymę derinimo rezultatams + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) SSL opcijos (žr.e Myriadcoin Wiki for SSL setup instructions) - - Select the version of socks proxy to use (4-5, default: 5) + Send command to Myriadcoin Core - Send trace/debug info to console instead of debug.log file Siųsti atsekimo/derinimo info į konsolę vietoj debug.log failo - - Send trace/debug info to debugger - Siųsti sekimo/derinimo info derintojui - - - - Set maximum block size in bytes (default: 250000) - - - - Set minimum block size in bytes (default: 0) - + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + Shrink debug.log file on client startup (default: 1 when no -debug) - Signing transaction failed - Specify connection timeout in milliseconds (default: 5000) Nustatyti sujungimo trukmę milisekundėmis (pagal nutylėjimą: 5000) - - System error: + Start Myriadcoin Core Daemon - + System error: + Sistemos klaida: + + Transaction amount too small - Transaction amounts must be positive - Transaction too large - Use UPnP to map the listening port (default: 0) Bandymas naudoti UPnP struktūra klausymosi prievadui (default: 0) - Use UPnP to map the listening port (default: 1 when listening) Bandymas naudoti UPnP struktūra klausymosi prievadui (default: 1 when listening) - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - Username for JSON-RPC connections Vartotojo vardas JSON-RPC jungimuisi - Warning - Warning: This version is obsolete, upgrade required! - - You need to rebuild the databases using -reindex to change -txindex + Zapping all transactions from wallet... - + on startup + + + + version + versija + + wallet.dat corrupt, salvage failed - Password for JSON-RPC connections Slaptažodis JSON-RPC sujungimams - Allow JSON-RPC connections from specified IP address Leisti JSON-RPC tik iš nurodytų IP adresų - Send commands to node running on <ip> (default: 127.0.0.1) Siųsti komandą mazgui dirbančiam <ip> (pagal nutylėjimą: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) - Upgrade wallet to latest format Atnaujinti piniginę į naujausią formatą - Set key pool size to <n> (default: 100) Nustatyti rakto apimties dydį <n> (pagal nutylėjimą: 100) - Rescan the block chain for missing wallet transactions Ieškoti prarastų piniginės sandorių blokų grandinėje - Use OpenSSL (https) for JSON-RPC connections Naudoti OpenSSL (https) jungimuisi JSON-RPC - Server certificate file (default: server.cert) Serverio sertifikato failas (pagal nutylėjimą: server.cert) - Server private key (default: server.pem) Serverio privatus raktas (pagal nutylėjimą: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Priimtini šifrai (pagal nutylėjimą: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - This help message Pagelbos žinutė - Unable to bind to %s on this computer (bind returned error %d, %s) Nepavyko susieti šiame kompiuteryje prievado %s (bind returned error %d, %s) - - Connect through socks proxy - Jungtis per socks tarpinį serverį - - - Allow DNS lookups for -addnode, -seednode and -connect Leisti DNS paiešką sujungimui ir mazgo pridėjimui - Loading addresses... Užkraunami adresai... - Error loading wallet.dat: Wallet corrupted wallet.dat pakrovimo klaida, wallet.dat sugadintas - Error loading wallet.dat: Wallet requires newer version of Myriadcoin wallet.dat pakrovimo klaida, wallet.dat reikalauja naujasnės Myriadcoin versijos - Wallet needed to be rewritten: restart Myriadcoin to complete Piniginė turi būti prrašyta: įvykdymui perkraukite Myriadcoin - Error loading wallet.dat wallet.dat pakrovimo klaida - Invalid -proxy address: '%s' Neteisingas proxy adresas: '%s' - Unknown network specified in -onlynet: '%s' - Unknown -socks proxy version requested: %i - Cannot resolve -bind address: '%s' - Cannot resolve -externalip address: '%s' - Invalid amount for -paytxfee=<amount>: '%s' Neteisinga suma -paytxfee=<amount>: '%s' - Invalid amount Neteisinga suma - Insufficient funds Nepakanka lėšų - Loading block index... Įkeliamas blokų indeksas... - Add a node to connect to and attempt to keep the connection open Pridėti mazgą prie sujungti su and attempt to keep the connection open - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - Nepavyko susieti šiame kompiuteryje prievado %s. Myriadcoin tikriausiai jau veikia. - - - - Fee per KB to add to transactions you send - Įtraukti mokestį už kB siunčiamiems sandoriams - - - Loading wallet... Užkraunama piniginė... - Cannot downgrade wallet - Cannot write default address - + Negalima parašyti įprasto adreso - Rescanning... Peržiūra - Done loading Įkėlimas baigtas - To use the %s option - Error Klaida - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_lv_LV.ts b/src/qt/locale/bitcoin_lv_LV.ts index f8ba27d7..36ae08f7 100644 --- a/src/qt/locale/bitcoin_lv_LV.ts +++ b/src/qt/locale/bitcoin_lv_LV.ts @@ -1,175 +1,151 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - Par Myriadcoin + About Myriadcoin Core + Par Myriadcoin Core - - <b>Myriadcoin</b> version - <b>Myriadcoin</b> versija + <b>Myriadcoin Core</b> version + <b>Myriadcoin Core</b> versija - This is experimental software. Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - + +Šī ir eksperimentālā programmatūra. + +Izplatīta saskaņā ar MIT/X11 programmatūras licenci, skatīt pievienoto datni COPYING vai http://www.opensource.org/licenses/mit-license.php. + +Šis produkts ietver programmatūru, ko izstrādājis OpenSSL Project izmantošanai OpenSSL Toolkit (http://www.openssl.org/) un šifrēšanas programmatūru no Eric Young (eay@cryptsoft.com) un UPnP programmatūru no Thomas Bernard. - Copyright - + Autortiesības - - The Myriadcoin developers - + The Myriadcoin Core developers + Myriadcoin Core izstrādātāji + + + (%1-bit) + (%1-biti) AddressBookPage - - Address Book - Adrešu grāmata - - - Double-click to edit address or label Adresi vai nosaukumu rediģē ar dubultklikšķi - Create a new address Izveidot jaunu adresi - + &New + &Jauns + + Copy the currently selected address to the system clipboard Kopēt iezīmēto adresi uz starpliktuvi - - &New Address - &Jauna adrese + &Copy + &Kopēt - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - + C&lose + &Aizvērt - &Copy Address &Kopēt adresi - - Show &QR Code - Parādīt &QR kodu - - - - Sign a message to prove you own a Myriadcoin address - - - - - Sign &Message - - - - Delete the currently selected address from the list - + Izdzēst iezīmētās adreses no saraksta - Export the data in the current tab to a file - &Export - + &Eksportēt - - Verify a message to ensure it was signed with a specified Myriadcoin address - - - - - &Verify Message - - - - &Delete &Dzēst - + Choose the address to send coins to + Izvēlies adresi uz kuru sūtīt myriadcoins + + + Choose the address to receive coins with + Izvēlies adresi ar kuru saņemt myriadcoins + + + C&hoose + &Izvēlēties + + + Sending addresses + Sūtīšanas adreses + + + Receiving addresses + Saņemšanas adreses + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + Copy &Label Kopēt &Nosaukumu - &Edit &Rediģēt - - Send &Coins - + Export Address List + Eksportēt Adrešu Sarakstu - - Export Address Book Data - Eksportēt adreses - - - Comma separated file (*.csv) Fails ar komatu kā atdalītāju (*.csv) - - Error exporting - Kļūda eksportējot + Exporting Failed + Eksportēšana Neizdevās - - Could not write to file %1. - Nevar ierakstīt failā %1. + There was an error trying to save the address list to %1. + AddressTableModel - Label Nosaukums - Address Adrese - (no label) (bez nosaukuma) @@ -177,460 +153,393 @@ This product includes software developed by the OpenSSL Project for use in the O AskPassphraseDialog - Passphrase Dialog Paroles dialogs - Enter passphrase Ierakstiet paroli - New passphrase Jauna parole - Repeat new passphrase Jaunā parole vēlreiz - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. Ierakstiet maciņa jauno paroli.<br/>Lūdzu izmantojiet <b>10 vai vairāk nejauši izvēlētas zīmes</b>, vai <b>astoņus un vairāk vārdus</b>. - Encrypt wallet Šifrēt maciņu - This operation needs your wallet passphrase to unlock the wallet. Lai veikto šo darbību, maciņš jāatslēdz ar paroli. - Unlock wallet Atslēgt maciņu - This operation needs your wallet passphrase to decrypt the wallet. Šai darbībai maciņš jāatšifrē ar maciņa paroli. - Decrypt wallet Atšifrēt maciņu - Change passphrase Mainīt paroli - Enter the old and new passphrase to the wallet. Ierakstiet maciņa veco un jauno paroli. - Confirm wallet encryption Apstiprināt maciņa šifrēšanu - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! - + Brīdinājums: Ja tu nošifrē savu maciņu un pazaudē paroli, tu <b>PAZAUDĒSI VISAS SAVAS MYRIADCOINS</b>! - Are you sure you wish to encrypt your wallet? - + Vai tu tiešām vēlies šifrēt savu maciņu? - 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. - - Warning: The Caps Lock key is on! - + Brīdinājums: Caps Lock ir ieslēgts! - - Wallet encrypted Maciņš nošifrēts - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. Myriadcoin aizvērsies, lai pabeigtu šifrēšanu. Atcerieties, ka maciņa šifrēšana nevar pilnībā novērst bitkoinu zādzību, ko veic datorā ieviesušās kaitīgas programmas. - - - - Wallet encryption failed Maciņa šifrēšana neizdevās - Wallet encryption failed due to an internal error. Your wallet was not encrypted. Maciņa šifrēšana neizdevās programmas kļūdas dēļ. Jūsu maciņš netika šifrēts. - - The supplied passphrases do not match. Ievadītās paroles nav vienādas. - Wallet unlock failed Maciņu atšifrēt neizdevās - - - The passphrase entered for the wallet decryption was incorrect. Maciņa atšifrēšanai ievadītā parole nav pareiza. - Wallet decryption failed Maciņu neizdevās atšifrēt - Wallet passphrase was successfully changed. - + Maciņa parole tika veiksmīgi nomainīta. BitcoinGUI - Sign &message... Parakstīt &ziņojumu... - Synchronizing with network... Sinhronizācija ar tīklu... - &Overview &Pārskats - + Node + Node + + Show general overview of wallet Rādīt vispārēju maciņa pārskatu - &Transactions &Transakcijas - Browse transaction history Skatīt transakciju vēsturi - - Edit the list of stored addresses and labels - Rediģēt saglabātās adreses un nosaukumus - - - - Show the list of addresses for receiving payments - Rādīt maksājumu saņemšanas adreses - - - E&xit &Iziet - Quit application Aizvērt programmu - Show information about Myriadcoin Parādīt informāciju par Myriadcoin - About &Qt Par &Qt - Show information about Qt Parādīt informāciju par Qt - &Options... - &Iespējas + &Iespējas... - &Encrypt Wallet... - Š&ifrēt maciņu... + Šifrēt &maciņu... - &Backup Wallet... - &Izveidot maciņa rezerves kopiju + &Maciņa Rezerves Kopija... - &Change Passphrase... - &Mainīt paroli + Mainīt &Paroli... + + + &Sending addresses... + &Sūtīšanas adreses... + + + &Receiving addresses... + Saņemšanas &adreses... + + + Open &URI... + Atvērt &URI... - Importing blocks from disk... - + Importē blokus no diska... - Reindexing blocks on disk... - + Bloku reindeksēšana no diska... - Send coins to a Myriadcoin address Nosūtīt bitkoinus uz Myriadcoin adresi - Modify configuration options for Myriadcoin Mainīt Myriadcoin konfigurācijas uzstādījumus - Backup wallet to another location Izveidot maciņa rezerves kopiju citur - Change the passphrase used for wallet encryption Mainīt maciņa šifrēšanas paroli - &Debug window - &Debug logs + &Atkļūdošanas logs - Open debugging and diagnostic console Atvērt atkļūdošanas un diagnostikas konsoli - &Verify message... &Pārbaudīt ziņojumu... - - Myriadcoin - + Myriadcoin - Wallet Maciņš - &Send - + &Sūtīt - &Receive - + Saņe&mt - - &Addresses - - - - - &About Myriadcoin - - - - &Show / Hide - + &Rādīt / Paslēpt - Show or hide the main Window - + Parādīt vai paslēpt galveno Logu - Encrypt the private keys that belong to your wallet - + Šifrēt privātās atslēgas kuras pieder tavam maciņam - Sign messages with your Myriadcoin addresses to prove you own them - + Parakstīt ziņojumus ar savām Myriadcoin adresēm lai pierādītu ka tās pieder tev - Verify messages to ensure they were signed with specified Myriadcoin addresses - + Pārbaudīt ziņojumus lai pārliecinātos, ka tie tika parakstīti ar norādītajām Myriadcoin adresēm - &File &Fails - &Settings &Uzstādījumi - &Help &Palīdzība - Tabs toolbar Ciļņu rīkjosla - - [testnet] [testnet] - + Myriadcoin Core + Myriadcoin Core + + + Request payments (generates QR codes and myriadcoin: URIs) + Pieprasīt maksājumus (izveido QR kodu un myriadcoin: URIs) + + + &About Myriadcoin Core + Par &Myriadcoin Core + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + Atvērt myriadcoin URI vai maksājuma pieprasījumu + + + &Command-line options + &Komandrindas iespējas + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + Myriadcoin client Myriadcoin klients - %n active connection(s) to Myriadcoin network %n aktīvu savienojumu ar Myriadcoin tīklu%n aktīvs savienojums ar Myriadcoin tīklu%n aktīvu savienojumu as Myriadcoin tīklu - No block source available... - + Nav pieejams neviens bloku avots... - Processed %1 of %2 (estimated) blocks of transaction history. - Processed %1 blocks of transaction history. - + Apstrādāti %1 bloki no transakciju vēstures. - %n hour(s) - + %n stundas%n stunda%n stundas - %n day(s) - + %n dienas%n diena%n dienas - %n week(s) - + %n nedēļas%n nedēļa%n nedēļas + + + %1 and %2 + %1 un %2 + + + %n year(s) + %n gadi%n gads%n gadi - %1 behind - + %1 aizmugurē - Last received block was generated %1 ago. - Transactions after this will not yet be visible. - + Transakcijas pēc šī vel nebūs redzamas - Error Kļūda - Warning Brīdinājums - Information - + Informācija - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - Up to date Sinhronizēts - Catching up... Sinhronizējos... - - Confirm transaction fee - Apstiprināt transakcijas maksu - - - Sent transaction Transakcija nosūtīta - Incoming transaction Ienākoša transakcija - Date: %1 Amount: %2 Type: %3 @@ -643,419 +552,717 @@ Adrese: %4 - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> Maciņš ir <b>šifrēts</b> un pašlaik <b>atslēgts</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> Maciņš ir <b>šifrēts</b> un pašlaik <b>slēgts</b> - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. - + Radās fatāla kļūda. Myriadcoin Core nevar vairs droši turpināt un tiks izslēgta. ClientModel - Network Alert Tīkla brīdinājums + + CoinControlDialog + + Coin Control Address Selection + Myriadcoin Kontroles Adrešu Atlase + + + Quantity: + Daudzums: + + + Bytes: + Baiti: + + + Amount: + Daudzums: + + + Priority: + Prioritāte: + + + Fee: + Maksa: + + + Low Output: + Zema Izeja: + + + After Fee: + Pēc Maksas: + + + Change: + Atlikums: + + + (un)select all + iezīmēt visus + + + Tree mode + Koka režīms + + + List mode + Saraksta režīms + + + Amount + Daudzums + + + Address + Adrese + + + Date + Datums + + + Confirmations + Apstiprinājumi + + + Confirmed + Apstiprināts + + + Priority + Prioritāte + + + Copy address + Kopēt adresi + + + Copy label + Kopēt nosaukumu + + + Copy amount + Kopēt daudzumu + + + Copy transaction ID + Kopēt transakcijas ID + + + Lock unspent + Aizslēgt neiztērēto + + + Unlock unspent + Atslēgt neiztērēto + + + Copy quantity + Kopēt daudzumu + + + Copy fee + Kopēt maksu + + + Copy after fee + Kopēt pēc maksas + + + Copy bytes + Kopēt baitus + + + Copy priority + Kopēt prioritāti + + + Copy low output + Kopēt zemo izeju + + + Copy change + Kopēt atlikumu + + + highest + augstākais + + + higher + augstāks + + + high + augsts + + + medium-high + vidēji-augsts + + + medium + vidējs + + + low-medium + zemi-vidējs + + + low + zems + + + lower + zemāks + + + lowest + zemākais + + + (%1 locked) + (%1 aizslēgts) + + + none + neviens + + + Dust + Putekļi + + + yes + jā + + + no + nē + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + (bez nosaukuma) + + + change from %1 (%2) + atlikums no %1 (%2) + + + (change) + (atlikums) + + EditAddressDialog - Edit Address Mainīt adrese - &Label &Nosaukums - - The label associated with this address book entry - Adrešu grāmatas ieraksta nosaukums + The label associated with this address list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + - &Address &Adrese - - The address associated with this address book entry. This can only be modified for sending addresses. - Adrese adrešu grāmatas ierakstā. To var mainīt tikai nosūtīšanas adresēm. - - - New receiving address Jauna saņemšanas adrese - New sending address Jauna nosūtīšanas adrese - Edit receiving address Mainīt saņemšanas adresi - Edit sending address Mainīt nosūtīšanas adresi - The entered address "%1" is already in the address book. Nupat ierakstītā adrese "%1" jau atrodas adrešu grāmatā. - The entered address "%1" is not a valid Myriadcoin address. Ierakstītā adrese "%1" nav derīga Myriadcoin adrese. - Could not unlock wallet. Nav iespējams atslēgt maciņu. - New key generation failed. Neizdevās ģenerēt jaunu atslēgu. - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt - Myriadcoin-Qt + A new data directory will be created. + Tiks izveidota jauna datu mape. + + + name + vārds + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + Šāds ceļš jau pastāv un tā nav mape. + + + Cannot create data directory here. + Šeit nevar izveidot datu mapi. + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + Myriadcoin Core - Komandrindas iespējas + + + Myriadcoin Core + Myriadcoin Core - version versija - Usage: Lietojums: - command-line options komandrindas izvēles - UI options Lietotāja interfeisa izvēlnes - Set language, for example "de_DE" (default: system locale) Uzstādiet valodu, piemēram "de_DE" (pēc noklusēšanas: sistēmas lokāle) - Start minimized Sākt minimizētu - + Set SSL root certificates for payment request (default: -system-) + + + Show splash screen on startup (default: 1) Uzsākot, parādīt programmas informācijas logu (pēc noklusēšanas: 1) + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + Sveiciens + + + Welcome to Myriadcoin Core. + Sveicināts Myriadcoin Core + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + Izmantot noklusēto datu mapi + + + Use a custom data directory: + Izmantot pielāgotu datu mapi: + + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" can not be created. + + + + Error + Kļūda + + + GB of free space available + GB ar brīvo vietu pieejams + + + (of %1GB needed) + (no %1GB nepieciešams) + + + + OpenURIDialog + + Open URI + Atvērt URI + + + Open payment request from URI or file + Atvērt maksājuma pieprasījumu no URI vai datnes + + + URI: + URI: + + + Select payment request file + Izvēlies maksājuma pieprasījuma datni + + + Select payment request file to open + Izvēlies maksājuma pieprasījuma datni lai atvēru + OptionsDialog - Options Iespējas - &Main &Galvenais - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. - Pay transaction &fee &Maksāt par transakciju - Automatically start Myriadcoin after logging in to the system. Automātiski sākt Myriadcoin pēc pieteikšanās sistēmā. - &Start Myriadcoin on system login &Sākt Myriadcoin reizē ar sistēmu - + Size of &database cache + &Datubāzes kešatmiņas izmērs + + + MB + MB + + + Number of script &verification threads + Skriptu &pārbaudes pavedienu skaits + + + Connect to the Myriadcoin network through a SOCKS proxy. + Savienoties ar Myriadcoin tīklu caur SOCKS starpniekserveri. + + + &Connect through SOCKS proxy (default proxy): + &Savienoties caur SOCKS starpniekserveri (noklusējuma starpniekserveris) + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + Starpniekservera IP adrese (piem. IPv4: 127.0.0.1 / IPv6: ::1) + + + 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 |. + + + + Third party transaction URLs + Trešo personu transakciju URLs + + + Active command-line options that override above options: + Aktīvās komandrindas opcijas, kuras pārspēko šos iestatījumus: + + Reset all client options to default. - + Atiestatīt visus klienta iestatījumus uz noklusējumu. - &Reset Options - + &Atiestatīt Iestatījumus. - &Network &Tīkls - + (0 = auto, <0 = leave that many cores free) + + + + W&allet + &Maciņš + + + Expert + Eksperts + + + Enable coin &control features + Ieslēgt myriadcoin &kontroles funkcijas + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + &Tērēt neapstiprinātu atlikumu + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. Uz rūtera automātiski atvērt Myriadcoin klienta portu. Tas strādā tikai tad, ja rūteris atbalsta UPnP un tas ir ieslēgts. - Map port using &UPnP Kartēt portu, izmantojot &UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - - - - - &Connect through SOCKS proxy: - &Savienoties caur SOCKS proxy: - - - Proxy &IP: - Proxy &IP: + Starpniekservera &IP: - - IP address of the proxy (e.g. 127.0.0.1) - proxy IP adrese (piem. 127.0.0.1) - - - &Port: &Ports: - Port of the proxy (e.g. 9050) - Proxy ports (piem. 9050) + Starpniekservera ports (piem. 9050) - SOCKS &Version: SOCKS &Versija: - SOCKS version of the proxy (e.g. 5) - proxy SOCKS versija (piem. 5) + Starpniekservera SOCKS versija (piem. 5) - &Window &Logs - Show only a tray icon after minimizing the window. Pēc loga minimizācijas rādīt tikai ikonu sistēmas teknē. - &Minimize to the tray instead of the taskbar &Minimizēt uz sistēmas tekni, nevis rīkjoslu - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. Logu aizverot, minimizēt, nevis beigt darbu. Kad šī izvēlne iespējota, programma aizvērsies tikai pēc Beigt komandas izvēlnē. - M&inimize on close M&inimizēt aizverot - &Display &Izskats - User Interface &language: Lietotāja interfeiss un &valoda: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. Šeit var iestatīt lietotāja valodu. Iestatījums aktivizēsies pēc Myriadcoin pārstartēšanas. - &Unit to show amounts in: &Vienības, kurās attēlot daudzumus: - Choose the default subdivision unit to show in the interface and when sending coins. Izvēlēties dalījuma vienību pēc noklusēšanas, ko izmantot interfeisā un nosūtot bitkoinus. - Whether to show Myriadcoin addresses in the transaction list or not. Rādīt vai nē Myriadcoin adreses transakciju sarakstā. - &Display addresses in transaction list &Attēlot adreses transakciju sarakstā - - &OK - &OK + Whether to show coin control features or not. + Vai rādīt Myriadcoin kontroles funkcijas vai nē. + + + &OK + &Labi - &Cancel &Atcelt - - &Apply - &Pielietot - - - default pēc noklusēšanas - + none + neviena + + Confirm options reset + Apstiprināt iestatījumu atiestatīšanu + + + Client restart required to activate changes. - - Some settings may require a client restart to take effect. + Client will be shutdown, do you want to proceed? + Klients tiks izslēgts, vai vēlaties turpināt? + + + This change would require a client restart. - - Do you want to proceed? - - - - - - Warning - Brīdinājums - - - - - This setting will take effect after restarting Myriadcoin. - Iestatījums aktivizēsies pēc Bitkoin pārstartēšanas. - - - The supplied proxy address is invalid. - Norādītā proxy adrese nav derīga. + Norādītā starpniekservera adrese nav derīga. OverviewPage - Form Forma - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. Attēlotā informācija var būt novecojusi. Jūsu maciņš pēc savienojuma izveides automātiski sinhronizējas ar Myriadcoin tīklu, taču šis process vēl nav beidzies. - - Balance: - Bilance: - - - - Unconfirmed: - Neapstiprinātas: - - - Wallet Maciņš - - Immature: - + Available: + Pieejams: + + + Your current spendable balance + Tava pašreizējā tērējamā bilance + + + Pending: + Neizšķirts: + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + Kopējā apstiprināmo transakciju vērtība, vēl nav ieskaitīta tērējamajā bilancē + + + Immature: + Nenobriedušu: - Mined balance that has not yet matured - + Total: + Kopsumma: + + + Your current total balance + Jūsu kopējā tekošā bilance + + <b>Recent transactions</b> <b>Pēdējās transakcijas</b> - - Your current balance - Jūsu tekošā bilance - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - Kopējā apstiprināmo transakciju vērtība, vēl nav ieskaitīta kopējā bilancē - - - - out of sync nav sinhronizēts @@ -1063,766 +1270,1017 @@ Adrese: %4 PaymentServer - - Cannot start myriadcoin: click-to-pay handler + URI handling + URI apstrāde + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + Maksājumu pieprasījuma kļūda + + + Cannot start myriadcoin: click-to-pay handler + Nevar palaist Bitcoin: nospied-lai-maksātu apstrādātāju + + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + Atmaksa no %1 + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + Maksājums atzīts + + + Network request error + Tīkla pieprasījuma kļūda + - QRCodeDialog + QObject - - QR Code Dialog - QR koda dialogs + Myriadcoin + Myriadcoin - - Request Payment - Pieprasīt maksājumu - - - - Amount: - Daudzums: - - - - Label: - Nosaukums: - - - - Message: - Ziņojums: - - - - &Save As... - &Saglabāt kā... - - - - Error encoding URI into QR Code. - Kļūda kodējot URI QR kodā. - - - - The entered amount is invalid, please check. + Error: Specified data directory "%1" does not exist. - - Resulting URI too long, try to reduce the text for label / message. - Rezultāta URI pārāk garš, mēģiniet saīsināt nosaukumu vai ziņojumu. + Error: Cannot parse configuration file: %1. Only use key=value syntax. + + + + Error: Invalid combination of -regtest and -testnet. + + + + Myriadcoin Core didn't yet exit safely... + Myriadcoin Core vel neizgāja droši... + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Ierakstiet Myriadcoin adresi (piem. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + &Saglabāt Attēlu... + + + &Copy Image + &Kopēt Attēlu - Save QR Code Saglabāt QR kodu - - PNG Images (*.png) - PNG attēli (*.png) + PNG Image (*.png) + PNG Attēls (*.png) RPCConsole - Client name Klienta vārds - - - - - - - - - - N/A N/A - Client version Klienta versija - &Information &Informācija - - Using OpenSSL version - + Debug window + Atkļūdošanas logs + + + General + Vispārējs + + + Using OpenSSL version + Izmantotā OpenSSL versija - Startup time Sākuma laiks - Network Tīkls - + Name + Vārds + + Number of connections Savienojumu skaits - - On testnet - Testa tīklā - - - Block chain Bloku virkne - Current number of blocks Pašreizējais bloku skaits - Estimated total blocks Bloku skaita novērtējums - Last block time Pēdējā bloka laiks - &Open &Atvērt - - Command-line options - - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - - - - - &Show - - - - &Console &Konsole - + &Network Traffic + &Tīkla Satiksme + + + &Clear + &Notīrīt + + + Totals + Kopsummas + + + In: + Ie.: + + + Out: + Iz.: + + Build date Kompilācijas datums - - Myriadcoin - Debug window - - - - - Myriadcoin Core - - - - Debug log file - + Atkļūdošanas žurnāla datne - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. - Clear console Notīrīt konsoli - Welcome to the Myriadcoin RPC console. Laipni lūgti Myriadcoin RPC konsolē. - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. Izmantojiet bultiņas uz augšu un leju, lai pārvietotos pa vēsturi, un <b>Ctrl-L</b> ekrāna notīrīšanai. - Type <b>help</b> for an overview of available commands. Ierakstiet <b>help</b> lai iegūtu pieejamo komandu sarakstu. + + %1 B + %1 B + + + %1 KB + %1 KB + + + %1 MB + %1 MB + + + %1 GB + %1 GB + + + %1 m + %1 m + + + %1 h + %1 st + + + %1 h %2 m + %1 st %2 m + + + + ReceiveCoinsDialog + + &Amount: + &Daudzums: + + + &Label: + &Nosaukums: + + + &Message: + &Ziņojums: + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + &Atkārtoti izmantot esošo saņemšanas adresi (nav ieteicams) + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + Notīrīt visus laukus formā. + + + Clear + Notīrīt + + + Requested payments history + Pieprasīto maksājumu vēsture + + + &Request payment + &Pieprasīt maksājumu + + + Show the selected request (does the same as double clicking an entry) + Parādīt atlasītos pieprasījumus (tas pats, kas dubultklikšķis uz ieraksta) + + + Show + Rādīt + + + Remove the selected entries from the list + Noņemt atlasītos ierakstus no saraksta. + + + Remove + Noņemt + + + Copy label + Kopēt nosaukumu + + + Copy message + Kopēt ziņojumu + + + Copy amount + Kopēt daudzumu + + + + ReceiveRequestDialog + + QR Code + QR Kods + + + Copy &URI + Kopēt &URI + + + Copy &Address + Kopēt &Adresi + + + &Save Image... + &Saglabāt Attēlu... + + + Request payment to %1 + Pieprasīt maksājumu uz %1 + + + Payment information + Maksājuma informācija + + + URI + URI + + + Address + Adrese + + + Amount + Daudzums + + + Label + Nosaukums + + + Message + Ziņojums + + + Resulting URI too long, try to reduce the text for label / message. + Rezultāta URI pārāk garš, mēģiniet saīsināt nosaukumu vai ziņojumu. + + + Error encoding URI into QR Code. + Kļūda kodējot URI QR kodā. + + + + RecentRequestsTableModel + + Date + Datums + + + Label + Nosaukums + + + Message + Ziņojums + + + Amount + Daudzums + + + (no label) + (bez nosaukuma) + + + (no message) + (nav ziņojuma) + + + (no amount) + (nav summas) + SendCoinsDialog - - - - - - - - Send Coins Sūtīt bitkoinus - + Coin Control Features + Myriadcoin Kontroles Funkcijas + + + Inputs... + Ieejas... + + + automatically selected + automātiski atlasīts + + + Insufficient funds! + Nepietiekami līdzekļi! + + + Quantity: + Daudzums: + + + Bytes: + Baiti: + + + Amount: + Daudzums: + + + Priority: + Prioritāte: + + + Fee: + Maksa: + + + Low Output: + Zema Izeja: + + + After Fee: + Pēc Maksas: + + + Change: + Atlikums: + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + Pielāgota atlikuma adrese + + Send to multiple recipients at once Sūtīt vairākiem saņēmējiem uzreiz - Add &Recipient - + &Pievienot Saņēmēju - - Remove all transaction fields - Dzēst visus transakcijas laukus + Clear all fields of the form. + Notīrīt visus laukus formā. - Clear &All &Notīrīt visu - Balance: Bilance: - - 123.456 BTC - 123,456 BTC - - - Confirm the send action Apstiprināt nosūtīšanu - S&end - + &Sūtīt - - <b>%1</b> to %2 (%3) - <b>%1</b> līdz %2 (%3) - - - Confirm send coins Apstiprināt bitkoinu sūtīšanu - - Are you sure you want to send %1? - Vai tiešām vēlaties nosūtīt %1? + %1 to %2 + %1 līdz %2 - - and - un + Copy quantity + Kopēt daudzumu + + + Copy amount + Kopēt daudzumu + + + Copy fee + Kopēt maksu + + + Copy after fee + Kopēt pēc maksas + + + Copy bytes + Kopēt baitus + + + Copy priority + Kopēt prioritāti + + + Copy low output + Kopēt zemās izejas + + + Copy change + Kopēt atlikumu + + + Total Amount %1 (= %2) + Kopējā Summa %1 (= %2) + + + or + vai - The recipient address is not valid, please recheck. - + Saņēmēja adrese ir nepareiza, lūdzu pārbaudi. - The amount to pay must be larger than 0. Nosūtāmajai summai jābūt lielākai par 0. - The amount exceeds your balance. Daudzums pārsniedz pieejamo. - The total exceeds your balance when the %1 transaction fee is included. Kopsumma pārsniedz pieejamo, ja pieskaitīta %1 transakcijas maksa. - Duplicate address found, can only send to each address once per send operation. Atrastas divas vienādas adreses, vienā nosūtīšanas reizē uz katru adresi var sūtīt tikai vienreiz. - - Error: Transaction creation failed! + Transaction creation failed! + Transakcijas izveidošana neizdevās! + + + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Kļūda: transakcija tika atteikta. Tā var gadīties, ja kāds no maciņā esošiem bitkoiniem jau iztērēts, piemēram, izmantojot wallet.dat kopiju, kurā nav atzīmēti iztērētie bitkoini. + Warning: Invalid Myriadcoin address + Brīdinājums: Nederīga Myriadcoin adrese + + + (no label) + (bez nosaukuma) + + + Warning: Unknown change address + Brīdinājums: Nezināma atlikuma adrese + + + Are you sure you want to send? + + + + added as transaction fee + pievienots kā transakcijas maksa + + + Payment request expired + Maksājuma pieprasījums ir novecojis + + + Invalid payment address %1 + Nederīga maksājuma adrese %1 SendCoinsEntry - - Form - Forma - - - A&mount: Apjo&ms - Pay &To: &Saņēmējs: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - + Adrese lai sūtītu maksājumu uz (piem. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book Lai pievienotu adresi adrešu grāmatai, tai jādod nosaukums - &Label: &Nosaukums: - - Choose address from address book - Izvēlēties adresi no adrešu grāmatas + Choose previously used address + Izvēlies iepriekš izmantoto adresi + + + This is a normal payment. + Šis ir parasts maksājums. - Alt+A Alt+A - Paste address from clipboard ielīmēt adresi no starpliktuves - Alt+P Alt+P - - Remove this recipient - Dzēst šo saņēmēju + Remove this entry + Noņem šo ierakstu - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Ierakstiet Myriadcoin adresi (piem. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + Ziņojums: + + + This is a verified payment request. + Šis ir pārbaudīts maksājuma pieprasījums. + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + Šis ir nepārbaudīts maksājuma pieprasījums. + + + Pay To: + Maksāt: + + + Memo: + Memo: + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + Myriadcoin Core tiek izslēgta... + + + Do not shut down the computer until this window disappears. + Neizslēdziet datoru kamēr šis logs nepazūd. SignVerifyMessageDialog - Signatures - Sign / Verify a Message - + Paraksti - Parakstīt / Pabaudīt Ziņojumu - &Sign Message - + Parakstīt &Ziņojumu - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - + Adrese ar kuru parakstīt ziņojumu (piem. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book - + Choose previously used address + Izvēlies iepriekš izmantoto adresi - - Alt+A Alt+A - Paste address from clipboard ielīmēt adresi no starpliktuves - Alt+P Alt+P - Enter the message you want to sign here - + Šeit ievadi ziņojumu kuru vēlies parakstīt - Signature - + Paraksts - Copy the current signature to the system clipboard - + Kopēt parakstu uz sistēmas starpliktuvi - Sign the message to prove you own this Myriadcoin address - + Parakstīt ziņojumu lai pierādītu, ka esi šīs Myriadcoin adreses īpašnieks. - Sign &Message - + Parakstīt &Ziņojumu - Reset all sign message fields - + Atiestatīt visus laukus - - Clear &All &Notīrīt visu - &Verify Message - + &Pārbaudīt Ziņojumu - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - + Adrese ar kādu ziņojums tika parakstīts (piem. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address - Verify &Message - + &Pārbaudīt Ziņojumu - Reset all verify message fields - + Atiestatīt visus laukus - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Ierakstiet Myriadcoin adresi (piem. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature - + Nospied "Parakstīt Ziņojumu" lai ģenerētu parakstu - - Enter Myriadcoin signature - - - - - The entered address is invalid. - + Ievadītā adrese ir nederīga. - - - - Please check the address and try again. - + Lūdzu pārbaudi adresi un mēģini vēlreiz. - - The entered address does not refer to a key. - + Ievadītā adrese neattiecas uz atslēgu. - Wallet unlock was cancelled. - + Maciņa atslēgšana tika atcelta. - Private key for the entered address is not available. - + Privātā atslēga priekš ievadītās adreses nav pieejama. - Message signing failed. - + Neizdevās parakstīt ziņojumu. - Message signed. - + Ziņojums parakstīts. - The signature could not be decoded. - + Paraksts nevarēja tikt dekodēts. - - Please check the signature and try again. - + Lūdzu pārbaudi parakstu un mēģini vēlreiz. - The signature did not match the message digest. - + Paraksts neatbilda ziņojuma apkopojumam. - Message verification failed. - + Ziņojumu neizdevās pārbaudīt. - Message verified. - + Ziņojums pārbaudīts. SplashScreen - - The Myriadcoin developers - + Myriadcoin Core + Myriadcoin Core + + + The Myriadcoin Core developers + Myriadcoin Core izstrādātāji - [testnet] - + [testnets] + + + + TrafficGraphWidget + + KB/s + KB/s TransactionDesc - Open until %1 Atvērts līdz %1 - - %1/offline - + conflicted + pretrunā + + + %1/offline + %1/bezsaistē - %1/unconfirmed %1/neapstiprinātas - %1 confirmations %1 apstiprinājumu - Status - + Status - , broadcast through %n node(s) - Date Datums - Source - + Avots - Generated - + Ģenerēts - - From - + No - - - To - + Uz - - own address - + paša adrese - label - + etiķete - - - - - Credit - + Kredīts - matures in %n more block(s) - not accepted - + nav pieņemts - - - - Debit - + Debets - Transaction fee - + Transakcijas maksa - Net amount - + Neto summa - Message - + Ziņojums - Comment - + Komentārs - Transaction ID + Transakcijas ID + + + Merchant + Tirgotājs + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - - - - Debug information - + Atkļūdošanas informācija - Transaction - + Transakcija - Inputs - + Ieejas - Amount Daudzums - true - + patiess - false - + nepatiess - , has not been successfully broadcast yet , vēl nav veiksmīgi izziņots - Open for %n more block(s) - + Atvērts vel %n blokusAtvērts vel %n blokuAtvērts vel %n blokus - unknown nav zināms @@ -1830,12 +2288,10 @@ Adrese: %4 TransactionDescDialog - Transaction details Transakcijas detaļas - This pane shows a detailed description of the transaction Šis panelis parāda transakcijas detaļas @@ -1843,117 +2299,102 @@ Adrese: %4 TransactionTableModel - Date Datums - Type Tips - Address Adrese - Amount Daudzums + + Immature (%1 confirmations, will be available after %2) + + - Open for %n more block(s) - + Atvērts vel %n blokusAtvērts vel %n blokuAtvērts vel %n blokus - Open until %1 Atvērts līdz %1 - - Offline (%1 confirmations) - Nav pieslēgts (%1 apstiprinājumu) - - - - Unconfirmed (%1 of %2 confirmations) - Nav apstiprināts (%1 no %2 apstiprinājumu) - - - Confirmed (%1 confirmations) Apstiprināts (%1 apstiprinājumu) - - - Mined balance will be available when it matures in %n more block(s) - - - This block was not received by any other nodes and will probably not be accepted! Neviens cits mezgls šo bloku nav saņēmis un droši vien netiks akceptēts! - Generated but not accepted Ģenerēts, taču nav akceptēts - + Offline + Bezsaitē + + + Unconfirmed + Neapstiprināts + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + Pretrunā + + Received with Saņemts ar - Received from Saņemts no - Sent to Nosūtīts - Payment to yourself Maksājums sev - Mined Atrasts - (n/a) (nav pieejams) - Transaction status. Hover over this field to show number of confirmations. Transakcijas statuss. Turiet peli virs šī lauka, lai redzētu apstiprinājumu skaitu. - Date and time that the transaction was received. Transakcijas saņemšanas datums un laiks. - Type of transaction. Transakcijas tips. - Destination address of transaction. Transakcijas mērķa adrese. - Amount removed from or added to balance. Bilancei pievienotais vai atņemtais daudzums. @@ -1961,337 +2402,278 @@ Adrese: %4 TransactionView - - All Visi - Today Šodien - This week Šonedēļ - This month Šomēnes - Last month Pēdējais mēnesis - This year Šogad - Range... Diapazons... - Received with Saņemts ar - Sent to Nosūtīts - To yourself Sev - Mined Atrasts - Other Cits - Enter address or label to search Ierakstiet meklējamo nosaukumu vai adresi - Min amount Minimālais daudzums - Copy address Kopēt adresi - Copy label Kopēt nosaukumu - Copy amount Kopēt daudzumu - Copy transaction ID - + Kopēt transakcijas ID - Edit label Mainīt nosaukumu - Show transaction details Rādīt transakcijas detaļas - - Export Transaction Data - Eksportēt transakcijas datus + Export Transaction History + Eksportēt Transakciju Vēsturi + + + Exporting Failed + Eksportēšana Neizdevās + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + Eksportēšana Veiksmīga + + + The transaction history was successfully saved to %1. + Transakciju vēsture tika veiksmīgi saglabāta uz %1. - Comma separated file (*.csv) Fails ar komatu kā atdalītāju (*.csv) - Confirmed Apstiprināts - Date Datums - Type Tips - Label Nosaukums - Address Adrese - Amount Daudzums - ID ID - - Error exporting - Eksportēšanas kļūda - - - - Could not write to file %1. - Nevar ierakstīt failā %1. - - - Range: Diapazons: - to - + uz + + + + WalletFrame + + No wallet has been loaded. + Neviens maciņš nav ielādēts. WalletModel - Send Coins - + Sūtīt Bitkoinus WalletView - &Export - + &Eksportēt - Export the data in the current tab to a file - Backup Wallet Izveidot maciņa rezerves kopiju - Wallet Data (*.dat) Maciņa dati (*.dat) - Backup Failed Rezerves kopēšana neizdevās - - There was an error trying to save the wallet data to the new location. - Kļūda, saglabājot maciņu jaunajā vietā. + There was an error trying to save the wallet data to %1. + Notikusi kļūme mēģinot saglabāt maciņa datus uz %1. + + + The wallet data was successfully saved to %1. + Maciņa dati tika veiksmīgi saglabāti uz %1. - Backup Successful - - - - - The wallet data was successfully saved to the new location. - + Dublēšana Veiksmīga bitcoin-core - - Myriadcoin version - Myriadcoin versija - - - Usage: Lietojums: - - Send command to -server or myriadcoind - Nosūtīt komantu uz -server vai myriadcoind - - - List commands Komandu saraksts - Get help for a command Palīdzība par komandu - Options: Iespējas: - Specify configuration file (default: myriadcoin.conf) Norādiet konfigurācijas failu (pēc noklusēšanas: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) Norādiet pid failu (pēc noklusēšanas: myriadcoind.pid) - Specify data directory Norādiet datu direktoriju - - Set database cache size in megabytes (default: 25) - Uzstādiet datu bāzes bufera izmēru megabaitos (pēc noklusēšanas: 25) - - - Listen for connections on <port> (default: 8333 or testnet: 18333) Gaidīt savienojumus portā <port> (pēc noklusēšanas: 8333 vai testnet: 18333) - Maintain at most <n> connections to peers (default: 125) Uzturēt līdz <n> savienojumiem ar citiem mezgliem(pēc noklusēšanas: 125) - Connect to a node to retrieve peer addresses, and disconnect Pievienoties mezglam, lai iegūtu citu mezglu adreses, un atvienoties - Specify your own public address Norādiet savu publisko adresi - Threshold for disconnecting misbehaving peers (default: 100) Slieksnis pārkāpējmezglu atvienošanai (pēc noklusēšanas: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Sekundes, cik ilgi atturēt pārkāpējmezglus no atkārtotas pievienošanās (pēc noklusēšanas: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) - Accept command line and JSON-RPC commands Pieņemt komandrindas un JSON-RPC komandas - + Myriadcoin Core RPC client version + Myriadcoin Core RPC klienta versija + + Run in the background as a daemon and accept commands Darbināt fonā kā servisu un pieņemt komandas - Use the test network Izmantot testa tīklu - Accept connections from outside (default: 1 if no -proxy or -connect) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2306,612 +2688,686 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications - + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. + Brīdinājums: Lūdzu pārbaudi vai tava datora datums un laiks ir pareizs! Ja pulkstenis ir nepareizs, Myriadcoin Core nestrādās pareizi. + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - - Attempt to recover private keys from a corrupt wallet.dat - + (default: 1) + (noklusējums: 1) + + + (default: wallet.dat) + (noklusējums: wallet.dat) + + + <category> can be: + <category> var būt: + + + Attempt to recover private keys from a corrupt wallet.dat + Mēģināt atgūt privātās atslēgas no bojāta wallet.dat + + + Myriadcoin Core Daemon + Myriadcoin Core Process - Block creation options: - - Connect only to the specified node(s) + Clear list of wallet transactions (diagnostic tool; implies -rescan) - + Connect only to the specified node(s) + Savienoties tikai ar norādītajām nodēm. + + + Connect through SOCKS proxy + Savienoties caur SOCKS starpniekserveri + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + Savienojuma iestatījumi: + + Corrupted block database detected - + Debugging/Testing options: + Atkļūdošanas/Testēšanas iestatījumi: + + + Disable safemode, override a real safe mode event (default: 0) + + + Discover own IP address (default: 1 when listening and no -externalip) - + Do not load the wallet and disable wallet RPC calls + + + Do you want to rebuild the block database now? - Error initializing block database - Error initializing wallet database environment %s! - Error loading block database - + Kļūda ielādējot bloku datubāzi - Error opening block database - Error: Disk space is low! - + Kļūda: Zema diska vieta! - Error: Wallet locked, unable to create transaction! - + Kļūda: Maciņš ir aizslēgts, nevar izveidot transakciju! - Error: system error: - + Kļūda: sistēmas kļūda: - Failed to listen on any port. Use -listen=0 if you want this. - Failed to read block info - Failed to read block - Failed to sync block index - Failed to write block index - Failed to write block info - Failed to write block - Failed to write file info - Failed to write to coin database - Failed to write transaction index - Failed to write undo data - - Find peers using DNS lookup (default: 1 unless -connect) + Fee per kB to add to transactions you send + Pievienot maksu par kB tām transakcijām kuras tu sūti + + + Fees smaller than this are considered zero fee (for relaying) (default: - + Find peers using DNS lookup (default: 1 unless -connect) + Atrast pīrus izmantojot DNS uzmeklēšanu (noklusējums: 1 ja nav -connect) + + + Force safe mode (default: 0) + Piespiest drošo režīmu (noklusējums: 0) + + Generate coins (default: 0) - How many blocks to check at startup (default: 288, 0 = all) - - How thorough the block verification is (0-4, default: 3) + If <category> is not supplied, output all debugging information. + Ja <category> nav norādīta, izvadīt visu atkļūdošanas informāciju. + + + Importing... + Importē... + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' - Not enough file descriptors available. - + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + RPC klienta iespējas: + + Rebuild block chain index from current blk000??.dat files - + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + Set the number of threads to service RPC calls (default: 4) - + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + Tērēt neapstiprinātu atlikumu kad sūta transakcijas (noklusējums: 1) + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + Verifying blocks... - + Pārbauda blokus... - Verifying wallet... + Pārbauda maciņu... + + + Wait for RPC server to start + Uzgaidi līdz RPC serveris palaižas + + + Wallet %s resides outside data directory %s + + + + Wallet options: + Maciņa iespējas: + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex - Imports blocks from external blk000??.dat file + Importēt blokus no ārējās blk000??.dat datnes + + + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) - Information - + Informācija - - Invalid -tor address: '%s' - - - - Invalid amount for -minrelaytxfee=<amount>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' - + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + Maintain a full transaction index (default: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Only accept block chain matching built-in checkpoints (default: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - Output extra debugging information. Implies all other -debug* options + Print block on startup, if found in block index - - Output extra network debugging information + Print block tree on startup (default: 0) - - Prepend debug output with timestamp - Debug izvadei sākumā pievienot laika zīmogu + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + RPC servera iestatījumi: + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) - - Select the version of socks proxy to use (4-5, default: 5) - + Send command to Myriadcoin Core + Sūtīt komandu uz Myriadcoin Core - Send trace/debug info to console instead of debug.log file Debug/trace informāciju izvadīt konsolē, nevis debug.log failā - - Send trace/debug info to debugger - Debug/trace informāciju izvadīt debug programmai - - - - Set maximum block size in bytes (default: 250000) - - - - Set minimum block size in bytes (default: 0) - + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + Rādīt etalonuzdevuma informāciju (noklusējums: 0) + + Shrink debug.log file on client startup (default: 1 when no -debug) - Signing transaction failed - + Transakcijas parakstīšana neizdevās - Specify connection timeout in milliseconds (default: 5000) - + Start Myriadcoin Core Daemon + Sākt Myriadcoin Core Procesu + + System error: - + Sistēmas kļūda: - Transaction amount too small - + Transakcijas summa ir pārāk maza - Transaction amounts must be positive - + Transakcijas summai ir jābūt pozitīvai - Transaction too large - + Transakcija ir pārāk liela - Use UPnP to map the listening port (default: 0) - Use UPnP to map the listening port (default: 1 when listening) - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - Username for JSON-RPC connections JSON-RPC savienojumu lietotājvārds - Warning Brīdinājums - Warning: This version is obsolete, upgrade required! + Brīdinājums: Šī versija ir novecojusi, nepieciešams atjauninājums! + + + Zapping all transactions from wallet... - - You need to rebuild the databases using -reindex to change -txindex - + on startup + startēšanas laikā + + + version + versija - wallet.dat corrupt, salvage failed - + wallet.dat ir bojāts, glābšana neizdevās - Password for JSON-RPC connections JSON-RPC savienojumu parole - Allow JSON-RPC connections from specified IP address Atļaut JSON-RPC savienojumus no norādītās IP adreses - Send commands to node running on <ip> (default: 127.0.0.1) Nosūtīt komandas mezglam, kas darbojas adresē <ip> (pēc noklusēšanas: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) Izpildīt komandu, kad labāk atbilstošais bloks izmainās (%s cmd aizvieto ar bloka hešu) - Upgrade wallet to latest format Atjaunot maciņa formātu uz jaunāko - Set key pool size to <n> (default: 100) Uzstādīt atslēgu bufera izmēru uz <n> (pēc noklusēšanas: 100) - Rescan the block chain for missing wallet transactions Atkārtoti skanēt bloku virkni, meklējot trūkstošās maciņa transakcijas - Use OpenSSL (https) for JSON-RPC connections JSON-RPC savienojumiem izmantot OpenSSL (https) - Server certificate file (default: server.cert) Servera sertifikāta fails (pēc noklusēšanas: server.cert) - Server private key (default: server.pem) Servera privātā atslēga (pēc noklusēšanas: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Pieņemamie šifri (pēc noklusēšanas: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - This help message Šis palīdzības paziņojums - Unable to bind to %s on this computer (bind returned error %d, %s) Nevar pievienoties pie %s šajā datorā (pievienošanās atgrieza kļūdu %d, %s) - - Connect through socks proxy - Savienoties caurs socks proxy - - - Allow DNS lookups for -addnode, -seednode and -connect Atļaut DNS uzmeklēšanu priekš -addnode, -seednode un -connect - Loading addresses... Ielādē adreses... - Error loading wallet.dat: Wallet corrupted Nevar ielādēt wallet.dat: maciņš bojāts - Error loading wallet.dat: Wallet requires newer version of Myriadcoin Nevar ielādēt wallet.dat: maciņa atvēršanai nepieciešama jaunāka Myriadcoin versija - Wallet needed to be rewritten: restart Myriadcoin to complete Bija nepieciešams pārstartēt maciņu: pabeigšanai pārstartējiet Myriadcoin - Error loading wallet.dat Kļūda ielādējot wallet.dat - Invalid -proxy address: '%s' Nederīga -proxy adrese: '%s' - Unknown network specified in -onlynet: '%s' -onlynet komandā norādīts nepazīstams tīkls: '%s' - Unknown -socks proxy version requested: %i - Pieprasīta nezināma -socks proxy versija: %i + Pieprasīta nezināma -socks starpniekservera versija: %i - Cannot resolve -bind address: '%s' Nevar uzmeklēt -bind adresi: '%s' - Cannot resolve -externalip address: '%s' Nevar atrisināt -externalip adresi: '%s' - Invalid amount for -paytxfee=<amount>: '%s' Nederīgs daudzums priekš -paytxfree=<amount>: '%s' - Invalid amount Nederīgs daudzums - Insufficient funds Nepietiek bitkoinu - Loading block index... Ielādē bloku indeksu... - Add a node to connect to and attempt to keep the connection open Pievienot mezglu, kam pievienoties un turēt savienojumu atvērtu - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - Nevar pievienoties %s uz šī datora. Myriadcoin droši vien jau darbojas. - - - - Fee per KB to add to transactions you send - Maksa par KB, ko pievienot nosūtāmajām transakcijām - - - Loading wallet... Ielādē maciņu... - Cannot downgrade wallet Nevar maciņa formātu padarīt vecāku - Cannot write default address Nevar ierakstīt adresi pēc noklusēšanas - Rescanning... Skanēju no jauna... - Done loading Ielāde pabeigta - To use the %s option Izmantot opciju %s - Error Kļūda - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_mn.ts b/src/qt/locale/bitcoin_mn.ts new file mode 100644 index 00000000..c71d4c86 --- /dev/null +++ b/src/qt/locale/bitcoin_mn.ts @@ -0,0 +1,3375 @@ + + + AboutDialog + + About Myriadcoin Core + + + + <b>Myriadcoin Core</b> version + + + + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. + + + + Copyright + + + + The Myriadcoin Core developers + + + + (%1-bit) + + + + + AddressBookPage + + Double-click to edit address or label + Хаяг эсвэл шошгыг ѳѳрчлѳхийн тулд хоёр удаа дар + + + Create a new address + Шинэ хаяг нээх + + + &New + + + + Copy the currently selected address to the system clipboard + Одоогоор сонгогдсон байгаа хаягуудыг сануулах + + + &Copy + + + + C&lose + + + + &Copy Address + Хаягийг &Хуулбарлах + + + Delete the currently selected address from the list + + + + Export the data in the current tab to a file + + + + &Export + + + + &Delete + &Устгах + + + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + + Copy &Label + &Шошгыг хуулбарлах + + + &Edit + &Ѳѳрчлѳх + + + Export Address List + + + + Comma separated file (*.csv) + Таслалаар тусгаарлагдсан хүснэгтэн файл (.csv) + + + Exporting Failed + + + + There was an error trying to save the address list to %1. + + + + + AddressTableModel + + Label + Шошго + + + Address + Хаяг + + + (no label) + (шошго алга) + + + + AskPassphraseDialog + + Passphrase Dialog + + + + Enter passphrase + Нууц үгийг оруул + + + New passphrase + Шинэ нууц үг + + + Repeat new passphrase + Шинэ нууц үгийг давтана уу + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Түрүйвчийн шинэ нууц үгийг оруул. <br/><b>Дор хаяж 10 дурын үсэг/тоо бүхий</b> эсвэл <b>дор хаяж 8 дурын үгнээс бүрдсэн</b> нууц үгийг ашиглана уу. + + + Encrypt wallet + Түрүйвчийг цоожлох + + + This operation needs your wallet passphrase to unlock the wallet. + Энэ үйлдэлийг гүйцэтгэхийн тулд та нууц үгээрээ түрүйвчийн цоожийг тайлах хэрэгтэй + + + Unlock wallet + Түрүйвчийн цоожийг тайлах + + + This operation needs your wallet passphrase to decrypt the wallet. + Энэ үйлдэлийг гүйцэтгэхийн тулд та эхлээд түрүйвчийн нууц үгийг оруулж цоожийг тайлах шаардлагтай. + + + Decrypt wallet + Түрүйвчийн цоожийг устгах + + + Change passphrase + Нууц үгийг солих + + + Enter the old and new passphrase to the wallet. + Түрүйвчийн хуучин болоод шинэ нууц үгсийг оруулна уу + + + Confirm wallet encryption + Түрүйвчийн цоожийг баталгаажуулах + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! + + + + Are you sure you wish to encrypt your wallet? + + + + 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. + + + + Warning: The Caps Lock key is on! + + + + Wallet encrypted + Түрүйвч цоожлогдлоо + + + Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. + Цоожлолтын процесыг дуусгахын тулд Биткойн одоо хаагдана. Ѳѳрийн түрүйвчийг цоожлох нь таны биткойнуудыг компьютерийн вирус хулгайлахаас бүрэн сэргийлж чадахгүй гэдгийг санаарай. + + + Wallet encryption failed + Түрүйвчийн цоожлол амжилттай болсонгүй + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Түрүйвчийн цоожлол дотоод алдаанаас үүдэн амжилттай болсонгүй. Түрүйвч цоожлогдоогүй байна. + + + The supplied passphrases do not match. + Таны оруулсан нууц үг таарсангүй + + + Wallet unlock failed + Түрүйвчийн цоож тайлагдсангүй + + + The passphrase entered for the wallet decryption was incorrect. + Таны оруулсан түрүйвчийн цоожийг тайлах нууц үг буруу байна + + + Wallet decryption failed + Түрүйвчийн цоож амжилттай устгагдсангүй + + + Wallet passphrase was successfully changed. + Түрүйвчийн нууц үг амжилттай ѳѳр + + + + BitcoinGUI + + Sign &message... + &Зурвас хавсаргах... + + + Synchronizing with network... + Сүлжээтэй тааруулж байна... + + + &Overview + + + + Node + Нод + + + Show general overview of wallet + + + + &Transactions + Гүйлгээнүүд + + + Browse transaction history + Гүйлгээнүүдийн түүхийг харах + + + E&xit + Гарах + + + Quit application + Програмаас Гарах + + + Show information about Myriadcoin + Биткойны мэдээллийг харуулах + + + About &Qt + &Клиентийн тухай + + + Show information about Qt + Клиентийн тухай мэдээллийг харуул + + + &Options... + &Сонголтууд... + + + &Encrypt Wallet... + &Түрүйвчийг цоожлох... + + + &Backup Wallet... + &Түрүйвчийг Жоорлох... + + + &Change Passphrase... + &Нууц Үгийг Солих... + + + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + + Importing blocks from disk... + + + + Reindexing blocks on disk... + + + + Send coins to a Myriadcoin address + + + + Modify configuration options for Myriadcoin + + + + Backup wallet to another location + + + + Change the passphrase used for wallet encryption + Түрүйвчийг цоожлох нууц үгийг солих + + + &Debug window + + + + Open debugging and diagnostic console + Оношилгоо ба засварын консолыг онгойлго + + + &Verify message... + + + + Myriadcoin + Биткойн + + + Wallet + Түрүйвч + + + &Send + + + + &Receive + + + + &Show / Hide + &Харуул / Нуу + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your Myriadcoin addresses to prove you own them + + + + Verify messages to ensure they were signed with specified Myriadcoin addresses + + + + &File + &Файл + + + &Settings + &Тохиргоо + + + &Help + &Тусламж + + + Tabs toolbar + + + + [testnet] + + + + Myriadcoin Core + + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + + Myriadcoin client + Биткойн клиент + + + %n active connection(s) to Myriadcoin network + Биткойны сүлжээрүү %n идэвхитэй холболт байна Биткойны сүлжээрүү %n идэвхитэй холболтууд байна + + + No block source available... + + + + Processed %1 of %2 (estimated) blocks of transaction history. + + + + Processed %1 blocks of transaction history. + + + + %n hour(s) + %n цаг%n цаг + + + %n day(s) + %n ѳдѳр%n ѳдрүүд + + + %n week(s) + + + + %1 and %2 + + + + %n year(s) + + + + %1 behind + + + + Last received block was generated %1 ago. + + + + Transactions after this will not yet be visible. + + + + Error + Алдаа + + + Warning + + + + Information + + + + Up to date + Шинэчлэгдсэн + + + Catching up... + + + + Sent transaction + Гадагшаа гүйлгээ + + + Incoming transaction + Дотогшоо гүйлгээ + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + Огноо: %1 + +Хэмжээ: %2 + +Тѳрѳл: %3 + +Хаяг: %4 + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + Түрүйвч <b>цоожтой</b> ба одоогоор цоож <b>онгорхой</b> байна + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + Түрүйвч <b>цоожтой</b> ба одоогоор цоож <b>хаалттай</b> байна + + + A fatal error occurred. Myriadcoin can no longer continue safely and will quit. + + + + + ClientModel + + Network Alert + + + + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + + + + Bytes: + + + + Amount: + Хэмжээ: + + + Priority: + + + + Fee: + Тѳлбѳр: + + + Low Output: + + + + After Fee: + + + + Change: + + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + Хэмжээ + + + Address + Хаяг + + + Date + Огноо + + + Confirmations + + + + Confirmed + Баталгаажлаа + + + Priority + + + + Copy address + Хаягийг санах + + + Copy label + Шошгыг санах + + + Copy amount + Хэмжээг санах + + + Copy transaction ID + + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + Ѳѳрчлѳлтийг санах + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + + + + Dust + + + + yes + + + + no + + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + (шошгогүй) + + + change from %1 (%2) + + + + (change) + (ѳѳрчлѳх) + + + + EditAddressDialog + + Edit Address + Хаягийг ѳѳрчлѳх + + + &Label + &Шошго + + + The label associated with this address list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + + + + &Address + &Хаяг + + + New receiving address + Шинэ хүлээн авах хаяг + + + New sending address + Шинэ явуулах хаяг + + + Edit receiving address + Хүлээн авах хаягийг ѳѳрчлѳх + + + Edit sending address + Явуулах хаягийг ѳѳрчлѳх + + + The entered address "%1" is already in the address book. + Таны оруулсан хаяг "%1" нь хаягийн бүртгэлд ѳмнѳ нь орсон байна + + + The entered address "%1" is not a valid Myriadcoin address. + + + + Could not unlock wallet. + Түрүйвчийн цоожийг тайлж чадсангүй + + + New key generation failed. + Шинэ түлхүүр амжилттай гарсангүй + + + + FreespaceChecker + + A new data directory will be created. + + + + name + + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core + + + + version + хувилбар + + + Usage: + Хэрэглээ: + + + command-line options + + + + UI options + + + + Set language, for example "de_DE" (default: system locale) + + + + Start minimized + + + + Set SSL root certificates for payment request (default: -system-) + + + + Show splash screen on startup (default: 1) + + + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + Биткойн + + + Error: Specified data directory "%1" can not be created. + + + + Error + Алдаа + + + GB of free space available + + + + (of %1GB needed) + + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open + + + + + OptionsDialog + + Options + Сонголтууд + + + &Main + + + + Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. + + + + Pay transaction &fee + + + + Automatically start Myriadcoin after logging in to the system. + + + + &Start Myriadcoin on system login + + + + Size of &database cache + + + + MB + МБ + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + Биткойны сүлжээрүү SOCKS проксигоор холбогдох. + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + проксигийн IP хаяг (жишээ нь: IPv4: 127.0.0.1 / IPv6: ::1) + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + + Reset all client options to default. + + + + &Reset Options + + + + &Network + + + + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. + + + + Map port using &UPnP + + + + Proxy &IP: + + + + &Port: + + + + Port of the proxy (e.g. 9050) + + + + SOCKS &Version: + + + + SOCKS version of the proxy (e.g. 5) + + + + &Window + + + + Show only a tray icon after minimizing the window. + + + + &Minimize to the tray instead of the taskbar + + + + Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. + + + + M&inimize on close + + + + &Display + + + + User Interface &language: + + + + The user interface language can be set here. This setting will take effect after restarting Myriadcoin. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show Myriadcoin addresses in the transaction list or not. + + + + &Display addresses in transaction list + + + + Whether to show coin control features or not. + + + + &OK + + + + &Cancel + + + + default + + + + none + + + + Confirm options reset + + + + Client restart required to activate changes. + Ѳѳрчлѳлтүүдийг идэвхижүүлхийн тулд клиентийг ахин эхлүүлэх шаардлагтай + + + Client will be shutdown, do you want to proceed? + Клиент унтрах гэж байна, яг унтраах уу? + + + This change would require a client restart. + Энэ ѳѳрчлѳлтийг оруулахын тулд кли1нт програмыг ахин эхлүүлэх шаардлагтай + + + The supplied proxy address is invalid. + + + + + OverviewPage + + Form + + + + The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. + + + + Wallet + Түрүйвч + + + Available: + Хэрэглэж болох хэмжээ: + + + Your current spendable balance + + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + + + + Immature: + + + + Mined balance that has not yet matured + + + + Total: + + + + Your current total balance + + + + <b>Recent transactions</b> + <b>Сүүлд хийгдсэн гүйлгээнүүд</b> + + + out of sync + + + + + PaymentServer + + URI handling + + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start myriadcoin: click-to-pay handler + + + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + + + + Network request error + + + + + QObject + + Myriadcoin + Биткойн + + + Error: Specified data directory "%1" does not exist. + + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + + + + Error: Invalid combination of -regtest and -testnet. + + + + Myriadcoin Core didn't yet exit safely... + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + + QRImageWidget + + &Save Image... + + + + &Copy Image + + + + Save QR Code + + + + PNG Image (*.png) + PNG форматын зураг (*.png) + + + + RPCConsole + + Client name + Клиентийн нэр + + + N/A + Алга Байна + + + Client version + Клиентийн хувилбар + + + &Information + &Мэдээллэл + + + Debug window + + + + General + Ерѳнхий + + + Using OpenSSL version + + + + Startup time + + + + Network + Сүлжээ + + + Name + Нэр + + + Number of connections + Холболтын тоо + + + Block chain + Блокийн цуваа + + + Current number of blocks + Одоогийн блокийн тоо + + + Estimated total blocks + Нийт блокийн барагцаа + + + Last block time + Сүүлийн блокийн хугацаа + + + &Open + &Нээх + + + &Console + &Консол + + + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + + Build date + + + + Debug log file + + + + Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + Консолыг цэвэрлэх + + + Welcome to the Myriadcoin RPC console. + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + Type <b>help</b> for an overview of available commands. + + + + %1 B + + + + %1 KB + + + + %1 MB + + + + %1 GB + + + + %1 m + + + + %1 h + + + + %1 h %2 m + + + + + ReceiveCoinsDialog + + &Amount: + + + + &Label: + &Шошго: + + + &Message: + + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + + + + Clear + + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + Харуул + + + Remove the selected entries from the list + Сонгогдсон ѳгѳгдлүүдийг устгах + + + Remove + Устгах + + + Copy label + Шошгыг санах + + + Copy message + Зурвасыг санах + + + Copy amount + Хэмжээг санах + + + + ReceiveRequestDialog + + QR Code + + + + Copy &URI + + + + Copy &Address + + + + &Save Image... + + + + Request payment to %1 + + + + Payment information + + + + URI + + + + Address + Хаяг + + + Amount + Хэмжээ + + + Label + Шошго + + + Message + Зурвас + + + Resulting URI too long, try to reduce the text for label / message. + + + + Error encoding URI into QR Code. + + + + + RecentRequestsTableModel + + Date + Огноо + + + Label + Шошго + + + Message + Зурвас + + + Amount + Хэмжээ + + + (no label) + (шошго алга) + + + (no message) + (зурвас алга) + + + (no amount) + + + + + SendCoinsDialog + + Send Coins + Зоос явуулах + + + Coin Control Features + + + + Inputs... + + + + automatically selected + автоматаар сонгогдсон + + + Insufficient funds! + Таны дансны үлдэгдэл хүрэлцэхгүй байна! + + + Quantity: + + + + Bytes: + + + + Amount: + Хэмжээ: + + + Priority: + + + + Fee: + Тѳлбѳр: + + + Low Output: + + + + After Fee: + + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + + Send to multiple recipients at once + Нэгэн зэрэг олон хүлээн авагчруу явуулах + + + Add &Recipient + &Хүлээн авагчийг Нэмэх + + + Clear all fields of the form. + + + + Clear &All + &Бүгдийг Цэвэрлэ + + + Balance: + Баланс: + + + Confirm the send action + Явуулах үйлдлийг баталгаажуулна уу + + + S&end + Яв&уул + + + Confirm send coins + Зоос явуулахыг баталгаажуулна уу + + + %1 to %2 + + + + Copy quantity + + + + Copy amount + Хэмжээг санах + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + Ѳѳрчлѳлтийг санах + + + Total Amount %1 (= %2) + Нийт дүн %1 (= %2) + + + or + эсвэл + + + The recipient address is not valid, please recheck. + + + + The amount to pay must be larger than 0. + Тѳлѳх хэмжээ 0.-оос их байх ёстой + + + The amount exceeds your balance. + Энэ хэмжээ таны балансаас хэтэрсэн байна. + + + The total exceeds your balance when the %1 transaction fee is included. + Гүйлгээний тѳлбѳр %1-ийг тооцхоор нийт дүн нь таны балансаас хэтрээд байна. + + + Duplicate address found, can only send to each address once per send operation. + + + + Transaction creation failed! + + + + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + Анхаар:Буруу Биткойны хаяг байна + + + (no label) + (шошгогүй) + + + Warning: Unknown change address + + + + Are you sure you want to send? + + + + added as transaction fee + + + + Payment request expired + + + + Invalid payment address %1 + + + + + SendCoinsEntry + + A&mount: + Дүн: + + + Pay &To: + Тѳлѳх &хаяг: + + + The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Enter a label for this address to add it to your address book + Энэ хаягийг ѳѳрийн бүртгэлдээ авахын тулд шошго оруул + + + &Label: + &Шошго: + + + Choose previously used address + + + + This is a normal payment. + + + + Alt+A + Alt+A + + + Paste address from clipboard + Копидсон хаягийг буулгах + + + Alt+P + Alt+P + + + Remove this entry + + + + Message: + Зурвас: + + + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + Биткойны цѳм хаагдаж байна... + + + Do not shut down the computer until this window disappears. + Энэ цонхыг хаагдтал компьютерээ бүү унтраагаарай + + + + SignVerifyMessageDialog + + Signatures - Sign / Verify a Message + + + + &Sign Message + + + + You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. + + + + The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Choose previously used address + + + + Alt+A + Alt+A + + + Paste address from clipboard + Копидсон хаягийг буулгах + + + Alt+P + Alt+P + + + Enter the message you want to sign here + + + + Signature + + + + Copy the current signature to the system clipboard + + + + Sign the message to prove you own this Myriadcoin address + + + + Sign &Message + + + + Reset all sign message fields + + + + Clear &All + &Бүгдийг Цэвэрлэ + + + &Verify Message + + + + Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. + + + + The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Verify the message to ensure it was signed with the specified Myriadcoin address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Click "Sign Message" to generate signature + + + + The entered address is invalid. + + + + Please check the address and try again. + + + + The entered address does not refer to a key. + + + + Wallet unlock was cancelled. + + + + Private key for the entered address is not available. + + + + Message signing failed. + + + + Message signed. + + + + The signature could not be decoded. + + + + Please check the signature and try again. + + + + The signature did not match the message digest. + + + + Message verification failed. + + + + Message verified. + + + + + SplashScreen + + Myriadcoin Core + + + + The Myriadcoin Core developers + + + + [testnet] + + + + + TrafficGraphWidget + + KB/s + + + + + TransactionDesc + + Open until %1 + %1 хүртэл нээлттэй + + + conflicted + зѳрчилдлѳѳ + + + %1/offline + + + + %1/unconfirmed + %1/баталгаажаагүй + + + %1 confirmations + %1 баталгаажилтууд + + + Status + + + + , broadcast through %n node(s) + + + + Date + Огноо + + + Source + + + + Generated + + + + From + + + + To + + + + own address + + + + label + + + + Credit + + + + matures in %n more block(s) + + + + not accepted + + + + Debit + + + + Transaction fee + + + + Net amount + + + + Message + Зурвас + + + Comment + + + + Transaction ID + + + + Merchant + + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + Debug information + + + + Transaction + + + + Inputs + + + + Amount + Хэмжээ + + + true + + + + false + + + + , has not been successfully broadcast yet + , хараахан амжилттай цацагдаагүй байна + + + Open for %n more block(s) + + + + unknown + үл мэдэгдэх + + + + TransactionDescDialog + + Transaction details + Гүйлгээний мэдээллэл + + + This pane shows a detailed description of the transaction + Гүйлгээний дэлгэрэнгүйг энэ бичил цонх харуулж байна + + + + TransactionTableModel + + Date + Огноо + + + Type + Тѳрѳл + + + Address + Хаяг + + + Amount + Хэмжээ + + + Immature (%1 confirmations, will be available after %2) + + + + Open for %n more block(s) + + + + Open until %1 + %1 хүртэл нээлттэй + + + Confirmed (%1 confirmations) + Баталгаажлаа (%1 баталгаажилт) + + + This block was not received by any other nodes and will probably not be accepted! + Энэ блокийг аль ч нод хүлээн авсангүй ба ер нь зѳвшѳѳрѳгдѳхгүй байж мэднэ! + + + Generated but not accepted + Үүсгэгдсэн гэхдээ хүлээн авагдаагүй + + + Offline + + + + Unconfirmed + Баталгаажаагүй + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + Зѳрчилдлѳѳ + + + Received with + Хүлээн авсан хаяг + + + Received from + Хүлээн авагдсан хаяг + + + Sent to + Явуулсан хаяг + + + Payment to yourself + Ѳѳрлүүгээ хийсэн тѳлбѳр + + + Mined + Олборлогдсон + + + (n/a) + (алга байна) + + + Transaction status. Hover over this field to show number of confirmations. + Гүйлгээний байдал. Энд хулганыг авчирч баталгаажуулалтын тоог харна уу. + + + Date and time that the transaction was received. + Гүйлгээг хүлээн авсан огноо ба цаг. + + + Type of transaction. + Гүйлгээний тѳрѳл + + + Destination address of transaction. + Гүйлгээг хүлээн авах хаяг + + + Amount removed from or added to balance. + Балансаас авагдсан болон нэмэгдсэн хэмжээ. + + + + TransactionView + + All + Бүгд + + + Today + Ѳнѳѳдѳр + + + This week + Энэ долоо хоног + + + This month + Энэ сар + + + Last month + Ѳнгѳрсѳн сар + + + This year + Энэ жил + + + Range... + + + + Received with + Хүлээн авсан хаяг + + + Sent to + Явуулсан хаяг + + + To yourself + Ѳѳрлүүгээ + + + Mined + Олборлогдсон + + + Other + Бусад + + + Enter address or label to search + Хайлт хийхийн тулд хаяг эсвэл шошгыг оруул + + + Min amount + Хамгийн бага хэмжээ + + + Copy address + Хаягийг санах + + + Copy label + Шошгыг санах + + + Copy amount + Хэмжээг санах + + + Copy transaction ID + + + + Edit label + Шошгыг ѳѳрчлѳх + + + Show transaction details + Гүйлгээний дэлгэрэнгүйг харуул + + + Export Transaction History + + + + Exporting Failed + + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + + + + The transaction history was successfully saved to %1. + Гүйлгээнүй түүхийг %1-д амжилттай хадгаллаа. + + + Comma separated file (*.csv) + Таслалаар тусгаарлагдсан хүснэгтэн файл (.csv) + + + Confirmed + Баталгаажлаа + + + Date + Огноо + + + Type + Тѳрѳл + + + Label + Шошго + + + Address + Хаяг + + + Amount + Хэмжээ + + + ID + Тодорхойлолт + + + Range: + + + + to + -рүү/руу + + + + WalletFrame + + No wallet has been loaded. + Ямар ч түрүйвч ачааллагдсангүй. + + + + WalletModel + + Send Coins + Зоос явуулах + + + + WalletView + + &Export + + + + Export the data in the current tab to a file + + + + Backup Wallet + + + + Wallet Data (*.dat) + + + + Backup Failed + + + + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. + + + + Backup Successful + + + + + bitcoin-core + + Usage: + Хэрэглээ: + + + List commands + Үйлдлүүдийг жагсаах + + + Get help for a command + Үйлдэлд туслалцаа авах + + + Options: + Сонголтууд: + + + Specify configuration file (default: myriadcoin.conf) + + + + Specify pid file (default: myriadcoind.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 8333 or testnet: 18333) + <port> дээрх холболтуудыг чагна (ѳгѳгдмѳл: 8333 эсвэл testnet: 18333) + + + Maintain at most <n> connections to peers (default: 125) + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + Specify your own public address + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) + + + + Accept command line and JSON-RPC commands + + + + Myriadcoin Core RPC client version + + + + Run in the background as a daemon and accept commands + + + + Use the test network + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=myriadcoinrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + Bind to given address and always listen on it. Use [host]:port notation for IPv6 + + + + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) + + + + Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + + + + This is a pre-release test build - use at your own risk - do not use for mining or merchant applications + + + + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. + + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + Myriadcoin Core Daemon + + + + Block creation options: + + + + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + + Connect only to the specified node(s) + + + + Connect through SOCKS proxy + SOCKS проксигоор холбогдох + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + + Corrupted block database detected + + + + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + Do not load the wallet and disable wallet RPC calls + + + + Do you want to rebuild the block database now? + + + + Error initializing block database + + + + Error initializing wallet database environment %s! + + + + Error loading block database + + + + Error opening block database + + + + Error: Disk space is low! + + + + Error: Wallet locked, unable to create transaction! + + + + Error: system error: + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + Failed to read block info + + + + Failed to read block + + + + Failed to sync block index + + + + Failed to write block index + + + + Failed to write block info + + + + Failed to write block + + + + Failed to write file info + + + + Failed to write to coin database + + + + Failed to write transaction index + + + + Failed to write undo data + + + + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + + Find peers using DNS lookup (default: 1 unless -connect) + + + + Force safe mode (default: 0) + + + + Generate coins (default: 0) + + + + How many blocks to check at startup (default: 288, 0 = all) + + + + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' + + + + Not enough file descriptors available. + + + + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + + Rebuild block chain index from current blk000??.dat files + + + + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + + Set the number of threads to service RPC calls (default: 4) + + + + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + + Verifying blocks... + + + + Verifying wallet... + + + + Wait for RPC server to start + RPC серверийг эхэлтэл хүлээ + + + Wallet %s resides outside data directory %s + + + + Wallet options: + Түрүйвчийн сонголтууд: + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + + + + Imports blocks from external blk000??.dat file + + + + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + + + + Information + + + + Invalid amount for -minrelaytxfee=<amount>: '%s' + + + + Invalid amount for -mintxfee=<amount>: '%s' + + + + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + + Maintain a full transaction index (default: 0) + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + Only accept block chain matching built-in checkpoints (default: 1) + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + Print block on startup, if found in block index + + + + Print block tree on startup (default: 0) + + + + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + + + + SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + Send command to Myriadcoin Core + + + + Send trace/debug info to console instead of debug.log file + + + + Set minimum block size in bytes (default: 0) + + + + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + Signing transaction failed + + + + Specify connection timeout in milliseconds (default: 5000) + + + + Start Myriadcoin Core Daemon + + + + System error: + + + + Transaction amount too small + + + + Transaction amounts must be positive + + + + Transaction too large + + + + Use UPnP to map the listening port (default: 0) + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + Username for JSON-RPC connections + + + + Warning + + + + Warning: This version is obsolete, upgrade required! + + + + Zapping all transactions from wallet... + + + + on startup + + + + version + хувилбар + + + wallet.dat corrupt, salvage failed + + + + Password for JSON-RPC connections + + + + Allow JSON-RPC connections from specified IP address + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + Upgrade wallet to latest format + Түрүйвчийг хамгийн сүүлийн үеийн форматруу шинэчлэх + + + Set key pool size to <n> (default: 100) + + + + Rescan the block chain for missing wallet transactions + + + + Use OpenSSL (https) for JSON-RPC connections + + + + Server certificate file (default: server.cert) + + + + Server private key (default: server.pem) + + + + This help message + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + Loading addresses... + Хаягуудыг ачааллаж байна... + + + Error loading wallet.dat: Wallet corrupted + wallet.dat-ыг ачааллахад алдаа гарлаа: Түрүйвч эвдэрсэн байна + + + Error loading wallet.dat: Wallet requires newer version of Myriadcoin + wallet.dat-ыг ачааллахад алдаа гарлаа: Түрүйвч Биткойны шинэ хувилбарыг шаардаж байна + + + Wallet needed to be rewritten: restart Myriadcoin to complete + + + + Error loading wallet.dat + wallet.dat-ыг ачааллахад алдаа гарлаа + + + Invalid -proxy address: '%s' + Эдгээр прокси хаягнууд буруу байна: '%s' + + + Unknown network specified in -onlynet: '%s' + + + + Unknown -socks proxy version requested: %i + + + + Cannot resolve -bind address: '%s' + + + + Cannot resolve -externalip address: '%s' + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + Invalid amount + Буруу хэмжээ + + + Insufficient funds + Таны дансны үлдэгдэл хүрэлцэхгүй байна + + + Loading block index... + Блокийн индексүүдийг ачааллаж байна... + + + Add a node to connect to and attempt to keep the connection open + Холболт хийхийн тулд мѳн холболтой онгорхой хадгалхын тулд шинэ нод нэм + + + Loading wallet... + Түрүйвчийг ачааллаж байна... + + + Cannot downgrade wallet + + + + Cannot write default address + + + + Rescanning... + Ахин уншиж байна... + + + Done loading + Ачааллаж дууслаа + + + To use the %s option + %s сонголтыг ашиглахын тулд + + + Error + Алдаа + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + \ No newline at end of file diff --git a/src/qt/locale/bitcoin_ms_MY.ts b/src/qt/locale/bitcoin_ms_MY.ts new file mode 100644 index 00000000..f3ca509b --- /dev/null +++ b/src/qt/locale/bitcoin_ms_MY.ts @@ -0,0 +1,3368 @@ + + + AboutDialog + + About Myriadcoin Core + + + + <b>Myriadcoin Core</b> version + + + + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. + + + + Copyright + + + + The Myriadcoin Core developers + + + + (%1-bit) + + + + + AddressBookPage + + Double-click to edit address or label + Klik dua kali untuk mengubah alamat atau label + + + Create a new address + Cipta alamat baru + + + &New + + + + Copy the currently selected address to the system clipboard + Salin alamat terpilih ke dalam sistem papan klip + + + &Copy + + + + C&lose + + + + &Copy Address + + + + Delete the currently selected address from the list + + + + Export the data in the current tab to a file + + + + &Export + + + + &Delete + &Padam + + + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + + Copy &Label + + + + &Edit + + + + Export Address List + + + + Comma separated file (*.csv) + Fail yang dipisahkan dengan koma + + + Exporting Failed + + + + There was an error trying to save the address list to %1. + + + + + AddressTableModel + + Label + + + + Address + Alamat + + + (no label) + + + + + AskPassphraseDialog + + Passphrase Dialog + + + + Enter passphrase + + + + New passphrase + + + + Repeat new passphrase + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + + + + Encrypt wallet + + + + This operation needs your wallet passphrase to unlock the wallet. + + + + Unlock wallet + + + + This operation needs your wallet passphrase to decrypt the wallet. + + + + Decrypt wallet + + + + Change passphrase + + + + Enter the old and new passphrase to the wallet. + + + + Confirm wallet encryption + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! + + + + Are you sure you wish to encrypt your wallet? + + + + 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. + + + + Warning: The Caps Lock key is on! + + + + Wallet encrypted + + + + Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. + + + + Wallet encryption failed + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + + + + The supplied passphrases do not match. + + + + Wallet unlock failed + + + + The passphrase entered for the wallet decryption was incorrect. + + + + Wallet decryption failed + + + + Wallet passphrase was successfully changed. + + + + + BitcoinGUI + + Sign &message... + + + + Synchronizing with network... + + + + &Overview + + + + Node + + + + Show general overview of wallet + + + + &Transactions + + + + Browse transaction history + + + + E&xit + + + + Quit application + + + + Show information about Myriadcoin + + + + About &Qt + + + + Show information about Qt + + + + &Options... + Pilihan + + + &Encrypt Wallet... + + + + &Backup Wallet... + + + + &Change Passphrase... + + + + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + + Importing blocks from disk... + + + + Reindexing blocks on disk... + + + + Send coins to a Myriadcoin address + + + + Modify configuration options for Myriadcoin + + + + Backup wallet to another location + + + + Change the passphrase used for wallet encryption + + + + &Debug window + + + + Open debugging and diagnostic console + + + + &Verify message... + + + + Myriadcoin + + + + Wallet + + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your Myriadcoin addresses to prove you own them + + + + Verify messages to ensure they were signed with specified Myriadcoin addresses + + + + &File + + + + &Settings + + + + &Help + + + + Tabs toolbar + + + + [testnet] + + + + Myriadcoin Core + + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + + Myriadcoin client + + + + %n active connection(s) to Myriadcoin network + + + + No block source available... + + + + Processed %1 of %2 (estimated) blocks of transaction history. + + + + Processed %1 blocks of transaction history. + + + + %n hour(s) + + + + %n day(s) + + + + %n week(s) + + + + %1 and %2 + + + + %n year(s) + + + + %1 behind + + + + Last received block was generated %1 ago. + + + + Transactions after this will not yet be visible. + + + + Error + + + + Warning + + + + Information + + + + Up to date + + + + Catching up... + + + + Sent transaction + + + + Incoming transaction + + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + A fatal error occurred. Myriadcoin can no longer continue safely and will quit. + + + + + ClientModel + + Network Alert + + + + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + + + + Address + Alamat + + + Date + + + + Confirmations + + + + Confirmed + + + + Priority + + + + Copy address + + + + Copy label + + + + Copy amount + + + + Copy transaction ID + + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + + + + Dust + + + + yes + + + + no + + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + + + + change from %1 (%2) + + + + (change) + + + + + EditAddressDialog + + Edit Address + Alamat + + + &Label + + + + The label associated with this address list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + + + + &Address + Alamat + + + New receiving address + + + + New sending address + + + + Edit receiving address + + + + Edit sending address + + + + The entered address "%1" is already in the address book. + + + + The entered address "%1" is not a valid Myriadcoin address. + + + + Could not unlock wallet. + + + + New key generation failed. + + + + + FreespaceChecker + + A new data directory will be created. + + + + name + + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core + + + + version + + + + Usage: + + + + command-line options + + + + UI options + + + + Set language, for example "de_DE" (default: system locale) + + + + Start minimized + + + + Set SSL root certificates for payment request (default: -system-) + + + + Show splash screen on startup (default: 1) + + + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + + + + Error: Specified data directory "%1" can not be created. + + + + Error + + + + GB of free space available + + + + (of %1GB needed) + + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open + + + + + OptionsDialog + + Options + + + + &Main + + + + Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. + + + + Pay transaction &fee + + + + Automatically start Myriadcoin after logging in to the system. + + + + &Start Myriadcoin on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + + Reset all client options to default. + + + + &Reset Options + + + + &Network + + + + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. + + + + Map port using &UPnP + + + + Proxy &IP: + + + + &Port: + + + + Port of the proxy (e.g. 9050) + + + + SOCKS &Version: + + + + SOCKS version of the proxy (e.g. 5) + + + + &Window + + + + Show only a tray icon after minimizing the window. + + + + &Minimize to the tray instead of the taskbar + + + + Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. + + + + M&inimize on close + + + + &Display + + + + User Interface &language: + + + + The user interface language can be set here. This setting will take effect after restarting Myriadcoin. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show Myriadcoin addresses in the transaction list or not. + + + + &Display addresses in transaction list + + + + Whether to show coin control features or not. + + + + &OK + + + + &Cancel + + + + default + + + + none + + + + Confirm options reset + + + + Client restart required to activate changes. + + + + Client will be shutdown, do you want to proceed? + + + + This change would require a client restart. + + + + The supplied proxy address is invalid. + + + + + OverviewPage + + Form + + + + The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. + + + + Wallet + + + + Available: + + + + Your current spendable balance + + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + + + + Immature: + + + + Mined balance that has not yet matured + + + + Total: + + + + Your current total balance + + + + <b>Recent transactions</b> + + + + out of sync + + + + + PaymentServer + + URI handling + + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start myriadcoin: click-to-pay handler + + + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + + + + Network request error + + + + + QObject + + Myriadcoin + + + + Error: Specified data directory "%1" does not exist. + + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + + + + Error: Invalid combination of -regtest and -testnet. + + + + Myriadcoin Core didn't yet exit safely... + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + + QRImageWidget + + &Save Image... + + + + &Copy Image + + + + Save QR Code + + + + PNG Image (*.png) + + + + + RPCConsole + + Client name + + + + N/A + + + + Client version + + + + &Information + + + + Debug window + + + + General + + + + Using OpenSSL version + + + + Startup time + + + + Network + + + + Name + + + + Number of connections + + + + Block chain + + + + Current number of blocks + + + + Estimated total blocks + + + + Last block time + + + + &Open + + + + &Console + + + + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + + Build date + + + + Debug log file + + + + Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the Myriadcoin RPC console. + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + Type <b>help</b> for an overview of available commands. + + + + %1 B + + + + %1 KB + + + + %1 MB + + + + %1 GB + + + + %1 m + + + + %1 h + + + + %1 h %2 m + + + + + ReceiveCoinsDialog + + &Amount: + + + + &Label: + + + + &Message: + + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + + + + Clear + + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + + + + Remove the selected entries from the list + + + + Remove + + + + Copy label + + + + Copy message + + + + Copy amount + + + + + ReceiveRequestDialog + + QR Code + + + + Copy &URI + + + + Copy &Address + + + + &Save Image... + + + + Request payment to %1 + + + + Payment information + + + + URI + + + + Address + Alamat + + + Amount + + + + Label + + + + Message + + + + Resulting URI too long, try to reduce the text for label / message. + + + + Error encoding URI into QR Code. + + + + + RecentRequestsTableModel + + Date + + + + Label + + + + Message + + + + Amount + + + + (no label) + + + + (no message) + + + + (no amount) + + + + + SendCoinsDialog + + Send Coins + + + + Coin Control Features + + + + Inputs... + + + + automatically selected + + + + Insufficient funds! + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + + Send to multiple recipients at once + + + + Add &Recipient + + + + Clear all fields of the form. + + + + Clear &All + + + + Balance: + Baki + + + Confirm the send action + + + + S&end + + + + Confirm send coins + + + + %1 to %2 + + + + Copy quantity + + + + Copy amount + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + + + + or + + + + The recipient address is not valid, please recheck. + + + + The amount to pay must be larger than 0. + + + + The amount exceeds your balance. + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + Duplicate address found, can only send to each address once per send operation. + + + + Transaction creation failed! + + + + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + + + + (no label) + + + + Warning: Unknown change address + + + + Are you sure you want to send? + + + + added as transaction fee + + + + Payment request expired + + + + Invalid payment address %1 + + + + + SendCoinsEntry + + A&mount: + + + + Pay &To: + + + + The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Enter a label for this address to add it to your address book + + + + &Label: + + + + Choose previously used address + + + + This is a normal payment. + + + + Alt+A + + + + Paste address from clipboard + + + + Alt+P + + + + Remove this entry + + + + Message: + + + + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. + + + + + SignVerifyMessageDialog + + Signatures - Sign / Verify a Message + + + + &Sign Message + + + + You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. + + + + The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Choose previously used address + + + + Alt+A + + + + Paste address from clipboard + + + + Alt+P + + + + Enter the message you want to sign here + + + + Signature + + + + Copy the current signature to the system clipboard + + + + Sign the message to prove you own this Myriadcoin address + + + + Sign &Message + + + + Reset all sign message fields + + + + Clear &All + + + + &Verify Message + + + + Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. + + + + The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Verify the message to ensure it was signed with the specified Myriadcoin address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Click "Sign Message" to generate signature + + + + The entered address is invalid. + + + + Please check the address and try again. + + + + The entered address does not refer to a key. + + + + Wallet unlock was cancelled. + + + + Private key for the entered address is not available. + + + + Message signing failed. + + + + Message signed. + + + + The signature could not be decoded. + + + + Please check the signature and try again. + + + + The signature did not match the message digest. + + + + Message verification failed. + + + + Message verified. + + + + + SplashScreen + + Myriadcoin Core + + + + The Myriadcoin Core developers + + + + [testnet] + + + + + TrafficGraphWidget + + KB/s + + + + + TransactionDesc + + Open until %1 + + + + conflicted + + + + %1/offline + + + + %1/unconfirmed + + + + %1 confirmations + + + + Status + + + + , broadcast through %n node(s) + + + + Date + + + + Source + + + + Generated + + + + From + + + + To + + + + own address + + + + label + + + + Credit + + + + matures in %n more block(s) + + + + not accepted + + + + Debit + + + + Transaction fee + + + + Net amount + + + + Message + + + + Comment + + + + Transaction ID + + + + Merchant + + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + Debug information + + + + Transaction + + + + Inputs + + + + Amount + + + + true + + + + false + + + + , has not been successfully broadcast yet + + + + Open for %n more block(s) + + + + unknown + + + + + TransactionDescDialog + + Transaction details + + + + This pane shows a detailed description of the transaction + + + + + TransactionTableModel + + Date + + + + Type + + + + Address + Alamat + + + Amount + + + + Immature (%1 confirmations, will be available after %2) + + + + Open for %n more block(s) + + + + Open until %1 + + + + Confirmed (%1 confirmations) + + + + This block was not received by any other nodes and will probably not be accepted! + + + + Generated but not accepted + + + + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + + Received with + + + + Received from + + + + Sent to + + + + Payment to yourself + + + + Mined + + + + (n/a) + + + + Transaction status. Hover over this field to show number of confirmations. + + + + Date and time that the transaction was received. + + + + Type of transaction. + + + + Destination address of transaction. + + + + Amount removed from or added to balance. + + + + + TransactionView + + All + + + + Today + + + + This week + + + + This month + + + + Last month + + + + This year + + + + Range... + + + + Received with + + + + Sent to + + + + To yourself + + + + Mined + + + + Other + + + + Enter address or label to search + + + + Min amount + + + + Copy address + + + + Copy label + + + + Copy amount + + + + Copy transaction ID + + + + Edit label + + + + Show transaction details + + + + Export Transaction History + + + + Exporting Failed + + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + + + + The transaction history was successfully saved to %1. + + + + Comma separated file (*.csv) + Fail yang dipisahkan dengan koma + + + Confirmed + + + + Date + + + + Type + + + + Label + + + + Address + Alamat + + + Amount + + + + ID + + + + Range: + + + + to + + + + + WalletFrame + + No wallet has been loaded. + + + + + WalletModel + + Send Coins + + + + + WalletView + + &Export + + + + Export the data in the current tab to a file + + + + Backup Wallet + + + + Wallet Data (*.dat) + + + + Backup Failed + + + + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. + + + + Backup Successful + + + + + bitcoin-core + + Usage: + + + + List commands + + + + Get help for a command + + + + Options: + + + + Specify configuration file (default: myriadcoin.conf) + + + + Specify pid file (default: myriadcoind.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 8333 or testnet: 18333) + + + + Maintain at most <n> connections to peers (default: 125) + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + Specify your own public address + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) + + + + Accept command line and JSON-RPC commands + + + + Myriadcoin Core RPC client version + + + + Run in the background as a daemon and accept commands + + + + Use the test network + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=myriadcoinrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + Bind to given address and always listen on it. Use [host]:port notation for IPv6 + + + + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) + + + + Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + + + + This is a pre-release test build - use at your own risk - do not use for mining or merchant applications + + + + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. + + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + Myriadcoin Core Daemon + + + + Block creation options: + + + + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + + Connect only to the specified node(s) + + + + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + + Corrupted block database detected + + + + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + Do not load the wallet and disable wallet RPC calls + + + + Do you want to rebuild the block database now? + + + + Error initializing block database + + + + Error initializing wallet database environment %s! + + + + Error loading block database + + + + Error opening block database + + + + Error: Disk space is low! + + + + Error: Wallet locked, unable to create transaction! + + + + Error: system error: + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + Failed to read block info + + + + Failed to read block + + + + Failed to sync block index + + + + Failed to write block index + + + + Failed to write block info + + + + Failed to write block + + + + Failed to write file info + + + + Failed to write to coin database + + + + Failed to write transaction index + + + + Failed to write undo data + + + + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + + Find peers using DNS lookup (default: 1 unless -connect) + + + + Force safe mode (default: 0) + + + + Generate coins (default: 0) + + + + How many blocks to check at startup (default: 288, 0 = all) + + + + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' + + + + Not enough file descriptors available. + + + + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + + Rebuild block chain index from current blk000??.dat files + + + + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + + Set the number of threads to service RPC calls (default: 4) + + + + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + + Verifying blocks... + + + + Verifying wallet... + + + + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + + + + Imports blocks from external blk000??.dat file + + + + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + + + + Information + + + + Invalid amount for -minrelaytxfee=<amount>: '%s' + + + + Invalid amount for -mintxfee=<amount>: '%s' + + + + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + + Maintain a full transaction index (default: 0) + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + Only accept block chain matching built-in checkpoints (default: 1) + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + Print block on startup, if found in block index + + + + Print block tree on startup (default: 0) + + + + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + + + + SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + Send command to Myriadcoin Core + + + + Send trace/debug info to console instead of debug.log file + + + + Set minimum block size in bytes (default: 0) + + + + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + Signing transaction failed + + + + Specify connection timeout in milliseconds (default: 5000) + + + + Start Myriadcoin Core Daemon + + + + System error: + + + + Transaction amount too small + + + + Transaction amounts must be positive + + + + Transaction too large + + + + Use UPnP to map the listening port (default: 0) + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + Username for JSON-RPC connections + + + + Warning + + + + Warning: This version is obsolete, upgrade required! + + + + Zapping all transactions from wallet... + + + + on startup + + + + version + + + + wallet.dat corrupt, salvage failed + + + + Password for JSON-RPC connections + + + + Allow JSON-RPC connections from specified IP address + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + Upgrade wallet to latest format + + + + Set key pool size to <n> (default: 100) + + + + Rescan the block chain for missing wallet transactions + + + + Use OpenSSL (https) for JSON-RPC connections + + + + Server certificate file (default: server.cert) + + + + Server private key (default: server.pem) + + + + This help message + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + Loading addresses... + + + + Error loading wallet.dat: Wallet corrupted + + + + Error loading wallet.dat: Wallet requires newer version of Myriadcoin + + + + Wallet needed to be rewritten: restart Myriadcoin to complete + + + + Error loading wallet.dat + + + + Invalid -proxy address: '%s' + + + + Unknown network specified in -onlynet: '%s' + + + + Unknown -socks proxy version requested: %i + + + + Cannot resolve -bind address: '%s' + + + + Cannot resolve -externalip address: '%s' + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + Invalid amount + + + + Insufficient funds + + + + Loading block index... + + + + Add a node to connect to and attempt to keep the connection open + + + + Loading wallet... + + + + Cannot downgrade wallet + + + + Cannot write default address + + + + Rescanning... + + + + Done loading + + + + To use the %s option + + + + Error + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + \ No newline at end of file diff --git a/src/qt/locale/bitcoin_nb.ts b/src/qt/locale/bitcoin_nb.ts index b332401d..f1b34f99 100644 --- a/src/qt/locale/bitcoin_nb.ts +++ b/src/qt/locale/bitcoin_nb.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - Om Myriadcoin + About Myriadcoin Core + Om Myriadcoin Core - - <b>Myriadcoin</b> version - <b>Myriadcoin</b> versjon + <b>Myriadcoin Core</b> version + <b>Myriadcoin Core</b> versjon - This is experimental software. @@ -25,156 +21,131 @@ Dette er eksperimentell programvare. Distribuert under MIT/X11 programvarelisensen, se medfølgende fil COPYING eller http://www.opensource.org/licenses/mit-license.php. -Dette produktet inneholder programvare utviklet av OpenSSL prosjektet for bruk i OpenSSL Toolkit (http://www.openssl.org/) og kryptografisk programvare skrevet av Eric Young (eay@cryptsoft.com) og UPnP programvare skrevet av Thomas Bernard. +Dette produktet inneholder programvare utviklet av OpenSSL Project for bruk i OpenSSL Toolkit (http://www.openssl.org/), kryptografisk programvare skrevet av Eric Young (eay@cryptsoft.com) og UPnP programvare skrevet av Thomas Bernard. - Copyright - + Copyright - - The Myriadcoin developers - + The Myriadcoin Core developers + Myriadcoin Core utviklerne + + + (%1-bit) + (%1-bit) AddressBookPage - - Address Book - Adressebok - - - Double-click to edit address or label - Dobbeltklikk for å redigere adresse eller merkelapp + Dobbelklikk for å redigere adresse eller merkelapp - Create a new address Lag en ny adresse - + &New + &Ny + + Copy the currently selected address to the system clipboard Kopier den valgte adressen til systemets utklippstavle - - &New Address - &Ny Adresse + &Copy + &Kopier - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Dette er dine Myriadcoin-adresser for mottak av betalinger. Du kan gi forskjellige adresser til alle som skal betale deg for å holde bedre oversikt. + C&lose + &Lukk - &Copy Address &Kopier Adresse - - Show &QR Code - Vis &QR Kode - - - - Sign a message to prove you own a Myriadcoin address - Signer en melding for å bevise at du eier en Myriadcoin-adresse - - - - Sign &Message - Signér &Melding - - - Delete the currently selected address from the list Slett den valgte adressen fra listen. - Export the data in the current tab to a file Eksporter data fra nåværende fane til fil - &Export - + &Eksporter - - Verify a message to ensure it was signed with a specified Myriadcoin address - Verifiser en melding for å være sikker på at den ble signert av en angitt Myriadcoin-adresse - - - - &Verify Message - &Verifiser Melding - - - &Delete &Slett - - These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - + Choose the address to send coins to + Velg adressen å sende mynter til + + + Choose the address to receive coins with + Velg adressen til å motta mynter med + + + C&hoose + &Velg + + + Sending addresses + Utsendingsadresser + + + Receiving addresses + Mottaksadresser + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + Dette er dine Bitcoin-adresser for å sende betalinger. Alltid sjekk beløp og mottakeradresse før sending av mynter. + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Dette er dine Bitcoin-adresser for å sende betalinger. Det er anbefalt å bruk en ny mottaksadresse for hver transaksjon. - Copy &Label Kopier &Merkelapp - &Edit &Rediger - - Send &Coins - Send &Coins + Export Address List + Ekporter Adresseliste - - Export Address Book Data - Eksporter adressebok - - - Comma separated file (*.csv) Kommaseparert fil (*.csv) - - Error exporting - Feil ved eksportering + Exporting Failed + Ekport Feilet - - Could not write to file %1. - Kunne ikke skrive til filen %1. + There was an error trying to save the address list to %1. + En feil oppstod ved lagring av adresselisten til %1. AddressTableModel - Label Merkelapp - Address Adresse - (no label) (ingen merkelapp) @@ -182,140 +153,106 @@ Dette produktet inneholder programvare utviklet av OpenSSL prosjektet for bruk i AskPassphraseDialog - Passphrase Dialog Dialog for Adgangsfrase - Enter passphrase Angi adgangsfrase - New passphrase Ny adgangsfrase - Repeat new passphrase Gjenta ny adgangsfrase - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. Skriv inn den nye adgangsfrasen for lommeboken.<br/>Vennligst bruk en adgangsfrase med <b>10 eller flere tilfeldige tegn</b>, eller <b>åtte eller flere ord</b>. - Encrypt wallet Krypter lommebok - This operation needs your wallet passphrase to unlock the wallet. Denne operasjonen krever adgangsfrasen til lommeboken for å låse den opp. - Unlock wallet Lås opp lommebok - This operation needs your wallet passphrase to decrypt the wallet. Denne operasjonen krever adgangsfrasen til lommeboken for å dekryptere den. - Decrypt wallet Dekrypter lommebok - Change passphrase Endre adgangsfrase - Enter the old and new passphrase to the wallet. Skriv inn gammel og ny adgangsfrase for lommeboken. - Confirm wallet encryption Bekreft kryptering av lommebok - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! Advarsel: Hvis du krypterer lommeboken og mister adgangsfrasen, så vil du <b>MISTE ALLE DINE MYRIADCOINS</b>! - Are you sure you wish to encrypt your wallet? Er du sikker på at du vil kryptere lommeboken? - 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. - VIKTIG: Tidligere sikkerhetskopier av din lommebok-fil, bør erstattes med den nylig genererte, krypterte filen, da de blir ugyldiggjort av sikkerhetshensyn så snart du begynner å bruke den nye krypterte lommeboken. + VIKTIG: Tidligere sikkerhetskopier av din lommebokfil bør erstattes med den nylig genererte og krypterte filen, da de blir ugyldiggjort av sikkerhetshensyn så snart du begynner å bruke den nye krypterte lommeboken. - - Warning: The Caps Lock key is on! - Advarsel: Caps Lock er på ! + Advarsel: Caps Lock er på! - - Wallet encrypted Lommebok kryptert - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. Myriadcoin vil nå lukkes for å fullføre krypteringsprosessen. Husk at kryptering av lommeboken ikke fullt ut kan beskytte dine myriadcoins fra å bli stjålet om skadevare infiserer datamaskinen. - - - - Wallet encryption failed Kryptering av lommebok feilet - Wallet encryption failed due to an internal error. Your wallet was not encrypted. Kryptering av lommebok feilet på grunn av en intern feil. Din lommebok ble ikke kryptert. - - The supplied passphrases do not match. De angitte adgangsfrasene er ulike. - Wallet unlock failed Opplåsing av lommebok feilet - - - The passphrase entered for the wallet decryption was incorrect. Adgangsfrasen angitt for dekryptering av lommeboken var feil. - Wallet decryption failed Dekryptering av lommebok feilet - Wallet passphrase was successfully changed. Adgangsfrase for lommebok endret. @@ -323,319 +260,286 @@ Dette produktet inneholder programvare utviklet av OpenSSL prosjektet for bruk i BitcoinGUI - Sign &message... Signer &melding... - Synchronizing with network... Synkroniserer med nettverk... - &Overview &Oversikt - + Node + Node + + Show general overview of wallet Vis generell oversikt over lommeboken - &Transactions &Transaksjoner - Browse transaction history Vis transaksjonshistorikk - - Edit the list of stored addresses and labels - Rediger listen over adresser og deres merkelapper - - - - Show the list of addresses for receiving payments - Vis listen over adresser for mottak av betalinger - - - E&xit &Avslutt - Quit application Avslutt applikasjonen - Show information about Myriadcoin Vis informasjon om Myriadcoin - About &Qt Om &Qt - Show information about Qt Vis informasjon om Qt - &Options... &Innstillinger... - &Encrypt Wallet... &Krypter Lommebok... - &Backup Wallet... Lag &Sikkerhetskopi av Lommebok... - &Change Passphrase... &Endre Adgangsfrase... - + &Sending addresses... + &Utsendingsadresser... + + + &Receiving addresses... + &Mottaksadresser... + + + Open &URI... + Åpne &URI... + + Importing blocks from disk... Importere blokker... - Reindexing blocks on disk... - Re-indekserer blokker på disk... + Reindekserer blokker på harddisk... - Send coins to a Myriadcoin address - Send til en Myriadcoin-adresse + Send til en Bitcoin-adresse - Modify configuration options for Myriadcoin Endre oppsett for Myriadcoin - Backup wallet to another location - Sikkerhetskopiér lommebok til annet sted + Sikkerhetskopier lommebok til annet sted - Change the passphrase used for wallet encryption Endre adgangsfrasen brukt for kryptering av lommebok - &Debug window &Feilsøkingsvindu - Open debugging and diagnostic console Åpne konsoll for feilsøk og diagnostikk - &Verify message... &Verifiser melding... - - Myriadcoin Myriadcoin - Wallet Lommebok - &Send &Send - &Receive &Motta - - &Addresses - &Adressebok - - - - &About Myriadcoin - &Om Myriadcoin - - - &Show / Hide - &Gjem / vis + &Vis / Skjul - Show or hide the main Window Vis eller skjul hovedvinduet - Encrypt the private keys that belong to your wallet Krypter de private nøklene som tilhører lommeboken din - Sign messages with your Myriadcoin addresses to prove you own them - Signér en melding for å bevise at du eier denne adressen + Signer en melding med Bitcoin-adressene dine for å bevise at du eier dem - Verify messages to ensure they were signed with specified Myriadcoin addresses - Bekreft meldinger for å være sikker på at de ble signert av en angitt Myriadcoin-adresse + Bekreft meldinger for å være sikker på at de ble signert av en angitt Bitcoin-adresse - &File &Fil - &Settings &Innstillinger - &Help &Hjelp - Tabs toolbar Verktøylinje for faner - - [testnet] [testnett] - + Myriadcoin Core + Myriadcoin Core + + + Request payments (generates QR codes and myriadcoin: URIs) + Forespør betalinger (genererer QR-koder og myriadcoin: URIer) + + + &About Myriadcoin Core + &Om Myriadcoin Core + + + Show the list of used sending addresses and labels + Vis listen av brukte utsendingsadresser og merkelapper + + + Show the list of used receiving addresses and labels + Vis listen over bruke mottaksadresser og merkelapper + + + Open a myriadcoin: URI or payment request + Åpne en Bitcoin: URI eller betalingsetterspørring + + + &Command-line options + &Kommandolinjevalg + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + Vis Myriadcoin Core hjelpemeldingen for å få en liste med mulige kommandolinjevalg + + Myriadcoin client - Myriadcoinklient + Bitcoin-klienten - %n active connection(s) to Myriadcoin network - %n aktiv forbindelse til Myriadcoin-nettverket%n aktive forbindelser til Myriadcoin-nettverket + %n aktiv forbindelse til Bitcoin-nettverket%n aktive forbindelser til Bitcoin-nettverket - No block source available... - + Ingen kilde for blokker tilgjengelig... - Processed %1 of %2 (estimated) blocks of transaction history. - + Lastet %1 av %2 (estimert) blokker med transaksjonshistorikk. - Processed %1 blocks of transaction history. Lastet %1 blokker med transaksjonshistorikk. - %n hour(s) - + %n time%n timer - %n day(s) - + %n dag%n dager - %n week(s) - + %n uke%n uker + + + %1 and %2 + %1 og %2 + + + %n year(s) + %n år%n år - %1 behind - + %1 bak - Last received block was generated %1 ago. - + Siste mottatte blokk ble generert for %1 siden. - Transactions after this will not yet be visible. Transaksjoner etter dette vil ikke være synlige enda. - Error - + Feil - Warning - + Advarsel - Information - + Informasjon - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - Denne transaksjonen overstiger størrelsesbegrensningen. Du kan likevel sende den med et gebyr på %1, som går til nodene som prosesserer transaksjonen din og støtter nettverket. Vil du betale gebyret? - - - Up to date Ajour - Catching up... Kommer ajour... - - Confirm transaction fee - Bekreft transaksjonsgebyr - - - Sent transaction Sendt transaksjon - Incoming transaction Innkommende transaksjon - Date: %1 Amount: %2 Type: %3 @@ -648,29 +552,14 @@ Adresse: %4 - - - URI handling - URI håndtering - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - URI kunne ikke tolkes! Dette kan forårsakes av en ugyldig Myriadcoin-adresse eller feil i URI-parametere. - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> Lommeboken er <b>kryptert</b> og for tiden <b>ulåst</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> Lommeboken er <b>kryptert</b> og for tiden <b>låst</b> - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. En fatal feil har inntruffet. Det er ikke trygt å fortsette og Myriadcoin må derfor avslutte. @@ -678,330 +567,647 @@ Adresse: %4 ClientModel - Network Alert Nettverksvarsel + + CoinControlDialog + + Coin Control Address Selection + Myntkontroll Adresse Valg + + + Quantity: + Mengde: + + + Bytes: + Bytes: + + + Amount: + Beløp: + + + Priority: + Prioritet: + + + Fee: + Avgift: + + + Low Output: + Svake Utdata: + + + After Fee: + Etter Gebyr: + + + Change: + Veksel: + + + (un)select all + velg (fjern) alt + + + Tree mode + Tremodus + + + List mode + Listemodus + + + Amount + Beløp + + + Address + Adresse + + + Date + Dato + + + Confirmations + Bekreftelser + + + Confirmed + Bekreftet + + + Priority + Prioritet + + + Copy address + Kopier adresse + + + Copy label + Kopier merkelapp + + + Copy amount + Kopier beløp + + + Copy transaction ID + Kopier transaksjons-ID + + + Lock unspent + Lås ubrukte + + + Unlock unspent + Lås opp ubrukte + + + Copy quantity + Kopier mengde + + + Copy fee + Kopier gebyr + + + Copy after fee + Kopier fra gebyr + + + Copy bytes + Kopier bytes + + + Copy priority + Kopier prioritet + + + Copy low output + Kopier svake utdata + + + Copy change + Kopier veksel + + + highest + høyest + + + higher + høyere + + + high + høy + + + medium-high + medium-høy + + + medium + medium + + + low-medium + lav-medium + + + low + lav + + + lower + lavere + + + lowest + lavest + + + (%1 locked) + (%1 låst) + + + none + ingen + + + Dust + Støv + + + yes + ja + + + no + nei + + + This label turns red, if the transaction size is greater than 1000 bytes. + Denne merkelappen blir rød, hvis transaksjonsstørrelsen er større enn 1000 bytes. + + + This means a fee of at least %1 per kB is required. + Dette betyr at et gebyr på minst %1 per KB er påkrevd. + + + Can vary +/- 1 byte per input. + Kan variere +/- 1 byte per input. + + + Transactions with higher priority are more likely to get included into a block. + Transaksjoner med høyere prioritet har mer sannsynlighet for å bli inkludert i en blokk. + + + This label turns red, if the priority is smaller than "medium". + Denne merkelappen blir rød, hvis prioriteten er mindre enn "medium". + + + This label turns red, if any recipient receives an amount smaller than %1. + Denne merkelappen blir rød, hvis en mottaker mottar en mengde på mindre enn %1. + + + This means a fee of at least %1 is required. + Dette betyr at et gebyr på minst %1 er påkrevd. + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + Mengder under 0.546 ganger minimum relégebyr er vist som støv. + + + This label turns red, if the change is smaller than %1. + Denne merkelappen blir rød, hvis endringen er mindre enn %1. + + + (no label) + (ingen merkelapp) + + + change from %1 (%2) + veksel fra %1 (%2) + + + (change) + (veksel) + + EditAddressDialog - Edit Address Rediger adresse - &Label &Merkelapp - - The label associated with this address book entry - Merkelappen koblet til denne adressen i adresseboken + The label associated with this address list entry + Merkelappen koblet til denne adresseliste oppføringen + + + The address associated with this address list entry. This can only be modified for sending addresses. + Adressen til denne oppføringen i adresseboken. Denne kan kun endres for utsendingsadresser. - &Address &Adresse - - The address associated with this address book entry. This can only be modified for sending addresses. - Adressen til denne oppføringen i adresseboken. Denne kan kun endres for utsendingsadresser. - - - New receiving address Ny mottaksadresse - New sending address Ny utsendingsadresse - Edit receiving address Rediger mottaksadresse - Edit sending address Rediger utsendingsadresse - The entered address "%1" is already in the address book. Den oppgitte adressen "%1" er allerede i adresseboken. - The entered address "%1" is not a valid Myriadcoin address. - Den angitte adressed "%1" er ikke en gyldig Myriadcoin-adresse. + Den angitte adressed "%1" er ikke en gyldig Bitcoin-adresse. - Could not unlock wallet. Kunne ikke låse opp lommeboken. - New key generation failed. Generering av ny nøkkel feilet. - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt - Myriadcoin-Qt + A new data directory will be created. + En ny datamappe vil bli laget. + + + name + navn + + + Directory already exists. Add %1 if you intend to create a new directory here. + Mappe finnes allerede. Legg til %1 hvis du vil lage en ny mappe her. + + + Path already exists, and is not a directory. + Snarvei finnes allerede, og er ikke en mappe. + + + Cannot create data directory here. + Kan ikke lage datamappe her. + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + Myriadcoin Core - Kommandolinjevalg + + + Myriadcoin Core + Myriadcoin Core - version versjon - Usage: Bruk: - command-line options kommandolinjevalg - UI options valg i brukergrensesnitt - Set language, for example "de_DE" (default: system locale) Sett språk, for eksempel "nb_NO" (standardverdi: fra operativsystem) - Start minimized - Start minimert - + Start minimert + + + Set SSL root certificates for payment request (default: -system-) + Sett SSL-rotsertifikat for betalingsforespørsel (standard: -system-) - Show splash screen on startup (default: 1) Vis splashskjerm ved oppstart (standardverdi: 1) + + Choose data directory on startup (default: 0) + Velg datamappe ved oppstart (standard: 0) + + + + Intro + + Welcome + Velkommen + + + Welcome to Myriadcoin Core. + Velkommen til Myriadcoin Core. + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + Siden dette er første gang programmet starter, kan du nå velge hvor Myriadcoin Core skal lagre sine data. + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + Myriadcoin Core vil laste ned og lagre en kopi av Myriadcoin sin blokkjede. Minst %1GB av data vil bli lagret i denne mappen, og det vil vokse over tid. Lommeboken vil også bli lagret i denne mappen. + + + Use the default data directory + Bruk standard datamappe + + + Use a custom data directory: + Bruk en egendefinert datamappe: + + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" can not be created. + Feil: Spesifisert datamappe "%1" kan ikke opprettes. + + + Error + Feil + + + GB of free space available + GB ledig lagringsplass + + + (of %1GB needed) + (av %1GB behøvd) + + + + OpenURIDialog + + Open URI + Åpne URI + + + Open payment request from URI or file + Åpne betalingsetterspørring fra URI eller fil + + + URI: + URI: + + + Select payment request file + Velg fil for betalingsetterspørring + + + Select payment request file to open + Velg fil for betalingsetterspørring å åpne + OptionsDialog - Options Innstillinger - &Main &Hoved - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. - + Valgfritt transaksjonsgebyr per kB som sikrer at dine transaksjoner blir raskt prosessert. De fleste transaksjoner er 1 kB. - Pay transaction &fee - Betal transaksjons&gebyr + Betal &transaksjonsgebyr - Automatically start Myriadcoin after logging in to the system. Start Myriadcoin automatisk etter innlogging. - &Start Myriadcoin on system login &Start Myriadcoin ved systeminnlogging - + Size of &database cache + Størrelse på &database hurtigbuffer + + + MB + MB + + + Number of script &verification threads + Antall script &verifikasjonstråder + + + Connect to the Myriadcoin network through a SOCKS proxy. + Koble til Bitcoin-nettverket gjennom en SOCKS proxy. + + + &Connect through SOCKS proxy (default proxy): + &Koble til gjennom SOCKS proxy (standardvalg proxy): + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + IP-adressen til proxyen (f.eks. IPv4: 127.0.0.1 / IPv6: ::1) + + + 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 |. + 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 |. + + + Third party transaction URLs + Tredjepart transaksjon URLer + + + Active command-line options that override above options: + Aktive kommandolinjevalg som overstyrer valgene ovenfor: + + Reset all client options to default. - + Tilbakestill alle klient valg til standard - &Reset Options - + &Tilbakestill Instillinger - &Network &Nettverk - + (0 = auto, <0 = leave that many cores free) + (0 = automatisk, <0 = la så mange kjerner være ledig) + + + W&allet + L&ommebok + + + Expert + Ekspert + + + Enable coin &control features + Aktiver &myntkontroll funksjoner + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + Hvis du sperrer for bruk av ubekreftet veksel, kan ikke vekselen fra transaksjonen bli brukt før transaksjonen har minimum en bekreftelse. Dette påvirker også hvordan balansen din blir beregnet. + + + &Spend unconfirmed change + &Bruk ubekreftet veksel + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. Åpne automatisk Myriadcoin klientporten på ruteren. Dette virker kun om din ruter støtter UPnP og dette er påslått. - Map port using &UPnP - Sett opp port vha. &UPnP + Sett opp port ved hjelp av &UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - Koble til Myriadcoin-nettverket gjennom en SOCKS proxy (f.eks. ved tilkobling gjennom Tor). - - - - &Connect through SOCKS proxy: - &Koble til gjenom SOCKS proxy: - - - Proxy &IP: Proxy &IP: - - IP address of the proxy (e.g. 127.0.0.1) - IP-adresse for mellomtjener (f.eks. 127.0.0.1) - - - &Port: &Port: - Port of the proxy (e.g. 9050) Proxyens port (f.eks. 9050) - SOCKS &Version: SOCKS &Versjon: - SOCKS version of the proxy (e.g. 5) Proxyens SOCKS versjon (f.eks. 5) - &Window &Vindu - Show only a tray icon after minimizing the window. Vis kun ikon i systemkurv etter minimering av vinduet. - &Minimize to the tray instead of the taskbar &Minimer til systemkurv istedenfor oppgavelinjen - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. Minimerer vinduet istedenfor å avslutte applikasjonen når vinduet lukkes. Når dette er slått på avsluttes applikasjonen kun ved å velge avslutt i menyen. - M&inimize on close M&inimer ved lukking - &Display &Visning - User Interface &language: &Språk for brukergrensesnitt - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. Språket for brukergrensesnittet kan settes her. Innstillingen trer i kraft ved omstart av Myriadcoin. - &Unit to show amounts in: &Enhet for visning av beløper: - Choose the default subdivision unit to show in the interface and when sending coins. Velg standard delt enhet for visning i grensesnittet og for sending av myriadcoins. - Whether to show Myriadcoin addresses in the transaction list or not. - Om Myriadcoin-adresser skal vises i transaksjonslisten eller ikke. + Om Bitcoin-adresser skal vises i transaksjonslisten eller ikke. - &Display addresses in transaction list &Vis adresser i transaksjonslisten - + Whether to show coin control features or not. + Skal myntkontroll funksjoner vises eller ikke. + + &OK &OK - &Cancel &Avbryt - - &Apply - &Bruk - - - default standardverdi - + none + ingen + + Confirm options reset - + Bekreft tilbakestilling av innstillinger - - Some settings may require a client restart to take effect. - + Client restart required to activate changes. + Omstart av klienten er nødvendig for å aktivere endringene. - - Do you want to proceed? - + Client will be shutdown, do you want to proceed? + Klienten vil bli lukket, vil du fortsette? - - - Warning - Advarsel + This change would require a client restart. + Denne endringen krever omstart av klienten. - - - This setting will take effect after restarting Myriadcoin. - Denne innstillingen trer i kraft etter omstart av Myriadcoin. - - - The supplied proxy address is invalid. Angitt proxyadresse er ugyldig. @@ -1009,59 +1215,54 @@ Adresse: %4 OverviewPage - Form Skjema - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. - Informasjonen som vises kan være foreldet. Din lommebok synkroniseres automatisk med Myriadcoin-nettverket etter at tilkobling er opprettet, men denne prosessen er ikke ferdig enda. + Informasjonen som vises kan være foreldet. Din lommebok synkroniseres automatisk med Bitcoin-nettverket etter at tilkobling er opprettet, men denne prosessen er ikke ferdig enda. - - Balance: - Saldo: - - - - Unconfirmed: - Ubekreftet - - - Wallet Lommebok - + Available: + Tilgjengelig: + + + Your current spendable balance + Din nåværende saldo + + + Pending: + Under behandling: + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + Totalt antall ubekreftede transaksjoner som ikke teller med i saldo + + Immature: Umoden: - Mined balance that has not yet matured Minet saldo har ikke modnet enda - + Total: + Totalt: + + + Your current total balance + Din nåværende saldo + + <b>Recent transactions</b> <b>Siste transaksjoner</b> - - Your current balance - Din nåværende saldo - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - Totalt antall ubekreftede transaksjoner som ikke telles med i saldo enda - - - - out of sync ute av synk @@ -1069,579 +1270,856 @@ Adresse: %4 PaymentServer - + URI handling + URI-håndtering + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + URI kunne ikke tolkes! Dette kan forårsakes av en ugyldig Bitcoin-adresse eller feil i URI-parametere. + + + Requested payment amount of %1 is too small (considered dust). + Forespurt betalingsmengde på %1 er for liten (betraktet som støv). + + + Payment request error + Betalingsforespørsel feil + + Cannot start myriadcoin: click-to-pay handler - Kan ikke starte Bit-coin: klikk-og-betal håndterer + Kan ikke starte Bitcoin: klikk-og-betal håndterer + + + Net manager warning + Nettleder advarsel + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + Din aktive proxy har ikke støtte for SOCKS5, som er påkrevd for betalingsforespørsler via proxy. + + + Payment request fetch URL is invalid: %1 + Hentelenke for betalingsforespørsel er ugyldig: %1 + + + Payment request file handling + Filhåndtering for betalingsforespørsel + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + Fil for betalingsforespørsel kan ikke leses eller behandles! Dette kan skyldes en ugyldig fil for betalingsforespørsel. + + + Unverified payment requests to custom payment scripts are unsupported. + Uverifiserte betalingsforespørsler til egentilpassede betalingscript er ikke støttet. + + + Refund from %1 + Refundering fra %1 + + + Error communicating with %1: %2 + Feil i kommunikasjonen med %1: %2 + + + Payment request can not be parsed or processed! + Betalingsforespørsler kan ikke analyseres eller behandles! + + + Bad response from server %1 + Dårlig svar fra server %1 + + + Payment acknowledged + Betaling erkjent + + + Network request error + Nettverksforespørsel feil - QRCodeDialog + QObject - - QR Code Dialog - Dialog for QR Kode + Myriadcoin + Myriadcoin - - Request Payment - Etterspør Betaling + Error: Specified data directory "%1" does not exist. + Feil: Spesifisert datamappe "%1" finnes ikke. - - Amount: - Beløp: + Error: Cannot parse configuration file: %1. Only use key=value syntax. + Feil: Kan ikke lese konfigurasjonsfil: %1. Bruk kun syntaksen nøkkel=verdi. - - Label: - Merkelapp: + Error: Invalid combination of -regtest and -testnet. + Feil: Ugyldig kombinasjon av -regtest og -testnet. - - Message: - Melding: + Myriadcoin Core didn't yet exit safely... + Myriadcoin Core har ennå ikke avsluttet på en sikker måte... - - &Save As... - &Lagre Som... + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Skriv inn en Bitcoin-adresse (f.eks. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + &Lagre Bilde... - - Error encoding URI into QR Code. - Feil ved koding av URI i QR kode. + &Copy Image + &Kopier Bilde - - The entered amount is invalid, please check. - Angitt beløp er ugyldig. - - - - Resulting URI too long, try to reduce the text for label / message. - Resulterende URI for lang, prøv å redusere teksten for merkelapp / melding. - - - Save QR Code - Lagre QR Kode + Lagre QR-kode - - PNG Images (*.png) - PNG bilder (*.png) + PNG Image (*.png) + PNG-bilde (*.png) RPCConsole - Client name Klientnavn - - - - - - - - - - N/A - - Client version Klientversjon - &Information &Informasjon - + Debug window + Feilsøkingsvindu + + + General + Generelt + + Using OpenSSL version Bruker OpenSSL versjon - Startup time Oppstartstidspunkt - Network Nettverk - + Name + Navn + + Number of connections Antall tilkoblinger - - On testnet - På testnett - - - Block chain Blokkjeden - Current number of blocks Nåværende antall blokker - Estimated total blocks Estimert totalt antall blokker - Last block time Tidspunkt for siste blokk - &Open &Åpne - - Command-line options - Kommandolinjevalg - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - Vis Myriadcoin-Qt hjelpemelding for å få en liste med mulige kommandolinjevalg. - - - - &Show - &Vis - - - &Console &Konsoll - + &Network Traffic + &Nettverkstrafikk + + + &Clear + &Fjern + + + Totals + Totalt + + + In: + Inn: + + + Out: + Ut: + + Build date Byggedato - - Myriadcoin - Debug window - Myriadcoin - vindu for feilsøk - - - - Myriadcoin Core - Myriadcoin Kjerne - - - Debug log file Loggfil for feilsøk - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. - Åpne Myriadcoin loggfil for feilsøk fra datamappen. Dette kan ta noen sekunder for store loggfiler. + Åpne Myriadcoin sin loggfil for feilsøk fra den gjeldende datamappen. Dette kan ta noen sekunder for store loggfiler. - Clear console Tøm konsoll - Welcome to the Myriadcoin RPC console. - Velkommen til Myriadcoin RPC konsoll. + Velkommen til Myriadcoin sin RPC-konsoll. - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. Bruk opp og ned pil for å navigere historikken, og <b>Ctrl-L</b> for å tømme skjermen. - Type <b>help</b> for an overview of available commands. Skriv <b>help</b> for en oversikt over kommandoer. + + %1 B + %1 B + + + %1 KB + %1 KB + + + %1 MB + %1 MB + + + %1 GB + %1 GB + + + %1 m + %1 m + + + %1 h + %1 t + + + %1 h %2 m + %1 t %2 m + + + + ReceiveCoinsDialog + + &Amount: + &Beløp: + + + &Label: + &Merkelapp: + + + &Message: + &Melding: + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + Gjenbruk en av de tidligere brukte mottaksadressene. Gjenbruk av adresser har sikkerhets- og personvernsutfordringer. Ikke bruk dette med unntak for å gjennopprette en betalingsforespørsel som ble gjort tidligere. + + + R&euse an existing receiving address (not recommended) + Gj&enbruk en eksisterende mottaksadresse (ikke anbefalt) + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + En valgfri melding å tilknytte betalingsforespørselen, som vil bli vist når forespørselen er åpnet. Meldingen vil ikke bli sendt med betalingen over Bitcoin-nettverket. + + + An optional label to associate with the new receiving address. + En valgfri merkelapp å tilknytte den nye mottakeradressen. + + + Use this form to request payments. All fields are <b>optional</b>. + Bruk dette skjemaet til betalingsforespørsler. Alle felt er <b>valgfrie</b>. + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + Et valgfritt beløp å etterspørre. La stå tomt eller null for ikke å etterspørre et spesifikt beløp. + + + Clear all fields of the form. + Fjern alle felter fra skjemaet. + + + Clear + Fjern + + + Requested payments history + Etterspurt betalingshistorikk + + + &Request payment + &Etterspør betaling + + + Show the selected request (does the same as double clicking an entry) + Vis den valgte etterspørringen (gjør det samme som å dobbelklikke på en oppføring) + + + Show + Vis + + + Remove the selected entries from the list + Fjern de valgte oppføringene fra listen + + + Remove + Fjern + + + Copy label + Kopier merkelapp + + + Copy message + Kopier melding + + + Copy amount + Kopier beløp + + + + ReceiveRequestDialog + + QR Code + QR-kode + + + Copy &URI + Kopier &URI + + + Copy &Address + Kopier &Adresse + + + &Save Image... + &Lagre Bilde... + + + Request payment to %1 + Etterspør betaling til %1 + + + Payment information + Betalingsinformasjon + + + URI + URI + + + Address + Adresse + + + Amount + Beløp + + + Label + Merkelapp + + + Message + Melding + + + Resulting URI too long, try to reduce the text for label / message. + Resultat URI for lang, prøv å redusere teksten for merkelapp / melding. + + + Error encoding URI into QR Code. + Feil ved koding av URI til QR-kode. + + + + RecentRequestsTableModel + + Date + Dato + + + Label + Merkelapp + + + Message + Melding + + + Amount + Beløp + + + (no label) + (ingen merkelapp) + + + (no message) + (ingen melding) + + + (no amount) + (intet beløp) + SendCoinsDialog - - - - - - - - Send Coins - Send Myriadcoins + Send Bitcoins + + + Coin Control Features + Myntkontroll Funksjoner + + + Inputs... + Inndata... + + + automatically selected + automatisk valgte + + + Insufficient funds! + Utilstrekkelige midler! + + + Quantity: + Mengde: + + + Bytes: + Bytes: + + + Amount: + Beløp: + + + Priority: + Prioritet: + + + Fee: + Gebyr: + + + Low Output: + Svake Utdata: + + + After Fee: + Etter Gebyr: + + + Change: + Veksel: + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + Hvis dette er aktivert, men adressen for veksel er tom eller ugyldig, vil veksel bli sendt til en nylig generert adresse. + + + Custom change address + Egendefinert adresse for veksel - Send to multiple recipients at once - Send til flere enn én mottaker + Send til flere enn en mottaker - Add &Recipient - &Legg til Mottaker + Legg til &Mottaker - - Remove all transaction fields - Fjern alle transaksjonsfelter + Clear all fields of the form. + Fjern alle felter fra skjemaet. - Clear &All Fjern &Alt - Balance: Saldo: - - 123.456 BTC - 123.456 BTC - - - Confirm the send action Bekreft sending - S&end - S&avslutt + S&end - - <b>%1</b> to %2 (%3) - <b>%1</b> til %2 (%3) - - - Confirm send coins Bekreft sending av myriadcoins - - Are you sure you want to send %1? - Er du sikker på at du vil sende %1? + %1 to %2 + %1 til %2 - - and - og + Copy quantity + Kopier mengde + + + Copy amount + Kopier beløp + + + Copy fee + Kopier gebyr + + + Copy after fee + Kopier fra gebyr + + + Copy bytes + Kopier bytes + + + Copy priority + Kopier prioritet + + + Copy low output + Kopier svake utdata + + + Copy change + Kopier veksel + + + Total Amount %1 (= %2) + Totalt Beløp %1 (= %2) + + + or + eller - The recipient address is not valid, please recheck. Adresse for mottaker er ugyldig. - The amount to pay must be larger than 0. - Beløpen som skal betales må være over 0. + Beløpet som skal betales må være over 0. - The amount exceeds your balance. Beløpet overstiger saldo. - The total exceeds your balance when the %1 transaction fee is included. Totalbeløpet overstiger saldo etter at %1 transaksjonsgebyr er lagt til. - Duplicate address found, can only send to each address once per send operation. - Duplikate adresser funnet. Kan bare sende én gang til hver adresse per operasjon. + Doble antall adresser funnet. Kan bare sende en gang til hver adresse per operasjon. - - Error: Transaction creation failed! - Feil: Opprettelse av transaksjon feilet + Transaction creation failed! + Opprettelse av transaksjon feilet! - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Feil: Transaksjonen ble avvist. Dette kan skje om noe av beløpet allerede var brukt, f.eks. hvis du kopierte wallet.dat og noen myriadcoins ble brukt i kopien men ikke ble markert som brukt her. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + 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. + + + Warning: Invalid Myriadcoin address + Advarsel: Ugyldig Bitcoin-adresse + + + (no label) + (ingen merkelapp) + + + Warning: Unknown change address + Advarsel: Ukjent adresse for veksel + + + Are you sure you want to send? + Er du sikker på at du vil sende? + + + added as transaction fee + lagt til som transaksjonsgebyr + + + Payment request expired + Betalingsforespørsel utgått + + + Invalid payment address %1 + Ugyldig betalingsadresse %1 SendCoinsEntry - - Form - Skjema - - - A&mount: &Beløp: - Pay &To: Betal &Til: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Adressen betalingen skal sendes til (f.eks. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book Skriv inn en merkelapp for denne adressen for å legge den til i din adressebok - &Label: &Merkelapp: - - Choose address from address book - Velg adresse fra adresseboken + Choose previously used address + Velg tidligere brukt adresse + + + This is a normal payment. + Dette er en normal betaling. - Alt+A Alt+A - Paste address from clipboard Lim inn adresse fra utklippstavlen - Alt+P Alt+P - - Remove this recipient - Fjern denne mottakeren + Remove this entry + Fjern denne oppføringen - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Skriv inn en Myriadcoin adresse (f.eks. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + Melding: + + + This is a verified payment request. + Dette er en verifisert betalingsetterspørring + + + Enter a label for this address to add it to the list of used addresses + Skriv inn en merkelapp for denne adressen for å legge den til listen av brukte adresser + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + En melding som var tilknyttet bitcoinen: URI vil bli lagret med transaksjonen for din oversikt. Denne meldingen vil ikke bli sendt over Bitcoin-nettverket. + + + This is an unverified payment request. + Dette er en uverifisert betalingsetterspørring + + + Pay To: + Betal Til: + + + Memo: + Memo: + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + Myriadcoin Core lukker... + + + Do not shut down the computer until this window disappears. + Slå ikke av datamaskinen før dette vinduet forsvinner. SignVerifyMessageDialog - Signatures - Sign / Verify a Message - Signaturer - Signer / Verifiser en melding + Signaturer - Signer / Verifiser en Melding - &Sign Message - &Signér Melding + &Signer Melding - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. - Du kan signere meldinger med dine adresser for å bevise at du eier dem. Ikke signér vage meldinger da phishing-angrep kan prøve å lure deg til å signere din identitet over til andre. Signér kun fullt detaljerte utsagn som du er enig i. + Du kan signere meldinger med dine adresser for å bevise at du eier dem. Ikke signer vage meldinger da phishing-angrep kan prøve å lure deg til å signere din identitet over til andre. Signer kun fullt detaljerte utsagn som du er enig i. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Adressen for signering av meldingen (f.eks. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book - Velg en adresse fra adresseboken + Choose previously used address + Velg tidligere brukt adresse - - Alt+A Alt+A - Paste address from clipboard Lim inn adresse fra utklippstavlen - Alt+P Alt+P - Enter the message you want to sign here Skriv inn meldingen du vil signere her - Signature - + Signatur - Copy the current signature to the system clipboard Kopier valgt signatur til utklippstavle - Sign the message to prove you own this Myriadcoin address - Signer meldingen for å bevise at du eier denne Myriadcoin-adressen + Signer meldingen for å bevise at du eier denne Bitcoin-adressen - Sign &Message - + Signer &Melding - Reset all sign message fields Tilbakestill alle felter for meldingssignering - - Clear &All Fjern &Alt - &Verify Message &Verifiser Melding - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Angi adresse for signering, melding (vær sikker på at du kopierer linjeskift, mellomrom, tab, etc. helt nøyaktig) og signatur under for å verifisere meldingen. Vær forsiktig med at du ikke gir signaturen mer betydning enn det som faktisk står i meldingen, for å unngå å bli lurt av såkalte "man-in-the-middle" angrep. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Adressen meldingen var signert med (f.eks. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address - Verifiser meldingen for å være sikker på at den ble signert av den angitte Myriadcoin-adressen + Verifiser meldingen for å være sikker på at den ble signert av den angitte Bitcoin-adressen - Verify &Message - + Verifiser &Melding - Reset all verify message fields Tilbakestill alle felter for meldingsverifikasjon - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Skriv inn en Myriadcoin adresse (f.eks. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Skriv inn en Bitcoin-adresse (f.eks. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature Klikk "Signer Melding" for å generere signatur - - Enter Myriadcoin signature - Angi Myriadcoin signatur - - - - The entered address is invalid. Angitt adresse er ugyldig. - - - - Please check the address and try again. Vennligst sjekk adressen og prøv igjen. - - The entered address does not refer to a key. Angitt adresse refererer ikke til en nøkkel. - Wallet unlock was cancelled. Opplåsing av lommebok ble avbrutt. - Private key for the entered address is not available. Privat nøkkel for den angitte adressen er ikke tilgjengelig. - Message signing failed. Signering av melding feilet. - Message signed. Melding signert. - The signature could not be decoded. Signaturen kunne ikke dekodes. - - Please check the signature and try again. Vennligst sjekk signaturen og prøv igjen. - The signature did not match the message digest. Signaturen passer ikke til meldingen. - Message verification failed. Verifikasjon av melding feilet. - Message verified. Melding verifisert. @@ -1649,186 +2127,160 @@ Adresse: %4 SplashScreen - - The Myriadcoin developers - + Myriadcoin Core + Myriadcoin Core + + + The Myriadcoin Core developers + Myriadcoin Core utviklerne - [testnet] [testnett] + + TrafficGraphWidget + + KB/s + KB/s + + TransactionDesc - Open until %1 Åpen til %1 - + conflicted + konflikt + + %1/offline %1/frakoblet - %1/unconfirmed %1/ubekreftet - %1 confirmations %1 bekreftelser - Status Status - , broadcast through %n node(s) , kringkast gjennom %n node, kringkast gjennom %n noder - Date Dato - Source Kilde - Generated Generert - - From Fra - - - To Til - - own address egen adresse - label merkelapp - - - - - Credit Kredit - matures in %n more block(s) blir moden om %n blokkblir moden om %n blokker - not accepted ikke akseptert - - - - Debit Debet - Transaction fee Transaksjonsgebyr - Net amount Nettobeløp - Message Melding - Comment Kommentar - Transaction ID Transaksjons-ID - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Genererte myriadcoins må modnes 120 blokker før de kan brukes. Da du genererte denne blokken ble den kringkastet til nettverket for å legges til i blokkjeden. Hvis den ikke kommer inn i kjeden får den tilstanden "ikke akseptert" og vil ikke kunne brukes. Dette skjer noen ganger hvis en annen node genererer en blokk noen sekunder fra din. + Merchant + Forhandler + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Genererte myriadcoins må modnes %1 blokker før de kan brukes. Da du genererte denne blokken ble den kringkastet på nettverket for å bli lagt til i kjeden av blokker. Hvis den ikke kommer med i kjeden vil den endre seg til "ikke akseptert" og pengene vil ikke kunne brukes. Dette vil noen ganger skje hvis en annen node genererer en blokk noen sekunder i tid fra din egen. - Debug information Informasjon for feilsøk - Transaction Transaksjon - Inputs Inndata - Amount Beløp - true sann - false usann - , has not been successfully broadcast yet - , har ikke blitt kringkastet uten problemer enda. + , har ikke blitt kringkastet med hell enda - Open for %n more block(s) - + Åpen for %n blokk tilÅpen for %n blokker til - unknown ukjent @@ -1836,12 +2288,10 @@ Adresse: %4 TransactionDescDialog - Transaction details Transaksjonsdetaljer - This pane shows a detailed description of the transaction Her vises en detaljert beskrivelse av transaksjonen @@ -1849,117 +2299,102 @@ Adresse: %4 TransactionTableModel - Date Dato - Type Type - Address Adresse - Amount Beløp + + Immature (%1 confirmations, will be available after %2) + Umoden (%1 bekreftelser, vil være tilgjengelig etter %2) + - Open for %n more block(s) - + Åpen for %n blokk tilÅpen for %n blokker til - Open until %1 Åpen til %1 - - Offline (%1 confirmations) - Frakoblet (%1 bekreftelser) - - - - Unconfirmed (%1 of %2 confirmations) - Ubekreftet (%1 av %2 bekreftelser) - - - Confirmed (%1 confirmations) Bekreftet (%1 bekreftelser) - - - Mined balance will be available when it matures in %n more block(s) - Minet saldo blir tilgjengelig når den modner om %n blokkMinet saldo blir tilgjengelig når den modner om %n blokker - - This block was not received by any other nodes and will probably not be accepted! Denne blokken har ikke blitt mottatt av noen andre noder og vil sannsynligvis ikke bli akseptert! - Generated but not accepted Generert men ikke akseptert - + Offline + Frakoblet + + + Unconfirmed + Ubekreftet + + + Confirming (%1 of %2 recommended confirmations) + Bekrefter (%1 av %2 anbefalte bekreftelser) + + + Conflicted + Konflikt + + Received with Mottatt med - Received from Mottatt fra - Sent to Sendt til - Payment to yourself Betaling til deg selv - Mined Utvunnet - (n/a) - - Transaction status. Hover over this field to show number of confirmations. Transaksjonsstatus. Hold muspekeren over dette feltet for å se antall bekreftelser. - Date and time that the transaction was received. Dato og tid for da transaksjonen ble mottat. - Type of transaction. Type transaksjon. - Destination address of transaction. - Mottaksadresse for transaksjonen + Mottaksadresse for transaksjonen. - Amount removed from or added to balance. Beløp fjernet eller lagt til saldo. @@ -1967,337 +2402,278 @@ Adresse: %4 TransactionView - - All Alle - Today I dag - This week Denne uken - This month Denne måneden - Last month Forrige måned - This year Dette året - Range... Intervall... - Received with Mottatt med - Sent to Sendt til - To yourself Til deg selv - Mined Utvunnet - Other Andre - Enter address or label to search Skriv inn adresse eller merkelapp for søk - Min amount Minimumsbeløp - Copy address Kopier adresse - Copy label Kopier merkelapp - Copy amount - Kopiér beløp + Kopier beløp - Copy transaction ID Kopier transaksjons-ID - Edit label Rediger merkelapp - Show transaction details Vis transaksjonsdetaljer - - Export Transaction Data - Eksporter transaksjonsdata + Export Transaction History + Eksporter Transaksjonshistorikk + + + Exporting Failed + Ekport Feilet + + + There was an error trying to save the transaction history to %1. + En feil oppstod ved lagring av transaksjonshistorikken til %1. + + + Exporting Successful + Ekport Fullført + + + The transaction history was successfully saved to %1. + Transaksjonshistorikken ble lagret til %1. - Comma separated file (*.csv) Kommaseparert fil (*.csv) - Confirmed Bekreftet - Date Dato - Type Type - Label Merkelapp - Address Adresse - Amount Beløp - ID ID - - Error exporting - Feil ved eksport - - - - Could not write to file %1. - Kunne ikke skrive til filen %1. - - - Range: Intervall: - to til + + WalletFrame + + No wallet has been loaded. + Ingen lommebok har blitt lastet. + + WalletModel - Send Coins - Send Myriadcoins + Send Bitcoins WalletView - &Export - + &Eksporter - Export the data in the current tab to a file Eksporter data fra nåværende fane til fil - Backup Wallet - Sikkerhetskopier lommebok + Sikkerhetskopier Lommebok - Wallet Data (*.dat) Lommebokdata (*.dat) - Backup Failed - Sikkerhetskopiering feilet + Sikkerhetskopiering Feilet - - There was an error trying to save the wallet data to the new location. - En feil oppstod under lagringen av lommeboken til den nye plasseringen. + There was an error trying to save the wallet data to %1. + En feil oppstod ved lagring av lommebok til %1. + + + The wallet data was successfully saved to %1. + Lommeboken ble lagret til %1. - Backup Successful - Sikkerhetskopiering fullført - - - - The wallet data was successfully saved to the new location. - Lommebokdata ble lagret til den nye plasseringen. + Sikkerhetskopiering Fullført bitcoin-core - - Myriadcoin version - Myriadcoin versjon - - - Usage: Bruk: - - Send command to -server or myriadcoind - Send kommando til -server eller myriadcoind - - - List commands List opp kommandoer - Get help for a command Vis hjelpetekst for en kommando - Options: Innstillinger: - Specify configuration file (default: myriadcoin.conf) Angi konfigurasjonsfil (standardverdi: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) Angi pid-fil (standardverdi: myriadcoind.pid) - Specify data directory Angi mappe for datafiler - - Set database cache size in megabytes (default: 25) - Sett størrelse på mellomlager for database i megabytes (standardverdi: 25) - - - Listen for connections on <port> (default: 8333 or testnet: 18333) - Lytt etter tilkoblinger på <port> (standardverdi: 8333 eller testnet: 18333) + Lytt etter tilkoblinger på <port> (standardverdi: 8333 eller testnett: 18333) - Maintain at most <n> connections to peers (default: 125) Hold maks <n> koblinger åpne til andre noder (standardverdi: 125) - Connect to a node to retrieve peer addresses, and disconnect Koble til node for å hente adresser til andre noder, koble så fra igjen - Specify your own public address Angi din egen offentlige adresse - Threshold for disconnecting misbehaving peers (default: 100) Grenseverdi for å koble fra noder med dårlig oppførsel (standardverdi: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Antall sekunder noder med dårlig oppførsel hindres fra å koble til på nytt (standardverdi: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s - En feil oppstod ved opprettelse av RPC port %u for lytting: %s + En feil oppstod ved opprettelse av RPC-port %u for IPv4: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) - Lytt etter JSON-RPC tilkoblinger på <port> (standardverdi: 8332 or testnet: 18332) + Lytt etter JSON-RPC tilkoblinger på <port> (standardverdi: 8332 eller testnett: 18332) - Accept command line and JSON-RPC commands Ta imot kommandolinje- og JSON-RPC-kommandoer - + Myriadcoin Core RPC client version + Myriadcoin Core RPC-klientversjon + + Run in the background as a daemon and accept commands Kjør i bakgrunnen som daemon og ta imot kommandoer - Use the test network Bruk testnettverket - Accept connections from outside (default: 1 if no -proxy or -connect) Ta imot tilkoblinger fra utsiden (standardverdi: 1 hvis uten -proxy eller -connect) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2318,615 +2694,689 @@ rpcpassord=%s Brukernavnet og passordet MÅ IKKE være like. Om filen ikke eksisterer, opprett den nå med eier-kun-les filrettigheter. Det er også anbefalt at å sette varselsmelding slik du får melding om problemer. -For eksempel: varselmelding=echo %%s | mail -s "Myriadcoin varsel" admin@foo.com +For eksempel: varselmelding=echo %%s | mail -s "Myriadcoin Varsel" admin@foo.com + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + Akseptable krypteringsmetoder (standardverdi: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - En feil oppstod under oppsettet av RPC port %u for IPv6, tilbakestilles til IPv4: %s + En feil oppstod under oppsettet av RPC-port %u for IPv6, tilbakestilles til IPv4: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 Bind til angitt adresse. Bruk [vertsmaskin]:port notasjon for IPv6 - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. - + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + Ratebegrens gratistransaksjoner kontinuerlig til <n>*1000 bytes per minutt (standard: 15) + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + Gå til modus for regresjonstesting, som bruker en spesiell blokkjede der blokker kan bli løst momentant. Dette er tenkt til verktøy for regresjonstesting og apputvikling. + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + Gå til modus for regresjonstesting, som bruker en spesiell blokkjede der blokker kan bli løst momentant. + + + Error: Listening for incoming connections failed (listen returned error %d) + Feil: Lytting etter innkommende tilkoblinger feilet (lytting returnerte feil %d) - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Feil: Transaksjonen ble avvist! Dette kan skje hvis noen av myntene i lommeboken allerede er blitt brukt, som om du brukte en kopi av wallet.dat og myntene ble brukt i kopien, men ikke markert som brukt her. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! - + Feil: Denne transaksjonen trenger et gebyr på minst %s på grunn av beløpet, kompleksiteten eller bruk av allerede mottatte penger! - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - Kjør kommando når relevant varsel blir mottatt (%s i cmd er erstattet med TxID) - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - Kjør kommando når en lommeboktransaksjon endres (%s i cmd er erstattet med TxID) + Kjør kommando når en lommeboktransaksjon endres (%s i kommando er erstattet med TxID) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - Sett maks størrelse for transaksjoner med høy prioritet / lavt gebyr, i bytes (standardverdi: 27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + Gebyr mindre enn dette er betraktet som intet gebyr (for laging av transaksjoner) (standardverdi: + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + Overfør aktiviteten i databasen fra minnelageret til loggen på harddisken for hver <n> megabytes (standardverdi: 100) + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + Hvor grundig blokkverifiseringen til -checkblocks er (0-4, standard: 3) + + + In this mode -genproclimit controls how many blocks are generated immediately. + I denne modusen kontrollerer -genproclimit hvor mange blokker som genereres øyeblikkelig. + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + Angi antall tråder for skriptverifisering (%u til %d, 0 = auto, <0 = la det antallet kjerner være ledig, standard: %d) + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + Sett prosessorgrensen for når blokkutvinning er på (-1 = ubegrenset, standard: -1) - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications - + Dette er en forhåndssluppet testversjon - bruk på egen risiko - ikke for bruk til blokkutvinning eller bedriftsapplikasjoner + + + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + Ute av stand til å binde til %s på denne datamaskinen. Myriadcoin Core kjører sannsynligvis allerede. + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + Bruk separate SOCKS5 proxyer for å nå noder via Tor skjulte tjenester (standardverdi: -proxy) - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Advarsel: -paytxfee er satt veldig høyt! Dette er transaksjonsgebyret du betaler når du sender transaksjoner. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - Advarsel: Viste transaksjoner kan være feil! Du, eller andre noder, kan trenge en oppgradering. - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. Advarsel: Vennligst undersøk at din datamaskin har riktig dato og klokkeslett! Hvis klokken er stilt feil vil ikke Myriadcoin fungere riktig. - + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + Advarsel: Nettverket ser ikke ut til å være enig! Noen minere ser ut til å ha problemer. + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + Advarsel: Vi ser ikke ut til å være enige med våre noder! Du må oppgradere, eller andre noder må oppgradere. + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Advarsel: Feil ved lesing av wallet.dat! Alle nøkler lest riktig, men transaksjonsdataene eller oppføringer i adresseboken mangler kanskje eller er feil. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - + Advarsel: wallet.dat korrupt, data reddet! Original wallet.dat lagret som wallet.{timestamp}.bak i %s; hvis din saldo eller dine transaksjoner ikke er korrekte bør du gjenopprette fra en backup. + + + (default: 1) + (standardverdi: 1) + + + (default: wallet.dat) + (standardverdi: wallet.dat) + + + <category> can be: + <category> kan være: - Attempt to recover private keys from a corrupt wallet.dat - + Forsøk å berge private nøkler fra en korrupt wallet.dat + + + Myriadcoin Core Daemon + Myriadcoin Core Daemon - Block creation options: Valg for opprettelse av blokker: - + Clear list of wallet transactions (diagnostic tool; implies -rescan) + Tøm listen over transaksjoner i lommeboken (diagnoseverktøy; impliserer -rescan) + + Connect only to the specified node(s) Koble kun til angitt(e) node(r) - + Connect through SOCKS proxy + Koble til via SOCKS proxy + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + Koble til JSON-RPC på <port> (default: 8332 eller testnet: 18332) + + + Connection options: + Innstillinger for tilkobling: + + Corrupted block database detected Oppdaget korrupt blokkdatabase - + Debugging/Testing options: + Valg for feilsøking/testing: + + + Disable safemode, override a real safe mode event (default: 0) + Slå av sikkerhetsmodus, overstyr en virkelig sikkerhetsmodushendelse (standard: 0) + + Discover own IP address (default: 1 when listening and no -externalip) Oppdag egen IP-adresse (standardverdi: 1 ved lytting og uten -externalip) - + Do not load the wallet and disable wallet RPC calls + Ikke last inn lommeboken og deaktiver RPC-kall + + Do you want to rebuild the block database now? Ønsker du å gjenopprette blokkdatabasen nå? - Error initializing block database - + Feil under initialisering av blokkdatabase - Error initializing wallet database environment %s! - Feil under oppstart av lommebokdatabasemiljø %s! + Feil under oppstart av lommeboken sitt databasemiljø %s! - Error loading block database - + Feil ved lasting av blokkdatabase - Error opening block database Feil under åpning av blokkdatabase - Error: Disk space is low! - + Feil: Lite ledig lagringsplass! - Error: Wallet locked, unable to create transaction! - + Feil: Lommebok låst, kan ikke opprette transaksjon! - Error: system error: - + Feil: systemfeil: - Failed to listen on any port. Use -listen=0 if you want this. Kunne ikke lytte på noen port. Bruk -listen=0 hvis det er dette du vil. - Failed to read block info - + Feil ved lesing av blokkinfo - Failed to read block - + Feil ved lesing av blokk - Failed to sync block index - + Feil ved synkronisering av blokkindeks - Failed to write block index - + Ved feil skriving av blokkindeks - Failed to write block info - + Feil ved skriving av blokkinfo - Failed to write block - + Feil ved skriving av blokk - Failed to write file info - + Feil ved skriving av filinfo - Failed to write to coin database - + Feil ved skriving til myriadcoin sin database - Failed to write transaction index - + Feil ved skriving av transaksjonsindeks - Failed to write undo data - + Feil ved skriving av angredata + + + Fee per kB to add to transactions you send + Gebyr per kB for transaksjoner du sender + + + Fees smaller than this are considered zero fee (for relaying) (default: + Gebyrer mindre enn dette vil anses som gebyrfrie (for videresending) (standard: - Find peers using DNS lookup (default: 1 unless -connect) - Finn andre noder gjennom DNS-oppslag (standardverdi: 1 med mindre -connect er oppgit) + Finn andre noder gjennom DNS-oppslag (standardverdi: 1 med mindre -connect er oppgitt) + + + Force safe mode (default: 0) + Tving sikkerhetsmodus (standard: 0) - Generate coins (default: 0) - + Generer myriadcoins (standardverdi: 0) - How many blocks to check at startup (default: 288, 0 = all) - + Hvor mange blokker skal sjekkes ved oppstart (standardverdi: 288, 0 = alle) - - How thorough the block verification is (0-4, default: 3) - + If <category> is not supplied, output all debugging information. + Hvis <category> ikke er oppgitt, ta ut all informasjon om feilsøking. + + + Importing... + Importerer... + + + Incorrect or no genesis block found. Wrong datadir for network? + Ugyldig eller ingen skaperblokk funnet. Feil datamappe for nettverk? + + + Invalid -onion address: '%s' + Ugyldig -onion adresse: '%s' - Not enough file descriptors available. - + For få fildeskriptorer tilgjengelig. + + + Prepend debug output with timestamp (default: 1) + Sett inn tidsstempel i front av feilsøkingsdata (standardverdi: 1) + + + RPC client options: + Innstillinger for RPC-klient: - Rebuild block chain index from current blk000??.dat files - Gjenopprett blokkjedeindex fra blk000??.dat filer + Gjenopprett blokkjedeindeks fra blk000??.dat filer + + + Select SOCKS version for -proxy (4 or 5, default: 5) + Velg versjon av SOCKS -proxy (4 eller 5, standardverdi: 5) + + + Set database cache size in megabytes (%d to %d, default: %d) + Sett databasen sin størrelse på hurtigbufferen i megabytes (%d til %d, standardverdi: %d) + + + Set maximum block size in bytes (default: %d) + Sett maks blokkstørrelse i bytes (standardverdi: %d) - Set the number of threads to service RPC calls (default: 4) - + Sett nummer av tråder til betjening av RPC-kall (standardverdi: 4) + + + Specify wallet file (within data directory) + Angi lommebokfil (inne i datamappe) + + + Spend unconfirmed change when sending transactions (default: 1) + Bruk ubekreftet veksel ved sending av transaksjoner (standardverdi: 1) + + + This is intended for regression testing tools and app development. + Dette er tiltenkt verktøy for regresjonstesting og apputvikling. + + + Usage (deprecated, use myriadcoin-cli): + Bruk (foreldet, bruk myriadcoin-cli): - Verifying blocks... Verifiserer blokker... - Verifying wallet... Verifiserer lommebok... - + Wait for RPC server to start + Vent på start av RPC-tjeneren + + + Wallet %s resides outside data directory %s + Lommebok %s befinner seg utenfor datamappe %s + + + Wallet options: + Valg for lommebok: + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + Advarsel: Utløpt argument -debugnet ignorert, bruk -debug=net + + + You need to rebuild the database using -reindex to change -txindex + Du må gjenoppbygge databasen med å bruke -reindex for å endre -txindex + + Imports blocks from external blk000??.dat file - + Importerer blokker fra ekstern fil blk000??.dat - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) - + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + Ute av stand til å låse datamappen %s. Myriadcoin Core kjører sannsynligvis allerede. + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + Utfør kommando når et relevant varsel er mottatt eller vi ser en veldig lang gaffel (%s i kommando er erstattet med melding) + + + Output debugging information (default: 0, supplying <category> is optional) + Ta ut feilsøkingsinformasjon (standardverdi: 0, bruk av <category> er valgfritt) + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + Sett maksimum størrelse for transaksjoner med høy prioritet / lavt gebyr, i bytes (standardverdi: %d) - Information - + Informasjon - - Invalid -tor address: '%s' - Ugyldig -tor adresse: '%s' - - - Invalid amount for -minrelaytxfee=<amount>: '%s' - + Ugyldig mengde for -minrelaytxfee=<beløp>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' - + Ugyldig mengde for -mintxfee=<beløp>: '%s' + + + Limit size of signature cache to <n> entries (default: 50000) + Begrens størrelsen på signatur-hurtigbufferen til <n> oppføringer (standard: 50000) + + + Log transaction priority and fee per kB when mining blocks (default: 0) + Logg transaksjonsprioritet og gebyr per kB under blokkutvinning (standard: 0) - Maintain a full transaction index (default: 0) - + Oppretthold en full transaksjonsindeks (standard: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) Maks mottaksbuffer per forbindelse, <n>*1000 bytes (standardverdi: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) Maks sendebuffer per forbindelse, <n>*1000 bytes (standardverdi: 1000) - Only accept block chain matching built-in checkpoints (default: 1) - + Aksepter kun en blokkjede som passer med innebygde sjekkpunkter (standardvalg: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Koble kun til noder i nettverket <nett> (IPv4, IPv6 eller Tor) - - Output extra debugging information. Implies all other -debug* options - Skriv ekstra informasjon for feilsøk. Medfører at alle -debug* valg tas med + Print block on startup, if found in block index + Skriv ut blokken ved oppstart, hvis funnet i blokkindeksen - - Output extra network debugging information - Skriv ekstra informasjon for feilsøk av nettverk + Print block tree on startup (default: 0) + Skriv ut blokktreet ved oppstart (standardverdi: 0) - - Prepend debug output with timestamp - Sett tidsstempel på debugmeldinger + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + RPC SSL-valg: (se Myriadcoin Wiki for oppsettsinstruksjoner for SSL) + + + RPC server options: + Innstillinger for RPC-server: + + + Randomly drop 1 of every <n> network messages + Slumpvis dropp 1 av hver <n> nettverksmeldinger + + + Randomly fuzz 1 of every <n> network messages + Slumpvis bland 1 av hver <n> nettverksmeldinger + + + Run a thread to flush wallet periodically (default: 1) + Kjør en tråd som skriver lommeboken til disk periodisk (standard: 1) - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) SSL valg: (se Myriadcoin Wiki for instruksjoner for oppsett av SSL) - - Select the version of socks proxy to use (4-5, default: 5) - Velg versjon av socks proxy (4-5, standardverdi 5) + Send command to Myriadcoin Core + Send kommando til Myriadcoin Core - Send trace/debug info to console instead of debug.log file - Send spor/debug informasjon til konsollet istedenfor debug.log filen + Send spor-/feilsøkingsinformasjon til konsollen istedenfor filen debug.log - - Send trace/debug info to debugger - Send spor/debug informasjon til debugger - - - - Set maximum block size in bytes (default: 250000) - Sett maks blokkstørrelse i bytes (standardverdi: 250000) - - - Set minimum block size in bytes (default: 0) Sett minimum blokkstørrelse i bytes (standardverdi: 0) - + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + Setter flagget DB_PRIVATE i miljøet til lommebokdatabasen (standard: 1) + + + Show all debugging options (usage: --help -help-debug) + Vis alle feilsøkingsvalg (bruk: --help -help-debug) + + + Show benchmark information (default: 0) + Vis informasjon om ytelsesmål (standard: 0) + + Shrink debug.log file on client startup (default: 1 when no -debug) - Krymp debug.log filen når klienten starter (standardverdi: 1 hvis uten -debug) + Krymp filen debug.log når klienten starter (standardverdi: 1 hvis uten -debug) - Signing transaction failed - + Signering av transaksjon feilet - Specify connection timeout in milliseconds (default: 5000) Angi tidsavbrudd for forbindelse i millisekunder (standardverdi: 5000) - + Start Myriadcoin Core Daemon + Start Myriadcoin Core Daemon + + System error: - + Systemfeil: - Transaction amount too small - + Transaksjonen er for liten - Transaction amounts must be positive - + Transaksjonsbeløpet må være positivt - Transaction too large - + Transaksjonen er for stor - Use UPnP to map the listening port (default: 0) Bruk UPnP for lytteport (standardverdi: 0) - Use UPnP to map the listening port (default: 1 when listening) Bruk UPnP for lytteport (standardverdi: 1 ved lytting) - - Use proxy to reach tor hidden services (default: same as -proxy) - Bruk en proxy for å nå skjulte tor tjenester (standardverdi: samme som -proxy) - - - Username for JSON-RPC connections Brukernavn for JSON-RPC forbindelser - Warning - + Advarsel - Warning: This version is obsolete, upgrade required! Advarsel: Denne versjonen er foreldet, oppgradering kreves! - - You need to rebuild the databases using -reindex to change -txindex - + Zapping all transactions from wallet... + Zapper alle transaksjoner fra lommeboken... + + + on startup + ved oppstart + + + version + versjon - wallet.dat corrupt, salvage failed - + wallet.dat korrupt, bergning feilet - Password for JSON-RPC connections Passord for JSON-RPC forbindelser - Allow JSON-RPC connections from specified IP address Tillat JSON-RPC tilkoblinger fra angitt IP-adresse - Send commands to node running on <ip> (default: 127.0.0.1) Send kommandoer til node på <ip> (standardverdi: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) - Eksekvér kommando når beste blokk endrer seg (%s i kommandoen erstattes med blokkens hash) + Utfør kommando når beste blokk endrer seg (%s i kommandoen erstattes med blokkens hash) - Upgrade wallet to latest format - Oppgradér lommebok til nyeste format + Oppgrader lommebok til nyeste format - Set key pool size to <n> (default: 100) - Angi størrelse på nøkkel-lager til <n> (standardverdi: 100) + Angi størrelsen på nøkkellageret til <n> (standardverdi: 100) - Rescan the block chain for missing wallet transactions - Se gjennom blokk-kjeden etter manglende lommeboktransaksjoner + Se gjennom blokkjeden etter manglende lommeboktransaksjoner - Use OpenSSL (https) for JSON-RPC connections Bruk OpenSSL (https) for JSON-RPC forbindelser - Server certificate file (default: server.cert) Servers sertifikat (standardverdi: server.cert) - Server private key (default: server.pem) Servers private nøkkel (standardverdi: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Akseptable krypteringsmetoder (standardverdi: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - This help message Denne hjelpemeldingen - Unable to bind to %s on this computer (bind returned error %d, %s) Kan ikke binde til %s på denne datamaskinen (bind returnerte feil %d, %s) - - Connect through socks proxy - Koble til gjennom socks proxy - - - Allow DNS lookups for -addnode, -seednode and -connect - Tillat DNS oppslag for -addnode, -seednode og -connect + Tillat oppslag i DNS for -addnode, -seednode og -connect - Loading addresses... Laster adresser... - Error loading wallet.dat: Wallet corrupted Feil ved lasting av wallet.dat: Lommeboken er skadet - Error loading wallet.dat: Wallet requires newer version of Myriadcoin Feil ved lasting av wallet.dat: Lommeboken krever en nyere versjon av Myriadcoin - Wallet needed to be rewritten: restart Myriadcoin to complete Lommeboken måtte skrives om: start Myriadcoin på nytt for å fullføre - Error loading wallet.dat Feil ved lasting av wallet.dat - Invalid -proxy address: '%s' Ugyldig -proxy adresse: '%s' - Unknown network specified in -onlynet: '%s' Ukjent nettverk angitt i -onlynet '%s' - Unknown -socks proxy version requested: %i - Ukjent -socks proxy versjon angitt: %i + Ukjent -socks proxyversjon angitt: %i - Cannot resolve -bind address: '%s' Kunne ikke slå opp -bind adresse: '%s' - Cannot resolve -externalip address: '%s' Kunne ikke slå opp -externalip adresse: '%s' - Invalid amount for -paytxfee=<amount>: '%s' Ugyldig beløp for -paytxfee=<beløp>: '%s' - Invalid amount Ugyldig beløp - Insufficient funds Utilstrekkelige midler - Loading block index... Laster blokkindeks... - Add a node to connect to and attempt to keep the connection open Legg til node for tilkobling og hold forbindelsen åpen - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - Kan ikke binde til %s på denne datamaskinen. Sannsynligvis kjører Myriadcoin allerede. - - - - Fee per KB to add to transactions you send - Gebyr per KB for transaksjoner du sender - - - Loading wallet... Laster lommebok... - Cannot downgrade wallet Kan ikke nedgradere lommebok - Cannot write default address Kan ikke skrive standardadresse - Rescanning... Leser gjennom... - Done loading Ferdig med lasting - To use the %s option For å bruke %s opsjonen - Error Feil - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_nl.ts b/src/qt/locale/bitcoin_nl.ts index 563c1e4d..b7a23736 100644 --- a/src/qt/locale/bitcoin_nl.ts +++ b/src/qt/locale/bitcoin_nl.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - Over Myriadcoin + About Myriadcoin Core + Over Myriadcoin Core - - <b>Myriadcoin</b> version - <b>Myriadcoin</b> versie + <b>Myriadcoin Core</b> version + <b> Myriadcoin Core</b> versie - This is experimental software. @@ -28,153 +24,128 @@ Gedistribueerd onder de MIT/X11 software licentie, zie het bijgevoegde bestand C Dit product bevat software ontwikkeld door het OpenSSL Project voor gebruik in de OpenSSL Toolkit (http://www.openssl.org/) en cryptografische software gemaakt door Eric Young (eay@cryptsoft.com) en UPnP software geschreven door Thomas Bernard. - Copyright Auteursrecht - - The Myriadcoin developers - De Myriadcoin-ontwikkelaars + The Myriadcoin Core developers + De Myriadcoin Core ontwikkelaars + + + (%1-bit) + (%1-bit) AddressBookPage - - Address Book - Adresboek - - - Double-click to edit address or label Dubbelklik om adres of label te wijzigen - Create a new address Maak een nieuw adres aan - + &New + &Nieuw + + Copy the currently selected address to the system clipboard Kopieer het huidig geselecteerde adres naar het klembord - - &New Address - &Nieuw Adres + &Copy + &Kopieer - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Dit zijn uw Myriadcoinadressen om betalingen mee te ontvangen. U kunt er voor kiezen om een uniek adres aan te maken voor elke afzender. Op deze manier kunt u bijhouden wie al aan u betaald heeft. + C&lose + S&luiten - &Copy Address &Kopiëer Adres - - Show &QR Code - Toon &QR-Code - - - - Sign a message to prove you own a Myriadcoin address - Onderteken een bericht om te bewijzen dat u een bepaald Myriadcoinadres bezit - - - - Sign &Message - &Onderteken Bericht - - - Delete the currently selected address from the list Verwijder het geselecteerde adres van de lijst - Export the data in the current tab to a file Exporteer de data in de huidige tab naar een bestand - &Export &Exporteer - - Verify a message to ensure it was signed with a specified Myriadcoin address - Controleer een bericht om te verifiëren dat het gespecificeerde Myriadcoinadres het bericht heeft ondertekend. - - - - &Verify Message - &Verifiëer Bericht - - - &Delete &Verwijder - - These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - Dit zijn uw Myriadcoinadressen om betalingen mee te verzenden. Check altijd het bedrag en het ontvangende adres voordat u uw myriadcoins verzendt. + Choose the address to send coins to + Kies het adres om munten naar te versturen + + + Choose the address to receive coins with + Kies het adres om munten voor te ontvangen + + + C&hoose + K&iezen + + + Sending addresses + Bezig met versturen adressen + + + Receiving addresses + Adressen ontvangen + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + Dit zijn uw Bitcoinadressen om betalingen mee te verzenden. Check altijd het bedrag en het ontvangende adres voordat u uw myriadcoins verzendt. + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Dit zijn uw Bitcoin-adressen waarmee u kunt betalen. We raden u aan om een nieuw ontvangstadres voor elke transactie te gebruiken. - Copy &Label Kopiëer &Label - &Edit &Bewerk - - Send &Coins - Verstuur &Coins + Export Address List + Exporteer adreslijst - - Export Address Book Data - Exporteer Gegevens van het Adresboek - - - Comma separated file (*.csv) Kommagescheiden bestand (*.csv) - - Error exporting - Fout bij exporteren + Exporting Failed + Export Mislukt - - Could not write to file %1. - Kon niet schrijven naar bestand %1. + There was an error trying to save the address list to %1. + Een fout is opgetreden tijdens het opslaan van deze adreslijst naar %1. AddressTableModel - Label Label - Address Adres - (no label) (geen label) @@ -182,140 +153,106 @@ Dit product bevat software ontwikkeld door het OpenSSL Project voor gebruik in d AskPassphraseDialog - Passphrase Dialog Wachtwoorddialoogscherm - Enter passphrase Voer wachtwoord in - New passphrase Nieuw wachtwoord - Repeat new passphrase - Herhaal wachtwoord + Herhaal nieuw wachtwoord - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Vul een nieuw wachtwoord in voor uw portemonnee. <br/> Gebruik een wachtwoord van <b>10 of meer lukrake karakters</b>, of <b> acht of meer woorden</b> . + Vul een nieuw wachtwoord in voor uw portemonnee. <br/> Gebruik een wachtwoord van <b>10 of meer lukrake karakters</b>, of <b>acht of meer woorden</b> . - Encrypt wallet Versleutel portemonnee - This operation needs your wallet passphrase to unlock the wallet. Deze operatie vereist uw portemonneewachtwoord om de portemonnee te openen. - Unlock wallet Open portemonnee - This operation needs your wallet passphrase to decrypt the wallet. Deze operatie vereist uw portemonneewachtwoord om de portemonnee te ontsleutelen - Decrypt wallet Ontsleutel portemonnee - Change passphrase Wijzig wachtwoord - Enter the old and new passphrase to the wallet. Vul uw oude en nieuwe portemonneewachtwoord in. - Confirm wallet encryption Bevestig versleuteling van de portemonnee - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! Waarschuwing: Als u uw portemonnee versleutelt en uw wachtwoord vergeet, zult u <b>AL UW MYRIADCOINS VERLIEZEN</b>! - Are you sure you wish to encrypt your wallet? Weet u zeker dat u uw portemonnee wilt versleutelen? - 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. 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. - - Warning: The Caps Lock key is on! Waarschuwing: De Caps-Lock-toets staat aan! - - Wallet encrypted Portemonnee versleuteld - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. Myriadcoin zal nu afsluiten om het versleutelingsproces te voltooien. Onthoud dat het versleutelen van uw portemonnee u niet volledig kan beschermen: Malware kan uw computer infecteren en uw myriadcoins stelen. - - - - Wallet encryption failed Portemonneeversleuteling mislukt - Wallet encryption failed due to an internal error. Your wallet was not encrypted. Portemonneeversleuteling mislukt door een interne fout. Uw portemonnee is niet versleuteld. - - The supplied passphrases do not match. De opgegeven wachtwoorden komen niet overeen - Wallet unlock failed Portemonnee openen mislukt - - - The passphrase entered for the wallet decryption was incorrect. Het opgegeven wachtwoord voor de portemonnee-ontsleuteling is niet correct. - Wallet decryption failed Portemonnee-ontsleuteling mislukt - Wallet passphrase was successfully changed. Portemonneewachtwoord is met succes gewijzigd. @@ -323,319 +260,286 @@ Dit product bevat software ontwikkeld door het OpenSSL Project voor gebruik in d BitcoinGUI - Sign &message... &Onderteken bericht... - Synchronizing with network... Synchroniseren met netwerk... - &Overview &Overzicht - + Node + Node + + Show general overview of wallet Toon algemeen overzicht van de portemonnee - &Transactions &Transacties - Browse transaction history Blader door transactieverleden - - Edit the list of stored addresses and labels - Bewerk de lijst van opgeslagen adressen en labels - - - - Show the list of addresses for receiving payments - Toon lijst van adressen om betalingen mee te ontvangen - - - E&xit &Afsluiten - Quit application Programma afsluiten - Show information about Myriadcoin Laat informatie zien over Myriadcoin - About &Qt Over &Qt - Show information about Qt Toon informatie over Qt - &Options... O&pties... - &Encrypt Wallet... &Versleutel Portemonnee... - &Backup Wallet... &Backup Portemonnee... - &Change Passphrase... &Wijzig Wachtwoord - + &Sending addresses... + &Adressen aan het versturen. + + + &Receiving addresses... + &Adressen aan het ontvangen... + + + Open &URI... + Open &URI... + + Importing blocks from disk... Blokken aan het importeren vanaf harde schijf... - Reindexing blocks on disk... Bezig met herindexeren van blokken op harde schijf... - Send coins to a Myriadcoin address - Verstuur munten naar een Myriadcoinadres + Verstuur munten naar een Bitcoinadres - Modify configuration options for Myriadcoin Wijzig instellingen van Myriadcoin - Backup wallet to another location - &Backup portemonnee naar een andere locatie + Backup portemonnee naar een andere locatie - Change the passphrase used for wallet encryption Wijzig het wachtwoord voor uw portemonneversleuteling - &Debug window &Debugscherm - Open debugging and diagnostic console Open debugging en diagnostische console - &Verify message... &Verifiëer bericht... - - Myriadcoin Myriadcoin - Wallet Portemonnee - &Send &Versturen - &Receive &Ontvangen - - &Addresses - &Adressen - - - - &About Myriadcoin - &Over Myriadcoin - - - &Show / Hide &Toon / Verberg - Show or hide the main Window Toon of verberg het hoofdvenster - Encrypt the private keys that belong to your wallet Versleutel de geheime sleutels die bij uw portemonnee horen - Sign messages with your Myriadcoin addresses to prove you own them - Onderteken berichten met uw Myriadcoinadressen om te bewijzen dat u deze adressen bezit + Onderteken berichten met uw Bitcoinadressen om te bewijzen dat u deze adressen bezit - Verify messages to ensure they were signed with specified Myriadcoin addresses - Verifiëer handtekeningen om zeker te zijn dat de berichten zijn ondertekend met de gespecificeerde Myriadcoinadressen + Verifiëer handtekeningen om zeker te zijn dat de berichten zijn ondertekend met de gespecificeerde Bitcoinadressen - &File &Bestand - &Settings &Instellingen - &Help &Hulp - Tabs toolbar Tab-werkbalk - - [testnet] [testnetwerk] - + Myriadcoin Core + Myriadcoin Kern + + + Request payments (generates QR codes and myriadcoin: URIs) + Vraag betaling aan (genereert QR codes en myriadcoin: URIs) + + + &About Myriadcoin Core + &Over Myriadcoin Core + + + Show the list of used sending addresses and labels + Toon de lijst met gebruikt verzend adressen en labels + + + Show the list of used receiving addresses and labels + Toon de lijst met gebruikte ontvangst adressen en labels + + + Open a myriadcoin: URI or payment request + Open een myriadcoin: URI of betalingsverzoek + + + &Command-line options + &Commandoregel-opties + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + Toon het Myriadcoin Core hulpbericht om een lijst te krijgen met mogelijke Myriadcoin commandoregelopties + + Myriadcoin client Myriadcoin client - %n active connection(s) to Myriadcoin network - %n actieve connectie naar Myriadcoinnetwerk%n actieve connecties naar Myriadcoinnetwerk + %n actieve connectie naar Bitcoinnetwerk%n actieve connecties naar Bitcoinnetwerk - No block source available... Geen bron van blokken beschikbaar... - Processed %1 of %2 (estimated) blocks of transaction history. %1 van %2 (geschat) blokken van de transactiehistorie verwerkt. - Processed %1 blocks of transaction history. %1 blokken van transactiehistorie verwerkt. - %n hour(s) %n uur%n uur - %n day(s) %n dag%n dagen - %n week(s) %n week%n weken - + %1 and %2 + %1 en %2 + + + %n year(s) + %n jaar%n jaar + + %1 behind %1 achter - Last received block was generated %1 ago. Laatst ontvangen blok was %1 geleden gegenereerd. - Transactions after this will not yet be visible. Transacties na dit moment zullen nu nog niet zichtbaar zijn. - Error Fout - Warning Waarschuwing - Information Informatie - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - Deze transactie overschrijdt de groottelimiet. Om de transactie alsnog te versturen kunt u transactiekosten betalen van %1. Deze transactiekosten gaan naar de nodes die uw transactie verwerken en het helpt op deze manier bij het ondersteunen van het Myriadcoinnetwerk. Wilt u de transactiekosten betalen? - - - Up to date Bijgewerkt - Catching up... Aan het bijwerken... - - Confirm transaction fee - Bevestig transactiekosten - - - Sent transaction Verzonden transactie - Incoming transaction Binnenkomende transactie - Date: %1 Amount: %2 Type: %3 @@ -648,29 +552,14 @@ Adres: %4 - - - URI handling - URI-behandeling - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - URI kan niet worden geïnterpreteerd. Dit kan komen door een ongeldig Myriadcoinadres of misvormde URI-parameters. - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> Portemonnee is <b>versleuteld</b> en momenteel <b>geopend</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> Portemonnee is <b>versleuteld</b> en momenteel <b>gesloten</b> - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. Er is een fatale fout opgetreden. Myriadcoin kan niet meer veilig doorgaan en zal nu afgesloten worden. @@ -678,329 +567,647 @@ Adres: %4 ClientModel - Network Alert Netwerkwaarschuwing + + CoinControlDialog + + Coin Control Address Selection + Coin controle adres selectie + + + Quantity: + Kwantiteit + + + Bytes: + Bytes: + + + Amount: + Bedrag: + + + Priority: + Prioriteit: + + + Fee: + Vergoeding: + + + Low Output: + Lage uitvoer: + + + After Fee: + Na vergoeding: + + + Change: + Wisselgeld: + + + (un)select all + (de)selecteer alles + + + Tree mode + Boom modus + + + List mode + Lijst modus + + + Amount + Bedrag + + + Address + Adres + + + Date + Datum + + + Confirmations + Bevestigingen + + + Confirmed + Bevestigd + + + Priority + Prioriteit + + + Copy address + Kopieer adres + + + Copy label + Kopieer label + + + Copy amount + Kopieer bedrag + + + Copy transaction ID + Kopieer transactie-ID + + + Lock unspent + Blokeer niet gebruikte + + + Unlock unspent + Deblokkeer ongebruikte + + + Copy quantity + Kopieer aantal + + + Copy fee + Kopieer vergoeding + + + Copy after fee + Kopieer na vergoeding + + + Copy bytes + Kopieer bytes + + + Copy priority + Kopieer prioriteit + + + Copy low output + Kopieer lage uitvoer + + + Copy change + Kopieer wisselgeld + + + highest + hoogste + + + higher + hoger + + + high + hoog + + + medium-high + gemiddeld hoog + + + medium + gemiddeld + + + low-medium + laag gemiddeld + + + low + laag + + + lower + lager + + + lowest + laagste + + + (%1 locked) + (%1 geblokeerd) + + + none + geen + + + Dust + Stof + + + yes + ja + + + no + nee + + + This label turns red, if the transaction size is greater than 1000 bytes. + Dit label wordt rood, als de transactie grootte meer dan 1000 bytes is. + + + This means a fee of at least %1 per kB is required. + Dit betekent dat een vergoeding van minimaal %1 per kB nodig is. + + + Can vary +/- 1 byte per input. + Kan +/- byte per invoer variëren. + + + Transactions with higher priority are more likely to get included into a block. + Transacties met een hogere prioriteit zullen eerder in een block gezet worden. + + + This label turns red, if the priority is smaller than "medium". + Als dit label rood is, is de prioriteit minder dan "medium". + + + This label turns red, if any recipient receives an amount smaller than %1. + Dit label wordt rood, als een ontvanger een bedrag van minder dan %1 gekregen heeft. + + + This means a fee of at least %1 is required. + Dit betekend dat een minimale vergoeding van %1 nodig is. + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + Bedragen beneden 0.546 keer het minimum relais vergoeding, worden als stof aangemerkt. + + + This label turns red, if the change is smaller than %1. + Dit label wordt rood, als de wijziging is kleiner dan %1. + + + (no label) + (geen label) + + + change from %1 (%2) + wijzig van %1 (%2) + + + (change) + (wijzig) + + EditAddressDialog - Edit Address Bewerk Adres - &Label &Label - - The label associated with this address book entry - Het label dat geassocieerd is met dit adres + The label associated with this address list entry + Het label dat bij dit adres item hoort + + + The address associated with this address list entry. This can only be modified for sending addresses. + Het adres dat bij dit adres item hoort. Dit kan alleen bewerkt worden voor verstuur adressen. - &Address &Adres - - The address associated with this address book entry. This can only be modified for sending addresses. - Het adres dat geassocieerd is met deze inschrijving in het adresboek. Dit kan alleen worden veranderd voor zend-adressen. - - - New receiving address Nieuw ontvangstadres - New sending address Nieuw adres om naar te verzenden - Edit receiving address Bewerk ontvangstadres - Edit sending address Bewerk adres om naar te verzenden - The entered address "%1" is already in the address book. Het opgegeven adres "%1" bestaat al in uw adresboek. - The entered address "%1" is not a valid Myriadcoin address. - Het opgegeven adres "%1" is een ongeldig Myriadcoinadres + Het opgegeven adres "%1" is een ongeldig Bitcoinadres - Could not unlock wallet. Kon de portemonnee niet openen. - New key generation failed. Genereren nieuwe sleutel mislukt. - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt - Myriadcoin-Qt + A new data directory will be created. + Een nieuwe gegevensmap wordt aangemaakt. + + + name + naam + + + Directory already exists. Add %1 if you intend to create a new directory here. + Map bestaat al. Voeg %1 toe als u van plan bent hier een nieuwe map aan te maken. + + + Path already exists, and is not a directory. + Communicatiepad bestaat al, en is geen folder. + + + Cannot create data directory here. + Kan hier geen gegevensmap aanmaken. + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + Myriadcoin Core - Commandoregel-opties + + + Myriadcoin Core + Myriadcoin Kern - version versie - Usage: Gebruik: - command-line options commandoregel-opties - UI options gebruikersinterfaceopties - Set language, for example "de_DE" (default: system locale) Stel taal in, bijvoorbeeld ''de_DE" (standaard: systeeminstellingen) - Start minimized Geminimaliseerd starten - + Set SSL root certificates for payment request (default: -system-) + Zet SSL root certificaten voor betalingsverzoek (standaard: -sytem-) + + Show splash screen on startup (default: 1) Laat laadscherm zien bij het opstarten. (standaard: 1) + + Choose data directory on startup (default: 0) + Kies de gegevensmap tijdens het opstarten (standaard: 0) + + + + Intro + + Welcome + Welkom + + + Welcome to Myriadcoin Core. + Welkom bij Myriadcoin Core + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + Omdat dit de eerste keer is dat het programma gestart is, kunt u nu kiezen waar Myriadcoin Core de data moet opslaan. + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + Myriadcoin Core zal een kopie van de Myriadcoin blokketen downloaden en opslaan. Tenminste %1 GB aan data wordt opgeslagen in deze map en het zal groeien in de tijd. De portemonnee wordt ook in deze map opgeslagen. + + + Use the default data directory + Gebruik de standaard gegevensmap + + + Use a custom data directory: + Gebruik een persoonlijke gegevensmap: + + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" can not be created. + Fout: Opgegeven gegevensmap "%1" kan niet aangemaakt worden. + + + Error + Fout + + + GB of free space available + GB aan vrije opslagruimte beschikbaar + + + (of %1GB needed) + (van %1GB benodigd) + + + + OpenURIDialog + + Open URI + Open URI + + + Open payment request from URI or file + Open betalingsverzoek via URI of bestand + + + URI: + URI: + + + Select payment request file + Selecteer betalingsverzoek bestand + + + Select payment request file to open + Selecteer betalingsverzoek bestand om te openen + OptionsDialog - Options Opties - &Main &Algemeen - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Optionele transactiekosten per kB. Transactiekosten helpen ervoor te zorgen dat uw transacties snel verwerkt worden. De meeste transacties zijn 1kB. - Pay transaction &fee Betaal &transactiekosten - Automatically start Myriadcoin after logging in to the system. Start Myriadcoin automatisch na inloggen in het systeem - &Start Myriadcoin on system login - Start &Myriadcoin bij het inloggen in het systeem + Start &Bitcoin bij het inloggen in het systeem + + + Size of &database cache + Grootte van de &database cache + + + MB + MB + + + Number of script &verification threads + Aantal threads voor &scriptverificatie + + + Connect to the Myriadcoin network through a SOCKS proxy. + Verbind met het Bitcoin-netwerk via een SOCKS-proxy. + + + &Connect through SOCKS proxy (default proxy): + &Verbind via een SOCKS-proxy (standaardproxy): + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + IP-adres van de proxy (bijv. IPv4: 127.0.0.1 / IPv6: ::1) + + + 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 |. + 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 |. + + + Third party transaction URLs + Transactie-URLs van derde partijen + + + Active command-line options that override above options: + Actieve commandoregelopties die bovenstaande opties overschrijven: - Reset all client options to default. Reset alle clientopties naar de standaardinstellingen. - &Reset Options &Reset Opties - &Network &Netwerk - - Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. - Open de Myriadcoin-poort automatisch op de router. Dit werkt alleen als de router UPnP ondersteunt en het aanstaat. + (0 = auto, <0 = leave that many cores free) + (0 = auto, <0 = laat dit aantal kernen vrij) + + + W&allet + W&allet + + + Expert + Expert + + + Enable coin &control features + Coin &Control activeren + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + Indien het uitgeven van onbevestigd wisselgeld uitgeschakeld wordt dan kan het wisselgeld van een transactie niet worden gebruikt totdat de transactie ten minste een bevestiging heeft. Dit heeft ook invloed op de manier waarop uw saldo wordt berekend. + + + &Spend unconfirmed change + &Spendeer onbevestigd wisselgeld + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. + Open de Bitcoin-poort automatisch op de router. Dit werkt alleen als de router UPnP ondersteunt en het aanstaat. - Map port using &UPnP Portmapping via &UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - Verbind met het Myriadcoin-netwerk via een SOCKS-proxy (bijv. wanneer u via Tor wilt verbinden) - - - - &Connect through SOCKS proxy: - &Verbind via een SOCKS-proxy - - - Proxy &IP: Proxy &IP: - - IP address of the proxy (e.g. 127.0.0.1) - IP-adres van de proxy (bijv. 127.0.0.1) - - - &Port: &Poort: - Port of the proxy (e.g. 9050) Poort van de proxy (bijv. 9050) - SOCKS &Version: SOCKS-&Versie: - SOCKS version of the proxy (e.g. 5) SOCKS-versie van de proxy (bijv. 5) - &Window &Scherm - Show only a tray icon after minimizing the window. Laat alleen een systeemvak-icoon zien wanneer het venster geminimaliseerd is - &Minimize to the tray instead of the taskbar &Minimaliseer naar het systeemvak in plaats van de taakbalk - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. Minimaliseer het venster in de plaats van de applicatie af te sluiten als het venster gesloten wordt. Wanneer deze optie aan staan, kan de applicatie alleen worden afgesloten door Afsluiten te kiezen in het menu. - M&inimize on close Minimaliseer bij sluiten van het &venster - &Display &Interface - User Interface &language: Taal &Gebruikersinterface: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. De taal van de gebruikersinterface kan hier ingesteld worden. Deze instelling zal pas van kracht worden nadat Myriadcoin herstart wordt. - &Unit to show amounts in: &Eenheid om bedrag in te tonen: - Choose the default subdivision unit to show in the interface and when sending coins. Kies de standaard onderverdelingseenheid om weer te geven in uw programma, en voor het versturen van munten - Whether to show Myriadcoin addresses in the transaction list or not. - Of Myriadcoinadressen getoond worden in de transactielijst + Of Bitcoinadressen getoond worden in de transactielijst - &Display addresses in transaction list Toon a&dressen in de transactielijst - + Whether to show coin control features or not. + Munt controle functies weergeven of niet. + + &OK &OK - &Cancel Ann&uleren - - &Apply - &Toepassen - - - default standaard - + none + geen + + Confirm options reset Bevestig reset opties - - Some settings may require a client restart to take effect. - Sommige instellingen vereisen het herstarten van de client voordat ze in werking treden. + Client restart required to activate changes. + Herstart van de client is vereist om veranderingen door te voeren. - - Do you want to proceed? - Wilt u doorgaan? + Client will be shutdown, do you want to proceed? + De client zal worden afgesloten, wilt u doorgaan? - - - Warning - Waarschuwing + This change would require a client restart. + Om dit aan te passen moet de client opnieuw gestart worden. - - - This setting will take effect after restarting Myriadcoin. - Deze instelling zal pas van kracht worden na het herstarten van Myriadcoin. - - - The supplied proxy address is invalid. Het opgegeven proxyadres is ongeldig. @@ -1008,59 +1215,54 @@ Adres: %4 OverviewPage - Form Vorm - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. - De weergegeven informatie kan verouderd zijn. Uw portemonnee synchroniseert automaticsh met het Myriadcoinnetwerk nadat een verbinding is gelegd, maar dit proces is nog niet voltooid. + De weergegeven informatie kan verouderd zijn. Uw portemonnee synchroniseert automaticsh met het Bitcoinnetwerk nadat een verbinding is gelegd, maar dit proces is nog niet voltooid. - - Balance: - Saldo: - - - - Unconfirmed: - Onbevestigd: - - - Wallet Portemonnee - + Available: + Beschikbaar: + + + Your current spendable balance + Uw beschikbare saldo + + + Pending: + Afwachtend: + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + De som van de transacties die nog bevestigd moeten worden, en nog niet meetellen in uw beschikbare saldo + + Immature: Immatuur: - Mined balance that has not yet matured Gedolven saldo dat nog niet tot wasdom is gekomen - + Total: + Totaal: + + + Your current total balance + Uw totale saldo + + <b>Recent transactions</b> <b>Recente transacties</b> - - Your current balance - Uw huidige saldo - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - Totaal van de transacties die nog moeten worden bevestigd en nog niet zijn meegeteld in uw huidige saldo - - - - out of sync niet gesynchroniseerd @@ -1068,579 +1270,856 @@ Adres: %4 PaymentServer - + URI handling + URI-behandeling + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + URI kan niet worden geïnterpreteerd. Dit kan komen door een ongeldig Bitcoinadres of misvormde URI-parameters. + + + Requested payment amount of %1 is too small (considered dust). + Het gevraagde betalingsbedrag van %1 is te weinig (beschouwd als stof). + + + Payment request error + Fout bij betalingsverzoek + + Cannot start myriadcoin: click-to-pay handler Kan myriadcoin niet starten: click-to-pay handler + + Net manager warning + Netmanager waarschuwing + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + Uw actieve proxy ondersteunt geen SOCKS5, dewelke vereist is voor betalingsverzoeken via proxy. + + + Payment request fetch URL is invalid: %1 + URL om betalingsverzoek te verkrijgen is ongeldig: %1 + + + Payment request file handling + Betalingsverzoek bestandsafhandeling + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + Betalingsverzoek-bestand kan niet gelezen of verwerkt worden! Dit kan veroorzaakt worden door een ongeldig betalingsverzoek-bestand. + + + Unverified payment requests to custom payment scripts are unsupported. + Niet-geverifieerde betalingsverzoeken naar aangepaste betaling scripts worden niet ondersteund. + + + Refund from %1 + Restitutie van %1 + + + Error communicating with %1: %2 + Fout bij communiceren met %1: %2 + + + Payment request can not be parsed or processed! + Betalingsverzoek kan niet juist worden ontleed of verwerkt! + + + Bad response from server %1 + Ongeldige respons van server %1 + + + Payment acknowledged + Betaling bevestigd + + + Network request error + Netwerkfout bij verzoek + - QRCodeDialog + QObject - - QR Code Dialog - QR-codescherm + Myriadcoin + Myriadcoin - - Request Payment - Vraag betaling aan + Error: Specified data directory "%1" does not exist. + Fout: Opgegeven gegevensmap "%1" bestaat niet. - - Amount: - Bedrag: + Error: Cannot parse configuration file: %1. Only use key=value syntax. + Fout: Kan configuratiebestand niet parsen: %1. Gebruik enkel de key=value syntax. - - Label: - Label: + Error: Invalid combination of -regtest and -testnet. + Fout: Ongeldige combinatie van -regtest en -testnet - - Message: - Bericht: + Myriadcoin Core didn't yet exit safely... + Myriadcoin Core is nog niet veilig uitgeschakeld... - - &Save As... - &Opslaan Als... + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Vul een Bitcoinadres in (bijv. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + &Afbeelding opslaan... - - Error encoding URI into QR Code. - Fout tijdens encoderen URI in QR-code + &Copy Image + &Afbeelding kopiëren - - The entered amount is invalid, please check. - Het opgegeven bedrag is ongeldig, controleer het s.v.p. - - - - Resulting URI too long, try to reduce the text for label / message. - Resulterende URI te lang, probeer de tekst korter te maken voor het label/bericht. - - - Save QR Code Sla QR-code op - - PNG Images (*.png) - PNG-Afbeeldingen (*.png) + PNG Image (*.png) + PNG afbeelding (*.png) RPCConsole - Client name Clientnaam - - - - - - - - - - N/A N.v.t. - Client version Clientversie - &Information &Informatie - + Debug window + Debug venster + + + General + Algemeen + + Using OpenSSL version Gebruikt OpenSSL versie - Startup time Opstarttijd - Network Netwerk - + Name + Naam + + Number of connections Aantal connecties - - On testnet - Op testnet - - - Block chain Blokketen - Current number of blocks Huidig aantal blokken - Estimated total blocks Geschat totaal aantal blokken - Last block time Tijd laatste blok - &Open &Open - - Command-line options - Commandoregel-opties - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - Toon het MyriadcoinQt-hulpbericht voor een lijst met mogelijke Myriadcoin commandoregel-opties. - - - - &Show - &Toon - - - &Console &Console - + &Network Traffic + &Netwerkverkeer + + + &Clear + &Wissen + + + Totals + Totalen + + + In: + In; + + + Out: + Uit: + + Build date Bouwdatum - - Myriadcoin - Debug window - Myriadcoin-debugscherm - - - - Myriadcoin Core - Myriadcoin Kern - - - Debug log file Debug-logbestand - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. - Open het Myriadcoindebug-logbestand van de huidige datamap. Dit kan een aantal seconden duren voor grote logbestanden. + Open het Bitcoindebug-logbestand van de huidige datamap. Dit kan een aantal seconden duren voor grote logbestanden. - Clear console Maak console leeg - Welcome to the Myriadcoin RPC console. Welkom bij de Myriadcoin RPC-console. - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. Gebruik de pijltjestoetsen om door de geschiedenis te navigeren, en <b>Ctrl-L</b> om het scherm leeg te maken. - Type <b>help</b> for an overview of available commands. Typ <b>help</b> voor een overzicht van de beschikbare commando's. + + %1 B + %1 B + + + %1 KB + %1 Kb + + + %1 MB + %1 MB + + + %1 GB + %1 Gb + + + %1 m + %1 m + + + %1 h + %1 uur + + + %1 h %2 m + %1 h %2 m + + + + ReceiveCoinsDialog + + &Amount: + &Bedrag + + + &Label: + &Label: + + + &Message: + &Bericht + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + Gebruik een van de eerder gebruikte ontvangstadressen opnieuw. Het opnieuw gebruiken van adressen heeft beveiliging- en privacy problemen. Gebruik dit niet, behalve als er eerder een betalingsverzoek opnieuw gegenereerd is. + + + R&euse an existing receiving address (not recommended) + H&ergebruik en bestaand ontvangstadres (niet aanbevolen) + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + Een optioneel bericht om bij te voegen aan het betalingsverzoek, dewelke zal getoond worden wanneer het verzoek is geopend. Opermerking: Het bericht zal niet worden verzonden met de betaling over het Myriadcoin netwerk. + + + An optional label to associate with the new receiving address. + Een optioneel label om te associëren met het nieuwe ontvangende adres + + + Use this form to request payments. All fields are <b>optional</b>. + Gebruik dit formulier om te verzoeken tot betaling. Alle velden zijn <b>optioneel</b>. + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + Een optioneel te verzoeken bedrag. Laat dit leeg, of nul, om geen specifiek bedrag aan te vragen. + + + Clear all fields of the form. + Wis alle velden op het formulier. + + + Clear + Wissen + + + Requested payments history + Geschiedenis van de betalingsverzoeken + + + &Request payment + &Betalingsverzoek + + + Show the selected request (does the same as double clicking an entry) + Toon het geselecteerde verzoek (doet hetzelfde als dubbelklikken) + + + Show + Toon + + + Remove the selected entries from the list + Verwijder de geselecteerde items van de lijst + + + Remove + Verwijder + + + Copy label + Kopieer label + + + Copy message + Kopieer bericht + + + Copy amount + Kopieer bedrag + + + + ReceiveRequestDialog + + QR Code + QR-code + + + Copy &URI + Kopieer &URI + + + Copy &Address + Kopieer &adres + + + &Save Image... + &Sla afbeelding op... + + + Request payment to %1 + Betalingsverzoek tot %1 + + + Payment information + Betalingsinformatie + + + URI + URI + + + Address + Adres + + + Amount + Bedrag + + + Label + Label + + + Message + Bericht + + + Resulting URI too long, try to reduce the text for label / message. + Resulterende URI te lang, probeer de tekst korter te maken voor het label/bericht. + + + Error encoding URI into QR Code. + Fout tijdens encoderen URI in QR-code + + + + RecentRequestsTableModel + + Date + Datum + + + Label + Label + + + Message + Bericht + + + Amount + Bedrag + + + (no label) + (geen label) + + + (no message) + (geen bericht) + + + (no amount) + (geen bedrag) + SendCoinsDialog - - - - - - - - Send Coins Verstuur munten - + Coin Control Features + Coin controle opties + + + Inputs... + Invoer... + + + automatically selected + automatisch geselecteerd + + + Insufficient funds! + Onvoldoende fonds! + + + Quantity: + Kwantiteit + + + Bytes: + Bytes: + + + Amount: + Bedrag: + + + Priority: + Prioriteit: + + + Fee: + Vergoeding: + + + Low Output: + Lage uitvoer: + + + After Fee: + Na vergoeding: + + + Change: + Wisselgeld: + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + Als dit is geactiveerd, maar het wisselgeldadres is leeg of ongeldig, dan wordt het wisselgeld verzonden naar een nieuw gegenereerd adres. + + + Custom change address + Aangepast wisselgeldadres + + Send to multiple recipients at once Verstuur aan verschillende ontvangers ineens - Add &Recipient Voeg &Ontvanger Toe - - Remove all transaction fields - Verwijder alle transactievelden + Clear all fields of the form. + Wis alle velden van het formulier. - Clear &All Verwijder &Alles - Balance: Saldo: - - 123.456 BTC - 123.456 BTC - - - Confirm the send action Bevestig de verstuuractie - S&end &Verstuur - - <b>%1</b> to %2 (%3) - <b>%1</b> aan %2 (%3) - - - Confirm send coins Bevestig versturen munten - - Are you sure you want to send %1? - Weet u zeker dat u %1 wil versturen? + %1 to %2 + %1 tot %2 - - and - en + Copy quantity + Kopieer aantal + + + Copy amount + Kopieer bedrag + + + Copy fee + Kopieer vergoeding + + + Copy after fee + Kopieer na vergoeding + + + Copy bytes + Kopieer bytes + + + Copy priority + Kopieer prioriteit + + + Copy low output + Kopieer lage uitvoer + + + Copy change + Kopieer wijziging + + + Total Amount %1 (= %2) + Totaal bedrag %1 (= %2) + + + or + of - The recipient address is not valid, please recheck. Het ontvangstadres is niet geldig, controleer uw invoer. - The amount to pay must be larger than 0. Het ingevoerde bedrag moet groter zijn dan 0. - The amount exceeds your balance. Bedrag is hoger dan uw huidige saldo - The total exceeds your balance when the %1 transaction fee is included. Totaal overschrijdt uw huidige saldo wanneer de %1 transactiekosten worden meegerekend - Duplicate address found, can only send to each address once per send operation. Dubbel adres gevonden, u kunt slechts eenmaal naar een bepaald adres verzenden per verstuurtransactie - - Error: Transaction creation failed! - Fout: Aanmaak transactie mislukt! + Transaction creation failed! + Transactie creatie niet gelukt! - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Fout: De transactie was afgewezen. Dit kan gebeuren als u eerder uitgegeven munten opnieuw wilt versturen, zoals wanneer u een kopie van uw portemonneebestand (wallet.dat) heeft gebruikt en in de kopie deze munten zijn uitgegeven, maar in de huidige portemonnee deze nog niet als zodanig zijn gemarkeerd. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + De transactie was afgewezen. Dit kan gebeuren als u eerder uitgegeven munten opnieuw wilt versturen, zoals wanneer u een kopie van uw wallet.dat heeft gebruikt en in de kopie deze munten zijn gemarkeerd als uitgegeven, maar in de huidige nog niet. + + + Warning: Invalid Myriadcoin address + Waarschuwing: Ongeldig Myriadcoin adres + + + (no label) + (geen label) + + + Warning: Unknown change address + Waarschuwing: Onbekend wisselgeldadres + + + Are you sure you want to send? + Weet u zeker dat u wilt verzenden? + + + added as transaction fee + toegevoegd als transactiekosten + + + Payment request expired + Betalingsverzoek verlopen + + + Invalid payment address %1 + Ongeldig betalingsadres %1 SendCoinsEntry - - Form - Vorm - - - A&mount: Bedra&g: - Pay &To: Betaal &Aan: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Het adres waaraan u wilt betalen (bijv. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book Vul een label in voor dit adres om het toe te voegen aan uw adresboek - &Label: &Label: - - Choose address from address book - Kies adres uit adresboek + Choose previously used address + Kies een eerder gebruikt adres + + + This is a normal payment. + Dit is een normale betaling. - Alt+A Alt+A - Paste address from clipboard Plak adres vanuit klembord - Alt+P Alt+P - - Remove this recipient - Verwijder deze ontvanger + Remove this entry + Verwijder deze toevoeging - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Vul een Myriadcoinadres in (bijv. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + Bericht: + + + This is a verified payment request. + Dit is een geverifieerd betalingsverzoek. + + + Enter a label for this address to add it to the list of used addresses + Vul een label voor dit adres in om het aan de lijst met gebruikte adressen toe te voegen + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + Een bericht dat werd toegevoegd aan de myriadcoin: URI dewelke wordt opgeslagen met de transactie ter referentie. Opmerking: Dit bericht zal niet worden verzonden over het Myriadcoin netwerk. + + + This is an unverified payment request. + Dit is een ongeverifieerd betalingsverzoek. + + + Pay To: + Betaal Aan: + + + Memo: + Memo: + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + Myriadcoin Core is aan het afsluiten... + + + Do not shut down the computer until this window disappears. + Sluit de computer niet af totdat dit venster verdwenen is. SignVerifyMessageDialog - Signatures - Sign / Verify a Message Handtekeningen - Onderteken een bericht / Verifiëer een handtekening - &Sign Message O&nderteken Bericht - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. U kunt berichten ondertekenen met een van uw adressen om te bewijzen dat u dit adres bezit. Pas op dat u geen onduidelijke dingen ondertekent, want phishingaanvallen zouden u kunnen misleiden om zo uw identiteit te stelen. Onderteken alleen berichten waarmee u het volledig eens bent. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Het adres om het bericht mee te ondertekenen (Vb.: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L). - - - Choose an address from the address book - Kies een adres uit het adresboek + Choose previously used address + Kies een eerder gebruikt adres - - Alt+A Alt+A - Paste address from clipboard Plak adres vanuit klembord - Alt+P Alt+P - Enter the message you want to sign here Typ hier het bericht dat u wilt ondertekenen - Signature Handtekening - Copy the current signature to the system clipboard Kopieer de huidige handtekening naar het systeemklembord - Sign the message to prove you own this Myriadcoin address - Onderteken een bericht om te bewijzen dat u een bepaald Myriadcoinadres bezit + Onderteken een bericht om te bewijzen dat u een bepaald Bitcoinadres bezit - Sign &Message Onderteken &Bericht - Reset all sign message fields Verwijder alles in de invulvelden - - Clear &All Verwijder &Alles - &Verify Message &Verifiëer Bericht - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Voer het ondertekenende adres, bericht en handtekening hieronder in (let erop dat u nieuwe regels, spaties en tabs juist overneemt) om de handtekening te verifiëren. Let erop dat u niet meer uit het bericht interpreteert dan er daadwerkelijk staat, om te voorkomen dat u wordt misleid in een man-in-the-middle-aanval. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Het adres waarmee bet bericht was ondertekend (Vb.: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L). - Verify the message to ensure it was signed with the specified Myriadcoin address - Controleer een bericht om te verifiëren dat het gespecificeerde Myriadcoinadres het bericht heeft ondertekend. + Controleer een bericht om te verifiëren dat het gespecificeerde Bitcoinadres het bericht heeft ondertekend. - Verify &Message Verifiëer &Bericht - Reset all verify message fields Verwijder alles in de invulvelden - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Vul een Myriadcoinadres in (bijv. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Vul een Bitcoinadres in (bijv. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature Klik "Onderteken Bericht" om de handtekening te genereren - - Enter Myriadcoin signature - Voer Myriadcoin-handtekening in - - - - The entered address is invalid. Het opgegeven adres is ongeldig. - - - - Please check the address and try again. Controleer s.v.p. het adres en probeer het opnieuw. - - The entered address does not refer to a key. Het opgegeven adres verwijst niet naar een sleutel. - Wallet unlock was cancelled. Portemonnee-ontsleuteling is geannuleerd - Private key for the entered address is not available. Geheime sleutel voor het ingevoerde adres is niet beschikbaar. - Message signing failed. Ondertekenen van het bericht is mislukt. - Message signed. Bericht ondertekend. - The signature could not be decoded. De handtekening kon niet worden gedecodeerd. - - Please check the signature and try again. Controleer s.v.p. de handtekening en probeer het opnieuw. - The signature did not match the message digest. De handtekening hoort niet bij het bericht. - Message verification failed. Berichtverificatie mislukt. - Message verified. Bericht correct geverifiëerd. @@ -1648,186 +2127,160 @@ Adres: %4 SplashScreen - - The Myriadcoin developers - De Myriadcoin-ontwikkelaars + Myriadcoin Core + Myriadcoin Kern + + + The Myriadcoin Core developers + De Myriadcoin Core ontwikkelaars - [testnet] [testnetwerk] + + TrafficGraphWidget + + KB/s + KB/s + + TransactionDesc - Open until %1 Openen totdat %1 - + conflicted + conflicterend + + %1/offline %1/offline - %1/unconfirmed %1/onbevestigd - %1 confirmations %1 bevestigingen - Status Status - , broadcast through %n node(s) , uitgezonden naar %n node, uitgezonden naar %n nodes - Date Datum - Source Bron - Generated Gegenereerd - - From Van - - - To Aan - - own address eigen adres - label label - - - - - Credit Credit - matures in %n more block(s) komt tot wasdom na %n nieuw blokkomt tot wasdom na %n nieuwe blokken - not accepted niet geaccepteerd - - - - Debit Debet - Transaction fee Transactiekosten - Net amount Netto bedrag - Message Bericht - Comment Opmerking - Transaction ID Transactie-ID: - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Gegeneerde munten moeten 120 blokken wachten voordat ze tot wasdom komen en kunnen worden uitgegeven. Uw net gegenereerde blok is uitgezonden aan het netwerk om te worden toegevoegd aan de blokketen. Als het niet wordt geaccepteerd in de keten, zal het blok als "niet geaccepteerd" worden aangemerkt en kan het niet worden uitgegeven. Dit kan soms gebeuren als een andere node net iets sneller een blok heeft gegenereerd; een paar seconden voor het uwe. + Merchant + Handelaar + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Gegenereerde munten moeten %1 blokken rijpen voordat ze kunnen worden besteed. Toen dit blok gegenereerd werd, werd het uitgezonden naar het netwerk om aan de blokketen toegevoegd te worden. Als het niet lukt om in de keten toegevoegd te worden, zal de status te veranderen naar "niet geaccepteerd" en het zal deze niet besteedbaar zijn. Dit kan soms gebeuren als een ander knooppunt een blok genereert binnen een paar seconden na die van u. - Debug information Debug-informatie - Transaction Transactie - Inputs Inputs - Amount Bedrag - true waar - false onwaar - , has not been successfully broadcast yet , is nog niet met succes uitgezonden - Open for %n more block(s) Open voor nog %n blokOpen voor nog %n blokken - unknown onbekend @@ -1835,12 +2288,10 @@ Adres: %4 TransactionDescDialog - Transaction details Transactiedetails - This pane shows a detailed description of the transaction Dit venster laat een uitgebreide beschrijving van de transactie zien @@ -1848,117 +2299,102 @@ Adres: %4 TransactionTableModel - Date Datum - Type Type - Address Adres - Amount Bedrag + + Immature (%1 confirmations, will be available after %2) + immatuur (%1 bevestigingen, zal beschikbaar zijn na %2) + - Open for %n more block(s) Open voor nog %n blokOpen voor nog %n blokken - Open until %1 Open tot %1 - - Offline (%1 confirmations) - Niet verbonden (%1 bevestigingen) - - - - Unconfirmed (%1 of %2 confirmations) - Onbevestigd (%1 van %2 bevestigd) - - - Confirmed (%1 confirmations) Bevestigd (%1 bevestigingen) - - - Mined balance will be available when it matures in %n more block(s) - Gedolven saldo zal beschikbaar komen als het tot wasdom komt na %n blokGedolven saldo zal beschikbaar komen als het tot wasdom komt na %n blokken - - This block was not received by any other nodes and will probably not be accepted! Dit blok is niet ontvangen bij andere nodes en zal waarschijnlijk niet worden geaccepteerd! - Generated but not accepted Gegenereerd maar niet geaccepteerd - + Offline + Niet verbonden + + + Unconfirmed + Onbevestigd + + + Confirming (%1 of %2 recommended confirmations) + Bevestigen (%1 van %2 aanbevolen bevestigingen) + + + Conflicted + Conflicterend + + Received with Ontvangen met - Received from Ontvangen van - Sent to Verzonden aan - Payment to yourself Betaling aan uzelf - Mined Gedolven - (n/a) (nvt) - Transaction status. Hover over this field to show number of confirmations. Transactiestatus. Houd de muiscursor boven dit veld om het aantal bevestigingen te laten zien. - Date and time that the transaction was received. Datum en tijd waarop deze transactie is ontvangen. - Type of transaction. Type transactie. - Destination address of transaction. Ontvangend adres van transactie. - Amount removed from or added to balance. Bedrag verwijderd van of toegevoegd aan saldo @@ -1966,176 +2402,156 @@ Adres: %4 TransactionView - - All Alles - Today Vandaag - This week Deze week - This month Deze maand - Last month Vorige maand - This year Dit jaar - Range... Bereik... - Received with Ontvangen met - Sent to Verzonden aan - To yourself Aan uzelf - Mined Gedolven - Other Anders - Enter address or label to search Vul adres of label in om te zoeken - Min amount Min. bedrag - Copy address Kopieer adres - Copy label Kopieer label - Copy amount Kopieer bedrag - Copy transaction ID Kopieer transactie-ID - Edit label Bewerk label - Show transaction details Toon transactiedetails - - Export Transaction Data - Exporteer transactiegegevens + Export Transaction History + Exporteer Transactieverleden + + + Exporting Failed + Export Mislukt + + + There was an error trying to save the transaction history to %1. + Er is een fout opgetreden bij het opslaan van het transactieverleden naar %1. + + + Exporting Successful + Export Succesvol + + + The transaction history was successfully saved to %1. + Het transactieverleden was succesvol bewaard in %1. - Comma separated file (*.csv) Kommagescheiden bestand (*.csv) - Confirmed Bevestigd - Date Datum - Type Type - Label Label - Address Adres - Amount Bedrag - ID ID - - Error exporting - Fout bij exporteren - - - - Could not write to file %1. - Kon niet schrijven naar bestand %1. - - - Range: Bereik: - to naar + + WalletFrame + + No wallet has been loaded. + Portemonnee werd niet geladen. + + WalletModel - Send Coins Verstuur munten @@ -2143,162 +2559,123 @@ Adres: %4 WalletView - &Export &Exporteer - Export the data in the current tab to a file Exporteer de data in de huidige tab naar een bestand - Backup Wallet - Portomonnee backuppen + Portemonnee backuppen - Wallet Data (*.dat) Portemonnee-data (*.dat) - Backup Failed Backup Mislukt - - There was an error trying to save the wallet data to the new location. - Er is een fout opgetreden bij het wegschrijven van de portemonnee-data naar de nieuwe locatie. + There was an error trying to save the wallet data to %1. + Er is een fout opgetreden bij het wegschrijven van de portemonnee-data naar %1. + + + The wallet data was successfully saved to %1. + De portemonneedata is succesvol opgeslagen in %1. - Backup Successful Backup Succesvol - - - The wallet data was successfully saved to the new location. - De portemonneedata is succesvol opgeslagen op de nieuwe locatie. - bitcoin-core - - Myriadcoin version - Myriadcoinversie - - - Usage: Gebruik: - - Send command to -server or myriadcoind - Stuur commando naar -server of myriadcoind - - - List commands Lijst van commando's - Get help for a command Toon hulp voor een commando - Options: Opties: - Specify configuration file (default: myriadcoin.conf) Specificeer configuratiebestand (standaard: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) Specificeer pid-bestand (standaard: myriadcoind.pid) - Specify data directory Stel datamap in - - Set database cache size in megabytes (default: 25) - Stel databankcachegrootte in in megabytes (standaard: 25) - - - Listen for connections on <port> (default: 8333 or testnet: 18333) Luister voor verbindingen op <poort> (standaard: 8333 of testnet: 18333) - Maintain at most <n> connections to peers (default: 125) Onderhoud maximaal <n> verbindingen naar peers (standaard: 125) - Connect to a node to retrieve peer addresses, and disconnect Verbind naar een node om adressen van anderen op te halen, en verbreek vervolgens de verbinding - Specify your own public address Specificeer uw eigen publieke adres - Threshold for disconnecting misbehaving peers (default: 100) Drempel om verbinding te verbreken naar zich misdragende peers (standaard: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Aantal seconden dat zich misdragende peers niet opnieuw mogen verbinden (standaard: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s Er is een fout opgetreden tijdens het instellen van de inkomende RPC-poort %u op IPv4: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) Wacht op JSON-RPC-connecties op poort <port> (standaard: 8332 of testnet: 18332) - Accept command line and JSON-RPC commands Aanvaard commandoregel- en JSON-RPC-commando's - + Myriadcoin Core RPC client version + Myriadcoin Core RPC-client versie + + Run in the background as a daemon and accept commands Draai in de achtergrond als daemon en aanvaard commando's - Use the test network Gebruik het testnetwerk - Accept connections from outside (default: 1 if no -proxy or -connect) Accepteer verbindingen van buitenaf (standaard: 1 als geen -proxy of -connect is opgegeven) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2318,621 +2695,695 @@ rpcpassword=%s De gebruikersnaam en wachtwoord mogen niet hetzelfde zijn. Als het bestand niet bestaat, make hem dan aan met leesrechten voor enkel de eigenaar. Het is ook aan te bevelen "alertnotify" in te stellen zodat u op de hoogte gesteld wordt van problemen; -for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com +bijvoorbeeld: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + Aanvaardbare cijfers (standaard: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s Er is een fout opgetreden tijdens het instellen van de inkomende RPC-poort %u op IPv6, terugval naar IPv4: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 Bind aan opgegeven adres en luister er altijd op. Gebruik [host]:port notatie voor IPv6 - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. - Kan geen lock op de datamap %s verkrijgen. Myriadcoin draait vermoedelijk reeds. + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + Doorlopend tarief-limiet op gratis transacties toepassen tot <n>*1000 bytes per minuut (standaard: 15) + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + Schakel regressietest-modus in, die een speciale blokketen gebruikt waarin blokken instantaan opgelost kunnen worden. Dit is bedoeld voor regressietestsoftware en app-ontwikkeling. + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + Schakel regressietest-modus in, die een speciale blokketen gebruikt waarin blokken onmiddellijk opgelost kunnen worden. + + + Error: Listening for incoming connections failed (listen returned error %d) + Fout: Luisteren naar inkomende connecties mislukt (listen geeft fout terug %d) - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. Fout: De transactie was afgewezen! Dit kan gebeuren als sommige munten in uw portemonnee al eerder uitgegeven zijn, zoals wanneer u een kopie van uw wallet.dat heeft gebruikt en in de kopie deze munten zijn uitgegeven, maar in deze portemonnee die munten nog niet als zodanig zijn gemarkeerd. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! Fout: Deze transactie vereist transactiekosten van tenminste %s, vanwege zijn grootte, complexiteit, of het gebruik van onlangs ontvangen munten! - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - Voer opdracht uit zodra een relevante melding ontvangen is (%s wordt in cmd vervangen door het bericht) - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Voer opdracht uit zodra een portemonneetransactie verandert (%s in cmd wordt vervangen door TxID) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - Stel maximumgrootte in in bytes voor hoge-prioriteits-/lage-transactiekosten-transacties (standaard: 27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + Toeslagen kleiner dan dit worden beschouwd als geen vergoeding (voor transactie aanmaak) (standaard: + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + Leeg database-activiteit uit de geheugenpool naar schijf log elke <n> megabytes (standaard: 100) + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + Hoe grondig de blokverificatie van -checkblocks is (0-4, standaard: 3) + + + In this mode -genproclimit controls how many blocks are generated immediately. + In deze modus, -genproclimit controleert hoeveel blokken er onmiddellijk worden gegenereerd. + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + Kies het aantal script verificatie processen (%u tot %d, 0 = auto, <0 = laat dit aantal kernen vrij, standaard: %d) + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + Kies de processorlimiet wanneer generation is aan (-1 = ongelimiteerd, standaard: -1) - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications Dit is een pre-release testversie - gebruik op eigen risico! Gebruik deze niet voor het delven van munten of handelsdoeleinden - + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + Niet in staat om %s te verbinden op deze computer. Myriadcoin Core draait waarschijnlijk al. + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + Gebruik een aparte SOCKS5 proxy om 'Tor hidden services' te bereiken (standaard: hetzelfde als -proxy) + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Waarschuwing: -paytxfee is zeer hoog ingesteld. Dit zijn de transactiekosten die u betaalt bij het versturen van een transactie. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - Waarschuwing: Weergegeven transacties zijn mogelijk niet correct! Mogelijk dient u te upgraden, of andere nodes dienen te upgraden. - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. Waarschuwing: Controleer dat de datum en tijd op uw computer correct zijn ingesteld. Als uw klok fout staat zal Myriadcoin niet correct werken. - + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + Waarschuwing: Het lijkt erop dat het netwerk geen consensus kan vinden! Sommige delvers lijken problemen te ondervinden. + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + Waarschuwing: Het lijkt erop dat we geen consensus kunnen vinden met onze peers! Mogelijk dient u te upgraden, of andere nodes moeten wellicht upgraden. + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Waarschuwing: Fout bij het lezen van wallet.dat! Alle sleutels zijn in goede orde uitgelezen, maar transactiedata of adresboeklemma's zouden kunnen ontbreken of fouten bevatten. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. Waarschuwing: wallet.dat is corrupt, data is veiliggesteld! Originele wallet.dat is opgeslagen als wallet.{tijdstip}.bak in %s; als uw balans of transacties incorrect zijn dient u een backup terug te zetten. - + (default: 1) + (standaard: 1) + + + (default: wallet.dat) + (standaard: wallet.dat) + + + <category> can be: + <category> kan zijn: + + Attempt to recover private keys from a corrupt wallet.dat Poog de geheime sleutels uit een corrupt wallet.dat bestand terug te halen - + Myriadcoin Core Daemon + Myriadcoin Core Daemon + + Block creation options: Blokcreatie-opties: - + Clear list of wallet transactions (diagnostic tool; implies -rescan) + Leeg lijst met wallet transacties (diagnostisch instrument; impliceert -rescan) + + Connect only to the specified node(s) Verbind alleen naar de gespecificeerde node(s) - + Connect through SOCKS proxy + Verbind via een SOCKS-proxy + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + Verbinden met JSON-RPC op <poort> (standaard: 8332 of testnet: 18332) + + + Connection options: + Verbindingsopties: + + Corrupted block database detected Corrupte blokkendatabase gedetecteerd - + Debugging/Testing options: + Foutopsporing/Testopties: + + + Disable safemode, override a real safe mode event (default: 0) + Veilige modus uitschakelen, hef een echte veilige modus gebeurtenis uit (default: 0) + + Discover own IP address (default: 1 when listening and no -externalip) Ontdek eigen IP-adres (standaard: 1 als er wordt geluisterd en geen -externalip is opgegeven) - + Do not load the wallet and disable wallet RPC calls + Laad de wallet niet en schakel wallet RPC oproepen uit + + Do you want to rebuild the block database now? Wilt u de blokkendatabase nu herbouwen? - Error initializing block database Fout bij intialisatie blokkendatabase - Error initializing wallet database environment %s! Probleem met initializeren van de database-omgeving %s! - Error loading block database Fout bij het laden van blokkendatabase - Error opening block database Fout bij openen blokkendatabase - Error: Disk space is low! Fout: Weinig vrije diskruimte! - Error: Wallet locked, unable to create transaction! Fout: Portemonnee vergrendeld, aanmaak transactie niet mogelijk! - Error: system error: Fout: Systeemfout: - Failed to listen on any port. Use -listen=0 if you want this. Mislukt om op welke poort dan ook te luisteren. Gebruik -listen=0 as u dit wilt. - Failed to read block info Lezen van blokinformatie mislukt - Failed to read block Lezen van blok mislukt - Failed to sync block index Synchroniseren van blokindex mislukt - Failed to write block index Schrijven van blokindex mislukt - Failed to write block info Schrijven van blokinformatie mislukt - Failed to write block Schrijven van blok mislukt - Failed to write file info Schrijven van bestandsinformatie mislukt - Failed to write to coin database Schrijven naar coindatabase mislukt - Failed to write transaction index Schrijven van transactieindex mislukt - Failed to write undo data Schrijven van undo-data mislukt - + Fee per kB to add to transactions you send + Transactiekosten per kB om toe te voegen aan transacties die u verzendt + + + Fees smaller than this are considered zero fee (for relaying) (default: + Toeslagen kleiner dan dit worden beschouwd als geen vergoeding (voor relaying) (standaard: + + Find peers using DNS lookup (default: 1 unless -connect) Vind andere nodes d.m.v. DNS-naslag (standaard: 1 tenzij -connect) - + Force safe mode (default: 0) + Forceer veilige modus (default: 0) + + Generate coins (default: 0) Genereer munten (standaard: 0) - How many blocks to check at startup (default: 288, 0 = all) Aantal te checken blokken bij het opstarten (standaard: 288, 0 = allemaal) - - How thorough the block verification is (0-4, default: 3) - Hoe grondig de blokverificatie is (0-4, standaard: 3) + If <category> is not supplied, output all debugging information. + Als er geen <category> is opgegeven, laat dan alle debugging informatie zien. + + + Importing... + Importeren... + + + Incorrect or no genesis block found. Wrong datadir for network? + Incorrect of geen genesis-blok gevonden. Verkeerde datamap voor het netwerk? + + + Invalid -onion address: '%s' + Ongeldig -onion adres '%s' - Not enough file descriptors available. Niet genoeg file descriptors beschikbaar. - - Rebuild block chain index from current blk000??.dat files - Blokketen opnieuw opbouwen van huidige blk000??.dat-bestanden + Prepend debug output with timestamp (default: 1) + Prepend debug output met tijdstempel (standaard: 1) + + + RPC client options: + RPC client opties: + + + Rebuild block chain index from current blk000??.dat files + Blokketen opnieuw opbouwen met behulp van huidige blk000??.dat-bestanden + + + Select SOCKS version for -proxy (4 or 5, default: 5) + Selecteer de versie van de SOCKS-proxy om te gebruiken (4 of 5, standaard is 5) + + + Set database cache size in megabytes (%d to %d, default: %d) + Zet database cache grootte in megabytes (%d tot %d, standaard: %d) + + + Set maximum block size in bytes (default: %d) + Stel maximum blokgrootte in in bytes (standaard: %d) - Set the number of threads to service RPC calls (default: 4) Stel het aantal threads in om RPC-aanvragen mee te bedienen (standaard: 4) - + Specify wallet file (within data directory) + Specificeer het portemonnee bestand (vanuit de gegevensmap) + + + Spend unconfirmed change when sending transactions (default: 1) + Spendeer onbevestigd wisselgeld wanneer transacties verstuurd worden (standaard: 1) + + + This is intended for regression testing tools and app development. + Dit is bedoeld voor regressie test toepassingen en applicatie onwikkeling. + + + Usage (deprecated, use myriadcoin-cli): + Gebruik (vervangen; gebruik Bitcoin-cli); + + Verifying blocks... Blokken aan het controleren... - Verifying wallet... - Portomonnee aan het controleren... + Portemonnee aan het controleren... + + + Wait for RPC server to start + Wacht voor RPC server om te starten + + + Wallet %s resides outside data directory %s + Portemonnee %s bevindt zich buiten de gegevensmap %s + + + Wallet options: + Portemonnee instellingen: + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + Waarschuwing: Afgekeurd argument -debugnet genegeerd, use -debug=net + + + You need to rebuild the database using -reindex to change -txindex + Om -txindex te kunnen veranderen dient u de database opnieuw te bouwen met gebruik van -reindex. - Imports blocks from external blk000??.dat file Importeert blokken van extern blk000??.dat bestand - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) - Stel het aantal threads voor scriptverificatie in (max 16, 0 = auto, <0 = laat zoveel cores vrij, standaard: 0) + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + Kan geen lock verkrijgen op gegevensmap %s. Myriadcoin Core draait waarschijnlijk al. + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + Voer commando uit zodra een waarschuwing is ontvangen of wanneer we een erg lange fork detecteren (%s in commando wordt vervangen door bericht) + + + Output debugging information (default: 0, supplying <category> is optional) + Output extra debugginginformatie (standaard: 0, het leveren van <category> is optioneel) + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + Stel maximumgrootte in bytes in voor hoge-prioriteits-/lage-transactiekosten-transacties (standaard: %d) - Information Informatie - - Invalid -tor address: '%s' - Ongeldig -tor adres: '%s' - - - Invalid amount for -minrelaytxfee=<amount>: '%s' Ongeldig bedrag voor -minrelaytxfee=<bedrag>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' Ongeldig bedrag voor -mintxfee=<bedrag>: '%s' - + Limit size of signature cache to <n> entries (default: 50000) + Limiteer grootte van de handtekening cache tot <n> entries (default: 50000) + + + Log transaction priority and fee per kB when mining blocks (default: 0) + Log transactieprioriteit en vergoeding per kB bij mijnen blocks (standaard: 0) + + Maintain a full transaction index (default: 0) Onderhoud een volledige transactieindex (standaard: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) Maximum per-connectie ontvangstbuffer, <n>*1000 bytes (standaard: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) Maximum per-connectie zendbuffer, <n>*1000 bytes (standaard: 1000) - Only accept block chain matching built-in checkpoints (default: 1) Accepteer alleen blokketen die overeenkomt met de ingebouwde checkpoints (standaard: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Verbind alleen naar nodes in netwerk <net> (IPv4, IPv6 of Tor) - - Output extra debugging information. Implies all other -debug* options - Output extra debugginginformatie. Impliceert alle andere -debug* opties + Print block on startup, if found in block index + Toon block bij opstarten, wanneer gevonden in block index - - Output extra network debugging information - Output extra netwerk-debugginginformatie + Print block tree on startup (default: 0) + Toon block structuur bij opstarten (default: 0) - - Prepend debug output with timestamp - Voorzie de debuggingsuitvoer van een tijdsaanduiding + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + RPC SSL opties: (zie de Myriadcoin Wiki voor SSL installatie-instructies) + + + RPC server options: + RPC server opties: + + + Randomly drop 1 of every <n> network messages + Laat willekeurig 1 elke <n> netwerkberichten vallen + + + Randomly fuzz 1 of every <n> network messages + Fuzz willekeurig 1 van elke <n> netwerkberichten + + + Run a thread to flush wallet periodically (default: 1) + Draai een proces om de wallet periodiek te flushen (default: 1) - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) SSL-opties: (zie de Myriadcoin wiki voor SSL-instructies) - - Select the version of socks proxy to use (4-5, default: 5) - Selecteer de versie van de SOCKS-proxy om te gebruiken (4 of 5, standaard is 5) + Send command to Myriadcoin Core + Stuur commando naar Myriadcoin Core - Send trace/debug info to console instead of debug.log file Stuur trace/debug-info naar de console in plaats van het debug.log bestand - - Send trace/debug info to debugger - Stuur trace/debug-info naar debugger - - - - Set maximum block size in bytes (default: 250000) - Stel maximum blokgrootte in in bytes (standaard: 250000) - - - Set minimum block size in bytes (default: 0) Stel minimum blokgrootte in in bytes (standaard: 0) - + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + Plaatst de DB_PRIVATE vlag in de wallet db omgeving (default: 1) + + + Show all debugging options (usage: --help -help-debug) + Toon alle foutopsporingsopties (gebruik: --help -help-debug) + + + Show benchmark information (default: 0) + Toon benchmark-informatie (default: 0) + + Shrink debug.log file on client startup (default: 1 when no -debug) Verklein debug.log-bestand bij het opstarten van de client (standaard: 1 als geen -debug) - Signing transaction failed Ondertekenen van transactie mislukt - Specify connection timeout in milliseconds (default: 5000) Specificeer de time-outtijd in milliseconden (standaard: 5000) - + Start Myriadcoin Core Daemon + Start Myriadcoin Core Daemon + + System error: Systeemfout: - Transaction amount too small Transactiebedrag te klein - Transaction amounts must be positive Transactiebedragen moeten positief zijn - Transaction too large Transactie te groot - Use UPnP to map the listening port (default: 0) Gebruik UPnP om de luisterende poort te mappen (standaard: 0) - Use UPnP to map the listening port (default: 1 when listening) Gebruik UPnP om de luisterende poort te mappen (standaard: 1 als er wordt geluisterd) - - Use proxy to reach tor hidden services (default: same as -proxy) - Gebruik proxy om 'tor hidden services' te bereiken (standaard: hetzelfde als -proxy) - - - Username for JSON-RPC connections Gebruikersnaam voor JSON-RPC-verbindingen - Warning Waarschuwing - Warning: This version is obsolete, upgrade required! Waarschuwing: Deze versie is verouderd, een upgrade is vereist! - - You need to rebuild the databases using -reindex to change -txindex - U moet de databases herbouwen met behulp van -reindex om -txindex te kunnen veranderen + Zapping all transactions from wallet... + Bezig met het zappen van alle transacties van de portemonnee... + + + on startup + bij opstarten + + + version + versie - wallet.dat corrupt, salvage failed wallet.dat corrupt, veiligstellen mislukt - Password for JSON-RPC connections Wachtwoord voor JSON-RPC-verbindingen - Allow JSON-RPC connections from specified IP address Sta JSON-RPC verbindingen van opgegeven IP-adres toe - Send commands to node running on <ip> (default: 127.0.0.1) Verstuur commando's naar proces dat op <ip> draait (standaard: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) Voer commando uit zodra het beste blok verandert (%s in cmd wordt vervangen door blockhash) - Upgrade wallet to latest format Vernieuw portemonnee naar nieuwste versie - Set key pool size to <n> (default: 100) Stel sleutelpoelgrootte in op <n> (standaard: 100) - Rescan the block chain for missing wallet transactions Doorzoek de blokketen op ontbrekende portemonnee-transacties - Use OpenSSL (https) for JSON-RPC connections Gebruik OpenSSL (https) voor JSON-RPC-verbindingen - Server certificate file (default: server.cert) Certificaat-bestand voor server (standaard: server.cert) - Server private key (default: server.pem) Geheime sleutel voor server (standaard: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Aanvaardbare ciphers (standaard: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - This help message Dit helpbericht - Unable to bind to %s on this computer (bind returned error %d, %s) Niet in staat om aan %s te binden op deze computer (bind gaf error %d, %s) - - Connect through socks proxy - Verbind via een socks-proxy - - - Allow DNS lookups for -addnode, -seednode and -connect Sta DNS-naslag toe voor -addnode, -seednode en -connect - Loading addresses... Adressen aan het laden... - Error loading wallet.dat: Wallet corrupted Fout bij laden wallet.dat: Portemonnee corrupt - Error loading wallet.dat: Wallet requires newer version of Myriadcoin Fout bij laden wallet.dat: Portemonnee vereist een nieuwere versie van Myriadcoin - Wallet needed to be rewritten: restart Myriadcoin to complete Portemonnee moest herschreven worden: Herstart Myriadcoin om te voltooien - Error loading wallet.dat Fout bij laden wallet.dat - Invalid -proxy address: '%s' Ongeldig -proxy adres: '%s' - Unknown network specified in -onlynet: '%s' Onbekend netwerk gespecificeerd in -onlynet: '%s' - Unknown -socks proxy version requested: %i Onbekende -socks proxyversie aangegeven: %i - Cannot resolve -bind address: '%s' Kan -bind adres niet herleiden: '%s' - Cannot resolve -externalip address: '%s' Kan -externlip adres niet herleiden: '%s' - Invalid amount for -paytxfee=<amount>: '%s' Ongeldig bedrag voor -paytxfee=<bedrag>: '%s' - Invalid amount Ongeldig bedrag - Insufficient funds Ontoereikend saldo - Loading block index... Blokindex aan het laden... - Add a node to connect to and attempt to keep the connection open Voeg een node om naar te verbinden toe en probeer de verbinding open te houden - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - Niet in staat om aan %s te binden op deze computer. Myriadcoin draait vermoedelijk reeds. - - - - Fee per KB to add to transactions you send - Kosten per KB om aan transacties toe te voegen die u verstuurt - - - Loading wallet... Portemonnee aan het laden... - Cannot downgrade wallet Kan portemonnee niet downgraden - Cannot write default address Kan standaardadres niet schrijven - Rescanning... Blokketen aan het doorzoeken... - Done loading Klaar met laden - To use the %s option Om de %s optie te gebruiken - Error Fout - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. U dient rpcpassword=<wachtwoord> in te stellen in het configuratiebestand: %s -Als het bestand niet bestaat, maak het dan aan, met een alleen-lezen-permissie. +Als het bestand niet bestaat, maak het dan aan, met een alleen-lezen permissie. \ No newline at end of file diff --git a/src/qt/locale/bitcoin_pam.ts b/src/qt/locale/bitcoin_pam.ts new file mode 100644 index 00000000..e85dbc74 --- /dev/null +++ b/src/qt/locale/bitcoin_pam.ts @@ -0,0 +1,3377 @@ + + + AboutDialog + + About Myriadcoin Core + + + + <b>Myriadcoin Core</b> version + + + + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. + +Metung ya ining experimental software. +Me-distribute ya lalam na ning lisensya na ning MIT/X11 software, lawan ye ing makayabeng file COPYING o http://www.opensource.org/licenses/mit-license.php. +Ing produktung ini atin yang makayabeng software a gewa dareng OpenSSL Project para gamit king OpenSSL Toolkit(http://www.openssl.org/) at cryptographic software a sinulat ng Eric Young (eay@cryptsoft.com) at UPnp software a sinulat ng Thomas Bernard. + + + Copyright + Karapatan ning Pamangopya + + + The Myriadcoin Core developers + + + + (%1-bit) + + + + + AddressBookPage + + Double-click to edit address or label + Pindutan meng makatidduang besis ban ayalilan me ing address o label + + + Create a new address + Maglalang kang bayung address + + + &New + + + + Copy the currently selected address to the system clipboard + Kopyan me ing salukuyan at makipiling address keng system clipboard + + + &Copy + + + + C&lose + + + + &Copy Address + &Kopyan ing address + + + Delete the currently selected address from the list + Ilako ya ing kasalungsungan makapiling address keng listahan + + + Export the data in the current tab to a file + + + + &Export + + + + &Delete + &Ilako + + + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + Reni reng kekang Myriadcoin address king pamagpadalang kabayaran. Lawan mulang masalese reng alaga ampo ing address na ning tumanggap bayu ka magpadalang barya. + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + + Copy &Label + Kopyan ing &Label + + + &Edit + &Alilan + + + Export Address List + + + + Comma separated file (*.csv) + Comma separated file (*.csv) + + + Exporting Failed + + + + There was an error trying to save the address list to %1. + + + + + AddressTableModel + + Label + Label + + + Address + Address + + + (no label) + (alang label) + + + + AskPassphraseDialog + + Passphrase Dialog + Dialogo ning Passphrase + + + Enter passphrase + Mamalub kang passphrase + + + New passphrase + Panibayung passphrase + + + Repeat new passphrase + Pasibayuan ya ing bayung passphrase + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Palub ye ing bayung passphrase king wallet.<br/>Maliari pu sanang gumamit kayung passphrase a maki</b> 10 or dakal pang miyayaliuang characters</b>, o ualu o dakal pang salita</b> + + + Encrypt wallet + I-encrypt ye ing wallet + + + This operation needs your wallet passphrase to unlock the wallet. + Ing operasyun a ini kailangan ne ing kekayung wallet passphrase, ban a-unlock ya ing wallet + + + Unlock wallet + Unlock ya ing wallet + + + This operation needs your wallet passphrase to decrypt the wallet. + Ing operasyun a ini kailangan ne ing kekang wallet passphrase ban a-decrypt ne ing wallet. + + + Decrypt wallet + I-decrypt ya ing wallet + + + Change passphrase + Alilan ya ing passphrase + + + Enter the old and new passphrase to the wallet. + Palub ye ing luma ampo ing bayung passphrase king wallet. + + + Confirm wallet encryption + Kumpirman ya ing wallet encryption + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! + Kapabaluan: Istung in-encrypt me ing kekang wallet at meala ya ing passphrase na, ma-<b>ALA NO NGAN RING KEKANG MYRIADCOINS</b> + + + Are you sure you wish to encrypt your wallet? + Siguradu na kang buri meng i-encrypt ing kekang wallet? + + + 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. + Mayalaga: Reng milabas a backups a gewa mu gamit ing wallet file mu dapat lamung mialilan bayung gawang encrypted wallet file. Para keng seguridad , reng milabas a backups dareng ali maka encrypt a wallet file ma-ala nala istung inumpisan mu nalang gamitan reng bayu, at me encrypt a wallet. + + + Warning: The Caps Lock key is on! + Kapabaluan: Makabuklat ya ing Caps Lock key! + + + Wallet encrypted + Me-encrypt ne ing wallet + + + Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. + Ing Myriadcoin ngeni magsara ya ban ayari ing proseso ning pamag-encrypt. Tandanan yu king pamag-encrypt wallet, ali nala aprotektan king kabuuan reng myriadcoins yu kareng malware a kasalunsungan atiu kareng computer yu. + + + Wallet encryption failed + Memali ya ing pamag-encrypt king wallet + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Memali ya ing encryption uli na ning ausan dang internal error. E ya me-encrypt ing wallet yu. + + + The supplied passphrases do not match. + E la mitutugma ring mibieng passphrase + + + Wallet unlock failed + Memali ya ing pamag-unlock king wallet + + + The passphrase entered for the wallet decryption was incorrect. + E ya istu ing passphrase a pepalub da para king wallet decryption + + + Wallet decryption failed + Me-mali ya ing pamag-decrypt king wallet + + + Wallet passphrase was successfully changed. + Mi-alilan ne ing passphrase na ning wallet. + + + + BitcoinGUI + + Sign &message... + I-sign ing &mensayi + + + Synchronizing with network... + Mag-sychronize ne king network... + + + &Overview + &Overview + + + Node + + + + Show general overview of wallet + Ipakit ing kabuuang lawe ning wallet + + + &Transactions + &Transaksion + + + Browse transaction history + Lawan ing kasalesayan ning transaksion + + + E&xit + L&umwal + + + Quit application + Tuknangan ing aplikasyon + + + Show information about Myriadcoin + Ipakit ing impormasyun tungkul king Myriadcoin + + + About &Qt + Tungkul &Qt + + + Show information about Qt + Magpakit impormasion tungkul king Qt + + + &Options... + &Pipamilian... + + + &Encrypt Wallet... + I-&Encrypt in Wallet... + + + &Backup Wallet... + I-&Backup ing Wallet... + + + &Change Passphrase... + &Alilan ing Passphrase... + + + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + + Importing blocks from disk... + + + + Reindexing blocks on disk... + + + + Send coins to a Myriadcoin address + Magpadalang barya king Myriadcoin address + + + Modify configuration options for Myriadcoin + Alilan ing pipamilian konpigurasion para keng Myriadcoin + + + Backup wallet to another location + I-backup ing wallet king aliwang lugal + + + Change the passphrase used for wallet encryption + Alilan ya ing passphrase a gagamitan para king wallet encryption + + + &Debug window + I-&Debug ing awang + + + Open debugging and diagnostic console + Ibuklat ing debugging at diagnostic console + + + &Verify message... + &Beripikan ing message... + + + Myriadcoin + Myriadcoin + + + Wallet + Wallet + + + &Send + + + + &Receive + + + + &Show / Hide + &Ipalto / Isalikut + + + Show or hide the main Window + Ipalto o isalikut ing pun a awang + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your Myriadcoin addresses to prove you own them + + + + Verify messages to ensure they were signed with specified Myriadcoin addresses + + + + &File + &File + + + &Settings + &Pamag-ayus + + + &Help + &Saup + + + Tabs toolbar + Gamit para king Tabs + + + [testnet] + [testnet] + + + Myriadcoin Core + Kapilubluban ning Myriadcoin + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + + Myriadcoin client + Myriadcoin client + + + %n active connection(s) to Myriadcoin network + %n ya ing aktibong koneksion keng Myriadcoin network%n lareng aktibong koneksion keng Myriadcoin network + + + No block source available... + + + + Processed %1 of %2 (estimated) blocks of transaction history. + Me-prosesu %1 kareng %2 (me-estima) blocks ning kasalesayan ning transaksion. + + + Processed %1 blocks of transaction history. + + + + %n hour(s) + %n oras%n oras + + + %n day(s) + %n aldo%n aldo + + + %n week(s) + %n dominggu%n dominggu + + + %1 and %2 + + + + %n year(s) + + + + %1 behind + + + + Last received block was generated %1 ago. + Ing tatauling block a metanggap, me-generate ya %1 ing milabas + + + Transactions after this will not yet be visible. + Ing transaksion kaibat na nini ali yapa magsilbing ipakit. + + + Error + Mali + + + Warning + Kapabaluan + + + Information + Impormasion + + + Up to date + Makatuki ya king aldo + + + Catching up... + Catching up... + + + Sent transaction + Mipadalang transaksion + + + Incoming transaction + Paparatang a transaksion + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + Aldo: %1 +Alaga: %2 +Type: %3 +Address: %4 + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + Maka-<b>encrypt</b> ya ing wallet at kasalukuyan yang maka-<b>unlocked</b> + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + Maka-<b>encrypt</b> ya ing wallet at kasalukuyan yang maka-<b>locked</b> + + + A fatal error occurred. Myriadcoin can no longer continue safely and will quit. + Atin kamalian a milyari. Ali ne magsilbing sumulung pa ing Myriadcoin at kailangan na ng tuknang. + + + + ClientModel + + Network Alert + Alertu ning Network + + + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + Alaga + + + Address + Address + + + Date + Kaaldauan + + + Confirmations + + + + Confirmed + Me-kumpirma + + + Priority + + + + Copy address + Kopyan ing address + + + Copy label + Kopyan ing label + + + Copy amount + Kopyan ing alaga + + + Copy transaction ID + + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + + + + Dust + + + + yes + + + + no + + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + (alang label) + + + change from %1 (%2) + + + + (change) + + + + + EditAddressDialog + + Edit Address + Alilan ing Address + + + &Label + &Label + + + The label associated with this address list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + + + + &Address + &Address + + + New receiving address + Bayung address king pamagtanggap + + + New sending address + Bayung address king pamagpadala + + + Edit receiving address + Alilan ya ing address king pamagpadala + + + Edit sending address + Alilan ya ing address king pamagpadala + + + The entered address "%1" is already in the address book. + Ing pepalub yung address "%1" ati na yu king aklat dareng address + + + The entered address "%1" is not a valid Myriadcoin address. + Ing pepalub yung address "%1" ali ya katanggap-tanggap a Myriadcoin address. + + + Could not unlock wallet. + Ali ya bisang mag-unlock ing wallet + + + New key generation failed. + Memali ya ing pamangaua king key + + + + FreespaceChecker + + A new data directory will be created. + + + + name + + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core + Kapilubluban ning Myriadcoin + + + version + bersion + + + Usage: + Pamanggamit: + + + command-line options + pipamilian command-line + + + UI options + Pipamilian ning UI + + + Set language, for example "de_DE" (default: system locale) + Mamiling Amanu, alimbawa "de_DE"(default: system locale) + + + Start minimized + Umpisan ing pamaglati + + + Set SSL root certificates for payment request (default: -system-) + + + + Show splash screen on startup (default: 1) + Ipalto ing splash screen keng umpisa (default: 1) + + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + Malaus ka + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" can not be created. + + + + Error + Mali + + + GB of free space available + + + + (of %1GB needed) + + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open + + + + + OptionsDialog + + Options + Pipamilian + + + &Main + &Pun + + + Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. + + + + Pay transaction &fee + Mamayad &bayad para king transaksion + + + Automatically start Myriadcoin after logging in to the system. + Umpisan yang antimu ing Myriadcoin kaibat mekapag-log in king sistema. + + + &Start Myriadcoin on system login + &Umpisan ya ing Myriadcoin king pamag-log-in na ning sistema. + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + + Reset all client options to default. + + + + &Reset Options + + + + &Network + &Network + + + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. + Ibuklat yang antimanu ing Myriadcoin client port king router. Gagana yamu ini istung ing router mu susuporta yang UPnP at magsilbi ya. + + + Map port using &UPnP + Mapa ng ning port gamit ing &UPnP + + + Proxy &IP: + Proxy &IP: + + + &Port: + &Port: + + + Port of the proxy (e.g. 9050) + Port na ning proxy(e.g. 9050) + + + SOCKS &Version: + &Bersion na ning SOCKS + + + SOCKS version of the proxy (e.g. 5) + Bersion a SOCKS ning proxy (e.g 5) + + + &Window + &Awang + + + Show only a tray icon after minimizing the window. + Ipakit mu ing tray icon kaibat meng pelatian ing awang. + + + &Minimize to the tray instead of the taskbar + &Latian ya ing tray kesa king taskbar + + + Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. + Palatian namu kesa king iluwal ya ing aplikasion istung makasara ya ing awang. Istung ing pipamilian a ini atiu king "magsilbi", ing aplikasion misara yamu kaibat meng pinili ing "Tuknangan" king menu. + + + M&inimize on close + P&alatian istung isara + + + &Display + &Ipalto + + + User Interface &language: + Amanu na ning user interface: + + + The user interface language can be set here. This setting will take effect after restarting Myriadcoin. + Ing amanu na ning user interface maliari yang i-ayus o ilage keni. Ing ayus a ini magsilbi yamu istung pesibayuan meng pasibayu ing Myriadcoin. + + + &Unit to show amounts in: + Ing &Unit a ipakit king alaga ning: + + + Choose the default subdivision unit to show in the interface and when sending coins. + Pilinan ing default subdivision unit a ipalto o ipakit king interface at istung magpadala kang barya. + + + Whether to show Myriadcoin addresses in the transaction list or not. + Ipakit man ing Myriadcoin address king listahan naning transaksion o ali. + + + &Display addresses in transaction list + &Ipakit ing address king listahan naning transaksion + + + Whether to show coin control features or not. + + + + &OK + &OK + + + &Cancel + I-&Cancel + + + default + default + + + none + + + + Confirm options reset + + + + Client restart required to activate changes. + + + + Client will be shutdown, do you want to proceed? + + + + This change would require a client restart. + + + + The supplied proxy address is invalid. + Ing milageng proxy address eya katanggap-tanggap. + + + + OverviewPage + + Form + Form + + + The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. + Ing makaltong impormasion mapalyaring luma ne. Ing kekang wallet otomatiku yang mag-synchronize keng Myriadcoin network istung mekakonekta ne king network, oneng ing prosesung ini ali ya pa kumpletu. + + + Wallet + Wallet + + + Available: + + + + Your current spendable balance + Ing kekang kasalungsungan balanse a malyari mung gastusan + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + Ing kabuuan dareng transaksion a kasalungsungan ali pa me-kumpirma, at kasalungsungan ali pa mebilang kareng kekang balanseng malyari mung gastusan + + + Immature: + Immature: + + + Mined balance that has not yet matured + Reng me-minang balanse a epa meg-matured + + + Total: + Kabuuan: + + + Your current total balance + Ing kekang kasalungsungan kabuuang balanse + + + <b>Recent transactions</b> + <b>Reng kapilan pamung transaksion</b> + + + out of sync + ali ya maka-sync + + + + PaymentServer + + URI handling + + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start myriadcoin: click-to-pay handler + + + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + + + + Network request error + + + + + QObject + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" does not exist. + + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + + + + Error: Invalid combination of -regtest and -testnet. + + + + Myriadcoin Core didn't yet exit safely... + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Magpalub kang Myriadcoin address(e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + + + + &Copy Image + + + + Save QR Code + + + + PNG Image (*.png) + + + + + RPCConsole + + Client name + Lagyu ning kliente + + + N/A + N/A + + + Client version + Bersion ning Cliente + + + &Information + &Impormasion + + + Debug window + + + + General + + + + Using OpenSSL version + Gagamit bersion na ning OpenSSL + + + Startup time + Oras ning umpisa + + + Network + Network + + + Name + + + + Number of connections + Bilang dareng koneksion + + + Block chain + Block chain + + + Current number of blocks + Kasalungsungan bilang dareng blocks + + + Estimated total blocks + Estima kareng kabuuan dareng blocks + + + Last block time + Tatauling oras na ning block + + + &Open + &Ibuklat + + + &Console + &Console + + + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + + Build date + Kaaldauan ning pamaglalang + + + Debug log file + Debug log file + + + Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. + Ibuklat ing Myriadcoin debug log file menibat king kasalungsungan data directory. Magluat ya ining pilan segundu para kareng mamaragul a log files. + + + Clear console + I-Clear ing console + + + Welcome to the Myriadcoin RPC console. + Malaus kayu king Myriadcoin RPC console. + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + Gamitan me ing patas at pababang arrow para alibut me ing kasalesayan, at <b>Ctrl-L</b> ban I-clear ya ing screen. + + + Type <b>help</b> for an overview of available commands. + I-type ing <b>help</b> ban akit la reng ati at magsilbing commands. + + + %1 B + + + + %1 KB + + + + %1 MB + + + + %1 GB + + + + %1 m + + + + %1 h + + + + %1 h %2 m + + + + + ReceiveCoinsDialog + + &Amount: + + + + &Label: + &Label: + + + &Message: + + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + + + + Clear + + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + + + + Remove the selected entries from the list + + + + Remove + + + + Copy label + Kopyan ing label + + + Copy message + + + + Copy amount + Kopyan ing alaga + + + + ReceiveRequestDialog + + QR Code + + + + Copy &URI + + + + Copy &Address + + + + &Save Image... + + + + Request payment to %1 + + + + Payment information + + + + URI + + + + Address + Address + + + Amount + Alaga + + + Label + Label + + + Message + Mensayi + + + Resulting URI too long, try to reduce the text for label / message. + + + + Error encoding URI into QR Code. + + + + + RecentRequestsTableModel + + Date + Kaaldauan + + + Label + Label + + + Message + Mensayi + + + Amount + Alaga + + + (no label) + (alang label) + + + (no message) + + + + (no amount) + + + + + SendCoinsDialog + + Send Coins + Magpadalang Barya + + + Coin Control Features + + + + Inputs... + + + + automatically selected + + + + Insufficient funds! + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + + Send to multiple recipients at once + Misanang magpadala kareng alialiuang tumanggap + + + Add &Recipient + Maglage &Tumanggap + + + Clear all fields of the form. + + + + Clear &All + I-Clear &Eganagana + + + Balance: + Balanse: + + + Confirm the send action + Kumpirman ing aksion king pamagpadala + + + S&end + Ipadala + + + Confirm send coins + Kumpirman ing pamagpadalang barya + + + %1 to %2 + + + + Copy quantity + + + + Copy amount + Kopyan ing alaga + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + + + + or + + + + The recipient address is not valid, please recheck. + Ing address na ning tumanggap ali ya katanggap-tanggap, maliari pung pakilaue pasibayu. + + + The amount to pay must be larger than 0. + Ing alaga na ning bayaran dapat mung mas matas ya king 0. + + + The amount exceeds your balance. + Ing alaga mipasobra ya king kekang balanse. + + + The total exceeds your balance when the %1 transaction fee is included. + Ing kabuuan mipasobra ya king kekang balanse istung inabe ya ing %1 a bayad king transaksion + + + Duplicate address found, can only send to each address once per send operation. + Atin meakit a milupang address, maliari kamung magpadalang misan king metung a address king misan a pamagpadalang transaksion. + + + Transaction creation failed! + + + + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + + + + (no label) + (alang label) + + + Warning: Unknown change address + + + + Are you sure you want to send? + + + + added as transaction fee + + + + Payment request expired + + + + Invalid payment address %1 + + + + + SendCoinsEntry + + A&mount: + A&laga: + + + Pay &To: + Ibayad &kang: + + + The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Ing address nung nokarin ipadala ya ing kabayaran (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + Enter a label for this address to add it to your address book + Magpalub kang label para king address a ini ban a-iabe me king aklat dareng address + + + &Label: + &Label: + + + Choose previously used address + + + + This is a normal payment. + + + + Alt+A + Alt+A + + + Paste address from clipboard + Idikit ing address menibat king clipboard + + + Alt+P + Alt+P + + + Remove this entry + + + + Message: + + + + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. + + + + + SignVerifyMessageDialog + + Signatures - Sign / Verify a Message + Pirma - Pirman / I-beripika ing mensayi + + + &Sign Message + &Pirman ing Mensayi + + + You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. + Maliari kang mamirmang mensayi king kekang address bilang patune na keka ya ini. Mimingat mu king pamag-pirmang e malino uling mapalyari kang mabiktimang phishing attack a manloku keka na pirman me ing sarili mu para king karela. Only sign fully-detailed statements you agree to. + + + The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Ing address ban a -pirman ya ing mensayi kayabe ning (e.g.1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + Choose previously used address + + + + Alt+A + Alt+A + + + Paste address from clipboard + Idikit ing address menibat clipboard + + + Alt+P + Alt+P + + + Enter the message you want to sign here + Ipalub ing mensayi a buri mung pirman keni + + + Signature + Pirma + + + Copy the current signature to the system clipboard + Kopyan ing kasalungsungan pirma king system clipboard + + + Sign the message to prove you own this Myriadcoin address + Pirman ing mensayi ban patune na keka ya ining Myriadcoin address + + + Sign &Message + Pirman ing &Mensayi + + + Reset all sign message fields + Ibalik keng dati reng ngan fields keng pamamirmang mensayi + + + Clear &All + I-Clear &Eganagana + + + &Verify Message + &Beripikan ing Mensayi + + + Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. + + + + The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Ing address na ning mensayi nung nokarin me pirma ya ini (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + Verify the message to ensure it was signed with the specified Myriadcoin address + Beripikan ing mensayi ban asiguradu a me pirma ya ini gamit ing mepiling Myriadcoin address + + + Verify &Message + Beripikan ing &Mensayi + + + Reset all verify message fields + Ibalik king dati reng ngan fields na ning pamag beripikang mensayi + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Magpalub kang Myriadcoin address(e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + Click "Sign Message" to generate signature + I-click ing "Pirman ing Mensayi" ban agawa ya ing metung a pirma + + + The entered address is invalid. + Ing milub a address e ya katanggap-tanggap. + + + Please check the address and try again. + Maliaring pakilawe pasibayu ing address at pasibayuan ya iti. + + + The entered address does not refer to a key. + Ing milub a address ali ya mag-refer king metung a key. + + + Wallet unlock was cancelled. + Me-kansela ya ing pamag-unlock king wallet. + + + Private key for the entered address is not available. + Ing private key para king milub a address, ala ya. + + + Message signing failed. + Me-mali ya ing pamag-pirma king mensayi . + + + Message signed. + Me-pirman ne ing mensayi. + + + The signature could not be decoded. + Ing pirma ali ya bisang ma-decode. + + + Please check the signature and try again. + Maliaring pakilawe pasibayu ing pirma kaibat pasibayuan ya iti. + + + The signature did not match the message digest. + Ing pirma ali ya makatugma king message digest. + + + Message verification failed. + Me-mali ya ing pamag-beripika king mensayi. + + + Message verified. + Me-beripika ne ing mensayi. + + + + SplashScreen + + Myriadcoin Core + Kapilubluban ning Myriadcoin + + + The Myriadcoin Core developers + + + + [testnet] + [testnet] + + + + TrafficGraphWidget + + KB/s + + + + + TransactionDesc + + Open until %1 + Makabuklat anggang %1 + + + conflicted + + + + %1/offline + %1/offline + + + %1/unconfirmed + %1/ali me-kumpirma + + + %1 confirmations + %1 kumpirmasion + + + Status + Kabilian + + + , broadcast through %n node(s) + + + + Date + Kaaldauan + + + Source + Pikuanan + + + Generated + Megawa + + + From + Menibat + + + To + Para kang + + + own address + sariling address + + + label + label + + + Credit + Credit + + + matures in %n more block(s) + + + + not accepted + ali metanggap + + + Debit + Debit + + + Transaction fee + Bayad king Transaksion + + + Net amount + Alaga dareng eganagana + + + Message + Mensayi + + + Comment + Komentu + + + Transaction ID + ID ning Transaksion + + + Merchant + + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + Debug information + Impormasion ning Debug + + + Transaction + Transaksion + + + Inputs + + + + Amount + Alaga + + + true + tutu + + + false + e tutu + + + , has not been successfully broadcast yet + , eya matagumpeng mibalita + + + Open for %n more block(s) + + + + unknown + e miya balu + + + + TransactionDescDialog + + Transaction details + Detalye ning Transaksion + + + This pane shows a detailed description of the transaction + Ining pane a ini magpakit yang detalyadung description ning transaksion + + + + TransactionTableModel + + Date + Kaaldauan + + + Type + Klase + + + Address + Address + + + Amount + Alaga + + + Immature (%1 confirmations, will be available after %2) + + + + Open for %n more block(s) + + + + Open until %1 + Makabuklat anggang %1 + + + Confirmed (%1 confirmations) + Me-kumpirma(%1 kumpirmasion) + + + This block was not received by any other nodes and will probably not be accepted! + Ing block a ini ali de atanggap deng aliwa pang nodes ania ali ya magsilbing tanggapan + + + Generated but not accepted + Me-generate ya oneng ali ya metanggap + + + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + + Received with + Atanggap kayabe ning + + + Received from + Atanggap menibat kang + + + Sent to + Mipadala kang + + + Payment to yourself + Kabayaran keka + + + Mined + Me-mina + + + (n/a) + (n/a) + + + Transaction status. Hover over this field to show number of confirmations. + Status ning Transaksion: Itapat me babo na ning field a ini ban ipakit dala reng bilang dareng me-kumpirma na + + + Date and time that the transaction was received. + Aldo at oras nung kapilan me tanggap ya ing transaksion + + + Type of transaction. + Klase ning transaksion + + + Destination address of transaction. + Kepuntalan a address ning transaksion + + + Amount removed from or added to balance. + Alagang milako o miragdag king balanse. + + + + TransactionView + + All + Eganagana + + + Today + Aldo iti + + + This week + Paruminggung iti + + + This month + Bulan a iti + + + Last month + Milabas a bulan + + + This year + Banuang iti + + + Range... + Angganan... + + + Received with + Atanggap kayabe ning + + + Sent to + Mipadala kang + + + To yourself + Keng sarili mu + + + Mined + Me-mina + + + Other + Aliwa + + + Enter address or label to search + Magpalub kang address o label para pantunan + + + Min amount + Pekaditak a alaga + + + Copy address + Kopyan ing address + + + Copy label + Kopyan ing label + + + Copy amount + Kopyan ing alaga + + + Copy transaction ID + + + + Edit label + Alilan ing label + + + Show transaction details + Ipakit ing detalye ning transaksion + + + Export Transaction History + + + + Exporting Failed + + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + + + + The transaction history was successfully saved to %1. + + + + Comma separated file (*.csv) + Comma separated file (*.csv) + + + Confirmed + Me-kumpirma + + + Date + Kaaldauan + + + Type + Klase + + + Label + Label + + + Address + Address + + + Amount + Alaga + + + ID + ID + + + Range: + Angga: + + + to + para kang + + + + WalletFrame + + No wallet has been loaded. + + + + + WalletModel + + Send Coins + Magpadalang Barya + + + + WalletView + + &Export + + + + Export the data in the current tab to a file + + + + Backup Wallet + + + + Wallet Data (*.dat) + + + + Backup Failed + + + + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. + + + + Backup Successful + + + + + bitcoin-core + + Usage: + Pamanggamit: + + + List commands + Listahan dareng commands + + + Get help for a command + Maniauad saup para kareng command + + + Options: + Pipamilian: + + + Specify configuration file (default: myriadcoin.conf) + Pilinan ing configuration file(default: myriadcoin.conf) + + + Specify pid file (default: myriadcoind.pid) + Pilinan ing pid file(default: myriadcoind.pid) + + + Specify data directory + Pilinan ing data directory + + + Listen for connections on <port> (default: 8333 or testnet: 18333) + Makiramdam king koneksion king <port>(default: 8333 o testnet: 18333) + + + Maintain at most <n> connections to peers (default: 125) + Mag-maintain peka <n> koneksion keng peers (default: 125) + + + Connect to a node to retrieve peer addresses, and disconnect + Kumunekta king note ban ayakua mula reng peer address, at mako king panga konekta + + + Specify your own public address + Sabyan me ing kekang pampublikong address + + + Threshold for disconnecting misbehaving peers (default: 100) + Threshold for disconnecting misbehaving peers (default: 100) + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + Atin kamalian a milyari kabang ayusan ya ing RPC port %u para keng pamakiramdam king IPv4: %s + + + Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) + + + + Accept command line and JSON-RPC commands + Tumanggap command line at JSON-RPC commands + + + Myriadcoin Core RPC client version + + + + Run in the background as a daemon and accept commands + Gumana king gulut bilang daemon at tumanggap commands + + + Use the test network + Gamitan ing test network + + + Accept connections from outside (default: 1 if no -proxy or -connect) + Tumanggap koneksion menibat king kilwal (default: 1 if no -proxy or -connect) + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=myriadcoinrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + Bind to given address and always listen on it. Use [host]:port notation for IPv6 + + + + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) + + + + Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + + + + This is a pre-release test build - use at your own risk - do not use for mining or merchant applications + + + + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + Kapabaluan: Sobra ya katas ing makalage king -paytxfee. Ini ing maging bayad mu para king bayad na ning transaksion istung pepadala me ing transaksion a ini. + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. + Kapabaluan: Maliaring pakilawe ing oras at aldo a makalage king kekayung kompyuter nung istu la! Istung ing oras yu mali ya ali ya gumanang masalese ing Myriadcoin. + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + Myriadcoin Core Daemon + + + + Block creation options: + Pipamilian king pamag-gawang block: + + + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + + Connect only to the specified node(s) + Kumunekta mu king mepiling node(s) + + + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + + Corrupted block database detected + Mekapansin lang me-corrupt a block database + + + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + + Discover own IP address (default: 1 when listening and no -externalip) + I-discover ing sariling IP address (default: 1 istung makiramdam at -externalip) + + + Do not load the wallet and disable wallet RPC calls + + + + Do you want to rebuild the block database now? + Buri meng buuan pasibayu ing block database ngene? + + + Error initializing block database + Kamalian king pamag-initialize king block na ning database + + + Error initializing wallet database environment %s! + + + + Error loading block database + + + + Error opening block database + Kamalian king pamag buklat king block database + + + Error: Disk space is low! + Kamalian: Mababa ne ing espasyu king disk! + + + Error: Wallet locked, unable to create transaction! + + + + Error: system error: + Kamalian: kamalian na ning sistema: + + + Failed to listen on any port. Use -listen=0 if you want this. + Memali ya ing pamakiramdam kareng gang nanung port. Gamita me ini -listen=0 nung buri me ini. + + + Failed to read block info + Me-mali king pamagbasa king impormasion ning block + + + Failed to read block + Me-mali king pamagbasa keng block + + + Failed to sync block index + Me-mali para i-sync ing block index + + + Failed to write block index + Me-mali king pamanyulat king block index + + + Failed to write block info + Me-mali king pamanyulat king block info + + + Failed to write block + Me-mali king pamanyulat block + + + Failed to write file info + Me-mali king pamanyulat king file info + + + Failed to write to coin database + Me-mali king pamanyulat king coin database + + + Failed to write transaction index + Me-mali king pamanyulat king index ning transaksion + + + Failed to write undo data + Me-mali king pamanyulat king undo data + + + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + + Find peers using DNS lookup (default: 1 unless -connect) + Mantun peers gamit ing pamamantun DNS (default: 1 unless -connect) + + + Force safe mode (default: 0) + + + + Generate coins (default: 0) + + + + How many blocks to check at startup (default: 288, 0 = all) + Pilan la reng block a lawan keng umpisa (default: 288, 0 = all) + + + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' + + + + Not enough file descriptors available. + + + + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + + Rebuild block chain index from current blk000??.dat files + + + + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + + Set the number of threads to service RPC calls (default: 4) + + + + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + + Verifying blocks... + + + + Verifying wallet... + + + + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + + + + Imports blocks from external blk000??.dat file + + + + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + + + + Information + &Impormasion + + + Invalid amount for -minrelaytxfee=<amount>: '%s' + + + + Invalid amount for -mintxfee=<amount>: '%s' + + + + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + + Maintain a full transaction index (default: 0) + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + Only accept block chain matching built-in checkpoints (default: 1) + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + Print block on startup, if found in block index + + + + Print block tree on startup (default: 0) + + + + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + + + + SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + Pipamilian ning SSL: (lawen ye ing Myriadcoin Wiki para king SSL setup instructions) + + + Send command to Myriadcoin Core + + + + Send trace/debug info to console instead of debug.log file + Magpadalang trace/debug info okeng console kesa keng debug.log file + + + Set minimum block size in bytes (default: 0) + Ilage ing pekaditak a dagul na ning block king bytes (default: 0) + + + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + Signing transaction failed + + + + Specify connection timeout in milliseconds (default: 5000) + + + + Start Myriadcoin Core Daemon + + + + System error: + Kamalian ning sistema: + + + Transaction amount too small + + + + Transaction amounts must be positive + + + + Transaction too large + Maragul yang masiadu ing transaksion + + + Use UPnP to map the listening port (default: 0) + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + Username for JSON-RPC connections + Username para king JSON-RPC koneksion + + + Warning + Kapabaluan + + + Warning: This version is obsolete, upgrade required! + Kapabaluan: Ing bersioin a ini laus ne, kailangan nang mag-upgrade! + + + Zapping all transactions from wallet... + + + + on startup + + + + version + bersion + + + wallet.dat corrupt, salvage failed + + + + Password for JSON-RPC connections + Password para king JSON-RPC koneksion + + + Allow JSON-RPC connections from specified IP address + Payagan ya i JSON-RPC koneksion para king metung a IP address + + + Send commands to node running on <ip> (default: 127.0.0.1) + Magpadalang command king node a gagana king <ip>(default: 127.0.0.1) + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + I-execute ing command istung mialilan ya ing best block (%s in cmd is replaced by block hash) + + + Upgrade wallet to latest format + I-upgrade ing wallet king pekabayung porma + + + Set key pool size to <n> (default: 100) + I-set ing key pool size king <n>(default: 100) + + + Rescan the block chain for missing wallet transactions + I-scan pasibayu ing block chain para kareng mauaualang transaksion + + + Use OpenSSL (https) for JSON-RPC connections + Gumamit OpenSSL(https) para king JSON-RPC koneksion + + + Server certificate file (default: server.cert) + Server certificate file (default: server.cert) + + + Server private key (default: server.pem) + Server private key (default: server.pem) + + + This help message + Ining saup a mensayi + + + Unable to bind to %s on this computer (bind returned error %d, %s) + Ali ya magsilbing mag-bind keng %s kening kompyuter a ini (bind returned error %d, %s) + + + Allow DNS lookups for -addnode, -seednode and -connect + Payagan ing pamaglawe DNS para king -addnode, -seednode and -connect + + + Loading addresses... + Lo-load da ne ing address... + + + Error loading wallet.dat: Wallet corrupted + Me-mali ya ing pamag-load king wallet.dat: Me-corrupt ya ing wallet + + + Error loading wallet.dat: Wallet requires newer version of Myriadcoin + Me-mali ya ing pamag-load na ning wallet.dat: Ing wallet mangailangan yang bayung bersion na ning Myriadcoin + + + Wallet needed to be rewritten: restart Myriadcoin to complete + Ing wallet mangailangan yang misulat pasibayu: Umpisan yang pasibayu ing Myriadcoin ban ma-kumpleto ya + + + Error loading wallet.dat + Me-mali ya ing pamag-load king wallet.dat + + + Invalid -proxy address: '%s' + Ali katanggap-tanggap a -proxy addresss: '%s' + + + Unknown network specified in -onlynet: '%s' + E kilalang network ing mepili king -onlynet: '%s' + + + Unknown -socks proxy version requested: %i + E kilalang -socks proxy version requested: %i + + + Cannot resolve -bind address: '%s' + Eya me-resolve ing -bind address: '%s' + + + Cannot resolve -externalip address: '%s' + Eya me-resolve ing -externalip address: '%s' + + + Invalid amount for -paytxfee=<amount>: '%s' + Eya maliari ing alaga keng -paytxfee=<amount>: '%s' + + + Invalid amount + Ing alaga e ya katanggap-tanggap + + + Insufficient funds + Kulang a pondo + + + Loading block index... + Lo-load dane ing block index... + + + Add a node to connect to and attempt to keep the connection open + Magdagdag a node ban kumunekta at subuknan apanatili yang makabuklat ing koneksion + + + Loading wallet... + Lo-load dane ing wallet... + + + Cannot downgrade wallet + Ali ya magsilbing i-downgrade ing wallet + + + Cannot write default address + Eya misulat ing default address + + + Rescanning... + I-scan deng pasibayu... + + + Done loading + Yari ne ing pamag-load + + + To use the %s option + Para agamit ing %s a pimamilian + + + Error + Mali + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + Dapat meng ilage ing rpcpassword=<password> king configuration file: +%s +Nung ing file ala ya, gawa ka gamit ing owner-readable-only file permissions. + + + \ No newline at end of file diff --git a/src/qt/locale/bitcoin_pl.ts b/src/qt/locale/bitcoin_pl.ts index 4f6f88f4..0f8983b6 100644 --- a/src/qt/locale/bitcoin_pl.ts +++ b/src/qt/locale/bitcoin_pl.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - O Myriadcoin + About Myriadcoin Core + O Myriadcoin Core - - <b>Myriadcoin</b> version - Wersja <b>Myriadcoin</b> + <b>Myriadcoin Core</b> version + Wersja <b>Myriadcoin Core</b> - This is experimental software. @@ -28,153 +24,128 @@ Distributed under the MIT/X11 software license, see the accompanying file COPYIN This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - Copyright Prawo autorskie - - The Myriadcoin developers - Deweloperzy Myriadcoin + The Myriadcoin Core developers + Deweloperzy Myriadcoin Core + + + (%1-bit) + AddressBookPage - - Address Book - Książka Adresowa - - - Double-click to edit address or label Kliknij dwukrotnie, aby edytować adres lub etykietę - Create a new address Utwórz nowy adres - + &New + &Nowy + + Copy the currently selected address to the system clipboard Skopiuj aktualnie wybrany adres do schowka - - &New Address - &Nowy Adres + &Copy + &Kopiuj - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Tutaj znajdują się twoje adresy Myriadcoin do odbioru płatności. Możesz nadać oddzielne adresy dla każdego z wysyłających monety, żeby śledzić oddzielnie ich opłaty. + C&lose + Z&amknij - &Copy Address &Kopiuj adres - - Show &QR Code - Pokaż Kod &QR - - - - Sign a message to prove you own a Myriadcoin address - Podpisz wiadomość aby dowieść, że ten adres jest twój - - - - Sign &Message - Podpisz wiado&mość - - - Delete the currently selected address from the list Usuń zaznaczony adres z listy - Export the data in the current tab to a file Eksportuj dane z aktywnej karty do pliku - &Export &Eksportuj - - Verify a message to ensure it was signed with a specified Myriadcoin address - Zweryfikuj wiadomość, aby upewnić się, że została podpisana odpowiednim adresem Myriadcoin. - - - - &Verify Message - &Zweryfikuj wiadomość - - - &Delete &Usuń - + Choose the address to send coins to + Wybierz adres żeby wysłać myriadcoins + + + Choose the address to receive coins with + Wybierz adres do otrzymania monet. + + + C&hoose + W&ybierz + + + Sending addresses + Adres wysyłania + + + Receiving addresses + Adres odbiorczy + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. Tutaj znajdują się Twoje adresy Myriadcoin do wysyłania płatności. Zawsze sprawdzaj ilość i adres odbiorcy przed wysyłką monet. - + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + To twoje adresy myriadcoin do odbierania płatności. Zaleca się używanie nowych adresów odbiorczych dla każdej tranzakcji. + + Copy &Label Kopiuj &Etykietę - &Edit - &Edytuj + &Modyfikuj - - Send &Coins - Wyślij monety + Export Address List + Eksportuj listę adresową - - Export Address Book Data - Eksportuj książkę adresową - - - Comma separated file (*.csv) Plik *.CSV (rozdzielany przecinkami) - - Error exporting - Błąd podczas eksportowania + Exporting Failed + Błąd przy próbie eksportu - - Could not write to file %1. - Błąd zapisu do pliku %1. + There was an error trying to save the address list to %1. + AddressTableModel - Label Etykieta - Address Adres - (no label) (bez etykiety) @@ -182,140 +153,106 @@ This product includes software developed by the OpenSSL Project for use in the O AskPassphraseDialog - Passphrase Dialog Okienko Hasła - Enter passphrase Wpisz hasło - New passphrase Nowe hasło - Repeat new passphrase Powtórz nowe hasło - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. Wprowadź nowe hasło dla portfela.<br/>Proszę użyć hasła składającego się z <b>10 lub więcej losowych znaków</b> lub <b>ośmiu lub więcej słów</b>. - Encrypt wallet Zaszyfruj portfel - This operation needs your wallet passphrase to unlock the wallet. Ta operacja wymaga hasła do portfela ażeby odblokować portfel. - Unlock wallet Odblokuj portfel - This operation needs your wallet passphrase to decrypt the wallet. Ta operacja wymaga hasła do portfela ażeby odszyfrować portfel. - Decrypt wallet Odszyfruj portfel - Change passphrase Zmień hasło - Enter the old and new passphrase to the wallet. Podaj stare i nowe hasło do portfela. - Confirm wallet encryption Potwierdź szyfrowanie portfela - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! Uwaga: Jeśli zaszyfrujesz swój portfel i zgubisz hasło to <b>STRACISZ WSZYSTKIE SWOJE MYRIADCOIN'Y</b>! - Are you sure you wish to encrypt your wallet? Jesteś pewien, że chcesz zaszyfrować swój portfel? - 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. WAŻNE: Wszystkie wykonane wcześniej kopie pliku portfela powinny być zamienione na nowe, szyfrowane pliki. Z powodów bezpieczeństwa, poprzednie kopie nieszyfrowanych plików portfela staną się bezużyteczne jak tylko zaczniesz korzystać z nowego, szyfrowanego portfela. - - Warning: The Caps Lock key is on! Uwaga: Klawisz Caps Lock jest włączony - - Wallet encrypted Portfel zaszyfrowany - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. - Program Myriadcoin zamknie się aby dokończyć proces szyfrowania. Pamiętaj, że szyfrowanie portfela nie zabezpiecza w pełni Twoich myriadcoinów przed kradzieżą przez wirusy lub trojany mogące zainfekować Twój komputer. + Program Myriadcoin zamknie się aby dokończyć proces szyfrowania. Pamiętaj, że szyfrowanie portfela nie zabezpiecza w pełni Twoich bitcoinów przed kradzieżą przez wirusy lub trojany mogące zainfekować Twój komputer. - - - - Wallet encryption failed Szyfrowanie portfela nie powiodło się - Wallet encryption failed due to an internal error. Your wallet was not encrypted. Szyfrowanie portfela nie powiodło się z powodu wewnętrznego błędu. Twój portfel nie został zaszyfrowany. - - The supplied passphrases do not match. Podane hasła nie są takie same. - Wallet unlock failed Odblokowanie portfela nie powiodło się - - - The passphrase entered for the wallet decryption was incorrect. Wprowadzone hasło do odszyfrowania portfela jest niepoprawne. - Wallet decryption failed - Odszyfrowywanie portfela nie powiodło się + Odszyfrowanie portfela nie powiodło się - Wallet passphrase was successfully changed. Hasło portfela zostało pomyślnie zmienione. @@ -323,319 +260,286 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - Sign &message... Podpisz wiado&mość... - Synchronizing with network... Synchronizacja z siecią... - &Overview P&odsumowanie - + Node + + + Show general overview of wallet Pokazuje ogólny zarys portfela - &Transactions &Transakcje - Browse transaction history Przeglądaj historię transakcji - - Edit the list of stored addresses and labels - Edytuj listę zapisanych adresów i i etykiet - - - - Show the list of addresses for receiving payments - Pokaż listę adresów do otrzymywania płatności - - - E&xit &Zakończ - Quit application Zamknij program - Show information about Myriadcoin Pokaż informację o Myriadcoin - About &Qt O &Qt - Show information about Qt Pokazuje informacje o Qt - &Options... &Opcje... - &Encrypt Wallet... Zaszyfruj Portf&el - &Backup Wallet... Wykonaj kopię zapasową... - &Change Passphrase... &Zmień hasło... - + &Sending addresses... + Adres wysyłania + + + &Receiving addresses... + Adres odbiorczy + + + Open &URI... + Otwórz URI... + + Importing blocks from disk... Importowanie bloków z dysku... - Reindexing blocks on disk... Ponowne indeksowanie bloków na dysku... - Send coins to a Myriadcoin address Wyślij monety na adres Myriadcoin - Modify configuration options for Myriadcoin - Zmienia opcje konfiguracji myriadcoina + Zmienia opcje konfiguracji bitcoina - Backup wallet to another location Zapasowy portfel w innej lokalizacji - Change the passphrase used for wallet encryption Zmień hasło użyte do szyfrowania portfela - &Debug window - &Okno debudowania + &Okno debugowania - Open debugging and diagnostic console Otwórz konsolę debugowania i diagnostyki - &Verify message... &Zweryfikuj wiadomość... - - Myriadcoin Myriadcoin - Wallet Portfel - &Send Wyślij - &Receive Odbie&rz - - &Addresses - &Adresy - - - - &About Myriadcoin - O Myriadcoin - - - &Show / Hide &Pokaż / Ukryj - Show or hide the main Window Pokazuje lub ukrywa główne okno - Encrypt the private keys that belong to your wallet Szyfruj klucze prywatne, które są powiązane z twoim portfelem - Sign messages with your Myriadcoin addresses to prove you own them Podpisz wiadomości swoim adresem aby udowodnić jego posiadanie - Verify messages to ensure they were signed with specified Myriadcoin addresses Zweryfikuj wiadomość, aby upewnić się, że została podpisana odpowiednim adresem Myriadcoin. - &File &Plik - &Settings P&referencje - &Help Pomo&c - Tabs toolbar Pasek zakładek - - [testnet] [testnet] - + Myriadcoin Core + Rdzeń BitCoin + + + Request payments (generates QR codes and myriadcoin: URIs) + Żądaj płatności (generuje kod QR oraz myriadcoin URI) + + + &About Myriadcoin Core + &O Myriadcoin Core + + + Show the list of used sending addresses and labels + Pokaż listę użytych adresów wysyłających i etykiety + + + Show the list of used receiving addresses and labels + Pokaż listę użytych adresów odbiorczych i etykiety + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + Myriadcoin client Myriadcoin klient - %n active connection(s) to Myriadcoin network %n aktywne połączenie do sieci Myriadcoin%n aktywne połączenia do sieci Myriadcoin%n aktywnych połączeń do sieci Myriadcoin - No block source available... - + Brak dostępnych źródeł bloków... - Processed %1 of %2 (estimated) blocks of transaction history. Przetworzono (w przybliżeniu) %1 z %2 bloków historii transakcji. - Processed %1 blocks of transaction history. Pobrano %1 bloków z historią transakcji. - %n hour(s) %n godzina%n godzin%n godzin - %n day(s) %n dzień%n dni%n dni - %n week(s) %n tydzień%n tygodni%n tygodni - - %1 behind - + %1 and %2 + %1 i %2 + + + %n year(s) + %n rok%n lata%n lat + + + %1 behind + %1 wstecz - Last received block was generated %1 ago. Ostatni otrzymany blok został wygenerowany %1 temu. - Transactions after this will not yet be visible. - + Transakcje po tym momencie nie będą jeszcze widoczne. - Error Błąd - Warning Ostrzeżenie - Information Informacja - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - Transakcja przekracza limit. Możesz wysłać ją płacąc prowizję %1, która zostaje przekazana do węzłów, które ją prześlą i pomoże wspierać sieć Myriadcoin. Czy chcesz zapłacić prowizję? - - - Up to date Aktualny - Catching up... Łapanie bloków... - - Confirm transaction fee - Potwierdź prowizję transakcyjną - - - Sent transaction Transakcja wysłana - Incoming transaction Transakcja przychodząca - Date: %1 Amount: %2 Type: %3 @@ -648,29 +552,14 @@ Adres: %4 - - - URI handling - Obsługa URI - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - URI nie może zostać przetworzony! Prawdopodobnie błędny adres Myriadcoin bądź nieprawidłowe parametry URI. - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> Portfel jest <b>zaszyfrowany</b> i obecnie <b>niezablokowany</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> Portfel jest <b>zaszyfrowany</b> i obecnie <b>zablokowany</b> - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. Błąd krytyczny. Myriadcoin nie może kontynuować bezpiecznie więc zostanie zamknięty. @@ -678,329 +567,647 @@ Adres: %4 ClientModel - Network Alert Sieć Alert - EditAddressDialog + CoinControlDialog - - Edit Address - Edytuj adres + Coin Control Address Selection + + + + Quantity: + Ilość: + + + Bytes: + Bajtów: + + + Amount: + Kwota: + + + Priority: + Priorytet: + + + Fee: + Opłata: + + + Low Output: + + + + After Fee: + Po opłacie: + + + Change: + Reszta: + + + (un)select all + Zaznacz/Odznacz wszystko + + + Tree mode + Widok drzewa + + + List mode + Widok listy + + + Amount + Kwota + + + Address + Adres + + + Date + Data + + + Confirmations + Potwierdzenia + + + Confirmed + Potwierdzony + + + Priority + Priorytet + + + Copy address + Kopiuj adres + + + Copy label + Kopiuj etykietę + + + Copy amount + Kopiuj kwotę + + + Copy transaction ID + Skopiuj ID transakcji + + + Lock unspent + Zablokuj + + + Unlock unspent + Odblokuj + + + Copy quantity + Skopiuj ilość + + + Copy fee + Skopiuj opłatę + + + Copy after fee + Skopiuj ilość po opłacie + + + Copy bytes + Skopiuj ilość bajtów + + + Copy priority + Skopiuj priorytet + + + Copy low output + + + + Copy change + Skopiuj resztę + + + highest + najwyższa + + + higher + wyższa + + + high + wysoka + + + medium-high + średnio wysoki + + + medium + średnia + + + low-medium + średnio niski + + + low + niski + + + lower + niższy + + + lowest + najniższy + + + (%1 locked) + (%1 zablokowane) + + + none + żaden + + + Dust + + + + yes + tak + + + no + nie + + + This label turns red, if the transaction size is greater than 1000 bytes. + Etykieta staje się czerwona kiedy transakcja jest większa niż 1000 bajtów. + + + This means a fee of at least %1 per kB is required. + Oznacza to wymaganą opłatę minimum %1 na kB. + + + Can vary +/- 1 byte per input. + Waha się +/- 1 bajt na wejście. + + + Transactions with higher priority are more likely to get included into a block. + Transakcje o wyższym priorytecie zostają szybciej dołączone do bloku. + + + This label turns red, if the priority is smaller than "medium". + Ta etykieta jest czerwona, jeżeli priorytet jest mniejszy niż "średni" + + + This label turns red, if any recipient receives an amount smaller than %1. + Etykieta staje się czerwona kiedy którykolwiek odbiorca otrzymuje kwotę mniejszą niż %1. + + + This means a fee of at least %1 is required. + Oznacza to, że wymagana jest opłata przynajmniej %1. + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + Etykieta staje się czerwona kiedy reszta jest mniejsza niż %1. + + + (no label) + (bez etykiety) + + + change from %1 (%2) + reszta z %1 (%2) + + + (change) + (reszta) + + + + EditAddressDialog + + Edit Address + Zmień adres - &Label &Etykieta - - The label associated with this address book entry - Etykieta skojarzona z tym wpisem w książce adresowej + The label associated with this address list entry + Etykieta skojarzona z tym wpisem na liście adresów + + + The address associated with this address list entry. This can only be modified for sending addresses. + Ten adres jest skojarzony z wpisem na liście adresów. Może być zmodyfikowany jedynie dla adresów wysyłających. - &Address &Adres - - The address associated with this address book entry. This can only be modified for sending addresses. - Ten adres jest skojarzony z wpisem w książce adresowej. Może być zmodyfikowany jedynie dla adresów wysyłających. - - - New receiving address Nowy adres odbiorczy - New sending address Nowy adres wysyłania - Edit receiving address - Edytuj adres odbioru + Zmień adres odbioru - Edit sending address - Edytuj adres wysyłania + Zmień adres wysyłania - The entered address "%1" is already in the address book. Wprowadzony adres "%1" już istnieje w książce adresowej. - The entered address "%1" is not a valid Myriadcoin address. Wprowadzony adres "%1" nie jest poprawnym adresem Myriadcoin. - Could not unlock wallet. Nie można było odblokować portfela. - New key generation failed. Tworzenie nowego klucza nie powiodło się. - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt - Myriadcoin-Qt + A new data directory will be created. + Utworzono nowy folder danych. + + + name + nazwa + + + Directory already exists. Add %1 if you intend to create a new directory here. + Katalog już istnieje. Dodaj %1 jeśli masz zamiar utworzyć tutaj nowy katalog. + + + Path already exists, and is not a directory. + Ścieżka już istnieje i nie wskazuje na folder. + + + Cannot create data directory here. + Nie można było tutaj utworzyć folderu. + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + Opcje konsoli + + + Myriadcoin Core + Rdzeń BitCoin - version wersja - Usage: Użycie: - command-line options opcje konsoli - UI options UI opcje - Set language, for example "de_DE" (default: system locale) Ustaw Język, na przykład "pl_PL" (domyślnie: systemowy) - Start minimized Uruchom zminimalizowany - + Set SSL root certificates for payment request (default: -system-) + + + Show splash screen on startup (default: 1) Pokazuj okno powitalne przy starcie (domyślnie: 1) + + Choose data directory on startup (default: 0) + Wybierz folder danych przy starcie (domyślnie: 0) + + + + Intro + + Welcome + Witaj + + + Welcome to Myriadcoin Core. + Witam w Myriadcoin Core + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + Ponieważ jest to pierwsze uruchomienie programu, możesz wybrać gdzie będą przechowywane informacje. + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + Program pobierze i będzie przechowywał kopię łańcucha bloków Myriadcoin. W wybranym katalogu musi być przynajmniej %1GB miejsca, a z czasem wielkość danych będzie rosła. Portfel będzie przechowywany w tym samym katalogu. + + + Use the default data directory + Użyj domyślnego folderu danych + + + Use a custom data directory: + Użyj wybranego folderu dla danych + + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" can not be created. + Błąd: Określony folder danych "%1" nie mógł zostać utworzony. + + + Error + Błąd + + + GB of free space available + GB dostępnego wolnego miejsca + + + (of %1GB needed) + (z %1GB potrzebnego) + + + + OpenURIDialog + + Open URI + Otwórz URI: + + + Open payment request from URI or file + Otwórz żądanie zapłaty z URI lub pliku + + + URI: + URI: + + + Select payment request file + + + + Select payment request file to open + + OptionsDialog - Options Opcje - &Main Główne - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. - + Opcjonalna prowizja za transakcje za kB, wspomaga ona szybkość przebiegu transakcji. Większość transakcji jest 1 kB. - Pay transaction &fee Płać prowizję za transakcje - Automatically start Myriadcoin after logging in to the system. Automatycznie uruchamia Myriadcoin po zalogowaniu do systemu. - &Start Myriadcoin on system login Uruchamiaj Myriadcoin wraz z zalogowaniem do &systemu - + Size of &database cache + + + + MB + MB + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + Adres IP serwera proxy (np. IPv4: 127.0.0.1 / IPv6: ::1) + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + Reset all client options to default. Przywróć domyślne wszystkie ustawienia klienta. - &Reset Options Z&resetuj Ustawienia - &Network &Sieć - + (0 = auto, <0 = leave that many cores free) + + + + W&allet + Portfel + + + Expert + Ekspert + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. Automatycznie otwiera port klienta Myriadcoin na routerze. Ta opcja dzieła tylko jeśli twój router wspiera UPnP i jest ono włączone. - Map port using &UPnP Mapuj port używając &UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - Podłącz się do sieci Myriadcoin przez proxy SOCKS (np. gdy łączysz się poprzez Tor'a) - - - - &Connect through SOCKS proxy: - &Połącz się przez proxy SOCKS - - - Proxy &IP: Proxy &IP: - - IP address of the proxy (e.g. 127.0.0.1) - Adres IP serwera proxy (np. 127.0.0.1) - - - &Port: &Port: - Port of the proxy (e.g. 9050) Port proxy (np. 9050) - SOCKS &Version: Wersja &SOCKS - SOCKS version of the proxy (e.g. 5) SOCKS wersja serwera proxy (np. 5) - &Window &Okno - Show only a tray icon after minimizing the window. Pokazuj tylko ikonę przy zegarku po zminimalizowaniu okna. - &Minimize to the tray instead of the taskbar &Minimalizuj do paska przy zegarku zamiast do paska zadań - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. Minimalizuje zamiast zakończyć działanie programu przy zamykaniu okna. Kiedy ta opcja jest włączona, program zakończy działanie po wybieraniu Zamknij w menu. - M&inimize on close M&inimalizuj przy zamknięciu - &Display &Wyświetlanie - User Interface &language: Język &Użytkownika: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. Można tu ustawić język interfejsu uzytkownika. Żeby ustawienie przyniosło skutek trzeba uruchomić ponownie Myriadcoin. - &Unit to show amounts in: &Jednostka pokazywana przy kwocie: - Choose the default subdivision unit to show in the interface and when sending coins. Wybierz podział jednostki pokazywany w interfejsie oraz podczas wysyłania monet - Whether to show Myriadcoin addresses in the transaction list or not. Pokazuj adresy Myriadcoin na liście transakcji. - &Display addresses in transaction list &Wyświetlaj adresy w liście transakcji - + Whether to show coin control features or not. + + + &OK &OK - &Cancel &Anuluj - - &Apply - Z&astosuj - - - default domyślny - + none + żaden + + Confirm options reset Potwierdź reset ustawień - - Some settings may require a client restart to take effect. - Niektóre ustawienia mogą wymagać ponownego uruchomienia klienta, żeby zacząć działać. + Client restart required to activate changes. + Wymagany restart programu, aby uaktywnić zmiany. - - Do you want to proceed? - Czy chcesz kontynuować? + Client will be shutdown, do you want to proceed? + Program zostanie wyłączony. Czy chcesz kontynuować? - - - Warning - Ostrzeżenie + This change would require a client restart. + Ta zmiana może wymagać ponownego uruchomienia klienta. - - - This setting will take effect after restarting Myriadcoin. - To ustawienie zostanie zastosowane po restarcie Myriadcoin - - - The supplied proxy address is invalid. Adres podanego proxy jest nieprawidłowy @@ -1008,59 +1215,54 @@ Adres: %4 OverviewPage - Form Formularz - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. - Wyświetlana informacja może być nieaktualna. Twój portfel synchronizuje się automatycznie z siecią myriadcoin, zaraz po tym jak uzyskano połączenie, ale proces ten nie został jeszcze ukończony. + Wyświetlana informacja może być nieaktualna. Twój portfel synchronizuje się automatycznie z siecią bitcoin, zaraz po tym jak uzyskano połączenie, ale proces ten nie został jeszcze ukończony. - - Balance: - Saldo: - - - - Unconfirmed: - Niepotwierdzony: - - - Wallet Portfel - + Available: + Dostępne: + + + Your current spendable balance + Twoje obecne saldo + + + Pending: + W toku: + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + Suma transakcji, które nie zostały jeszcze potwierdzone, a które nie zostały wliczone do twojego obecnego salda + + Immature: Niedojrzały: - Mined balance that has not yet matured Balans wydobycia, który jeszcze nie dojrzał - + Total: + Wynosi ogółem: + + + Your current total balance + Twoje obecne saldo + + <b>Recent transactions</b> <b>Ostatnie transakcje</b> - - Your current balance - Twoje obecne saldo - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - Suma transakcji, które nie zostały jeszcze potwierdzone, i które nie zostały wliczone do twojego obecnego salda - - - - out of sync desynchronizacja @@ -1068,579 +1270,856 @@ Adres: %4 PaymentServer - + URI handling + Obsługa URI + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + URI nie może zostać przetworzony! Prawdopodobnie błędny adres Myriadcoin bądź nieprawidłowe parametry URI. + + + Requested payment amount of %1 is too small (considered dust). + Żądana kwota %1 jest za niska (uznano za kurz). + + + Payment request error + Błąd żądania płatności + + Cannot start myriadcoin: click-to-pay handler + Nie można rozpocząć myriadcoin: kliknij-by-zapłacić opiekunowi + + + Net manager warning + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + Twoje aktywne proxy nie obsługuje SOCKS5, co jest wymagane dla żądania płatności przez proxy. + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + Zwrot z %1 + + + Error communicating with %1: %2 + Błąd komunikacji z %1 : %2 + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + Błędna odpowiedź z serwera %1 + + + Payment acknowledged + Płatność potwierdzona + + + Network request error + Błąd żądania sieci + - QRCodeDialog + QObject - - QR Code Dialog - Okno Dialogowe Kodu QR + Myriadcoin + Myriadcoin - - Request Payment - Prośba o płatność + Error: Specified data directory "%1" does not exist. + Błąd: Określony folder danych "%1" nie istnieje. - - Amount: - Kwota: + Error: Cannot parse configuration file: %1. Only use key=value syntax. + Błąd: Nie można przetworzyć pliku konfiguracyjnego: %1. Używaj tylko składni klucz=wartość. - - Label: - Etykieta: + Error: Invalid combination of -regtest and -testnet. + Błąd: Niepoprawna kombinacja -regtest i -testnet. - - Message: - Wiadomość: + Myriadcoin Core didn't yet exit safely... + Myriadcoin Core jeszcze się nie wyłączył bezpiecznie… - - &Save As... - Zapi&sz jako... + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Wprowadź adres Myriadcoin (np. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + &Zapisz obraz... - - Error encoding URI into QR Code. - Błąd kodowania URI w Kodzie QR. + &Copy Image + &Kopiuj obraz - - The entered amount is invalid, please check. - Podana ilość jest nieprawidłowa, proszę sprawdzić - - - - Resulting URI too long, try to reduce the text for label / message. - Wynikowy URI jest zbyt długi, spróbuj zmniejszyć tekst etykiety / wiadomości - - - Save QR Code Zapisz Kod QR - - PNG Images (*.png) + PNG Image (*.png) Obraz PNG (*.png) RPCConsole - Client name Nazwa klienta - - - - - - - - - - N/A NIEDOSTĘPNE - Client version Wersja klienta - &Information &Informacje - + Debug window + Okno debugowania + + + General + Ogólne + + Using OpenSSL version Używana wersja OpenSSL - Startup time Czas uruchomienia - Network Sieć - + Name + Nazwa + + Number of connections Liczba połączeń - - On testnet - W sieci testowej - - - Block chain Ciąg bloków - Current number of blocks Aktualna liczba bloków - Estimated total blocks Szacowana ilość bloków - Last block time Czas ostatniego bloku - &Open &Otwórz - - Command-line options - Opcje konsoli - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - Pokaż pomoc Myriadcoin-Qt, aby zobaczyć listę wszystkich opcji linii poleceń - - - - &Show - &Pokaż - - - &Console &Konsola - + &Network Traffic + $Ruch sieci + + + &Clear + &Wyczyść + + + Totals + Kwota ogólna + + + In: + Wejście: + + + Out: + Wyjście: + + Build date Data kompilacji - - Myriadcoin - Debug window - Myriadcoin - Okno debudowania - - - - Myriadcoin Core - Rdzeń BitCoin - - - Debug log file - + Plik logowania debugowania - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. - + Otwórz plik logowania debugowania Myriadcoin z obecnego katalogu z danymi. Może to potrwać kilka sekund przy większych plikach. - Clear console Wyczyść konsolę - Welcome to the Myriadcoin RPC console. Witam w konsoli Myriadcoin RPC - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. Użyj strzałek do przewijania historii i <b>Ctrl-L</b> aby wyczyścić ekran - Type <b>help</b> for an overview of available commands. Wpisz <b>help</b> aby uzyskać listę dostępnych komend + + %1 B + %1 B + + + %1 KB + %1 KB + + + %1 MB + %1 MB + + + %1 GB + %1 GB + + + %1 m + %1 m + + + %1 h + %1 h + + + %1 h %2 m + %1 h %2 m + + + + ReceiveCoinsDialog + + &Amount: + &Ilość: + + + &Label: + &Etykieta: + + + &Message: + &Wiadomość: + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + Użyj jeden z poprzednio użytych adresów odbiorczych. Podczas ponownego używania adresów występują problemy z bezpieczeństwem i prywatnością. Nie korzystaj z tej opcji, chyba że odtwarzasz żądanie płatności wykonane już wcześniej. + + + R&euse an existing receiving address (not recommended) + U%żyj ponownie istniejący adres odbiorczy (niepolecane) + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + Opcjonalna etykieta do skojarzenia z nowym adresem odbiorczym. + + + Use this form to request payments. All fields are <b>optional</b>. + Użyj tego formularza do zażądania płatności. Wszystkie pola są <b>opcjonalne</b>. + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + Wyczyść pola formularza + + + Clear + Wyczyść + + + Requested payments history + Żądanie historii płatności + + + &Request payment + &Żądaj płatności + + + Show the selected request (does the same as double clicking an entry) + + + + Show + Pokaż + + + Remove the selected entries from the list + Usuń zaznaczone z listy + + + Remove + Usuń + + + Copy label + Kopiuj etykietę + + + Copy message + Kopiuj wiadomość + + + Copy amount + Kopiuj kwotę + + + + ReceiveRequestDialog + + QR Code + Kod QR + + + Copy &URI + Kopiuj &URI + + + Copy &Address + Kopiuj &adres + + + &Save Image... + &Zapisz obraz... + + + Request payment to %1 + Żądaj płatności do %1 + + + Payment information + Informacje o płatności + + + URI + URI + + + Address + Adres + + + Amount + Kwota + + + Label + Etykieta + + + Message + Wiadomość + + + Resulting URI too long, try to reduce the text for label / message. + Wynikowy URI jest zbyt długi, spróbuj zmniejszyć tekst etykiety / wiadomości + + + Error encoding URI into QR Code. + Błąd kodowania URI w Kodzie QR. + + + + RecentRequestsTableModel + + Date + Data + + + Label + Etykieta + + + Message + Wiadomość + + + Amount + Kwota + + + (no label) + (bez etykiety) + + + (no message) + (brak wiadomości) + + + (no amount) + (brak kwoty) + SendCoinsDialog - - - - - - - - Send Coins - Wyślij płatność + Wyślij Monety + + + Coin Control Features + + + + Inputs... + Wejścia... + + + automatically selected + zaznaczone automatycznie + + + Insufficient funds! + Niewystarczające środki + + + Quantity: + Ilość: + + + Bytes: + Bajtów: + + + Amount: + Kwota: + + + Priority: + Priorytet: + + + Fee: + Opłata: + + + Low Output: + + + + After Fee: + Po opłacie: + + + Change: + Reszta: + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + Kiedy ta opcja jest wybrana, ale adres reszty jest pusty lub nieprawidłowy to reszta będzie wysyłana na adres nowo-wygenerowany. + + + Custom change address + - Send to multiple recipients at once Wyślij do wielu odbiorców na raz - Add &Recipient Dodaj Odbio&rce - - Remove all transaction fields - Wyczyść wszystkie pola transakcji + Clear all fields of the form. + Wyczyść wszystkie pola formularza - Clear &All Wyczyść &wszystko - Balance: Saldo: - - 123.456 BTC - 123.456 BTC - - - Confirm the send action Potwierdź akcję wysyłania - S&end Wy&syłka - - <b>%1</b> to %2 (%3) - <b>%1</b> do %2 (%3) - - - Confirm send coins Potwierdź wysyłanie monet - - Are you sure you want to send %1? - Czy na pewno chcesz wysłać %1? + %1 to %2 + %1 do %2 - - and - i + Copy quantity + Skopiuj ilość + + + Copy amount + Kopiuj kwotę + + + Copy fee + Skopiuj opłatę + + + Copy after fee + Skopiuj ilość po opłacie + + + Copy bytes + Skopiuj ilość bajtów + + + Copy priority + Skopiuj priorytet + + + Copy low output + + + + Copy change + Skopiuj resztę + + + Total Amount %1 (= %2) + Łączna kwota %1 (= %2) + + + or + lub - The recipient address is not valid, please recheck. Adres odbiorcy jest nieprawidłowy, proszę poprawić - The amount to pay must be larger than 0. Kwota do zapłacenia musi być większa od 0. - The amount exceeds your balance. Kwota przekracza twoje saldo. - The total exceeds your balance when the %1 transaction fee is included. Suma przekracza twoje saldo, gdy doliczymy %1 prowizji transakcyjnej. - Duplicate address found, can only send to each address once per send operation. Znaleziono powtórzony adres, można wysłać tylko raz na każdy adres podczas operacji wysyłania. - - Error: Transaction creation failed! - Błąd: Tworzenie transakcji zakończone niepowodzeniem! + Transaction creation failed! + Utworzenie transakcji nie powiodło się! - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Błąd: transakcja została odrzucona. Może się to zdarzyć, gdy monety z Twojego portfela zostały już wydane, na przykład gdy używałeś kopii wallet.dat i myriadcoiny które tam wydałeś nie zostały jeszcze odjęte z portfela z którego teraz korzystasz. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Transakcja została odrzucona! Może się to zdarzyć jeśli część monet z portfela została już wydana używając kopii pliku wallet.dat i nie zostało to tutaj uwzględnione. + + + Warning: Invalid Myriadcoin address + Ostrzeżenie: nieprawidłowy adres Myriadcoin + + + (no label) + (bez etykiety) + + + Warning: Unknown change address + Ostrzeżenie: Nieznany adres + + + Are you sure you want to send? + Czy na pewno chcesz wysłać? + + + added as transaction fee + dodano jako opłata transakcyjna + + + Payment request expired + Zażądanie płatności upłynęło + + + Invalid payment address %1 + błędny adres płatności %1 SendCoinsEntry - - Form - Formularz - - - A&mount: Su&ma: - Pay &To: - Zapłać dla: + Zapłać &dla: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Adres, na który wysłasz płatności (np. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book Wprowadź etykietę dla tego adresu by dodać go do książki adresowej - &Label: &Etykieta: - - Choose address from address book - Wybierz adres z książki adresowej + Choose previously used address + Wybierz wcześniej użyty adres + + + This is a normal payment. + To jest standardowa płatność - Alt+A Alt+A - Paste address from clipboard Wklej adres ze schowka - Alt+P Alt+P - - Remove this recipient - Usuń tego odbiorce + Remove this entry + Usuń ten wpis - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Wprowadź adres Myriadcoin (np. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + Wiadomość: + + + This is a verified payment request. + Zweryfikowano żądanie zapłaty. + + + Enter a label for this address to add it to the list of used addresses + Wprowadź etykietę dla tego adresu by dodać go do listy użytych adresów + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + To żądanie zapłaty nie zostało zweryfikowane. + + + Pay To: + Wpłać do: + + + Memo: + Notatka: + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + Myriadcoin Core się zamyka... + + + Do not shut down the computer until this window disappears. + Nie wyłączaj komputera dopóki to okno nie zniknie. SignVerifyMessageDialog - Signatures - Sign / Verify a Message Podpisy - Podpisz / zweryfikuj wiadomość - &Sign Message Podpi&sz Wiadomość - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. Możesz podpisywać wiadomości swoimi adresami aby udowodnić, że jesteś ich właścicielem. Uważaj, aby nie podpisywać niczego co wzbudza Twoje podejrzenia, ponieważ ktoś może stosować phishing próbując nakłonić Cię do ich podpisania. Akceptuj i podpisuj tylko w pełni zrozumiałe komunikaty i wiadomości. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Wprowadź adres Myriadcoin (np. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book - Wybierz adres z książki kontaktowej + Choose previously used address + Wybierz wcześniej użyty adres - - Alt+A Alt+A - Paste address from clipboard Wklej adres ze schowka - Alt+P Alt+P - Enter the message you want to sign here Wprowadź wiadomość, którą chcesz podpisać, tutaj - Signature Podpis - Copy the current signature to the system clipboard Kopiuje aktualny podpis do schowka systemowego - Sign the message to prove you own this Myriadcoin address Podpisz wiadomość aby dowieść, że ten adres jest twój - Sign &Message Podpisz Wiado&mość - Reset all sign message fields Zresetuj wszystkie pola podpisanej wiadomości - - Clear &All Wyczyść &wszystko - &Verify Message &Zweryfikuj wiadomość - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. - + Wpisz adres podpisu, wiadomość (upewnij się, że dokładnie skopiujesz wszystkie zakończenia linii, spacje, tabulacje itp.) oraz podpis poniżej by sprawdzić wiadomość. Uważaj by nie dodać więcej do podpisu niż do samej podpisywanej wiadomości by uniknąć ataku man-in-the-middle (człowiek pośrodku) - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Wprowadź adres Myriadcoin (np. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address Zweryfikuj wiadomość, aby upewnić się, że została podpisana odpowiednim adresem Myriadcoin. - Verify &Message Zweryfikuj Wiado&mość - Reset all verify message fields Resetuje wszystkie pola weryfikacji wiadomości - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Wprowadź adres Myriadcoin (np. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature Kliknij "Podpisz Wiadomość" żeby uzyskać podpis - - Enter Myriadcoin signature - Wprowadź podpis Myriadcoin - - - - The entered address is invalid. Podany adres jest nieprawidłowy. - - - - Please check the address and try again. Proszę sprawdzić adres i spróbować ponownie. - - The entered address does not refer to a key. Wprowadzony adres nie odnosi się do klucza. - Wallet unlock was cancelled. Odblokowanie portfela zostało anulowane. - Private key for the entered address is not available. Klucz prywatny dla podanego adresu nie jest dostępny - Message signing failed. Podpisanie wiadomości nie powiodło się - Message signed. Wiadomość podpisana. - The signature could not be decoded. Podpis nie może zostać zdekodowany. - - Please check the signature and try again. Sprawdź podpis i spróbuj ponownie. - The signature did not match the message digest. - + Podpis nie odpowiadał streszczeniu wiadomości - Message verification failed. Weryfikacja wiadomości nie powiodła się. - Message verified. Wiadomość zweryfikowana. @@ -1648,186 +2127,160 @@ Adres: %4 SplashScreen - - The Myriadcoin developers - Deweloperzy Myriadcoin + Myriadcoin Core + Rdzeń BitCoin + + + The Myriadcoin Core developers + Deweloperzy Myriadcoin Core - [testnet] [testnet] + + TrafficGraphWidget + + KB/s + KB/s + + TransactionDesc - Open until %1 Otwórz do %1 - + conflicted + + + %1/offline %1/offline - %1/unconfirmed %1/niezatwierdzone - %1 confirmations %1 potwierdzeń - Status Status - , broadcast through %n node(s) , emitowany przez %n węzeł, emitowany przez %n węzły, emitowany przez %n węzłów - Date Data - Source Źródło - Generated Wygenerowano - - From Od - - - To Do - - own address własny adres - label etykieta - - - - - Credit Przypisy - matures in %n more block(s) - + potwierdzona przy %n bloku więcejpotwierdzona przy %n blokach więcejpotwierdzona przy %n blokach więcej - not accepted niezaakceptowane - - - - Debit Debet - Transaction fee Prowizja transakcji - Net amount Kwota netto - Message Wiadomość - Comment Komentarz - Transaction ID ID transakcji - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Wygenerowane monety muszą zaczekać 120 bloków zanim będzie można je wydać. Kiedy wygenerowałeś ten blok, został on wyemitowany do sieci, aby dodać go do łańcucha bloków. Jeśli to się nie powiedzie nie zostanie on zaakceptowany i wygenerowanych monet nie będzie można wysyłać. Może się to czasami zdarzyć jeśli inny węzeł wygeneruje blok tuż przed tobą. + Merchant + Kupiec + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Wygenerowane monety muszą dojrzeć przez %1 bloków zanim będzie można je wysłać. Gdy wygenerowałeś ten blok został on ogłoszony w sieci i dodany do łańcucha bloków. Jeżeli nie uda mu się wejść do łańcucha jego status zostanie zmieniony na "nie zaakceptowano" i nie będzie można go wydać. To czasem zdarza się gdy inny węzeł wygeneruje blok w kilka sekund od twojego. - Debug information Informacje debugowania - Transaction Transakcja - Inputs Wejścia - Amount Kwota - true prawda - false fałsz - , has not been successfully broadcast yet , nie został jeszcze pomyślnie wyemitowany - Open for %n more block(s) Otwórz dla %n blokuOtwórz dla %n następnych blokówOtwórz dla %n następnych bloków - unknown nieznany @@ -1835,12 +2288,10 @@ Adres: %4 TransactionDescDialog - Transaction details Szczegóły transakcji - This pane shows a detailed description of the transaction Ten panel pokazuje szczegółowy opis transakcji @@ -1848,117 +2299,102 @@ Adres: %4 TransactionTableModel - Date Data - Type Typ - Address Adres - Amount Kwota + + Immature (%1 confirmations, will be available after %2) + + - Open for %n more block(s) Otwórz dla %n następnych bloków - Open until %1 Otwórz do %1 - - Offline (%1 confirmations) - Offline (%1 potwierdzeń) - - - - Unconfirmed (%1 of %2 confirmations) - Niezatwierdzony (%1 z %2 potwierdzeń) - - - Confirmed (%1 confirmations) Zatwierdzony (%1 potwierdzeń) - - - Mined balance will be available when it matures in %n more block(s) - Balans wydobycia będzie dostępny zaraz po tym, jak dojrzeje. Pozostał %n blokBalans wydobycia będzie dostępny zaraz po tym, jak dojrzeje. Pozostało %n blokówBalans wydobycia będzie dostępny zaraz po tym, jak dojrzeje. Pozostało %n bloków - - This block was not received by any other nodes and will probably not be accepted! Ten blok nie został odebrany przez jakikolwiek inny węzeł i prawdopodobnie nie zostanie zaakceptowany! - Generated but not accepted Wygenerowano ale nie zaakceptowano - + Offline + Offline + + + Unconfirmed + Niepotwierdzone: + + + Confirming (%1 of %2 recommended confirmations) + Potwierdzanie (%1 z %2 rekomendowanych potwierdzeń) + + + Conflicted + + + Received with Otrzymane przez - Received from Odebrano od - Sent to Wysłano do - Payment to yourself Płatność do siebie - Mined Wydobyto - (n/a) (brak) - Transaction status. Hover over this field to show number of confirmations. Status transakcji. Najedź na pole, aby zobaczyć liczbę potwierdzeń. - Date and time that the transaction was received. Data i czas odebrania transakcji. - Type of transaction. Rodzaj transakcji. - Destination address of transaction. Adres docelowy transakcji. - Amount removed from or added to balance. Kwota usunięta z lub dodana do konta. @@ -1966,176 +2402,156 @@ Adres: %4 TransactionView - - All Wszystko - Today Dzisiaj - This week W tym tygodniu - This month W tym miesiącu - Last month W zeszłym miesiącu - This year W tym roku - Range... Zakres... - Received with Otrzymane przez - Sent to Wysłano do - To yourself Do siebie - Mined Wydobyto - Other Inne - Enter address or label to search Wprowadź adres albo etykietę żeby wyszukać - Min amount Min suma - Copy address Kopiuj adres - Copy label Kopiuj etykietę - Copy amount Kopiuj kwotę - Copy transaction ID Skopiuj ID transakcji - Edit label - Edytuj etykietę + Zmień etykietę - Show transaction details Pokaż szczegóły transakcji - - Export Transaction Data - Eksportuj Dane Transakcyjne + Export Transaction History + Eksport historii transakcji + + + Exporting Failed + Błąd przy próbie eksportu + + + There was an error trying to save the transaction history to %1. + Wystąpił błąd przy próbie zapisu historii transakcji do %1. + + + Exporting Successful + Eksport powiódł się + + + The transaction history was successfully saved to %1. + Historia transakcji została zapisana do %1. - Comma separated file (*.csv) CSV (rozdzielany przecinkami) - Confirmed Potwierdzony - Date Data - Type Typ - Label Etykieta - Address Adres - Amount Kwota - ID ID - - Error exporting - Błąd podczas eksportowania - - - - Could not write to file %1. - Błąd zapisu do pliku %1. - - - Range: Zakres: - to do + + WalletFrame + + No wallet has been loaded. + Nie załadowano żadnego portfela. + + WalletModel - Send Coins Wyślij płatność @@ -2143,160 +2559,121 @@ Adres: %4 WalletView - &Export &Eksportuj - Export the data in the current tab to a file Eksportuj dane z aktywnej karty do pliku - Backup Wallet Kopia Zapasowa Portfela - Wallet Data (*.dat) Dane Portfela (*.dat) - Backup Failed Nie udało się wykonać kopii zapasowej - - There was an error trying to save the wallet data to the new location. - Wystąpił błąd przy zapisywaniu portfela do nowej lokalizacji. + There was an error trying to save the wallet data to %1. + Wystąpił błąd przy próbie zapisu pliku portfela do %1. + + + The wallet data was successfully saved to %1. + Plik portfela został zapisany do %1. - Backup Successful Wykonano Kopię Zapasową - - - The wallet data was successfully saved to the new location. - Dane portfela zostały poprawnie zapisane w nowym miejscu. - bitcoin-core - - Myriadcoin version - Wersja Myriadcoin - - - Usage: Użycie: - - Send command to -server or myriadcoind - Wyślij polecenie do -server lub myriadcoind - - - List commands Lista poleceń - Get help for a command Uzyskaj pomoc do polecenia - Options: Opcje: - Specify configuration file (default: myriadcoin.conf) Wskaż plik konfiguracyjny (domyślnie: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) - Wskaż plik pid (domyślnie: myriadcoin.pid) + Wskaż plik pid (domyślnie: bitcoin.pid) - Specify data directory Wskaż folder danych - - Set database cache size in megabytes (default: 25) - Ustaw rozmiar w megabajtach cache-u bazy danych (domyślnie: 25) - - - Listen for connections on <port> (default: 8333 or testnet: 18333) Nasłuchuj połączeń na <port> (domyślnie: 8333 lub testnet: 18333) - Maintain at most <n> connections to peers (default: 125) Utrzymuj maksymalnie <n> połączeń z peerami (domyślnie: 125) - Connect to a node to retrieve peer addresses, and disconnect Podłącz się do węzła aby otrzymać adresy peerów i rozłącz - Specify your own public address Podaj swój publiczny adres - Threshold for disconnecting misbehaving peers (default: 100) Próg po którym nastąpi rozłączenie nietrzymających się zasad peerów (domyślnie: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Czas w sekundach, przez jaki nietrzymający się zasad peerzy nie będą mogli ponownie się podłączyć (domyślnie: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s Wystąpił błąd podczas ustawiania portu RPC %u w tryb nasłuchu: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) Nasłuchuj połączeń JSON-RPC na <port> (domyślnie: 8332 or testnet: 18332) - Accept command line and JSON-RPC commands Akceptuj linię poleceń oraz polecenia JSON-RPC - + Myriadcoin Core RPC client version + + + Run in the background as a daemon and accept commands Uruchom w tle jako daemon i przyjmuj polecenia - Use the test network Użyj sieci testowej - Accept connections from outside (default: 1 if no -proxy or -connect) Akceptuj połączenia z zewnątrz (domyślnie: 1 jeśli nie ustawiono -proxy lub -connect) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2317,616 +2694,689 @@ rpcpassword=%s⏎ Użytkownik i hasło nie mogą być takie same.⏎ Jeśli plik nie istnieje, utwórz go z uprawnieniami tylko-do-odczytu dla właściciela.⏎ Zalecane jest ustawienie alertnotify aby poinformować o problemach:⏎ -na przykład: alertnotify=echo %%s | mail -s "Alarm Myriadcoin" admin@foo.com⏎ +na przykład: alertnotify=echo %%s | mail -s "Alarm Bitcoin" admin@foo.com⏎ + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + Dopuszczalne szyfry (domyślnie: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s Wystąpił błąd podczas ustawiania portu RPC %u w tryb nasłuchu dla IPv6, korzystam z IPv4: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 Skojarz z podanym adresem. Użyj formatu [host]:port dla IPv6 - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. - Nie można zablokować folderu danych %s. Myriadcoin prawdopodobnie już działa. + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + Wejście w tryb testów regresji, który wykorzystuje specjalny łańcuch, w którym bloki można rozwiązać natychmiast. To jest przeznaczone dla narzędzi testowania regresji i rozwoju aplikacji. + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) + - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Błąd: transakcja została odrzucona. Może się to zdarzyć, gdy monety z Twojego portfela zostały już wydane, na przykład gdy używałeś kopii wallet.dat i bitcoiny które tam wydałeś nie zostały jeszcze odjęte z portfela z którego teraz korzystasz. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! - + Transakcja przekracza limit. Możesz wysłać ją płacąc prowizję %s, która zostaje przekazana do węzłów, które ją prześlą i pomoże wspierać sieć Myriadcoin. Czy chcesz zapłacić prowizję? - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - Uruchom polecenie przy otrzymaniu odpowiedniego powiadomienia (%s w poleceniu jest podstawiane za komunikat) - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Wykonaj polecenie, kiedy transakcja portfela ulegnie zmianie (%s w poleceniu zostanie zastąpione przez TxID) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - Ustaw maksymalny rozmiar transakcji o wysokim priorytecie/niskiej prowizji w bajtach (domyślnie: 27000) - - - - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + + + + This is a pre-release test build - use at your own risk - do not use for mining or merchant applications + To jest testowa wersja - używaj na własne ryzyko - nie używaj do wykopywania oraz przy aplikacjach kupieckich + + + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Ostrzeżenie: -paytxfee jest bardzo duży. To jest prowizja za transakcje, którą płacisz, gdy wysyłasz monety. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - Uwaga: Wyświetlone transakcje mogą nie być poprawne! Możliwe, że potrzebujesz aktualizacji bądź inne węzły jej potrzebują - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. Uwaga: Sprawdź czy data i czas na Twoim komputerze są prawidłowe! Jeśli nie to Myriadcoin nie będzie działał prawidłowo. - + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + Ostrzeżenie: Sieć nie wydaje się w pełni zgodna! Niektórzy górnicy wydają się doświadczać problemów. + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + Uwaga: Wygląda na to, że nie ma pełnej zgodności z naszymi peerami! Możliwe, że potrzebujesz aktualizacji bądź inne węzły jej potrzebują + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Ostrzeżenie: błąd odczytu wallet.dat! Wszystkie klucze zostały odczytane, ale może brakować pewnych danych transakcji lub wpisów w książce adresowej lub mogą one być nieprawidłowe. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. Ostrzeżenie: Odtworzono dane z uszkodzonego pliku wallet.dat! Oryginalny wallet.dat został zapisany jako wallet.{timestamp}.bak w %s; jeśli twoje saldo lub transakcje są niepoprawne powinieneś odtworzyć kopię zapasową. - + (default: 1) + (domyślnie: 1) + + + (default: wallet.dat) + (domyślnie: wallet.dat) + + + <category> can be: + + + Attempt to recover private keys from a corrupt wallet.dat Próbuj odzyskać klucze prywatne z uszkodzonego wallet.dat - + Myriadcoin Core Daemon + + + Block creation options: Opcje tworzenia bloku: - + Clear list of wallet transactions (diagnostic tool; implies -rescan) + Wyczyść listę transakcji portfela (narzędzie diagnostyczne; implikuje -rescan) + + Connect only to the specified node(s) Łącz tylko do wskazanego węzła - + Connect through SOCKS proxy + Połącz przez SOCKS proxy + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + podłącz do JSON-RPC na <port> (domyślnie: 8332 lub sieć testowa: 18332) + + + Connection options: + Opcje połączenia: + + Corrupted block database detected Wykryto uszkodzoną bazę bloków - + Debugging/Testing options: + Opcje debugowania/testowania: + + + Disable safemode, override a real safe mode event (default: 0) + + + Discover own IP address (default: 1 when listening and no -externalip) Odkryj własny adres IP (domyślnie: 1 kiedy w trybie nasłuchu i brak -externalip ) - + Do not load the wallet and disable wallet RPC calls + Nie ładuj portfela i wyłącz odwołania RPC + + Do you want to rebuild the block database now? Czy chcesz teraz przebudować bazę bloków? - Error initializing block database Błąd inicjowania bloku bazy danych - Error initializing wallet database environment %s! Błąd inicjowania środowiska bazy portfela %s! - Error loading block database Błąd ładowania bazy bloków - Error opening block database Błąd ładowania bazy bloków - Error: Disk space is low! Błąd: Mało miejsca na dysku! - Error: Wallet locked, unable to create transaction! Błąd: Zablokowany portfel, nie można utworzyć transakcji! - Error: system error: Błąd: błąd systemu: - Failed to listen on any port. Use -listen=0 if you want this. Próba otwarcia jakiegokolwiek portu nie powiodła się. Użyj -listen=0 jeśli tego chcesz. - Failed to read block info Nie udało się odczytać informacji bloku - Failed to read block Nie udało się odczytać bloku. - Failed to sync block index Nie udało się zsynchronizować indeksu bloków. - Failed to write block index Nie udało się zapisać indeksu bloków. - Failed to write block info Nie udało się zapisać informacji bloku - Failed to write block Nie udało się zapisać bloku - Failed to write file info - + Nie udało się zapisać informacji o pliku - Failed to write to coin database Nie udało się zapisać do bazy monet - Failed to write transaction index Nie udało się zapisać indeksu transakcji - Failed to write undo data Nie udało się zapisać danych odtwarzających - + Fee per kB to add to transactions you send + Prowizja za kB dodawana do wysyłanej transakcji + + + Fees smaller than this are considered zero fee (for relaying) (default: + Opłaty mniejsze niż to są uznawane za nieistniejące (przy przekazywaniu) (domyślnie: + + Find peers using DNS lookup (default: 1 unless -connect) Wyszukaj połączenia wykorzystując zapytanie DNS (domyślnie 1 jeśli nie użyto -connect) - + Force safe mode (default: 0) + + + Generate coins (default: 0) Generuj monety (domyślnie: 0) - How many blocks to check at startup (default: 288, 0 = all) Ile bloków sprawdzić przy starcie (domyślnie: 288, 0 = wszystkie) - - How thorough the block verification is (0-4, default: 3) - Jak dokładna jest weryfikacja bloku (0-4, domyślnie: 3) - - - - Not enough file descriptors available. + If <category> is not supplied, output all debugging information. - + Importing... + Importowanie… + + + Incorrect or no genesis block found. Wrong datadir for network? + Nieprawidłowy lub brak bloku genezy. Błędny folder_danych dla sieci? + + + Invalid -onion address: '%s' + Nieprawidłowy adres -onion: '%s' + + + Not enough file descriptors available. + Brak wystarczającej liczby deskryptorów plików. + + + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + Opcje klienta RPC: + + Rebuild block chain index from current blk000??.dat files Odbuduj indeks łańcucha bloków z obecnych plików blk000??.dat - + Select SOCKS version for -proxy (4 or 5, default: 5) + Wybierz wersję proxy SOCKS (4 lub 5, domyślnie 5) + + + Set database cache size in megabytes (%d to %d, default: %d) + Ustaw wielkość pamięci podręcznej w megabajtach (%d do %d, domyślnie: %d) + + + Set maximum block size in bytes (default: %d) + Ustaw maksymalną wielkość bloku w bajtach (domyślnie: %d) + + Set the number of threads to service RPC calls (default: 4) Ustaw liczbę wątków do odwołań RPC (domyślnie: 4) - + Specify wallet file (within data directory) + Określ plik portfela (w obrębie folderu danych) + + + Spend unconfirmed change when sending transactions (default: 1) + Wydawaj niepotwierdzoną resztę podczas wysyłania transakcji (domyślnie: 1) + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + Użycie (przestarzałe, użyj myriadcoin-cli): + + Verifying blocks... Weryfikacja bloków... - Verifying wallet... Weryfikacja portfela... - + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + Portfel %s znajduje się poza folderem danych %s + + + Wallet options: + Opcje portfela: + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + Musisz przebudować bazę używając parametru -reindex aby zmienić -txindex + + Imports blocks from external blk000??.dat file Importuj bloki z zewnętrznego pliku blk000??.dat - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) - Ustaw liczbę wątków skryptu weryfikacji (do 16, 0 = auto, <0 = zostawia taką ilość rdzenie wolnych, domyślnie: 0) + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + Uruchom polecenie przy otrzymaniu odpowiedniego powiadomienia lub gdy zobaczymy naprawdę długie rozgałęzienie (%s w poleceniu jest podstawiane za komunikat) + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + Ustaw maksymalny rozmiar transakcji o wysokim priorytecie/niskiej prowizji w bajtach (domyślnie: 27000) - Information Informacja - - Invalid -tor address: '%s' - Nieprawidłowy adres -tor: '%s' - - - Invalid amount for -minrelaytxfee=<amount>: '%s' - + Nieprawidłowa kwota dla -minrelaytxfee=<amount>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' + Nieprawidłowa kwota dla -mintxfee=<amount>: '%s' + + + Limit size of signature cache to <n> entries (default: 50000) - + Log transaction priority and fee per kB when mining blocks (default: 0) + Loguj priorytety transakcji i opłaty na kB podczas kopania bloków (domyślnie: 0) + + Maintain a full transaction index (default: 0) Utrzymuj pełen indeks transakcji (domyślnie: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) Maksymalny bufor odbioru na połączenie, <n>*1000 bajtów (domyślnie: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) Maksymalny bufor wysyłu na połączenie, <n>*1000 bajtów (domyślnie: 1000) - Only accept block chain matching built-in checkpoints (default: 1) Akceptuj tylko łańcuch bloków zgodny z wbudowanymi punktami kontrolnymi (domyślnie: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Łącz z węzłami tylko w sieci <net> (IPv4, IPv6 lub Tor) - - Output extra debugging information. Implies all other -debug* options + Print block on startup, if found in block index + Wyświetlaj blok podczas uruchamiania, jeżeli znaleziono indeks bloków + + + Print block tree on startup (default: 0) - - Output extra network debugging information + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) - - Prepend debug output with timestamp - Poprzedź informacje debugowania znacznikiem czasowym + RPC server options: + Opcje serwera RPC: + + + Randomly drop 1 of every <n> network messages + Losowo ignoruje 1 z każdych <n> wiadomości sieciowych. + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + Uruchom wątek do okresowego zapisywania portfela (domyślnie: 1) - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) Opcje SSL: (odwiedź Myriadcoin Wiki w celu uzyskania instrukcji) - - Select the version of socks proxy to use (4-5, default: 5) - Wybierz używaną wersje socks serwera proxy (4-5, domyślnie:5) + Send command to Myriadcoin Core + Wyślij komendę do Myriadcoin Core - Send trace/debug info to console instead of debug.log file Wyślij informację/raport do konsoli zamiast do pliku debug.log. - - Send trace/debug info to debugger - Wyślij informację/raport do debuggera. - - - - Set maximum block size in bytes (default: 250000) - Ustaw maksymalny rozmiar bloku w bajtach (domyślnie: 250000) - - - Set minimum block size in bytes (default: 0) Ustaw minimalny rozmiar bloku w bajtach (domyślnie: 0) - + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + Shrink debug.log file on client startup (default: 1 when no -debug) Zmniejsz plik debug.log przy starcie programu (domyślnie: 1 jeśli nie użyto -debug) - Signing transaction failed - + Podpisywanie transakcji nie powiodło się - Specify connection timeout in milliseconds (default: 5000) Wskaż czas oczekiwania bezczynności połączenia w milisekundach (domyślnie: 5000) - + Start Myriadcoin Core Daemon + Uruchom serwer Myriadcoin Core + + System error: Błąd systemu: - Transaction amount too small - + Zbyt niska kwota transakcji - Transaction amounts must be positive - + Kwota transakcji musi być dodatnia - Transaction too large - + Transakcja zbyt duża - Use UPnP to map the listening port (default: 0) Używaj UPnP do mapowania portu nasłuchu (domyślnie: 0) - Use UPnP to map the listening port (default: 1 when listening) Używaj UPnP do mapowania portu nasłuchu (domyślnie: 1 gdy nasłuchuje) - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - Username for JSON-RPC connections Nazwa użytkownika dla połączeń JSON-RPC - Warning Ostrzeżenie - Warning: This version is obsolete, upgrade required! Uwaga: Ta wersja jest przestarzała, aktualizacja wymagana! - - You need to rebuild the databases using -reindex to change -txindex - Musisz przebudować bazę używając parametru -reindex aby zmienić -txindex + Zapping all transactions from wallet... + + + + on startup + podczas uruchamiania + + + version + wersja - wallet.dat corrupt, salvage failed wallet.dat uszkodzony, odtworzenie się nie powiodło - Password for JSON-RPC connections Hasło do połączeń JSON-RPC - Allow JSON-RPC connections from specified IP address Przyjmuj połączenia JSON-RPC ze wskazanego adresu IP - Send commands to node running on <ip> (default: 127.0.0.1) Wysyłaj polecenia do węzła działającego na <ip> (domyślnie: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) Wykonaj polecenie kiedy najlepszy blok ulegnie zmianie (%s w komendzie zastanie zastąpione przez hash bloku) - Upgrade wallet to latest format Zaktualizuj portfel do najnowszego formatu. - Set key pool size to <n> (default: 100) Ustaw rozmiar puli kluczy na <n> (domyślnie: 100) - Rescan the block chain for missing wallet transactions Przeskanuj blok łańcuchów żeby znaleźć zaginione transakcje portfela - Use OpenSSL (https) for JSON-RPC connections Użyj OpenSSL (https) do połączeń JSON-RPC - Server certificate file (default: server.cert) Plik certyfikatu serwera (domyślnie: server.cert) - Server private key (default: server.pem) Klucz prywatny serwera (domyślnie: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Aceptowalne szyfry (domyślnie: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - This help message Ta wiadomość pomocy - Unable to bind to %s on this computer (bind returned error %d, %s) Nie można przywiązać %s na tym komputerze (bind returned error %d, %s) - - Connect through socks proxy - Łączy przez proxy socks - - - Allow DNS lookups for -addnode, -seednode and -connect Zezwól -addnode, -seednode i -connect na łączenie się z serwerem DNS - Loading addresses... Wczytywanie adresów... - Error loading wallet.dat: Wallet corrupted Błąd ładowania wallet.dat: Uszkodzony portfel - Error loading wallet.dat: Wallet requires newer version of Myriadcoin Błąd ładowania wallet.dat: Portfel wymaga nowszej wersji Myriadcoin - Wallet needed to be rewritten: restart Myriadcoin to complete - Portfel wymaga przepisania: zrestartuj Myriadcoina żeby ukończyć + Portfel wymaga przepisania: zrestartuj Bitcoina żeby ukończyć - Error loading wallet.dat Błąd ładowania wallet.dat - Invalid -proxy address: '%s' Nieprawidłowy adres -proxy: '%s' - Unknown network specified in -onlynet: '%s' Nieznana sieć w -onlynet: '%s' - Unknown -socks proxy version requested: %i Nieznana wersja proxy w -socks: %i - Cannot resolve -bind address: '%s' Nie można uzyskać adresu -bind: '%s' - Cannot resolve -externalip address: '%s' Nie można uzyskać adresu -externalip: '%s' - Invalid amount for -paytxfee=<amount>: '%s' Nieprawidłowa kwota dla -paytxfee=<amount>: '%s' - Invalid amount Nieprawidłowa kwota - Insufficient funds Niewystarczające środki - Loading block index... Ładowanie indeksu bloku... - Add a node to connect to and attempt to keep the connection open Dodaj węzeł do łączenia się and attempt to keep the connection open - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - Nie można przywiązać %s na tym komputerze. Myriadcoin prawdopodobnie już działa. - - - - Fee per KB to add to transactions you send - - - - - Loading wallet... Wczytywanie portfela... - Cannot downgrade wallet Nie można dezaktualizować portfela - Cannot write default address Nie można zapisać domyślnego adresu - Rescanning... Ponowne skanowanie... - Done loading Wczytywanie zakończone - To use the %s option Aby użyć opcji %s - Error Błąd - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_pt_BR.ts b/src/qt/locale/bitcoin_pt_BR.ts index 5d50ea8d..0a084c29 100644 --- a/src/qt/locale/bitcoin_pt_BR.ts +++ b/src/qt/locale/bitcoin_pt_BR.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - Sobre o Myriadcoin + About Myriadcoin Core + Sobre o Myriadcoin Core - - <b>Myriadcoin</b> version - Versão do <b>Myriadcoin</b> + <b>Myriadcoin Core</b> version + versão do <b>Myriadcoin Core</b> - This is experimental software. @@ -28,153 +24,128 @@ Distribuido sob a licença de software MIT/X11, veja o arquivo anexo COPYING ou Este produto inclui software desenvolvido pelo Projeto OpenSSL para uso no OpenSSL Toolkit (http://www.openssl.org/), software de criptografia escrito por Eric Young (eay@cryptsoft.com) e sofware UPnP escrito por Thomas Bernard. - Copyright Copyright - - The Myriadcoin developers - Desenvolvedores do Myriadcoin + The Myriadcoin Core developers + Programadores do Myriadcoin Core + + + (%1-bit) + (%1-bit) AddressBookPage - - Address Book - Catálogo de endereços - - - Double-click to edit address or label - Clique duas vezes para editar o endereço ou o etiqueta + Duplo-clique para editar o endereço ou o rótulo - Create a new address Criar um novo endereço - + &New + &Novo + + Copy the currently selected address to the system clipboard Copie o endereço selecionado para a área de transferência do sistema - - &New Address - &Novo endereço + &Copy + &Copiar - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Estes são os seus endereços Myriadcoin para receber pagamentos. Você pode querer enviar um endereço diferente para cada remetente, para acompanhar quem está pagando. + C&lose + &Fechar - &Copy Address &Copiar Endereço - - Show &QR Code - Mostrar &QR Code - - - - Sign a message to prove you own a Myriadcoin address - Assine uma mensagem para provar que você é dono de um endereço Myriadcoin - - - - Sign &Message - &Assinar Mensagem - - - Delete the currently selected address from the list Excluir os endereços selecionados da lista - Export the data in the current tab to a file Exportar os dados na aba atual para um arquivo - &Export &Exportar - - Verify a message to ensure it was signed with a specified Myriadcoin address - Verificar mensagem para se assegurar que ela foi assinada pelo dono de um endereço Myriadcoin específico. - - - - &Verify Message - &Verificar Mensagem - - - &Delete &Excluir - + Choose the address to send coins to + Escolha o endereço para enviar moedas + + + Choose the address to receive coins with + Escolha o endereço para receber moedas + + + C&hoose + Escol&ha + + + Sending addresses + Enviando endereços + + + Receiving addresses + Recebendo endereços + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. Estes são os seus endereços Myriadcoin para receber pagamentos. Você pode querer enviar um endereço diferente para cada remetente, para acompanhar quem está pagando. - - Copy &Label - Copiar &Etiqueta + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Estes são os seus endereços Myriadcoin para receber pagamentos. Recomenda-se a utilização de um novo endereço de recebimento para cada transação. + + + Copy &Label + Copiar &Rótulo - &Edit &Editar - - Send &Coins - Enviar bit&coins + Export Address List + Exportar lista de endereços - - Export Address Book Data - Exportar Catálogo de Endereços - - - Comma separated file (*.csv) Arquivo separado por vírgulas (*. csv) - - Error exporting - Erro ao exportar + Exporting Failed + Exportação Falhou - - Could not write to file %1. - Não foi possível gravar no arquivo %1. + There was an error trying to save the address list to %1. + Ocorreu um erro ao tentar salvar a lista de endereço em %1. AddressTableModel - Label Rótulo - Address Endereço - (no label) (Sem rótulo) @@ -182,140 +153,106 @@ Este produto inclui software desenvolvido pelo Projeto OpenSSL para uso no OpenS AskPassphraseDialog - Passphrase Dialog Janela da Frase de Segurança - Enter passphrase Digite a frase de segurança - New passphrase Nova frase de segurança - Repeat new passphrase Repita a nova frase de segurança - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. Digite a nova frase de seguraça da sua carteira. <br/> Por favor, use uma frase de <b>10 ou mais caracteres aleatórios,</b> ou <b>oito ou mais palavras.</b> - Encrypt wallet Criptografar carteira - This operation needs your wallet passphrase to unlock the wallet. Esta operação precisa de sua frase de segurança para desbloquear a carteira. - Unlock wallet Desbloquear carteira - This operation needs your wallet passphrase to decrypt the wallet. Esta operação precisa de sua frase de segurança para descriptografar a carteira. - Decrypt wallet Descriptografar carteira - Change passphrase Alterar frase de segurança - Enter the old and new passphrase to the wallet. Digite a frase de segurança antiga e nova para a carteira. - Confirm wallet encryption Confirmar criptografia da carteira - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! - Aviso: Se você criptografar sua carteira e perder sua senha, você vai <b>perder todos os seus MYRIADCOINS!</b> + Atenção: Se você criptografar sua carteira e perder sua senha, você vai <b>perder todos os seus MYRIADCOINS!</b> - Are you sure you wish to encrypt your wallet? Tem certeza de que deseja criptografar sua carteira? - 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. IMPORTANTE: Qualquer backup prévio que você tenha feito do seu arquivo wallet deve ser substituído pelo novo e encriptado arquivo wallet gerado. Por razões de segurança, qualquer backup do arquivo wallet não criptografado se tornará inútil assim que você começar a usar uma nova carteira criptografada. - - Warning: The Caps Lock key is on! - Cuidado: A tecla Caps Lock está ligada! + Atenção: A tecla Caps Lock está ligada! - - Wallet encrypted Carteira criptografada - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. O Myriadcoin irá fechar agora para finalizar o processo de encriptação. Lembre-se de que encriptar sua carteira não protege totalmente suas myriadcoins de serem roubadas por malwares que tenham infectado o seu computador. - - - - Wallet encryption failed A criptografia da carteira falhou - Wallet encryption failed due to an internal error. Your wallet was not encrypted. A criptografia da carteira falhou devido a um erro interno. Sua carteira não estava criptografada. - - The supplied passphrases do not match. A frase de segurança fornecida não confere. - Wallet unlock failed - A abertura da carteira falhou + O desbloqueio da carteira falhou - - - The passphrase entered for the wallet decryption was incorrect. A frase de segurança digitada para a descriptografia da carteira estava incorreta. - Wallet decryption failed A descriptografia da carteira falhou - Wallet passphrase was successfully changed. A frase de segurança da carteira foi alterada com êxito. @@ -323,319 +260,286 @@ Este produto inclui software desenvolvido pelo Projeto OpenSSL para uso no OpenS BitcoinGUI - Sign &message... &Assinar Mensagem... - Synchronizing with network... Sincronizando com a rede... - &Overview &Visão geral - + Node + Nó + + Show general overview of wallet Mostrar visão geral da carteira - &Transactions &Transações - Browse transaction history Navegar pelo histórico de transações - - Edit the list of stored addresses and labels - Editar a lista de endereços e rótulos - - - - Show the list of addresses for receiving payments - Mostrar a lista de endereços para receber pagamentos - - - E&xit S&air - Quit application Sair da aplicação - Show information about Myriadcoin Mostrar informação sobre Myriadcoin - About &Qt Sobre &Qt - Show information about Qt Mostrar informações sobre o Qt - &Options... &Opções... - &Encrypt Wallet... &Criptografar Carteira... - &Backup Wallet... &Backup Carteira... - &Change Passphrase... &Mudar frase de segurança... - + &Sending addresses... + Enviando endereço&s... + + + &Receiving addresses... + &Receber endereços... + + + Open &URI... + Abrir &URI... + + Importing blocks from disk... Importando blocos do disco... - Reindexing blocks on disk... Reindexando blocos no disco... - Send coins to a Myriadcoin address - Enviar moedas para um endereço myriadcoin + Enviar moedas para um endereço bitcoin - Modify configuration options for Myriadcoin - Modificar opções de configuração para myriadcoin + Modificar opções de configuração para bitcoin - Backup wallet to another location Fazer cópia de segurança da carteira para uma outra localização - Change the passphrase used for wallet encryption Mudar a frase de segurança utilizada na criptografia da carteira - &Debug window Janela de &Depuração - Open debugging and diagnostic console Abrir console de depuração e diagnóstico - &Verify message... &Verificar mensagem... - - Myriadcoin Myriadcoin - Wallet Carteira - &Send &Enviar - &Receive &Receber - - &Addresses - &Endereços - - - - &About Myriadcoin - &Sobre o Myriadcoin - - - &Show / Hide &Exibir/Ocultar - Show or hide the main Window Mostrar ou esconder a Janela Principal. - Encrypt the private keys that belong to your wallet Criptografar as chaves privadas que pertencem à sua carteira - Sign messages with your Myriadcoin addresses to prove you own them Assine mensagems com seus endereços Myriadcoin para provar que você é dono deles - Verify messages to ensure they were signed with specified Myriadcoin addresses Verificar mensagens para se assegurar que elas foram assinadas pelo dono de Endereços Myriadcoin específicos - &File &Arquivo - &Settings &Configurações - &Help &Ajuda - Tabs toolbar Barra de ferramentas - - [testnet] [testnet] - + Myriadcoin Core + Núcleo Myriadcoin + + + Request payments (generates QR codes and myriadcoin: URIs) + Solicitações de pagamentos (gera códigos QR e myriadcoin: URIs) + + + &About Myriadcoin Core + &A respeito do Myriadcoin Core + + + Show the list of used sending addresses and labels + Mostrar a lista de endereços de envio e rótulos usados + + + Show the list of used receiving addresses and labels + Mostrar a lista de endereços de recebimento usados ​​e rótulos + + + Open a myriadcoin: URI or payment request + Abrir um myriadcoin: URI ou cobrança + + + &Command-line options + Opções de linha de &comando + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + Mostra a mensagem de ajuda do Myriadcoin Core para pegar a lista com os comandos possíveis + + Myriadcoin client Cliente Myriadcoin - %n active connection(s) to Myriadcoin network %n conexão ativa na rede Myriadcoin%n conexões ativas na rede Myriadcoin - No block source available... - + Nenhum servidor disponível... - Processed %1 of %2 (estimated) blocks of transaction history. Processado %1 de %2 blocos (estimado) de histórico de transações. - Processed %1 blocks of transaction history. Processado %1 blocos do histórico de transações. - %n hour(s) %n hora%n horas - %n day(s) %n dia%n dias - %n week(s) %n semana%n semanas - + %1 and %2 + %1 e %2 + + + %n year(s) + %n ano%n anos + + %1 behind %1 atrás - Last received block was generated %1 ago. Último bloco recebido foi gerado %1 atrás. - Transactions after this will not yet be visible. Transações após isso ainda não estão visíveis. - Error Erro - Warning - Cuidado + Atenção - Information Informação - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - A transação está acima do tamanho limite. Você ainda enviar ela com uma taxa de %1, que vai para os nós processam sua transação e ajuda a manter a rede. Você quer pagar a taxa? - - - Up to date Atualizado - Catching up... Recuperando o atraso ... - - Confirm transaction fee - Confirmar taxa de transação - - - Sent transaction Transação enviada - Incoming transaction Transação recebida - Date: %1 Amount: %2 Type: %3 @@ -647,29 +551,14 @@ Tipo: %3 Endereço: %4 - - - URI handling - Manipulação de URI - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - URI não pode ser decodificado! Isso pode ter sido causado por um endereço Myriadcoin inválido ou por parâmetros URI malformados. - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> Carteira está <b>criptografada</b> e atualmente <b>desbloqueada</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> Carteira está <b>criptografada</b> e atualmente <b>bloqueada</b> - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. Um erro fatal ocorreu. Myriadcoin não pode continuar em segurança e irá fechar. @@ -677,329 +566,647 @@ Endereço: %4 ClientModel - Network Alert Alerta da Rede + + CoinControlDialog + + Coin Control Address Selection + Coin Control Address Selection + + + Quantity: + Quantidade: + + + Bytes: + Bytes: + + + Amount: + Quantia: + + + Priority: + Prioridade: + + + Fee: + Taxa: + + + Low Output: + Rendimento baixo: + + + After Fee: + Depois da taxa: + + + Change: + trocar + + + (un)select all + (de)selecionar tudo + + + Tree mode + Modo árvore + + + List mode + Modo lista + + + Amount + Quantidade + + + Address + Endereço + + + Date + Data + + + Confirmations + Confirmações + + + Confirmed + Confirmado + + + Priority + Prioridade + + + Copy address + Copiar endereço + + + Copy label + Copiar rótulo + + + Copy amount + Copiar quantia + + + Copy transaction ID + Copiar ID da transação + + + Lock unspent + Travar não gasto + + + Unlock unspent + Destravar não gasto + + + Copy quantity + Copiar quantidade + + + Copy fee + Copiar taxa + + + Copy after fee + Copia pós-taxa + + + Copy bytes + Copiar bytes + + + Copy priority + Copia prioridade + + + Copy low output + Copia saída de pouco valor + + + Copy change + Copia alteração + + + highest + mais alta possível + + + higher + muito alta + + + high + alta + + + medium-high + média-alta + + + medium + média + + + low-medium + média-baixa + + + low + baixa + + + lower + muito baixa + + + lowest + a mais baixa possível + + + (%1 locked) + (%1 travado) + + + none + nenhum + + + Dust + Sujeira + + + yes + sim + + + no + não + + + This label turns red, if the transaction size is greater than 1000 bytes. + Esse marcador fica vermelho se a transação ultrapassar 1000 bytes. + + + This means a fee of at least %1 per kB is required. + Isso significa que uma taxa de pelo menos %1 por kB é necessária. + + + Can vary +/- 1 byte per input. + Pode variar +/- 1 byte por entrada. + + + Transactions with higher priority are more likely to get included into a block. + Transações de alta prioridade são mais propensas a serem incluídas em um bloco. + + + This label turns red, if the priority is smaller than "medium". + Esse marcador fica vermelho se a prioridade for menor que "média". + + + This label turns red, if any recipient receives an amount smaller than %1. + Esse marcador fica vermelho se qualquer destinatário receber uma quantia menor que %1 + + + This means a fee of at least %1 is required. + Isso significa que uma taxa de pelo menos %1 é necessária. + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + Quantias abaixo de 0,546 multiplicado pela taxa mínima é mostrada como sujeira. + + + This label turns red, if the change is smaller than %1. + Esse marcador fica vermelho se o troco for menor que %1. + + + (no label) + (Sem rótulo) + + + change from %1 (%2) + troco de %1 (%2) + + + (change) + (troco) + + EditAddressDialog - Edit Address Editar Endereço - &Label - &Etiqueta + &Rótulo - - The label associated with this address book entry - A etiqueta associada a esse endereço do catálogo + The label associated with this address list entry + O rótulo associado a esta entrada na lista de endereços + + + The address associated with this address list entry. This can only be modified for sending addresses. + O endereço associado a esta lista de endereços de entrada. Isso só pode ser modificado para o envio de endereços. - &Address &Endereço - - The address associated with this address book entry. This can only be modified for sending addresses. - O endereço associado à essa entrada do seu catálogo de endereços. Isso só pode ser modificado para endereço de envio. - - - New receiving address Novo endereço de recebimento - New sending address Novo endereço de envio - Edit receiving address Editar endereço de recebimento - Edit sending address Editar endereço de envio - The entered address "%1" is already in the address book. O endereço digitado "%1" já se encontra no catálogo de endereços. - The entered address "%1" is not a valid Myriadcoin address. O endereço digitado "%1" não é um endereço Myriadcoin válido. - Could not unlock wallet. - Não foi possível destravar a carteira. + Não foi possível desbloquear a carteira. - New key generation failed. A geração de nova chave falhou. - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt - Myriadcoin-Qt + A new data directory will be created. + Um novo diretório de dados será criado. + + + name + nome + + + Directory already exists. Add %1 if you intend to create a new directory here. + O diretório já existe. Adicione %1 se você pretende criar um novo diretório aqui. + + + Path already exists, and is not a directory. + Esta pasta já existe, e não é um diretório. + + + Cannot create data directory here. + Não é possível criar um diretório de dados aqui. + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + Myriadcoin Core - Opções de linha de comando + + + Myriadcoin Core + Núcleo Myriadcoin - version versão - Usage: Uso: - command-line options opções da linha de comando - UI options opções da UI - Set language, for example "de_DE" (default: system locale) Escolher língua, por exemplo "de_DE" (padrão: localização do sistema) - Start minimized Inicializar minimizado - + Set SSL root certificates for payment request (default: -system-) + Define certificados SSL root para requisição de pagamento (padrão: -system-) + + Show splash screen on startup (default: 1) Mostrar tela inicial ao ligar (padrão: 1) + + Choose data directory on startup (default: 0) + Escolha o diretório de dados na inicialização (padrão: 0) + + + + Intro + + Welcome + Bem-vindo + + + Welcome to Myriadcoin Core. + Bem vindo ao Myriadcoin Core. + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + A primeira vez que o programa é aberto você pode escolher onde o Myriadcoin Core vai guardar os dados. + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + Myriadcoin Core vai fazer download e guardar uma cópia da longa e única cadeia de blocos do Bitcoin: Blockchain. Pelo menos %1 GB de dados serão armazenados nesse diretório e isso aumentará ao longo do tempo. Sua carteira também será armazenada nesse diretório. + + + Use the default data directory + Use o diretório de dados padrão + + + Use a custom data directory: + Use um diretório de dados personalizado: + + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" can not be created. + Erro: dados especificados diretório "% 1" não pode ser criado. + + + Error + Erro + + + GB of free space available + GB de espaço disponível + + + (of %1GB needed) + (Mais de 1GB necessário) + + + + OpenURIDialog + + Open URI + Abrir URI + + + Open payment request from URI or file + Cobrança aberta de URI ou arquivo + + + URI: + URI: + + + Select payment request file + Selecione o arquivo de cobrança + + + Select payment request file to open + Selecione o arquivo de cobrança para ser aberto + OptionsDialog - Options Opções - &Main Principal - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. - + Taxa de transação opcional por kB que ajuda a garantir que suas transações sejam processadas rapidamente. A maioria das transações são de 1 kB. - Pay transaction &fee Pagar taxa de &transação - Automatically start Myriadcoin after logging in to the system. Iniciar Myriadcoin automaticamente após se logar no sistema. - &Start Myriadcoin on system login Iniciar Myriadcoin no login do sistema - + Size of &database cache + Tamanho do banco de &dados do cache + + + MB + MB + + + Number of script &verification threads + Número de threads do script de &verificação + + + Connect to the Myriadcoin network through a SOCKS proxy. + Conectado na rede do Myriadcoin através de proxy SOCKS. + + + &Connect through SOCKS proxy (default proxy): + &Conectado via proxy SOCKS (padrão proxy): + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + Endereço de IP do proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + Ativa as opções de linha de comando que sobrescreve as opções acima: + + Reset all client options to default. Redefinir todas as opções do cliente para opções padrão. - &Reset Options &Redefinir opções - &Network Rede - + (0 = auto, <0 = leave that many cores free) + (0 = automático, <0 = número de cores deixados livres) + + + W&allet + C&arteira + + + Expert + Avançado + + + Enable coin &control features + Habilitar opções de &controle de moedas + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + Se você desabilitar o gasto de um troco não confirmado, o troco da transação não poderá ser utilizado até a transação ter pelo menos uma confirmação. Isso também afeta seu saldo computado. + + + &Spend unconfirmed change + Ga&star mudança não confirmada + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. Abrir as portas do cliente Myriadcoin automaticamente no roteador. Isto só funcionará se seu roteador suportar UPnP e esta função estiver habilitada. - Map port using &UPnP Mapear porta usando &UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - Conectar à rede Myriadcoin através de um proxy SOCKS (ex. quando estiver usando através do Tor) - - - - &Connect through SOCKS proxy: - &Conectar através de um proxy SOCKS: - - - Proxy &IP: &IP do proxy: - - IP address of the proxy (e.g. 127.0.0.1) - Endereço &IP do proxy (ex. 127.0.0.1) - - - &Port: &Porta: - Port of the proxy (e.g. 9050) Porta do serviço de proxy (ex. 9050) - SOCKS &Version: &Versão do SOCKS: - SOCKS version of the proxy (e.g. 5) Versão do proxy SOCKS (ex. 5) - &Window &Janela - Show only a tray icon after minimizing the window. Mostrar apenas um ícone na bandeja ao minimizar a janela. - &Minimize to the tray instead of the taskbar &Minimizar para a bandeja em vez da barra de tarefas. - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. Minimizar em vez de sair do aplicativo quando a janela for fechada. Quando esta opção é escolhida, o aplicativo só será fechado selecionando Sair no menu Arquivo. - M&inimize on close M&inimizar ao sair - &Display &Mostrar - User Interface &language: &Língua da interface com usuário: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. A língua da interface com usuário pode ser escolhida aqui. Esta configuração só surtirá efeito após reiniciar o Myriadcoin. - &Unit to show amounts in: &Unidade usada para mostrar quantidades: - Choose the default subdivision unit to show in the interface and when sending coins. Escolha a unidade padrão de subdivisão para interface mostrar quando enviar myriadcoins. - Whether to show Myriadcoin addresses in the transaction list or not. Mostrar ou não endereços Myriadcoin na lista de transações. - &Display addresses in transaction list Mostrar en&dereços na lista de transações - + Whether to show coin control features or not. + Mostrar ou não opções de controle da moeda. + + &OK &OK - &Cancel &Cancelar - - &Apply - &Aplicar - - - default padrão - + none + nenhum + + Confirm options reset Confirmar redefinição de opções - - Some settings may require a client restart to take effect. - Algumas configurações requerem reinicialização para surtirem efeito. + Client restart required to activate changes. + Reinicialização do aplicativo necessária para efetivar alterações. - - Do you want to proceed? - Você quer continuar? + Client will be shutdown, do you want to proceed? + O aplicativo vai desligar, deseja continuar? - - - Warning - Cuidado + This change would require a client restart. + Essa mudança requer uma reinicialização do aplicativo. - - - This setting will take effect after restarting Myriadcoin. - Esta configuração surtirá efeito após reinicializar o aplicativo Myriadcoin - - - The supplied proxy address is invalid. O endereço proxy fornecido é inválido. @@ -1007,59 +1214,54 @@ Endereço: %4 OverviewPage - Form Formulário - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. A informação mostrada pode estar desatualizada. Sua carteira sincroniza automaticamente com a rede Myriadcoin depois que a conexão é estabelecida, mas este processo pode não estar completo ainda. - - Balance: - Saldo: - - - - Unconfirmed: - Não confirmadas: - - - Wallet Carteira - + Available: + Disponível: + + + Your current spendable balance + Seu saldo atual spendable + + + Pending: + Pendente: + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + Total de transações que ainda têm de ser confirmados, e ainda não contam para o equilíbrio spendable + + Immature: Imaturo: - Mined balance that has not yet matured Saldo minerado que ainda não maturou - + Total: + Total: + + + Your current total balance + Seu saldo total atual + + <b>Recent transactions</b> <b>Transações recentes</b> - - Your current balance - Seu saldo atual - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - Total de transações ainda não confirmadas, e que ainda não contam no saldo atual - - - - out of sync fora de sincronia @@ -1067,579 +1269,856 @@ Endereço: %4 PaymentServer - + URI handling + Manipulação de URI + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + URI não pode ser decodificado! Isso pode ter sido causado por um endereço Myriadcoin inválido ou por parâmetros URI malformados. + + + Requested payment amount of %1 is too small (considered dust). + Valor do pagamento solicitado de 1% é muito pequeno (Considerado poeira). + + + Payment request error + Erro no pedido de pagamento + + Cannot start myriadcoin: click-to-pay handler Não foi possível iniciar myriadcoin: manipulador clique-para-pagar + + Net manager warning + Gerenciador de rede problemático + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + Seu proxy ativo não suporta SOCKS5, que é obrigatório para cobranças via proxy. + + + Payment request fetch URL is invalid: %1 + URL de cobrança é inválida: %1 + + + Payment request file handling + Manipulação de arquivo de cobrança + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + Arquivo de cobrança não pôde ser lido ou processado! Isso pode ter sido causado por um arquivo de cobrança inválido. + + + Unverified payment requests to custom payment scripts are unsupported. + Cobrança não verificada para scripts de pagamento personalizados não é suportado. + + + Refund from %1 + Reembolso de 1% + + + Error communicating with %1: %2 + Erro na comunicação com% 1:% 2 + + + Payment request can not be parsed or processed! + Cobrança não pôde ser processada! + + + Bad response from server %1 + Resposta ruim do servidor% 1 + + + Payment acknowledged + Pagamento reconhecido + + + Network request error + Erro de solicitação de rede + - QRCodeDialog + QObject - - QR Code Dialog - Janela do código QR + Myriadcoin + Myriadcoin - - Request Payment - Requisitar Pagamento + Error: Specified data directory "%1" does not exist. + Erro: diretório de dados especificado "% 1" não existe. - - Amount: - Quantia: + Error: Cannot parse configuration file: %1. Only use key=value syntax. + Erro: Não foi possível interpretar arquivo de configuração: %1. Utilize apenas a sintaxe chave=valor. - - Label: - Etiqueta: + Error: Invalid combination of -regtest and -testnet. + Erro: Combinação inválida de-regtest e testnet. - - Message: - Mensagem: + Myriadcoin Core didn't yet exit safely... + - - &Save As... - &Salvar como... + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Digite um endereço Myriadcoin (exemplo: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + &Salvar imagem - - Error encoding URI into QR Code. - Erro ao codigicar o URI em código QR + &Copy Image + &Copiar Imagem - - The entered amount is invalid, please check. - A quantidade digitada é inválida, favor verificar. - - - - Resulting URI too long, try to reduce the text for label / message. - URI resultante muito longa. Tente reduzir o texto do rótulo ou da mensagem. - - - Save QR Code Salvar código QR - - PNG Images (*.png) - Imagens PNG (*.png) + PNG Image (*.png) + PNG Imagem (*.png) RPCConsole - Client name Nome do cliente - - - - - - - - - - N/A N/A - Client version Versão do cliente - &Information &Informação - + Debug window + Janela de debug + + + General + Geral + + Using OpenSSL version Usando OpenSSL versão - Startup time Horário de inicialização - Network Rede - + Name + Nome + + Number of connections Número de conexões - - On testnet - Na rede de teste - - - Block chain Corrente de blocos - Current number of blocks Quantidade atual de blocos - Estimated total blocks Total estimado de blocos - Last block time Horário do último bloco - &Open &Abrir - - Command-line options - Opções da linha de comando - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - Mostrar mensagem de ajuda do Myriadcoin-Qt para obter uma lista com possíveis opções da linha de comando do Myriadcoin. - - - - &Show - &Mostrar - - - &Console &Console - + &Network Traffic + Tráfico de Rede + + + &Clear + &Limpar + + + Totals + Totais + + + In: + Entrada: + + + Out: + Saída: + + Build date Data do 'build' - - Myriadcoin - Debug window - Myriadcoin - Janela de Depuração - - - - Myriadcoin Core - Núcleo Myriadcoin - - - Debug log file Arquivo de log de Depuração - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. Abrir o arquivo de log de depuração do Myriadcoin do diretório atual de dados. Isso pode levar alguns segundos para arquivos de log grandes. - Clear console Limpar console - Welcome to the Myriadcoin RPC console. Bem-vindo ao console Myriadcoin RPC. - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. Use as setas para cima e para baixo para navegar pelo histórico, e <b>Ctrl-L</b> para limpar a tela. - Type <b>help</b> for an overview of available commands. Digite <b>help</b> para uma visão geral dos comandos disponíveis. + + %1 B + 1% B + + + %1 KB + 1% KB + + + %1 MB + %1 MB + + + %1 GB + %1 GB + + + %1 m + %1 m + + + %1 h + %1 h + + + %1 h %2 m + %1 h %2 m + + + + ReceiveCoinsDialog + + &Amount: + Qu&antia: + + + &Label: + &Rótulo: + + + &Message: + &Mensagem + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + Reutilize um dos endereços de recebimento anteriormente utilizados. Reutilizar um endereço implica em problemas com segurança e privacidade. Não reutilize a menos que esteja refazendo uma cobrança já feita anteriormente. + + + R&euse an existing receiving address (not recommended) + R&eutilize um endereço de recebimento (não recomendado) + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + Uma mensagem opcional que será anexada na cobrança e será mostrada quando ela for aberta. Nota: A mensagem não será enviada com o pagamento pela rede Myriadcoin. + + + An optional label to associate with the new receiving address. + Um marcador opcional para associar ao novo endereço de recebimento. + + + Use this form to request payments. All fields are <b>optional</b>. + Use esse formulário para fazer cobranças. Todos os campos são <b>opcionais</b>. + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + Uma quantia opcional para cobrar. Deixe vazio ou em branco se o pagador puder especificar a quantia. + + + Clear all fields of the form. + Limpa todos os campos do formulário. + + + Clear + Limpar + + + Requested payments history + Histórico de cobranças + + + &Request payment + &Requisitar Pagamento + + + Show the selected request (does the same as double clicking an entry) + Mostra a cobrança selecionada (o mesmo que clicar duas vezes em um registro) + + + Show + Mostrar + + + Remove the selected entries from the list + Remove o registro selecionado da lista + + + Remove + Remover + + + Copy label + Copiar rótulo + + + Copy message + Copiar mensagem + + + Copy amount + Copiar quantia + + + + ReceiveRequestDialog + + QR Code + Código QR + + + Copy &URI + Copiar &URI + + + Copy &Address + &Copiar Endereço + + + &Save Image... + &Salvar Imagem... + + + Request payment to %1 + Requisitar pagamento para %1 + + + Payment information + Informação de pagamento + + + URI + URI + + + Address + Endereço + + + Amount + Quantidade + + + Label + Rótulo + + + Message + Mensagem + + + Resulting URI too long, try to reduce the text for label / message. + URI resultante muito longa. Tente reduzir o texto do rótulo ou da mensagem. + + + Error encoding URI into QR Code. + Erro ao codigicar o URI em código QR + + + + RecentRequestsTableModel + + Date + Data + + + Label + Rótulo + + + Message + Mensagem + + + Amount + Quantidade + + + (no label) + (Sem rótulo) + + + (no message) + (sem mensagem) + + + (no amount) + (sem quantia especificada) + SendCoinsDialog - - - - - - - - Send Coins Enviar dinheiro - + Coin Control Features + Opções de Controle da Moeda + + + Inputs... + Entradas... + + + automatically selected + automaticamente selecionado + + + Insufficient funds! + Saldo insuficiente! + + + Quantity: + Quantidade: + + + Bytes: + Bytes: + + + Amount: + Quantia: + + + Priority: + Prioridade: + + + Fee: + Taxa: + + + Low Output: + Rendimento baixo: + + + After Fee: + Depois da taxa: + + + Change: + trocar + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + Se isso estiver ativo e o endereço de troco estiver vazio ou inválido, o troco será enviado a um novo endereço gerado na hora. + + + Custom change address + Endereço específico de troco + + Send to multiple recipients at once Enviar para vários destinatários de uma só vez - Add &Recipient Adicionar destinatário - - Remove all transaction fields - Remover todos os campos da transação + Clear all fields of the form. + Limpar todos os campos do formulário. - Clear &All Limpar Tudo - Balance: Saldo: - - 123.456 BTC - 123.456 BTC - - - Confirm the send action Confirmar o envio - S&end Enviar - - <b>%1</b> to %2 (%3) - <b>%1</b> para %2 (%3) - - - Confirm send coins Confirmar envio de dinheiro - - Are you sure you want to send %1? - Você tem certeza que deseja enviar %1? + %1 to %2 + %1 para %2 - - and - e + Copy quantity + Copiar quantidade + + + Copy amount + Copiar quantia + + + Copy fee + Copiar taxa + + + Copy after fee + Copia pós-taxa + + + Copy bytes + Copiar bytes + + + Copy priority + Copia prioridade + + + Copy low output + Copia saída de pouco valor + + + Copy change + Copia alteração + + + Total Amount %1 (= %2) + Quantidade Total %1 (= %2) + + + or + ou - The recipient address is not valid, please recheck. O endereço do destinatário não é válido, favor verificar. - The amount to pay must be larger than 0. A quantidade a ser paga precisa ser maior que 0. - The amount exceeds your balance. A quantidade excede seu saldo. - The total exceeds your balance when the %1 transaction fee is included. O total excede seu saldo quando uma taxa de transação de %1 é incluída. - Duplicate address found, can only send to each address once per send operation. Endereço duplicado: pode-se enviar para cada endereço apenas uma vez por transação. - - Error: Transaction creation failed! - Erro: Criação da transação falhou! + Transaction creation failed! + A criação de transação falhou! - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Erro: A transação foi rejeitada. Isso pode acontecer se alguns dos myriadcoins de sua carteira já haviam sido gastos, por exemplo se você usou uma cópia do arquivo wallet.dat e alguns myriadcoins foram gastos na cópia mas não foram marcados como gastos aqui. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + A transação foi rejeitada! Isso pode acontecer se alguns myriadcoins na sua carteira já foram gastos em outro local, por exemplo se você tiver uma cópia do wallet.dat e os myriadcoins tiverem sido gastos na cópia mas não marcados como gastos aqui ainda. + + + Warning: Invalid Myriadcoin address + Atenção: endereço de Myriadcoin inválido + + + (no label) + (Sem rótulo) + + + Warning: Unknown change address + Atenção: endereço de troco desconhecido + + + Are you sure you want to send? + Tem certeza que quer enviar? + + + added as transaction fee + Adicionado como taxa de transação + + + Payment request expired + Pedido de pagamento expirado + + + Invalid payment address %1 + Endereço de pagamento inválido %1 SendCoinsEntry - - Form - Formulário - - - A&mount: Q&uantidade: - Pay &To: Pagar &Para: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) O endereço para onde enviar o pagamento (ex. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book - Digite uma etiqueta para este endereço para adicioná-lo ao catálogo de endereços + Digite um rótulo para este endereço para adicioná-lo ao catálogo de endereços - &Label: - &Etiqueta: + &Rótulo: - - Choose address from address book - Escolha um endereço do seu catálogo + Choose previously used address + Escolher endereço usado anteriormente + + + This is a normal payment. + Este é um pagamento normal. - Alt+A Alt+A - Paste address from clipboard Colar o endereço da área de transferência - Alt+P Alt+P - - Remove this recipient - Remover este destinatário + Remove this entry + Remover esta entrada - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Digite um endereço Myriadcoin (exemplo: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + Mensagem: + + + This is a verified payment request. + Essa é cobrança verificada. + + + Enter a label for this address to add it to the list of used addresses + Digite um rótulo para este endereço para adicioná-lo no catálogo + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + A mensagem que foi anexada ao myriadcoin: URI na qual será gravada na transação para sua referência. Nota: Essa mensagem não será gravada publicamente na rede Myriadcoin. + + + This is an unverified payment request. + Essa é uma cobrança não verificada. + + + Pay To: + Pague Para: + + + Memo: + Memorizar: + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + Myriadcoin Core está desligando... + + + Do not shut down the computer until this window disappears. + Não desligue o computador até esta janela desaparece. SignVerifyMessageDialog - Signatures - Sign / Verify a Message Assinaturas - Assinar / Verificar uma mensagem - &Sign Message &Assinar Mensagem - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. Você pode assinar mensagens com seus endereços para provar que você é o dono deles. Seja cuidadoso para não assinar algo vago, pois ataques de pishing podem tentar te enganar para dar sua assinatura de identidade para eles. Apenas assine afirmações completamente detalhadas com as quais você concorda. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Endereço a ser usado para assinar a mensagem (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book - Escolha um endereço do catálogo + Choose previously used address + Escolha um endereço usado anteriormente - - Alt+A Alt+A - Paste address from clipboard Colar o endereço da área de transferência - Alt+P Alt+P - Enter the message you want to sign here Entre a mensagem que você quer assinar aqui - Signature Assinatura - Copy the current signature to the system clipboard Copiar a assinatura para a área de transferência do sistema - Sign the message to prove you own this Myriadcoin address Assinar mensagem para provar que você é dono deste endereço Myriadcoin - Sign &Message Assinar &Mensagem - Reset all sign message fields Limpar todos os campos de assinatura da mensagem - - Clear &All Limpar Tudo - &Verify Message &Verificar Mensagem - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Forneça o endereço da assinatura, a mensagem (se assegure que você copiou quebras de linha, espaços, tabs, etc. exatamente) e a assinatura abaixo para verificar a mensagem. Cuidado para não ler mais na assinatura do que está escrito na mensagem propriamente, para evitar ser vítima de uma ataque do tipo "man-in-the-middle". - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) O endereço usado para assinar a mensagem (ex. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address Verificar mensagem para se assegurar que ela foi assinada pelo dono de um endereço Myriadcoin específico. - Verify &Message Verificar %Mensagem - Reset all verify message fields Limpar todos os campos de assinatura da mensagem - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Digite um endereço Myriadcoin (exemplo: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature Clique em "Assinar Mensagem" para gerar a assinatura - - Enter Myriadcoin signature - Entre com a assinatura Myriadcoin - - - - The entered address is invalid. O endereço fornecido é inválido. - - - - Please check the address and try again. Por favor, verifique o endereço e tente novamente. - - The entered address does not refer to a key. O endereço fornecido não se refere a uma chave. - Wallet unlock was cancelled. - Destravamento da Carteira foi cancelado. + Desbloqueamento da Carteira foi cancelado. - Private key for the entered address is not available. A chave privada para o endereço fornecido não está disponível. - Message signing failed. Assinatura da mensagem falhou. - Message signed. Mensagem assinada. - The signature could not be decoded. A assinatura não pode ser decodificada. - - Please check the signature and try again. Por favor, verifique a assinatura e tente novamente. - The signature did not match the message digest. A assinatura não corresponde ao "resumo da mensagem". - Message verification failed. Verificação da mensagem falhou. - Message verified. Mensagem verificada. @@ -1647,186 +2126,160 @@ Endereço: %4 SplashScreen - - The Myriadcoin developers - Desenvolvedores do Myriadcoin + Myriadcoin Core + Núcleo Myriadcoin + + + The Myriadcoin Core developers + Programadores do Myriadcoin Core - [testnet] [testnet] + + TrafficGraphWidget + + KB/s + KB/s + + TransactionDesc - Open until %1 Aberto até %1 - + conflicted + em conflito + + %1/offline %1/offline - %1/unconfirmed %1/não confirmadas - %1 confirmations %1 confirmações - Status Status - , broadcast through %n node(s) , difundir atráves de %n nó, difundir atráves de %n nós - Date Data - Source Fonte - Generated Gerados - - From De - - - To Para - - own address seu próprio endereço - label - etiqueta + rótulo - - - - - Credit Crédito - matures in %n more block(s) matura em mais %n blocomatura em mais %n blocos - not accepted não aceito - - - - Debit Débito - Transaction fee Taxa de transação - Net amount Valor líquido - Message Mensagem - Comment Comentário - Transaction ID ID da transação - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Myriadcoins gerados precisam maturar por 120 blocos antes de serem gastos. Quando você gera este bloco, ele é difundido na rede para ser adicionado ao blockchain. Se ele falhar ao ser acrescentado no blockchain, seu estado mudará para "não aceito" e não poderá ser gasto. Isso pode ocasionamente acontecer se outro nó gerou um bloco poucos segundos antes do seu. + Merchant + Mercador + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Bitcoins recém minerados precisam aguardar %1 blocos antes de serem gastos. Quando o bloco foi gerado, ele foi disseminado pela rede para ser adicionado à cadeia de blocos: blockchain. Se ele falhar em ser inserido na cadeia, seu estado será modificado para "não aceito" e ele não poderá ser gasto. Isso pode acontecer eventualmente quando blocos são gerados quase que simultaneamente. - Debug information Informação de depuração - Transaction Transação - Inputs Entradas - Amount Quantidade - true verdadeiro - false falso - , has not been successfully broadcast yet , ainda não foi propagada na rede com sucesso. - Open for %n more block(s) Abrir para mais %n blocoAbrir para mais %n blocos - unknown desconhecido @@ -1834,12 +2287,10 @@ Endereço: %4 TransactionDescDialog - Transaction details Detalhes da transação - This pane shows a detailed description of the transaction Este painel mostra uma descrição detalhada da transação @@ -1847,117 +2298,102 @@ Endereço: %4 TransactionTableModel - Date Data - Type Tipo - Address Endereço - Amount Quantidade + + Immature (%1 confirmations, will be available after %2) + Recém-criado (%1 confirmações, disponível somente após %2) + - Open for %n more block(s) Abrir para mais %n blocoAbrir para mais %n blocos - Open until %1 Aberto até %1 - - Offline (%1 confirmations) - Offline (%1 confirmações) - - - - Unconfirmed (%1 of %2 confirmations) - Não confirmado (%1 of %2 confirmações) - - - Confirmed (%1 confirmations) Confirmado (%1 confirmações) - - - Mined balance will be available when it matures in %n more block(s) - Saldo minerado vai estar disponível quando ele maturar em mais %n blocoSaldo minerado vai estar disponível quando ele maturar em mais %n blocos - - This block was not received by any other nodes and will probably not be accepted! Este bloco não foi recebido por nenhum outro participante da rede e provavelmente não será aceito! - Generated but not accepted Gerado mas não aceito - + Offline + Offline + + + Unconfirmed + Não confirmado + + + Confirming (%1 of %2 recommended confirmations) + Confirmando (%1 de %2 confirmações recomendadas) + + + Conflicted + Conflitou + + Received with Recebido por - Received from Recebido de - Sent to Enviado para - Payment to yourself Pagamento para você mesmo - Mined Minerado - (n/a) (n/a) - Transaction status. Hover over this field to show number of confirmations. Status da transação. Passe o mouse sobre este campo para mostrar o número de confirmações. - Date and time that the transaction was received. Data e hora em que a transação foi recebida. - Type of transaction. Tipo de transação. - Destination address of transaction. Endereço de destino da transação. - Amount removed from or added to balance. Quantidade debitada ou creditada ao saldo. @@ -1965,176 +2401,156 @@ Endereço: %4 TransactionView - - All Todos - Today Hoje - This week Esta semana - This month Este mês - Last month Mês passado - This year Este ano - Range... Intervalo... - Received with Recebido por - Sent to Enviado para - To yourself Para você mesmo - Mined Minerado - Other Outro - Enter address or label to search - Procure um endereço ou etiqueta + Procure um endereço ou rótulo - Min amount Quantidade mínima - Copy address Copiar endereço - Copy label - Copiar etiqueta + Copiar rótulo - Copy amount Copiar quantia - Copy transaction ID Copiar ID da transação - Edit label - Editar etiqueta + Editar rótulo - Show transaction details Mostrar detalhes da transação - - Export Transaction Data - Exportar Dados das Transações + Export Transaction History + Exportar Histórico de Transação + + + Exporting Failed + Exportação Falhou + + + There was an error trying to save the transaction history to %1. + Ocorreu um erro ao tentar salvar o histórico de transação em %1. + + + Exporting Successful + Exportação feita com sucesso + + + The transaction history was successfully saved to %1. + O histórico de transação foi gravado com sucesso em %1. - Comma separated file (*.csv) Arquivo separado por vírgulas (*. csv) - Confirmed Confirmado - Date Data - Type Tipo - Label - Etiqueta + Rótulo - Address Endereço - Amount Quantidade - ID ID - - Error exporting - Erro ao exportar - - - - Could not write to file %1. - Não foi possível gravar no arquivo %1. - - - Range: Intervalo: - to para + + WalletFrame + + No wallet has been loaded. + Nenhuma carteira foi carregada. + + WalletModel - Send Coins Send Coins @@ -2142,160 +2558,121 @@ Endereço: %4 WalletView - &Export &Exportar - Export the data in the current tab to a file Exportar os dados na aba atual para um arquivo - Backup Wallet Fazer cópia de segurança da Carteira - Wallet Data (*.dat) Dados da Carteira (*.dat) - Backup Failed Cópia de segurança Falhou - - There was an error trying to save the wallet data to the new location. - Houve um erro ao tentar salvar os dados da carteira para uma nova localização. + There was an error trying to save the wallet data to %1. + Ocorreu um erro ao tentar salvar os dados da carteira em %1. + + + The wallet data was successfully saved to %1. + Os dados da carteira foram salvos com sucesso em %1. - Backup Successful Backup feito com sucesso - - - The wallet data was successfully saved to the new location. - Os dados da carteira foram salvos com sucesso na nova localização - bitcoin-core - - Myriadcoin version - Versão do Myriadcoin - - - Usage: Uso: - - Send command to -server or myriadcoind - Enviar comando para -server ou myriadcoind - - - List commands Lista de comandos - Get help for a command Obtenha ajuda sobre um comando - Options: Opções: - Specify configuration file (default: myriadcoin.conf) Especifique um arquivo de configurações (padrão: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) Especifique um arquivo de pid (padrão: myriadcoind.pid) - Specify data directory Especificar diretório de dados - - Set database cache size in megabytes (default: 25) - Definir o tamanho do cache do banco de dados em megabytes (padrão: 25) - - - Listen for connections on <port> (default: 8333 or testnet: 18333) Procurar por conexões em <port> (padrão: 8333 ou testnet:18333) - Maintain at most <n> connections to peers (default: 125) Manter no máximo <n> conexões aos peers (padrão: 125) - Connect to a node to retrieve peer addresses, and disconnect Conectar a um nó para receber endereços de participantes, e desconectar. - Specify your own public address Especificar seu próprio endereço público - Threshold for disconnecting misbehaving peers (default: 100) Limite para desconectar peers mal comportados (padrão: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Número de segundos para impedir que peers mal comportados reconectem (padrão: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s Um erro ocorreu ao configurar a porta RPC %u para escuta em IPv4: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) Escutar conexões JSON-RPC na porta <porta> (padrão: 8332 ou testnet: 18332) - Accept command line and JSON-RPC commands Aceitar linha de comando e comandos JSON-RPC - + Myriadcoin Core RPC client version + Versão do cliente Myriadcoin Core RPC + + Run in the background as a daemon and accept commands Rodar em segundo plano como serviço e aceitar comandos - Use the test network Usar rede de teste - Accept connections from outside (default: 1 if no -proxy or -connect) Aceitar conexões externas (padrão: 1 se opções -proxy ou -connect não estiverem presentes) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2320,612 +2697,686 @@ por exemplo: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + Codificadores aceitos (padrão: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s Um erro ocorreu ao configurar a porta RPC %u para escuta em IPv6, voltando ao IPv4: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 Vincular ao endereço fornecido e sempre escutar nele. Use a notação [host]:port para IPv6 - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. - Não foi possível obter exclusividade de escrita no endereço %s. O Myriadcoin provavelmente já está rodando. + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + Restringe a taxa de transações gratuitas para <n>*1000 bytes por minuto (padrão:15) + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + Entre em modo de teste de regressão, que utiliza uma cadeia especial em que os blocos podem ser resolvido imediatamente. Este destina-se a ferramentas de teste de regressão e de desenvolvimento de aplicativos. + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + Entra no modo de teste de regressão, que usa uma cadeia especial onde os blocos podem ser resolvidos instantaneamente. + + + Error: Listening for incoming connections failed (listen returned error %d) + Erro: Falha ao tentar aguardar conexões de entrada (erro retornado %d) - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. Erro: A transação foi rejeitada. Isso pode acontecer se alguns dos myriadcoins de sua carteira já haviam sido gastos, por exemplo se você usou uma cópia do arquivo wallet.dat e alguns myriadcoins foram gastos na cópia mas não foram marcados como gastos aqui. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! Erro: Esta transação requer uma taxa de transação de pelo menos %s, por causa sua quantidade, complexidade ou uso de dinheiro recebido recentemente. - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - Executar comando quando um alerta relevante for recebido (%s no comando será substituído pela mensagem) - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Executar comando quando uma transação da carteira mudar (%s no comando será substituído por TxID) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - Determinar tamanho máximo de transações de alta-prioridade/baixa-taxa em bytes (padrão: 27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + Taxas menores que esta são consideradas taxa zero (para criação da transação) (padrão: + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + Descarrega a atividade do banco de dados da memória para log em disco a cada <n> megabytes (padrão: 100) + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + Quão completa a verificação de blocos do -checkblocks é (0-4, padrão: 3) + + + In this mode -genproclimit controls how many blocks are generated immediately. + Neste modo -genproclimit controla quantos blocos são gerados imediatamente. + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + Define o número de threads de verificação de script (%u a %d, 0 = automático, <0 = número de cores deixados livres, padrão: %d) + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + Define o limite de processador para quando geração está ativa (-1 = ilimitada, padrão: -1) - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications Este pode ser um build de teste pré-lançamento - use por sua conta e risco - não use para mineração ou aplicações de comércio. - + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + Impossível ouvir em %s neste computador. Myriadcoin Core já está sendo executado provavelmente. + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + Use proxy SOCKS5 separado para alcançar nós via Tor hidden services (padrão: -proxy) + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - Cuidado: valor de -paytxfee escolhido é muito alto! Este é o valor da taxa de transação que você irá pagar se enviar a transação. + Atenção: valor de -paytxfee escolhido é muito alto! Este é o valor da taxa de transação que você irá pagar se enviar a transação. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - Cuidado: Transações mostradas podem não estar corretas! Você pode precisar atualizar, ou outros nós podem precisar atualizar o cliente. - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. - Cuidado: Por favor, verifique que a data e hora do seu computador estão corretas! If o seu relógio estiver errado, o Myriadcoin não irá funcionar corretamente. + Atenção: Por favor, verifique que a data e hora do seu computador estão corretas! Se o seu relógio estiver errado, o Myriadcoin não irá funcionar corretamente. + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + Atenção: A rede não parecem concordar plenamente! Alguns mineiros parecem estar enfrentando problemas. + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + Atenção: Nós não parecemos concordar plenamente com nossos colegas! Você pode precisar atualizar ou outros nós podem precisar atualizar. - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Cuidado: erro ao ler arquivo wallet.dat! Todas as chaves foram lidas corretamente, mas dados transações e do catálogo de endereços podem estar faltando ou estar incorretas. + Atenção: erro ao ler arquivo wallet.dat! Todas as chaves foram lidas corretamente, mas dados de transações e do catálogo de endereços podem estar faltando ou incorretos. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - Aviso: wallet.dat corrompido, dados recuperados! Arquivo wallet.dat original salvo como wallet.{timestamp}.bak em %s; se seu saldo ou transações estiverem incorretos, você deve restauras o backup. + Atenção: wallet.dat corrompido, dados recuperados! Arquivo wallet.dat original salvo como wallet.{timestamp}.bak em %s; se seu saldo ou transações estiverem incorretos, você deve restaurar o backup. + + + (default: 1) + (padrão: 1) + + + (default: wallet.dat) + (padrão: wallet.dat) + + + <category> can be: + <category> pode ser: - Attempt to recover private keys from a corrupt wallet.dat Tentar recuperar chaves privadas de um arquivo wallet.dat corrompido - + Myriadcoin Core Daemon + Myriadcoin Core Daemon + + Block creation options: Opções de criação de blocos: - + Clear list of wallet transactions (diagnostic tool; implies -rescan) + Limpa a lista de transações da carteira (ferramenta de diagnóstico; implica -rescan) + + Connect only to the specified node(s) Conectar apenas a nó(s) específico(s) - + Connect through SOCKS proxy + Conecta através de proxy SOCKS + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + Conectar-se ao JSON-RPC em <port> (padrão: 8332 or testnet: 18332) + + + Connection options: + Opções de conexão: + + Corrupted block database detected Detectado Banco de dados de blocos corrompido - + Debugging/Testing options: + Opções de Debug/Teste: + + + Disable safemode, override a real safe mode event (default: 0) + Desabilita modo seguro, sobrepõe um evento de modo seguro real (padrão: 0) + + Discover own IP address (default: 1 when listening and no -externalip) Descobrir os próprios endereços IP (padrão: 1 quando no modo listening e opção -externalip não estiver presente) - + Do not load the wallet and disable wallet RPC calls + Não carrega a carteira e desabilita as chamadas RPC para a carteira + + Do you want to rebuild the block database now? Você quer reconstruir o banco de dados de blocos agora? - Error initializing block database Erro ao inicializar banco de dados de blocos - Error initializing wallet database environment %s! Erro ao inicializar ambiente de banco de dados de carteira %s! - Error loading block database Erro ao carregar banco de dados de blocos - Error opening block database Erro ao abrir banco de dados de blocos - Error: Disk space is low! Erro: Espaço em disco insuficiente! - Error: Wallet locked, unable to create transaction! - Erro: Carteira travada, impossível criar transação! + Erro: Carteira bloqueada, impossível criar transação! - Error: system error: Erro: erro de sistema - Failed to listen on any port. Use -listen=0 if you want this. Falha ao escutar em qualquer porta. Use -listen=0 se você quiser isso. - Failed to read block info Falha ao ler informação de bloco - Failed to read block Falha ao ler bloco - Failed to sync block index Falha ao sincronizar índice de blocos - Failed to write block index Falha ao escrever índice de blocos - Failed to write block info Falha ao escrever informações de bloco - Failed to write block Falha ao escrever bloco - Failed to write file info Falha ao escrever informções de arquivo - Failed to write to coin database Falha ao escrever banco de dados de moedas - Failed to write transaction index Falha ao escrever índice de transações - Failed to write undo data Falha ao escrever dados para desfazer ações - + Fee per kB to add to transactions you send + Taxa por kB para adicionar às transações que você envia + + + Fees smaller than this are considered zero fee (for relaying) (default: + Taxas menores que esta são consideradas taxa zero (para relay) (padrão: + + Find peers using DNS lookup (default: 1 unless -connect) Procurar pares usando consulta de DNS (padrão: 1 a menos que a opção -connect esteja presente) - - Generate coins (default: 0) - + Force safe mode (default: 0) + Força modo seguro (padrão: 0) + + + Generate coins (default: 0) + Gerar moedas (padrão: 0) - How many blocks to check at startup (default: 288, 0 = all) Quantos blocos checar ao inicializar (padrão: 288, 0 = todos) - - How thorough the block verification is (0-4, default: 3) - Quão minuciosa é a verificação dos blocos (0-4, padrão: 3) + If <category> is not supplied, output all debugging information. + Se <category> não for informada, logar toda informação de debug. + + + Importing... + Importando... + + + Incorrect or no genesis block found. Wrong datadir for network? + Bloco gênese incorreto ou não encontrado. Datadir errado para a rede? + + + Invalid -onion address: '%s' + Endereço -onion inválido: '%s' - Not enough file descriptors available. - + Decriptadores de arquivos disponíveis insuficientes. + + + Prepend debug output with timestamp (default: 1) + Adiciona timestamp como prefixo no debug (padrão: 1) + + + RPC client options: + Opções de cliente RPC: - Rebuild block chain index from current blk000??.dat files Reconstruir índice de blockchain a partir dos arquivos atuais blk000??.dat - - Set the number of threads to service RPC calls (default: 4) - Defina o número de threads de script de verificação. (Padrão: 4) + Select SOCKS version for -proxy (4 or 5, default: 5) + Seleciona versão SOCKS para -proxy (4 ou 5, padrão: 5) + + + Set database cache size in megabytes (%d to %d, default: %d) + Define o tamanho do cache do banco de dados em megabytes (%d para %d, padrão: %d) + + + Set maximum block size in bytes (default: %d) + Define o tamanho máximo de cada bloco em bytes (padrão: %d) + + + Set the number of threads to service RPC calls (default: 4) + Defina o número de threads de chamadas RPC (padrão: 4) + + + Specify wallet file (within data directory) + Especifique o arquivo da carteira (dentro do diretório de dados) + + + Spend unconfirmed change when sending transactions (default: 1) + Permite gastar troco não confirmado ao criar transações (padrão: 1) + + + This is intended for regression testing tools and app development. + Isso é usado para testes de regressão e ferramentas de desenvolvimento. + + + Usage (deprecated, use myriadcoin-cli): + Exemplo de uso (obsoleto, use myriadcoin-cli): - Verifying blocks... Verificando blocos... - Verifying wallet... Verificando carteira... - + Wait for RPC server to start + Aguarde um servidor RPC para iniciar + + + Wallet %s resides outside data directory %s + Carteira de% s reside fora de dados do diretório% s + + + Wallet options: + Opções da Carteira: + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + Atenção: Parâmetro obsoleto -debugnet foi ignorado, use -debug=net + + + You need to rebuild the database using -reindex to change -txindex + Você precisa reconstruir o banco de dados utilizando-reindexar a mudar-txindex + + Imports blocks from external blk000??.dat file Importar blocos de um arquivo externo blk000??.dat - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) - + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + Não foi possível obter proteção exclusiva ao diretório de dados %s. Myriadcoin Core já está sendo executado provavelmente. + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + Executa o comando quando um alerta relevante é recebido ou vemos um longo garfo (% s em cmd é substituída pela mensagem) + + + Output debugging information (default: 0, supplying <category> is optional) + Informação de saída de debug (padrão: 0, definir <category> é opcional) + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + Define o tamanho máximo de alta-prioridade por taxa baixa nas transações em bytes (padrão: %d) - Information Informação - - Invalid -tor address: '%s' - Endereço -tor inválido: '%s' - - - Invalid amount for -minrelaytxfee=<amount>: '%s' - + Quantidade inválida para -minrelaytxfee=<amount>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' - + Inválido montante for-mintxfee = <amount>: '% s' + + + Limit size of signature cache to <n> entries (default: 50000) + Limita tamanho do cache de assinaturas em <n> entradas (padrão: 50000) + + + Log transaction priority and fee per kB when mining blocks (default: 0) + Registra log da prioridade de transação e taxa por kB quando minerando blocos (padrão: 0) - Maintain a full transaction index (default: 0) Manter índice completo de transações (padrão: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) Buffer máximo de recebimento por conexão, <n>*1000 bytes (padrão: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) Buffer máximo de envio por conexão, <n>*1000 bytes (padrão: 1000) - Only accept block chain matching built-in checkpoints (default: 1) Apenas aceitar cadeia de blocos correspondente a marcas de verificação internas (padrão: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Apenas conectar em nós na rede <net> (IPv4, IPv6, ou Tor) - - Output extra debugging information. Implies all other -debug* options - Mostrar informações extras de depuração. Implica em outras opções -debug* + Print block on startup, if found in block index + Imprime bloco ao iniciar, se encontrado no índice de blocos - - Output extra network debugging information - Mostrar informações extras de depuração da rede + Print block tree on startup (default: 0) + Imprime árvore de blocos ao iniciar (padrão: 0) - - Prepend debug output with timestamp - Pré anexar a saída de debug com estampa de tempo + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + Opções RPC SSL: (veja o Myriadcoin Wiki para instruções de configuração SSL) + + + RPC server options: + Opções do servidor RPC: + + + Randomly drop 1 of every <n> network messages + Aleatoriamente descarta 1 em cada <n> mensagens da rede + + + Randomly fuzz 1 of every <n> network messages + Aleatoriamente embaralha 1 em cada <n> mensagens da rede + + + Run a thread to flush wallet periodically (default: 1) + Executa uma thread para limpar a carteira periodicamente (padrão: 1) - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) Opções SSL: (veja a Wiki do Myriadcoin para instruções de configuração SSL) - - Select the version of socks proxy to use (4-5, default: 5) - Escolher versão do proxy socks a ser usada (4-5, padrão: 5) + Send command to Myriadcoin Core + Enviar comando ao Myriadcoin Core - Send trace/debug info to console instead of debug.log file Mandar informação de trace/debug para o console em vez de para o arquivo debug.log - - Send trace/debug info to debugger - Mandar informação de trace/debug para o debugger - - - - Set maximum block size in bytes (default: 250000) - Determinar tamanho máximo de bloco em bytes (padrão: 250000) - - - Set minimum block size in bytes (default: 0) Determinar tamanho mínimo de bloco em bytes (padrão: 0) - + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + Define a flag DB_PRIVATE no ambiente de banco de dados da carteira (padrão: 1) + + + Show all debugging options (usage: --help -help-debug) + Exibir todas opções de debug (uso: --help -help-debug) + + + Show benchmark information (default: 0) + Exibir informação de benchmark (padrão: 0) + + Shrink debug.log file on client startup (default: 1 when no -debug) Encolher arquivo debug.log ao iniciar o cliente (padrão 1 se opção -debug não estiver presente) - Signing transaction failed - + Assinatura de transação falhou - Specify connection timeout in milliseconds (default: 5000) Especifique o tempo limite (timeout) da conexão em milissegundos (padrão: 5000) - + Start Myriadcoin Core Daemon + Inicializar serviço Myriadcoin Core + + System error: Erro de sistema: - Transaction amount too small - + Quantidade da transação muito pequena. - Transaction amounts must be positive - + As quantidades das transações devem ser positivas. - Transaction too large - + Transação muito larga - Use UPnP to map the listening port (default: 0) Usar UPnP para mapear porta de escuta (padrão: 0) - Use UPnP to map the listening port (default: 1 when listening) Usar UPnP para mapear porta de escuta (padrão: 1 quando estiver escutando) - - Use proxy to reach tor hidden services (default: same as -proxy) - Usar proxy para alcançar serviços escondidos (padrão: mesmo que -proxy) - - - Username for JSON-RPC connections Nome de usuário para conexões JSON-RPC - Warning - Cuidado + Atenção - Warning: This version is obsolete, upgrade required! - Cuidado: Esta versão está obsoleta, atualização exigida! + Atenção: Esta versão está obsoleta, atualização exigida! - - You need to rebuild the databases using -reindex to change -txindex - Você precisa reconstruir os bancos de dados usando -reindex para mudar -txindex + Zapping all transactions from wallet... + Aniquilando todas as transações da carteira... + + + on startup + ao iniciar + + + version + versão - wallet.dat corrupt, salvage failed wallet.dat corrompido, recuperação falhou - Password for JSON-RPC connections Senha para conexões JSON-RPC - Allow JSON-RPC connections from specified IP address Permitir conexões JSON-RPC de endereços IP específicos - Send commands to node running on <ip> (default: 127.0.0.1) - Enviar comando para nó rodando em <ip> (pardão: 127.0.0.1) + Enviar comando para nó rodando em <ip> (padrão: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) Executar comando quando o melhor bloco mudar (%s no comando será substituído pelo hash do bloco) - Upgrade wallet to latest format Atualizar carteira para o formato mais recente - Set key pool size to <n> (default: 100) Determinar tamanho do pool de endereços para <n> (padrão: 100) - Rescan the block chain for missing wallet transactions Re-escanear blocos procurando por transações perdidas da carteira - Use OpenSSL (https) for JSON-RPC connections Usar OpenSSL (https) para conexões JSON-RPC - Server certificate file (default: server.cert) Arquivo de certificado do servidor (padrão: server.cert) - Server private key (default: server.pem) Chave privada do servidor (padrão: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Algoritmos de criptografia aceitos (padrão: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - This help message Esta mensagem de ajuda - Unable to bind to %s on this computer (bind returned error %d, %s) Impossível vincular a %s neste computador (bind retornou erro %d, %s) - - Connect through socks proxy - Conectar através de um proxy socks - - - Allow DNS lookups for -addnode, -seednode and -connect Permitir consultas DNS para -addnode, -seednode e -connect - Loading addresses... Carregando endereços... - Error loading wallet.dat: Wallet corrupted Erro ao carregar wallet.dat: Carteira corrompida - Error loading wallet.dat: Wallet requires newer version of Myriadcoin Erro ao carregar wallet.dat: Carteira requer uma versão mais nova do Myriadcoin - Wallet needed to be rewritten: restart Myriadcoin to complete A Carteira precisou ser reescrita: reinicie o Myriadcoin para completar - Error loading wallet.dat Erro ao carregar wallet.dat - Invalid -proxy address: '%s' Endereço -proxy inválido: '%s' - Unknown network specified in -onlynet: '%s' Rede desconhecida especificada em -onlynet: '%s' - Unknown -socks proxy version requested: %i Versão desconhecida do proxy -socks requisitada: %i - Cannot resolve -bind address: '%s' Impossível encontrar o endereço -bind: '%s' - Cannot resolve -externalip address: '%s' Impossível encontrar endereço -externalip: '%s' - Invalid amount for -paytxfee=<amount>: '%s' Quantidade inválida para -paytxfee=<quantidade>: '%s' - Invalid amount Quantidade inválida - Insufficient funds Saldo insuficiente - Loading block index... Carregando índice de blocos... - Add a node to connect to and attempt to keep the connection open Adicionar um nó com o qual se conectar e tentar manter a conexão ativa - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - Impossível vincular a %s neste computador. O Myriadcoin provavelmente já está rodando. - - - - Fee per KB to add to transactions you send - Taxa por KB a ser acrescida nas transações que você enviar - - - Loading wallet... Carregando carteira... - Cannot downgrade wallet Não é possível fazer downgrade da carteira - Cannot write default address Não foi possível escrever no endereço padrão - Rescanning... Re-escaneando... - Done loading Carregamento terminado - To use the %s option Para usar a opção %s - Error Erro - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_pt_PT.ts b/src/qt/locale/bitcoin_pt_PT.ts index 4a47a307..fc231a3b 100644 --- a/src/qt/locale/bitcoin_pt_PT.ts +++ b/src/qt/locale/bitcoin_pt_PT.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - Sobre Myriadcoin + About Myriadcoin Core + Sobre o Myriadcoin Core - - <b>Myriadcoin</b> version - Versão do <b>Myriadcoin</b> + <b>Myriadcoin Core</b> version + versão do <b>Myriadcoin Core</b> - This is experimental software. @@ -28,294 +24,235 @@ Distribuído sob uma licença de software MIT/X11, por favor verifique o ficheir Este produto inclui software desenvolvido pelo Projecto OpenSSL para uso no OpenSSL Toolkit (http://www.openssl.org/), software criptográfico escrito por Eric Young (eay@cryptsoft.com) e software UPnP escrito por Thomas Bernard. - Copyright Copyright - - The Myriadcoin developers - Os programadores Myriadcoin + The Myriadcoin Core developers + Os programadores Myriadcoin Core + + + (%1-bit) + AddressBookPage - - Address Book - Livro de endereços - - - Double-click to edit address or label Clique duas vezes para editar o endereço ou o rótulo - Create a new address Criar um novo endereço - + &New + &Novo + + Copy the currently selected address to the system clipboard - Copie o endereço selecionado para a área de transferência + Copiar o endereço selecionado para a área de transferência - - &New Address - &Novo Endereço + &Copy + &Copiar - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Estes são os seus endereços Myriadcoin para receber pagamentos. Poderá enviar um endereço diferente para cada remetente para poder identificar os pagamentos. + C&lose + F&echar - &Copy Address &Copiar Endereço - - Show &QR Code - Mostrar Código &QR - - - - Sign a message to prove you own a Myriadcoin address - Assine uma mensagem para provar que é dono de um endereço Myriadcoin - - - - Sign &Message - Assinar &Mensagem - - - Delete the currently selected address from the list Apagar o endereço selecionado da lista - Export the data in the current tab to a file Exportar os dados no separador actual para um ficheiro - &Export &Exportar - - Verify a message to ensure it was signed with a specified Myriadcoin address - Verifique a mensagem para assegurar que foi assinada com o endereço Myriadcoin especificado - - - - &Verify Message - &Verificar Mensagem - - - &Delete - E&liminar + E&liminar\ + + + Choose the address to send coins to + Escolha o endereço para o qual pretende enviar moedas + + + Choose the address to receive coins with + Escolha o endereço com o qual pretende receber moedas + + + C&hoose + Escol&her + + + Sending addresses + Endereços de envio + + + Receiving addresses + Endereços de depósito - These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - Estes são os seus endereços Myriadcoin para enviar pagamentos. Verifique sempre o valor e a morada de envio antes de enviar moedas. + Estes são os seus endereços Myriadcoin para enviar pagamentos. Verifique sempre o valor e o endereço de envio antes de enviar moedas. + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Estes são os seus endereços Myriadcoin para receber pagamentos. É recomendado que utilize um endereço novo para cada transacção. - Copy &Label Copiar &Rótulo - &Edit &Editar - - Send &Coins - Enviar &Moedas + Export Address List + Exportar Lista de Endereços - - Export Address Book Data - Exportar dados do Livro de Endereços - - - Comma separated file (*.csv) Ficheiro separado por vírgulas (*.csv) - - Error exporting - Erro ao exportar + Exporting Failed + A Exportação Falhou - - Could not write to file %1. - Não foi possível escrever para o ficheiro %1. + There was an error trying to save the address list to %1. + Ocorreu um erro ao tentar guardar a lista de endereços em %1. AddressTableModel - Label Rótulo - Address Endereço - (no label) - (Sem rótulo) + (sem rótulo) AskPassphraseDialog - Passphrase Dialog - Diálogo de Frase-Passe + Diálogo de frase de segurança - Enter passphrase - Escreva a frase de segurança + Insira a frase de segurança - New passphrase Nova frase de segurança - Repeat new passphrase Repita a nova frase de segurança - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Escreva a nova frase de seguraça da sua carteira. <br/> Por favor, use uma frase de <b>10 ou mais caracteres aleatórios,</b> ou <b>oito ou mais palavras</b>. + Insira a nova frase de segurança da sua carteira.<br/>Por favor, use uma frase de <b>10 ou mais caracteres aleatórios,</b> ou <b>oito ou mais palavras</b>. - Encrypt wallet Encriptar carteira - This operation needs your wallet passphrase to unlock the wallet. A sua frase de segurança é necessária para desbloquear a carteira. - Unlock wallet Desbloquear carteira - This operation needs your wallet passphrase to decrypt the wallet. A sua frase de segurança é necessária para desencriptar a carteira. - Decrypt wallet Desencriptar carteira - Change passphrase Alterar frase de segurança - Enter the old and new passphrase to the wallet. - Escreva a frase de segurança antiga seguida da nova para a carteira. + Escreva a antiga frase de segurança da carteira, seguida da nova. - Confirm wallet encryption Confirmar encriptação da carteira - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! Atenção: Se encriptar a carteira e perder a sua senha irá <b>PERDER TODOS OS SEUS MYRIADCOINS</b>! - Are you sure you wish to encrypt your wallet? Tem a certeza que deseja encriptar a carteira? - 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. - IMPORTANTE: Qualquer cópia de segurança anterior da carteira deverá ser substituída com o novo, actualmente encriptado, ficheiro de carteira. Por razões de segurança, cópias de segurança não encriptadas efectuadas anteriormente do ficheiro da carteira tornar-se-ão inúteis assim que começar a usar a nova carteira encriptada. + IMPORTANTE: Qualquer cópia de segurança da carteira anterior deverá ser substituída com o novo ficheiro de carteira, agora encriptado. Por razões de segurança, cópias de segurança não encriptadas tornar-se-ão inúteis assim que começar a usar a nova carteira encriptada. - - Warning: The Caps Lock key is on! Atenção: A tecla Caps Lock está activa! - - Wallet encrypted Carteira encriptada - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. O cliente Myriadcoin irá agora ser fechado para terminar o processo de encriptação. Recorde que a encriptação da sua carteira não protegerá totalmente os seus myriadcoins de serem roubados por programas maliciosos que infectem o seu computador. - - - - Wallet encryption failed A encriptação da carteira falhou - Wallet encryption failed due to an internal error. Your wallet was not encrypted. A encriptação da carteira falhou devido a um erro interno. A carteira não foi encriptada. - - The supplied passphrases do not match. As frases de segurança fornecidas não coincidem. - Wallet unlock failed O desbloqueio da carteira falhou - - - The passphrase entered for the wallet decryption was incorrect. A frase de segurança introduzida para a desencriptação da carteira estava incorreta. - Wallet decryption failed A desencriptação da carteira falhou - Wallet passphrase was successfully changed. A frase de segurança da carteira foi alterada com êxito. @@ -323,319 +260,286 @@ Este produto inclui software desenvolvido pelo Projecto OpenSSL para uso no Open BitcoinGUI - Sign &message... Assinar &mensagem... - Synchronizing with network... - Sincronizando com a rede... + A sincronizar com a rede... - &Overview Visã&o geral - + Node + Nó + + Show general overview of wallet Mostrar visão geral da carteira - &Transactions &Transações - Browse transaction history Navegar pelo histórico de transações - - Edit the list of stored addresses and labels - Editar a lista de endereços e rótulos - - - - Show the list of addresses for receiving payments - Mostrar a lista de endereços para receber pagamentos - - - E&xit Fec&har - Quit application Sair da aplicação - Show information about Myriadcoin - Mostrar informação sobre Myriadcoin + Mostrar informação sobre o Myriadcoin - About &Qt Sobre &Qt - Show information about Qt Mostrar informação sobre Qt - &Options... &Opções... - &Encrypt Wallet... E&ncriptar Carteira... - &Backup Wallet... &Guardar Carteira... - &Change Passphrase... Mudar &Palavra-passe... - + &Sending addresses... + A &enviar endereços... + + + &Receiving addresses... + A &receber endereços... + + + Open &URI... + Abrir &URI... + + Importing blocks from disk... - Importando blocos do disco... + A importar blocos do disco... - Reindexing blocks on disk... - Reindexando blocos no disco... + A reindexar blocos no disco... - Send coins to a Myriadcoin address - Enviar moedas para um endereço myriadcoin + Enviar moedas para um endereço bitcoin - Modify configuration options for Myriadcoin - Modificar opções de configuração para myriadcoin + Modificar opções de configuração para bitcoin - Backup wallet to another location Faça uma cópia de segurança da carteira para outra localização - Change the passphrase used for wallet encryption Mudar a frase de segurança utilizada na encriptação da carteira - &Debug window Janela de &depuração - Open debugging and diagnostic console Abrir consola de diagnóstico e depuração - &Verify message... &Verificar mensagem... - - Myriadcoin Myriadcoin - Wallet Carteira - &Send &Enviar - &Receive &Receber - - &Addresses - E&ndereços - - - - &About Myriadcoin - &Sobre o Myriadcoin - - - &Show / Hide Mo&strar / Ocultar - Show or hide the main Window - Mostrar ou esconder a Janela principal + Mostrar ou esconder a janela principal - Encrypt the private keys that belong to your wallet Encriptar as chaves privadas que pertencem à sua carteira - Sign messages with your Myriadcoin addresses to prove you own them Assine mensagens com os seus endereços Myriadcoin para provar que os controla - Verify messages to ensure they were signed with specified Myriadcoin addresses Verifique mensagens para assegurar que foram assinadas com o endereço Myriadcoin especificado - &File &Ficheiro - &Settings Con&figurações - &Help A&juda - Tabs toolbar Barra de separadores - - [testnet] [rede de testes] - + Myriadcoin Core + Myriadcoin Core + + + Request payments (generates QR codes and myriadcoin: URIs) + Solicitar pagamentos (gera códigos QR e URIs myriadcoin:) + + + &About Myriadcoin Core + &Sobre o Myriadcoin Core + + + Show the list of used sending addresses and labels + Mostrar a lista de rótulos e endereços de envio usados + + + Show the list of used receiving addresses and labels + Mostrar a lista de rótulos e endereços de receção usados + + + Open a myriadcoin: URI or payment request + Abrir URI myriadcoin: ou pedido de pagamento + + + &Command-line options + Opções da linha de &comandos + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + Mostrar a mensagem de ajuda do Myriadcoin Core para obter uma lista com possíveis opções de linha de comandos + + Myriadcoin client Cliente Myriadcoin - %n active connection(s) to Myriadcoin network %n ligação ativa à rede Myriadcoin%n ligações ativas à rede Myriadcoin - No block source available... - Nenhum bloco fonto disponível + Nenhuma fonte de blocos disponível... - Processed %1 of %2 (estimated) blocks of transaction history. - Processados %1 dos %2 blocos (estimados) do histórico de transacções. + Processados %1 de %2 blocos (estimados) do histórico de transacções. - Processed %1 blocks of transaction history. Processados %1 blocos do histórico de transações. - %n hour(s) %n hora%n horas - %n day(s) %n dia%n dias - %n week(s) %n semana%n semanas - + %1 and %2 + %1 e %2 + + + %n year(s) + %n ano%n anos + + %1 behind %1 em atraso - Last received block was generated %1 ago. - Último bloco recebido foi gerado há %1 atrás. + O último bloco recebido foi gerado %1 atrás. - Transactions after this will not yet be visible. - Transações posteriores poderão não ser imediatamente visíveis. + Transações posteriores não serão visíveis por enquanto. - Error Erro - Warning Aviso - Information Informação - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - Esta transação tem um tamanho superior ao limite máximo. Poderá enviá-la pagando uma taxa de %1, que será entregue ao nó que processar a sua transação e ajudará a suportar a rede. Deseja pagar a taxa? - - - Up to date Atualizado - Catching up... - Recuperando... + Recuperando o atraso... - - Confirm transaction fee - Confirme a taxa de transação - - - Sent transaction Transação enviada - Incoming transaction Transação recebida - Date: %1 Amount: %2 Type: %3 @@ -644,33 +548,17 @@ Address: %4 Data: %1 Quantia: %2 Tipo: %3 -Endereço: %4 - +Endereço: %4 - - - URI handling - Manuseamento URI - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - URI não foi lido correctamente! Isto pode ser causado por um endereço Myriadcoin inválido ou por parâmetros URI malformados. - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> A carteira está <b>encriptada</b> e atualmente <b>desbloqueada</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> A carteira está <b>encriptada</b> e atualmente <b>bloqueada</b> - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. Ocorreu um erro fatal. O Myriadcoin não pode continuar com segurança e irá fechar. @@ -678,329 +566,647 @@ Endereço: %4 ClientModel - Network Alert Alerta da Rede + + CoinControlDialog + + Coin Control Address Selection + Seleção de Endereço Coin Control + + + Quantity: + Quantidade: + + + Bytes: + Bytes: + + + Amount: + Quantia: + + + Priority: + Prioridade: + + + Fee: + Taxa: + + + Low Output: + Saída Baixa: + + + After Fee: + Depois da Taxa: + + + Change: + Troco: + + + (un)select all + (des)seleccionar todos + + + Tree mode + Modo árvore + + + List mode + Modo lista + + + Amount + Quantia + + + Address + Endereço + + + Date + Data + + + Confirmations + Confirmados + + + Confirmed + Confirmada + + + Priority + Prioridade + + + Copy address + Copiar endereço + + + Copy label + Copiar rótulo + + + Copy amount + Copiar quantia + + + Copy transaction ID + Copiar ID da transação + + + Lock unspent + Bloquear não gastos + + + Unlock unspent + Desbloquear não gastos + + + Copy quantity + Copiar quantidade + + + Copy fee + Copiar taxa + + + Copy after fee + Copiar valor após taxa + + + Copy bytes + Copiar bytes + + + Copy priority + Copiar prioridade + + + Copy low output + Copiar output baixo + + + Copy change + Copiar alteração + + + highest + muito alta + + + higher + mais alta + + + high + alta + + + medium-high + média-alta + + + medium + média + + + low-medium + média-baixa + + + low + baixa + + + lower + mais baixa + + + lowest + muito alta + + + (%1 locked) + (%1 bloqueados) + + + none + nenhum + + + Dust + Pó + + + yes + sim + + + no + não + + + This label turns red, if the transaction size is greater than 1000 bytes. + Este rótulo fica vermelha se o tamanho da transacção exceder os 1000 bytes. + + + This means a fee of at least %1 per kB is required. + Isto significa que uma taxa de pelo menos %1 por kB é necessária. + + + Can vary +/- 1 byte per input. + Pode variar +/- 1 byte por input. + + + Transactions with higher priority are more likely to get included into a block. + Transacções com uma prioridade mais alta têm uma maior probabilidade de serem incluídas num bloco. + + + This label turns red, if the priority is smaller than "medium". + Esta legenda fica vermelha, se a prioridade for menor que "média". + + + This label turns red, if any recipient receives an amount smaller than %1. + Este rótulo fica vermelho se algum recipiente receber uma quantia menor que %1. + + + This means a fee of at least %1 is required. + Isto significa que uma taxa de pelo menos %1 é necessária. + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + Quantias abaixo de 0.546 vezes a taxa mínima de retransmissão são mostradas como "pó". + + + This label turns red, if the change is smaller than %1. + Esta legenda fica vermelha, se o troco for menor do que %1. + + + (no label) + (sem rótulo) + + + change from %1 (%2) + troco de %1 (%2) + + + (change) + (troco) + + EditAddressDialog - Edit Address Editar Endereço - &Label &Rótulo - - The label associated with this address book entry - O rótulo a ser associado com esta entrada do livro de endereços + The label associated with this address list entry + O rótulo associado com esta entrada no livro de endereços + + + The address associated with this address list entry. This can only be modified for sending addresses. + O endereço associado com o esta entrada no livro de endereços. Isto só pode ser modificado para endereços de saída. - &Address E&ndereço - - The address associated with this address book entry. This can only be modified for sending addresses. - O endereço associado com esta entrada do livro de endereços. Apenas poderá ser modificado para endereços de saída. - - - New receiving address Novo endereço de entrada - New sending address Novo endereço de saída - Edit receiving address Editar endereço de entrada - Edit sending address Editar endereço de saída - The entered address "%1" is already in the address book. O endereço introduzido "%1" já se encontra no livro de endereços. - The entered address "%1" is not a valid Myriadcoin address. O endereço introduzido "%1" não é um endereço myriadcoin válido. - Could not unlock wallet. Impossível desbloquear carteira. - New key generation failed. Falha ao gerar nova chave. - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt - Myriadcoin-Qt + A new data directory will be created. + Uma nova pasta de dados será criada. + + + name + nome + + + Directory already exists. Add %1 if you intend to create a new directory here. + A pasta já existe. Adicione %1 se pretender criar aqui uma nova pasta. + + + Path already exists, and is not a directory. + Caminho já existe, e não é uma pasta. + + + Cannot create data directory here. + Não pode ser criada uma pasta de dados aqui. + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + Myriadcoin Core - Opções de linha de comandos + + + Myriadcoin Core + Myriadcoin Core - version versão - Usage: Utilização: - command-line options opções da linha de comandos - UI options - Opções de UI + Opções de Interface - Set language, for example "de_DE" (default: system locale) Definir linguagem, por exemplo "pt_PT" (por defeito: linguagem do sistema) - Start minimized Iniciar minimizado - + Set SSL root certificates for payment request (default: -system-) + + + Show splash screen on startup (default: 1) - Mostrar animação ao iniciar (por defeito: 1) + Mostrar imagem ao iniciar (por defeito: 1) + + + Choose data directory on startup (default: 0) + Escolha a pasta de dados ao iniciar (por defeito: 0) + + + + Intro + + Welcome + Bem-vindo + + + Welcome to Myriadcoin Core. + Bem-vindo ao Myriadcoin Core. + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + Sendo esta a primeira vez que o programa é iniciado, poderá escolher onde o Myriadcoin Core irá guardar os seus dados. + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + O Myriadcoin Core vai transferir e armazenar uma cópia do "block chain" (cadeia de blocos). Pelo menos %1GB de dados serão armazenados nesta pasta, e vão crescer ao longo do tempo. A sua carteira também irá ser armazenada nesta pasta. + + + Use the default data directory + Utilizar a pasta de dados padrão + + + Use a custom data directory: + Utilizar uma pasta de dados personalizada: + + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" can not be created. + Erro: Pasta de dados especificada "%1" não pôde ser criada. + + + Error + Erro + + + GB of free space available + GB de espaço livre disponível + + + (of %1GB needed) + (de %1GB necessários) + + + + OpenURIDialog + + Open URI + Abir URI + + + Open payment request from URI or file + Abrir pedido de pagamento de um URI ou ficheiro + + + URI: + URI: + + + Select payment request file + Seleccione o ficheiro de pedido de pagamento + + + Select payment request file to open + Seleccione o ficheiro de pedido de pagamento a abrir OptionsDialog - Options Opções - &Main &Principal - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Taxa de transação opcional por KB que ajuda a assegurar que as suas transações serão processadas rapidamente. A maioria das transações tem 1 kB. - Pay transaction &fee Pagar &taxa de transação - Automatically start Myriadcoin after logging in to the system. Começar o Myriadcoin automaticamente ao iniciar sessão no sistema. - &Start Myriadcoin on system login &Começar o Myriadcoin ao iniciar o sistema - + Size of &database cache + Tamanho da cache da base de &dados + + + MB + MB + + + Number of script &verification threads + Número de processos de &verificação de scripts + + + Connect to the Myriadcoin network through a SOCKS proxy. + Ligar à rede Myriadcoin através de um proxy SOCKS. + + + &Connect through SOCKS proxy (default proxy): + Ligar através de um proxy SO&CKS (proxy por defeito): + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + Endereço IP do proxy (p.ex. IPv4: 127.0.0.1 / IPv6: ::1) + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + Opções de linha de comandos ativas que se sobrepõem ás opções anteriores: + + Reset all client options to default. - Repôr todas as opções. + Repor todas as opções do cliente. - &Reset Options - &Repôr Opções + &Repor Opções - &Network &Rede - - Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. - Abrir a porta do cliente myriadcoin automaticamente no seu router. Isto penas funciona se o seu router suportar UPnP e este se encontrar ligado. + (0 = auto, <0 = leave that many cores free) + + + + W&allet + C&arteira + + + Expert + Especialista + + + Enable coin &control features + Ativar funcionalidades de controlo de transação. + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + No caso de desativar o gasto de troco não confirmado, o troco de uma transação não poderá ser utilizado até que essa transação tenha pelo menos uma confirmação. Isto também afeta o cálculo do seu saldo. + + + &Spend unconfirmed change + &Gastar troco não confirmado + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. + Abrir a porta do cliente myriadcoin automaticamente no seu router. Isto apenas funciona se o seu router suportar UPnP e este se encontrar ligado. - Map port using &UPnP Mapear porta usando &UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - Ligar à rede Myriadcoin através de um proxy SOCKS (p.ex. quando ligar através de Tor). - - - - &Connect through SOCKS proxy: - Ligar através de proxy SO&CKS: - - - Proxy &IP: &IP do proxy: - - IP address of the proxy (e.g. 127.0.0.1) - Endereço IP do proxy (p.ex. 127.0.0.1) - - - &Port: &Porta: - Port of the proxy (e.g. 9050) Porta do proxy (p.ex. 9050) - SOCKS &Version: &Versão SOCKS: - SOCKS version of the proxy (e.g. 5) Versão do proxy SOCKS (p.ex. 5) - &Window &Janela - Show only a tray icon after minimizing the window. - Apenas mostrar o ícone da bandeja após minimizar a janela. + Apenas mostrar o ícone da bandeja de sistema após minimizar a janela. - &Minimize to the tray instead of the taskbar - &Minimizar para a bandeja e não para a barra de ferramentas + &Minimizar para a bandeja de sistema e não para a barra de ferramentas - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. - Minimize ao invés de sair da aplicação quando a janela é fechada. Com esta opção selecionada, a aplicação apenas será encerrada quando escolher Sair da aplicação no menú. + Minimize ao invés de sair da aplicação quando a janela é fechada. Com esta opção selecionada, a aplicação apenas será encerrada só quando escolher Sair da aplicação no menu. - M&inimize on close M&inimizar ao fechar - &Display Vis&ualização - User Interface &language: &Linguagem da interface de utilizador: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. A linguagem da interface do utilizador pode ser definida aqui. Esta definição entrará em efeito após reiniciar o Myriadcoin. - &Unit to show amounts in: - &Unidade a usar em quantias: + &Unidade para mostrar quantias: - Choose the default subdivision unit to show in the interface and when sending coins. Escolha a subdivisão unitária a ser mostrada por defeito na aplicação e ao enviar moedas. - Whether to show Myriadcoin addresses in the transaction list or not. Se mostrar, ou não, os endereços Myriadcoin na lista de transações. - &Display addresses in transaction list Mostrar en&dereços na lista de transações - + Whether to show coin control features or not. + Escolha para mostrar funcionalidades de Coin Control ou não. + + &OK &OK - &Cancel &Cancelar - - &Apply - &Aplicar - - - default padrão - + none + nenhum + + Confirm options reset Confirme a reposição de opções - - Some settings may require a client restart to take effect. - Algumas opções requerem o reinício do programa para funcionar. + Client restart required to activate changes. + É necessário reiniciar o cliente para ativar as alterações. - - Do you want to proceed? - Deseja proceder? + Client will be shutdown, do you want to proceed? + O cliente será desligado, deseja continuar? - - - Warning - Aviso + This change would require a client restart. + Esta alteração requer um reinício do cliente. - - - This setting will take effect after restarting Myriadcoin. - Esta opção entrará em efeito após reiniciar o Myriadcoin. - - - The supplied proxy address is invalid. O endereço de proxy introduzido é inválido. @@ -1008,59 +1214,54 @@ Endereço: %4 OverviewPage - Form Formulário - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. A informação mostrada poderá estar desatualizada. A sua carteira sincroniza automaticamente com a rede Myriadcoin depois de estabelecer ligação, mas este processo ainda não está completo. - - Balance: - Saldo: - - - - Unconfirmed: - Não confirmado: - - - Wallet Carteira - + Available: + Disponível: + + + Your current spendable balance + O seu saldo (gastável) disponível + + + Pending: + Pendente: + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + Total de transações por confirmar, que ainda não estão contabilizadas no seu saldo gastável + + Immature: Imaturo: - Mined balance that has not yet matured - O saldo minado ainda não maturou + O saldo minado ainda não amadureceu + + + Total: + Total: + + + Your current total balance + O seu saldo total actual - <b>Recent transactions</b> <b>Transações recentes</b> - - Your current balance - O seu saldo atual - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - Total de transações ainda não confirmadas, e que não estão contabilizadas ainda no seu saldo actual - - - - out of sync fora de sincronia @@ -1068,579 +1269,856 @@ Endereço: %4 PaymentServer - + URI handling + Manuseamento de URI + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + O URI não foi lido correctamente! Isto pode ser causado por um endereço Myriadcoin inválido ou por parâmetros URI malformados. + + + Requested payment amount of %1 is too small (considered dust). + Quantia solicitada para pagamento de %1 é muito pequena (considerada "pó"). + + + Payment request error + Erro de pedido de pagamento + + Cannot start myriadcoin: click-to-pay handler - Impossível começar o modo clicar-para-pagar com myriadcoin: + Impossível iniciar o controlador de myriadcoin: click-to-pay + + + Net manager warning + Aviso do gestor de rede + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + O seu proxy ativo não suporta SOCKS5, que é necessário para efectuar pedidos de pagemento via proxy. + + + Payment request fetch URL is invalid: %1 + O URL de pedido de pagamento é inválido: %1 + + + Payment request file handling + Controlo de pedidos de pagamento. + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + O ficheiro de pedido de pagamento não pôde ser lido ou processado! Isto pode ter sido causado por um ficheiro de pedido de pagamento inválido. + + + Unverified payment requests to custom payment scripts are unsupported. + Pedidos de pagamento não-verificados para scripts de pagamento personalizados não são suportados. + + + Refund from %1 + Reembolsar de %1 + + + Error communicating with %1: %2 + Erro ao comunicar com %1: %2 + + + Payment request can not be parsed or processed! + O pedido de pagamento não pode ser lido ou processado! + + + Bad response from server %1 + Má resposta do servidor %1 + + + Payment acknowledged + Pagamento confirmado + + + Network request error + Erro de pedido de rede - QRCodeDialog + QObject - - QR Code Dialog - Diálogo de Código QR + Myriadcoin + Myriadcoin - - Request Payment - Requisitar Pagamento + Error: Specified data directory "%1" does not exist. + Erro: Pasta de dados especificada "%1" não existe. - - Amount: - Quantia: + Error: Cannot parse configuration file: %1. Only use key=value syntax. + - - Label: - Rótulo: + Error: Invalid combination of -regtest and -testnet. + Erro: Combinação inválida de -regtest e -testnet. - - Message: - Mensagem: + Myriadcoin Core didn't yet exit safely... + - - &Save As... - &Salvar Como... + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Introduza um endereço Myriadcoin (p.ex. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + &Salvar Imagem... - - Error encoding URI into QR Code. - Erro ao codificar URI em Código QR. + &Copy Image + &Copiar Imagem - - The entered amount is invalid, please check. - A quantia introduzida é inválida, por favor verifique. - - - - Resulting URI too long, try to reduce the text for label / message. - URI resultante muito longo. Tente reduzir o texto do rótulo / mensagem. - - - Save QR Code Guardar Código QR - - PNG Images (*.png) - Imagens PNG (*.png) + PNG Image (*.png) + Imagem PNG (*.png) RPCConsole - Client name Nome do Cliente - - - - - - - - - - N/A N/D - Client version Versão do Cliente - &Information &Informação - + Debug window + Janela de depuração + + + General + Geral + + Using OpenSSL version Usando versão OpenSSL - Startup time - Tempo de início + Hora de inicialização - Network Rede - + Name + Nome + + Number of connections Número de ligações - - On testnet - Em rede de testes - - - Block chain Cadeia de blocos - Current number of blocks Número actual de blocos - Estimated total blocks Total estimado de blocos - Last block time - Tempo do último bloco + Data do último bloco - &Open &Abrir - - Command-line options - Opções de linha de comandos - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - Mostrar a mensagem de ajuda do Myriadcoin-Qt para obter uma lista com possíveis opções a usar na linha de comandos. - - - - &Show - Mo&strar - - - &Console &Consola - + &Network Traffic + &Tráfego de Rede + + + &Clear + &Limpar + + + Totals + Totais + + + In: + Entrada: + + + Out: + Saída: + + Build date - Data de construção + Data de compilação - - Myriadcoin - Debug window - Myriadcoin - Janela de depuração - - - - Myriadcoin Core - Núcleo Myriadcoin - - - Debug log file Ficheiro de registo de depuração - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. Abrir o ficheiro de registo de depuração da pasta de dados actual. Isto pode demorar alguns segundos para ficheiros de registo maiores. - Clear console Limpar consola - Welcome to the Myriadcoin RPC console. Bem-vindo à consola RPC Myriadcoin. - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. Use as setas para cima e para baixo para navegar no histórico e <b>Ctrl-L</b> para limpar o ecrã. - Type <b>help</b> for an overview of available commands. - Digite <b>help</b> para visualizar os comandos disponíveis. + Insira <b>help</b> para visualizar os comandos disponíveis. + + + %1 B + %1 B + + + %1 KB + %1 KB + + + %1 MB + %1 MB + + + %1 GB + %1 GB + + + %1 m + %1 m + + + %1 h + %1 h + + + %1 h %2 m + %1 h %2 m + + + + ReceiveCoinsDialog + + &Amount: + &Quantia: + + + &Label: + Rótu&lo: + + + &Message: + &Mensagem: + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + Reutilize um dos endereços de entrada usados anteriormente. Reutilizar endereços pode levar a riscos de segurança e de privacidade. Não use esta função a não ser que esteja a gerar novamente uma requisição de pagamento feita anteriormente. + + + R&euse an existing receiving address (not recommended) + Reutilizar um endereço de receção existente (não recomendado) + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + Uma mensagem opcional para anexar ao pedido de pagamento, que será exibida quando o pedido for aberto. Nota: A mensagem não será enviada com o pagamento através da rede Myriadcoin. + + + An optional label to associate with the new receiving address. + Um rótulo opcional a associar ao novo endereço de receção. + + + Use this form to request payments. All fields are <b>optional</b>. + Utilize este formulário para solicitar pagamentos. Todos os campos são <b>opcionais</b>. + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + Uma quantia opcional a solicitar. Deixe em branco ou zero para não solicitar uma quantidade específica. + + + Clear all fields of the form. + Limpar todos os campos do formulário. + + + Clear + Limpar + + + Requested payments history + Histórico de pagamentos solicitados + + + &Request payment + &Requisitar Pagamento + + + Show the selected request (does the same as double clicking an entry) + Mostrar o pedido seleccionado (faz o mesmo que clicar 2 vezes numa entrada) + + + Show + Mostrar + + + Remove the selected entries from the list + Remover as entradas seleccionadas da lista + + + Remove + Remover + + + Copy label + Copiar rótulo + + + Copy message + Copiar mensagem + + + Copy amount + Copiar quantia + + + + ReceiveRequestDialog + + QR Code + Código QR + + + Copy &URI + Copiar &URI + + + Copy &Address + Copi&ar Endereço + + + &Save Image... + &Salvar Imagem... + + + Request payment to %1 + Requisitar Pagamento para %1 + + + Payment information + Informação de Pagamento + + + URI + URI + + + Address + Endereço + + + Amount + Quantia + + + Label + Rótulo + + + Message + Mensagem + + + Resulting URI too long, try to reduce the text for label / message. + URI resultante muito longo. Tente reduzir o texto do rótulo / mensagem. + + + Error encoding URI into QR Code. + Erro ao codificar URI em Código QR. + + + + RecentRequestsTableModel + + Date + Data + + + Label + Rótulo + + + Message + Mensagem + + + Amount + Quantia + + + (no label) + (sem rótulo) + + + (no message) + (sem mensagem) + + + (no amount) + (sem quantia) SendCoinsDialog - - - - - - - - Send Coins Enviar Moedas - + Coin Control Features + Funcionalidades de Coin Control: + + + Inputs... + Entradas... + + + automatically selected + selecionadas automáticamente + + + Insufficient funds! + Fundos insuficientes! + + + Quantity: + Quantidade: + + + Bytes: + Bytes: + + + Amount: + Quantia: + + + Priority: + Prioridade: + + + Fee: + Taxa: + + + Low Output: + Output Baixo: + + + After Fee: + Depois da taxa: + + + Change: + Troco: + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + Se isto estiver ativo, mas o endereço de troco estiver vazio ou for inválido, o troco irá ser enviado para um novo endereço. + + + Custom change address + Endereço de troco personalizado + + Send to multiple recipients at once Enviar para múltiplos destinatários de uma vez - Add &Recipient Adicionar &Destinatário - - Remove all transaction fields - Remover todos os campos da transação + Clear all fields of the form. + Limpar todos os campos do formulário. - Clear &All &Limpar Tudo - Balance: Saldo: - - 123.456 BTC - 123.456 BTC - - - Confirm the send action Confirme ação de envio - S&end &Enviar - - <b>%1</b> to %2 (%3) - <b>%1</b> para %2 (%3) - - - Confirm send coins Confirme envio de moedas - - Are you sure you want to send %1? - Tem a certeza que deseja enviar %1? + %1 to %2 + %1 para %2 - - and - e + Copy quantity + Copiar quantidade + + + Copy amount + Copiar quantia + + + Copy fee + Copiar taxa + + + Copy after fee + Copiar valor após taxa + + + Copy bytes + Copiar bytes + + + Copy priority + Copiar prioridade + + + Copy low output + Copiar output baixo + + + Copy change + Copiar alteração + + + Total Amount %1 (= %2) + Quantia Total %1 (= %2) + + + or + ou - The recipient address is not valid, please recheck. O endereço de destino não é válido, por favor verifique. - The amount to pay must be larger than 0. A quantia a pagar deverá ser maior que 0. - The amount exceeds your balance. A quantia excede o seu saldo. - The total exceeds your balance when the %1 transaction fee is included. O total excede o seu saldo quando a taxa de transação de %1 for incluída. - Duplicate address found, can only send to each address once per send operation. Endereço duplicado encontrado, apenas poderá enviar uma vez para cada endereço por cada operação de envio. - - Error: Transaction creation failed! - Erro: A criação da transacção falhou! + Transaction creation failed! + Erro: A criação da transação falhou! - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Erro: A transação foi rejeitada. Isso poderá acontecer se algumas das moedas na sua carteira já tiverem sido gastas, se por exemplo tiver usado uma cópia do ficheiro wallet.dat e as moedas foram gastas na cópia mas não foram marcadas como gastas aqui. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + A transação foi rejeitada! Isto poderá acontecer se algumas das moedas na sua carteira já tiverem sido gastas, se por exemplo tiver usado uma cópia do ficheiro wallet.dat e as moedas tiverem sido gastas na cópia mas não tiverem sido marcadas como gastas aqui. + + + Warning: Invalid Myriadcoin address + Aviso: Endereço Myriadcoin inválido + + + (no label) + (sem rótulo) + + + Warning: Unknown change address + Aviso: Endereço de troco desconhecido + + + Are you sure you want to send? + Tem a certeza que deseja enviar? + + + added as transaction fee + adicionados como taxa de transação + + + Payment request expired + Pedido de pagamento expirou + + + Invalid payment address %1 + Endereço de pagamento inválido %1 SendCoinsEntry - - Form - Formulário - - - A&mount: Qu&antia: - Pay &To: &Pagar A: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) O endereço para onde enviar o pagamento (p.ex. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book Escreva um rótulo para este endereço para o adicionar ao seu livro de endereços - &Label: Rótu&lo: - - Choose address from address book - Escolher endereço do livro de endereços + Choose previously used address + Escolher endereço usado previamente + + + This is a normal payment. + Este é um pagamento normal. - Alt+A Alt+A - Paste address from clipboard Cole endereço da área de transferência - Alt+P Alt+P - - Remove this recipient - Remover este destinatário + Remove this entry + Remover esta entrada - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Introduza um endereço Myriadcoin (p.ex. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + Mensagem: + + + This is a verified payment request. + Este é um pedido de pagamento verificado. + + + Enter a label for this address to add it to the list of used addresses + Introduza um rótulo para este endereço para o adicionar à sua lista de endereços usados + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + Uma mensagem que estava anexada ao URI myriadcoin: que será armazenada com a transação para sua referência. Nota: Esta mensagem não será enviada através da rede Myriadcoin. + + + This is an unverified payment request. + Este é um pedido de pagamento não-verificado. + + + Pay To: + Pagar A: + + + Memo: + Memorando: + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + O Myriadcoin Core está a encerrar... + + + Do not shut down the computer until this window disappears. + Não desligue o computador enquanto esta janela não desaparecer. SignVerifyMessageDialog - Signatures - Sign / Verify a Message Assinaturas - Assinar / Verificar uma Mensagem - &Sign Message A&ssinar Mensagem - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. - Pode assinar mensagens com os seus endereços para provar que são seus. Tenha atenção ao assinar mensagens ambíguas, pois ataques de phishing podem tentar enganá-lo, de modo a assinar a sua identidade para os atacantes. Apenas assine declarações completamente detalhadas com as quais concorde. + Pode assinar mensagens com os seus endereços para provar que são seus. Tenha atenção ao assinar mensagens ambíguas, pois ataques de phishing podem tentar enganá-lo de modo a assinar a sua identidade para os atacantes. Apenas assine declarações detalhadas com as quais concorde. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) O endereço a utilizar para assinar a mensagem (p.ex. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book - Escolher endereço do livro de endereços + Choose previously used address + Escolher endereço usado previamente - - Alt+A Alt+A - Paste address from clipboard - Cole endereço da área de transferência + Colar endereço da área de transferência - Alt+P Alt+P - Enter the message you want to sign here Escreva aqui a mensagem que deseja assinar - Signature Assinatura - Copy the current signature to the system clipboard Copiar a assinatura actual para a área de transferência - Sign the message to prove you own this Myriadcoin address Assine uma mensagem para provar que é dono deste endereço Myriadcoin - Sign &Message Assinar &Mensagem - Reset all sign message fields - Repôr todos os campos de assinatura de mensagem + Repor todos os campos de assinatura de mensagem - - Clear &All Limpar &Tudo - &Verify Message &Verificar Mensagem - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. - Introduza o endereço de assinatura, mensagem (assegure-se de copiar quebras de linha, espaços, tabuladores, etc. exactamente) e assinatura abaixo para verificar a mensagem. Tenha atenção para não ler mais na assinatura do que o que estiver na mensagem assinada, para evitar ser enganado por um atacante que se encontre entre si e quem assinou a mensagem. + Introduza o endereço de assinatura, mensagem (assegure-se que copia quebras de linha, espaços, tabulações, etc. exactamente) e assinatura abaixo para verificar a mensagem. Tenha atenção para não ler mais na assinatura do que o que estiver na mensagem assinada, para evitar ser enganado por um atacante que se encontre entre si e quem assinou a mensagem. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) O endereço utilizado para assinar a mensagem (p.ex. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address Verifique a mensagem para assegurar que foi assinada com o endereço Myriadcoin especificado - Verify &Message Verificar &Mensagem - Reset all verify message fields - Repôr todos os campos de verificação de mensagem + Repor todos os campos de verificação de mensagem - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Introduza um endereço Myriadcoin (p.ex. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature Clique "Assinar mensagem" para gerar a assinatura - - Enter Myriadcoin signature - Introduza assinatura Myriadcoin - - - - The entered address is invalid. - O endereço introduzido é inválido. + O endereço introduzido é inválido. - - - - Please check the address and try again. Por favor verifique o endereço e tente de novo. - - The entered address does not refer to a key. - O endereço introduzido não refere a chave alguma. + O endereço introduzido não refere a nenhuma chave. - Wallet unlock was cancelled. O desbloqueio da carteira foi cancelado. - Private key for the entered address is not available. A chave privada para o endereço introduzido não está disponível. - Message signing failed. Assinatura de mensagem falhou. - Message signed. Mensagem assinada. - The signature could not be decoded. A assinatura não pôde ser descodificada. - - Please check the signature and try again. Por favor verifique a assinatura e tente de novo. - The signature did not match the message digest. A assinatura não condiz com o conteúdo da mensagem. - Message verification failed. Verificação da mensagem falhou. - Message verified. Mensagem verificada. @@ -1648,186 +2126,160 @@ Endereço: %4 SplashScreen - - The Myriadcoin developers - Os programadores Myriadcoin + Myriadcoin Core + Myriadcoin Core + + + The Myriadcoin Core developers + Os programadores do Myriadcoin Core - [testnet] [rede de testes] + + TrafficGraphWidget + + KB/s + KB/s + + TransactionDesc - Open until %1 Aberto até %1 - + conflicted + em conflito: + + %1/offline %1/desligado - %1/unconfirmed %1/não confirmada - %1 confirmations %1 confirmações - Status Estado - , broadcast through %n node(s) , transmitida através de %n nó, transmitida através de %n nós - Date Data - Source Origem - Generated Gerado - - From De - - - To Para - - own address endereço próprio - label rótulo - - - - - Credit Crédito - matures in %n more block(s) - matura daqui por %n blocomatura daqui por %n blocos + matura em %n blocomatura em %n blocos - not accepted não aceite - - - - Debit Débito - Transaction fee Taxa de transação - Net amount Valor líquido - Message Mensagem - Comment Comentário - Transaction ID ID da Transação - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Moedas geradas deverão maturar por 120 blocos antes de poderem ser gastas. Quando gerou este bloco, ele foi transmitido para a rede para ser incluído na cadeia de blocos. Se a inclusão na cadeia de blocos falhar, irá mudar o estado para "não aceite" e as moedas não poderão ser gastas. Isto poderá acontecer ocasionalmente se outro nó da rede gerar um bloco a poucos segundos de diferença do seu. + Merchant + Comerciante + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Moedas geradas deverão maturar por %1 blocos antes de poderem ser gastas. Quando gerou este bloco, ele foi transmitido para a rede para ser incluído na cadeia de blocos. Se a inclusão na cadeia de blocos falhar, o seu estado irá ser alterado para "não aceite" e as moedas não poderão ser gastas. Isto poderá acontecer ocasionalmente se outro nó da rede gerar um bloco a poucos segundos de diferença do seu. - Debug information Informação de depuração - Transaction Transação - Inputs Entradas - Amount Quantia - true verdadeiro - false falso - , has not been successfully broadcast yet , ainda não foi transmitida com sucesso - Open for %n more block(s) Aberta por mais %n blocoAberta por mais %n blocos - unknown desconhecido @@ -1835,12 +2287,10 @@ Endereço: %4 TransactionDescDialog - Transaction details Detalhes da transação - This pane shows a detailed description of the transaction Esta janela mostra uma descrição detalhada da transação @@ -1848,117 +2298,102 @@ Endereço: %4 TransactionTableModel - Date Data - Type Tipo - Address Endereço - Amount Quantia + + Immature (%1 confirmations, will be available after %2) + Imaturo (%1 confirmações, estará disponível após %2) + - Open for %n more block(s) Aberta por mais %n blocoAberta por mais %n blocos - Open until %1 Aberto até %1 - - Offline (%1 confirmations) - Desligado (%1 confirmação) - - - - Unconfirmed (%1 of %2 confirmations) - Não confirmada (%1 de %2 confirmações) - - - Confirmed (%1 confirmations) - Confirmada (%1 confirmação) - - - - Mined balance will be available when it matures in %n more block(s) - Saldo minado ficará disponível quando maturar, daqui por %n blocoSaldo minado ficará disponível quando maturar, daqui por %n blocos + Confirmada (%1 confirmações) - This block was not received by any other nodes and will probably not be accepted! Este bloco não foi recebido por outros nós e provavelmente não será aceite pela rede! - Generated but not accepted Gerado mas não aceite - + Offline + Offline + + + Unconfirmed + Não confirmado: + + + Confirming (%1 of %2 recommended confirmations) + A confirmar (%1 de %2 confirmações recomendadas) + + + Conflicted + Em Conflito: + + Received with Recebido com - Received from Recebido de - Sent to Enviado para - Payment to yourself - Pagamento ao próprio + Pagamento a si mesmo - Mined - Minado + Minadas - (n/a) (n/d) - Transaction status. Hover over this field to show number of confirmations. - Estado da transação. Pairar por cima deste campo para mostrar o número de confirmações. + Estado da transação. Passar o cursor por cima deste campo para mostrar o número de confirmações. - Date and time that the transaction was received. - Data e hora a que esta transação foi recebida. + Data e hora em que a transação foi recebida. - Type of transaction. Tipo de transação. - Destination address of transaction. Endereço de destino da transação. - Amount removed from or added to balance. Quantia retirada ou adicionada ao saldo. @@ -1966,176 +2401,156 @@ Endereço: %4 TransactionView - - All Todas - Today Hoje - This week Esta semana - This month Este mês - Last month Mês passado - This year Este ano - Range... Período... - Received with Recebida com - Sent to Enviada para - To yourself - Para si + Para si mesmo - Mined Minadas - Other Outras - Enter address or label to search Escreva endereço ou rótulo a procurar - Min amount Quantia mínima - Copy address Copiar endereço - Copy label Copiar rótulo - Copy amount Copiar quantia - Copy transaction ID Copiar ID da Transação - Edit label Editar rótulo - Show transaction details Mostrar detalhes da transação - - Export Transaction Data - Exportar Dados das Transações + Export Transaction History + Exportar Histórico de Transacções + + + Exporting Failed + A Exportação Falhou + + + There was an error trying to save the transaction history to %1. + Ocorreu um erro ao tentar guardar o histórico de transações em %1. + + + Exporting Successful + Exportação Bem Sucedida + + + The transaction history was successfully saved to %1. + O histórico de transacções foi com guardado com sucesso em %1. - Comma separated file (*.csv) - Ficheiro separado por vírgula (*.csv) + Ficheiro separado por vírgulas (*.csv) - Confirmed Confirmada - Date Data - Type Tipo - Label Rótulo - Address Endereço - Amount Quantia - ID ID - - Error exporting - Erro ao exportar - - - - Could not write to file %1. - Impossível escrever para o ficheiro %1. - - - Range: Período: - to até + + WalletFrame + + No wallet has been loaded. + Nenhuma carteira foi carregada. + + WalletModel - Send Coins Enviar Moedas @@ -2143,160 +2558,121 @@ Endereço: %4 WalletView - &Export &Exportar - Export the data in the current tab to a file Exportar os dados no separador actual para um ficheiro - Backup Wallet Cópia de Segurança da Carteira - Wallet Data (*.dat) Dados da Carteira (*.dat) - Backup Failed Cópia de Segurança Falhou - - There was an error trying to save the wallet data to the new location. - Ocorreu um erro ao tentar guardar os dados da carteira na nova localização. + There was an error trying to save the wallet data to %1. + Ocorreu um erro ao tentar guardar os dados da carteira em %1. + + + The wallet data was successfully saved to %1. + Os dados da carteira foram guardados com sucesso em %1. - Backup Successful Cópia de Segurança Bem Sucedida - - - The wallet data was successfully saved to the new location. - Os dados da carteira foram salvos com sucesso numa nova localização. - bitcoin-core - - Myriadcoin version - Versão Myriadcoin - - - Usage: Utilização: - - Send command to -server or myriadcoind - Enviar comando para -server ou myriadcoind - - - List commands Listar comandos - Get help for a command Obter ajuda para um comando - Options: Opções: - Specify configuration file (default: myriadcoin.conf) Especificar ficheiro de configuração (por defeito: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) Especificar ficheiro pid (por defeito: myriadcoind.pid) - Specify data directory Especificar pasta de dados - - Set database cache size in megabytes (default: 25) - Definir o tamanho da cache de base de dados em megabytes (por defeito: 25) - - - Listen for connections on <port> (default: 8333 or testnet: 18333) - Escute por ligações em <port> (por defeito: 8333 ou testnet: 18333) + Escute ligações na porta <n> (por defeito: 8333 ou testnet: 18333) - Maintain at most <n> connections to peers (default: 125) Manter no máximo <n> ligações a outros nós da rede (por defeito: 125) - Connect to a node to retrieve peer addresses, and disconnect Ligar a um nó para recuperar endereços de pares, e desligar - Specify your own public address Especifique o seu endereço público - Threshold for disconnecting misbehaving peers (default: 100) - Tolerância para desligar nós mal-formados (por defeito: 100) + Tolerância para desligar nós com comportamento indesejável (por defeito: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Número de segundos a impedir que nós mal-formados se liguem de novo (por defeito: 86400) + Número de segundos a impedir que nós com comportamento indesejado se liguem de novo (por defeito: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s Ocorreu um erro ao definir a porta %u do serviço RPC a escutar em IPv4: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) - Escutar por ligações JSON-RPC em <port> (por defeito: 8332 ou rede de testes: 18332) + Escutar por ligações JSON-RPC na porta <n> (por defeito: 8332 ou rede de testes: 18332) - Accept command line and JSON-RPC commands - Aceitar comandos da consola e JSON-RPC + Aceitar comandos de linha de comandos e JSON-RPC + + + Myriadcoin Core RPC client version + - Run in the background as a daemon and accept commands - Correr o processo como um daemon e aceitar comandos + Correr o processo em segundo plano e aceitar comandos - Use the test network - Utilizar a rede de testes - testnet + Utilizar a rede de testes - Accept connections from outside (default: 1 if no -proxy or -connect) Aceitar ligações externas (padrão: 1 sem -proxy ou -connect) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2308,625 +2684,698 @@ If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com - %s, deverá definir rpcpassword no ficheiro de configuração : - %s + %s, deverá definir uma rpcpassword no ficheiro de configuração: +%s É recomendado que use a seguinte palavra-passe aleatória: rpcuser=myriadcoinrpc rpcpassword=%s -(não precisa recordar esta palavra-passe) -O nome de utilizador e password NÃO DEVEM ser iguais. +(não é necessário lembrar esta palavra-passe) +O nome de utilizador e palavra-passe NÃO PODEM ser iguais. Se o ficheiro não existir, crie-o com permissões de leitura apenas para o dono. -Também é recomendado definir alertnotify para que seja alertado sobre problemas; -por exemplo: alertnotify=echo %%s | mail -s "Alerta Myriadcoin" admin@foo.com - +Também é recomendado definir um alertnotify para que seja alertado sobre problemas; +por exemplo: alertnotify=echo %%s | mail -s "Alerta Bitcoin" admin@foo.com + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + Cifras aceitáveis (por defeito: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s Ocorreu um erro ao definir a porta %u do serviço RPC a escutar em IPv6, a usar IPv4: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 - Trancar a endereço específio e sempre escutar nele. Use a notação [anfitrião]:porta para IPv6 + Associar a endereço específico e escutar sempre nele. Use a notação [anfitrião]:porta para IPv6 - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. - Impossível trancar a pasta de dados %s. Provavelmente o Myriadcoin já está a ser executado. + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + Entre no modo de teste de regressão, que usa uma cadeia especial cujos blocos podem ser resolvidos instantaneamente. Isto têm como fim a realização de testes de regressão para pools e desenvolvimento de aplicações. + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + Entre no modo de teste de regressão, que usa uma cadeia especial cujos blocos podem ser resolvidos instantaneamente. + + + Error: Listening for incoming connections failed (listen returned error %d) + Erro: A Escuta de ligações de entrada falhou (retornou erro %d) - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Erro: A transação foi rejeitada. Isso poderá acontecer se algumas das moedas na sua carteira já tiverem sido gastas, se por exemplo tiver usado uma cópia do ficheiro wallet.dat e as moedas foram gastas na cópia mas não foram marcadas como gastas aqui. + Erro: A transação foi rejeitada! Isso poderá acontecer se algumas das moedas na sua carteira já tiverem sido gastas, se por exemplo tiver usado uma cópia do ficheiro wallet.dat e as moedas tiverem sido gastas na cópia mas não tiverem sido marcadas como gastas aqui. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! - Erro: Esta transação requer uma taxa de transação mínima de %s devido á sua quantia, complexidade, ou uso de fundos recebidos recentemente! + Erro: Esta transação requer uma taxa de transação mínima de %s devido á sua quantia, complexidade, ou uso de fundos recebidos recentemente! - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - Executar comando quando um alerta relevante for recebido (no comando, %s é substituído pela mensagem) - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Executar comando quando uma das transações na carteira mudar (no comando, %s é substituído pelo ID da Transação) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - Definir tamanho máximo de transações de alta-/baixa-prioridade em bytes (por defeito: 27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications - Esta é uma versão de pré-lançamento - use à sua responsabilidade - não usar para minar ou aplicações comerciais + Esta é uma versão de testes pré-lançamento - use à sua responsabilidade - não usar para minar ou aplicações comerciais + + + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + Incapaz de vincular à porta %s neste computador. O Myriadcoin Core provavelmente já está a correr. + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + Usar um proxy SOCKS5 separado para aceder a pares através de Tor hidden services (por defeito: -proxy) - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Atenção: -paytxfee está definida com um valor muito alto! Esta é a taxa que irá pagar se enviar uma transação. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - Atenção: As transações mostradas poderão não estar correctas! Poderá ter que atualizar ou outros nós poderão ter que atualizar. - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. Atenção: Por favor verifique que a data e hora do seu computador estão correctas! Se o seu relógio não estiver certo o Myriadcoin não irá funcionar correctamente. - + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + Aviso: A rede não parece estar completamente de acordo! Parece que alguns mineiros estão com dificuldades técnicas. + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + Atenção: Parecemos não estar de acordo com os nossos pares! Poderá ter que atualizar o seu cliente, ou outros nós poderão ter que atualizar os seus clientes. + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Atenção: erro ao ler wallet.dat! Todas as chaves foram lidas correctamente, mas dados de transação ou do livro de endereços podem estar em falta ou incorrectos. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - Atenção: wallet.dat corrupto, dados recuperados! wallet.dat original salvo como wallet.{timestamp}.bak em %s; se o seu saldo ou transações estiverem incorrectos deverá recuperar de uma cópia de segurança. + Atenção: wallet.dat corrompido, dados recuperados! wallet.dat original salvo como wallet.{timestamp}.bak em %s; se o seu saldo ou transações estiverem incorrectos deverá recuperar uma cópia de segurança. + + + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + <categoria> pode ser: - Attempt to recover private keys from a corrupt wallet.dat Tentar recuperar chaves privadas de um wallet.dat corrupto - + Myriadcoin Core Daemon + Servidor Myriadcoin Core + + Block creation options: Opções de criação de bloco: - + Clear list of wallet transactions (diagnostic tool; implies -rescan) + Limpar lista de transações (ferramenta de diagnóstico; implica -rescan) + + Connect only to the specified node(s) Apenas ligar ao(s) nó(s) especificado(s) - + Connect through SOCKS proxy + Ligar através de proxy SOCKS: + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + Ligar ao JSON-RPC na porta <n> (por defeito: 8332 ou rede de testes: 18332) + + + Connection options: + + + Corrupted block database detected Cadeia de blocos corrompida detectada - + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + Discover own IP address (default: 1 when listening and no -externalip) - Descobrir endereço IP próprio (padrão: 1 ao escutar e sem -externalip) + Descobrir endereço IP próprio (padrão: 1 ao escutar sem -externalip) + + + Do not load the wallet and disable wallet RPC calls + Não carregar a carteira e desativar chamadas RPC de carteira. - Do you want to rebuild the block database now? - Deseja reconstruir agora a cadeia de blocos? + Deseja reconstruir agora a base de dados de blocos. - Error initializing block database Erro ao inicializar a cadeia de blocos - Error initializing wallet database environment %s! - Erro ao inicializar o ambiente de base de dados da carteira %s! + Erro ao inicializar o ambiente %s da base de dados da carteira - Error loading block database - Erro ao carregar cadeia de blocos + Erro ao carregar base de dados de blocos - Error opening block database - Erro ao abrir a cadeia de blocos + Erro ao abrir a base de dados de blocos - Error: Disk space is low! Erro: Pouco espaço em disco! - Error: Wallet locked, unable to create transaction! Erro: Carteira bloqueada, incapaz de criar transação! - Error: system error: Erro: erro do sistema: - Failed to listen on any port. Use -listen=0 if you want this. - Falhou a escutar em qualquer porta. Use -listen=0 se quer isto. + Falhou a escutar em qualquer porta. Use -listen=0 se quiser isto. - Failed to read block info - Falha ao ler info do bloco + Falha ao ler informação do bloco - Failed to read block Falha ao ler bloco - Failed to sync block index - Falha ao sincronizar índice do bloco + Falha ao sincronizar índice de blocos - Failed to write block index - Falha ao escrever índice do bloco + Falha ao escrever índice de blocos - Failed to write block info - Falha ao escrever info do bloco + Falha ao escrever informação do bloco - Failed to write block - Falha ao escrever o bloco + Falha ao escrever bloco - Failed to write file info - Falha ao escrever info do ficheiro + Falha ao escrever informação do ficheiro - Failed to write to coin database Falha ao escrever na base de dados de moedas - Failed to write transaction index Falha ao escrever índice de transações - Failed to write undo data Falha ao escrever histórico de modificações - + Fee per kB to add to transactions you send + Taxa por KB a adicionar a transações enviadas + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + Find peers using DNS lookup (default: 1 unless -connect) Encontrar pares usando procura DNS (por defeito: 1 excepto -connect) - + Force safe mode (default: 0) + + + Generate coins (default: 0) Gerar moedas (por defeito: 0) - How many blocks to check at startup (default: 288, 0 = all) - Quantos blocos verificar ao começar (por defeito: 288, 0 = todos) + Quantos blocos verificar ao inicializar (por defeito: 288, 0 = todos) - - How thorough the block verification is (0-4, default: 3) - Qual a minúcia na verificação de blocos (0-4, por defeito: 3) + If <category> is not supplied, output all debugging information. + Se uma <categoria> não é fornecida, imprimir toda a informação de depuração. + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + Bloco génese incorreto ou nenhum bloco génese encontrado. Pasta de dados errada para a rede? + + + Invalid -onion address: '%s' + Endereço -onion inválido: '%s' - Not enough file descriptors available. - Descritores de ficheiros disponíveis são insuficientes. + Os descritores de ficheiros disponíveis são insuficientes. + + + Prepend debug output with timestamp (default: 1) + Adicionar data e hora à informação de depuração (por defeito: 1) + + + RPC client options: + Opções de cliente RPC: - Rebuild block chain index from current blk000??.dat files - Reconstruir a cadeia de blocos dos ficheiros blk000??.dat actuais + Reconstruir a cadeia de blocos a partir dos ficheiros blk000??.dat atuais + + + Select SOCKS version for -proxy (4 or 5, default: 5) + Selecione a versão do proxy socks a usar (4 ou 5, por defeito: 5) + + + Set database cache size in megabytes (%d to %d, default: %d) + Definir o tamanho da cache de base de dados em megabytes (%d a %s, padrão: %d) + + + Set maximum block size in bytes (default: %d) + Definir tamanho máximo por bloco em bytes (por defeito: %d) - Set the number of threads to service RPC calls (default: 4) Defina o número de processos para servir as chamadas RPC (por defeito: 4) - + Specify wallet file (within data directory) + Especifique ficheiro de carteira (dentro da pasta de dados) + + + Spend unconfirmed change when sending transactions (default: 1) + Gastar saldo não confirmado ao enviar transações (padrão: 1) + + + This is intended for regression testing tools and app development. + Isto têm como fim a realização de testes de regressão para pools e desenvolvimento de aplicações. + + + Usage (deprecated, use myriadcoin-cli): + Utilização (obsoleto, usar myriadcoin-cli): + + Verifying blocks... - Verificando blocos... + A verificar blocos... - Verifying wallet... - Verificando a carteira... + A verificar carteira... + + + Wait for RPC server to start + Esperar pelo ínicio do servidor RPC + + + Wallet %s resides outside data directory %s + A carteira %s reside fora da pasta de dados %s + + + Wallet options: + Opções da carteira: + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + Atenção: Argumento obsoleto -debugnet ignorado, usar -debug=net + + + You need to rebuild the database using -reindex to change -txindex + É necessário reconstruir as bases de dados usando -reindex para mudar o -txindex - Imports blocks from external blk000??.dat file Importar blocos de um ficheiro blk000??.dat externo - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) - Defina o número de processos de verificação (até 16, 0 = automático, <0 = disponibiliza esse número de núcleos livres, por defeito: 0) + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + Impossível trancar a pasta de dados %s. Provavelmente o Myriadcoin Core já está a ser executado. + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + Executar comando quando um alerta relevante for recebido ou em caso de uma divisão longa da cadeia de blocos (no comando, %s é substituído pela mensagem) + + + Output debugging information (default: 0, supplying <category> is optional) + Informação de depuração (por defeito: 0, fornecer uma <categoria> é opcional) + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + Definir tamanho máximo de transações com alta-prioridade/baixa-taxa em bytes (por defeito: %d) - Information Informação - - Invalid -tor address: '%s' - Endereço -tor inválido: '%s' - - - Invalid amount for -minrelaytxfee=<amount>: '%s' - Quantia inválida para -minrelaytxfee=<amount>: '%s' + Quantia inválida para -minrelaytxfee=<quantidade>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' - Quantia inválida para -mintxfee=<amount>: '%s' + Quantia inválida para -mintxfee=<quantidade>: '%s' + + + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + - Maintain a full transaction index (default: 0) Manter índice de transações completo (por defeito: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Armazenamento intermédio de recepção por ligação, <n>*1000 bytes (por defeito: 5000) + Maximo armazenamento intermédio de recepção por ligação, <n>*1000 bytes (por defeito: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Armazenamento intermédio de envio por ligação, <n>*1000 bytes (por defeito: 1000) + Maximo armazenamento intermédio de envio por ligação, <n>*1000 bytes (por defeito: 1000) - Only accept block chain matching built-in checkpoints (default: 1) - Apenas aceitar cadeia de blocos coincidente com marcas de verificação internas (por defeito: 1) + Apenas aceitar cadeia de blocos coincidente com pontos de controle internos (por defeito: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Apenas ligar a nós na rede <net> (IPv4, IPv6 ou Tor) - - Output extra debugging information. Implies all other -debug* options - Produzir informação de depuração extra. Implica todas as outras opções -debug* + Print block on startup, if found in block index + - - Output extra network debugging information - Produzir informação de depuração extraordinária + Print block tree on startup (default: 0) + - - Prepend debug output with timestamp - Preceder informação de depuração com selo temporal + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) - Opções SSL: (ver a Wiki Myriadcoin para instruções de configuração SSL) + Opções SSL: (ver a Myriadcoin Wiki para instruções de configuração SSL) - - Select the version of socks proxy to use (4-5, default: 5) - Selecione a versão do proxy socks a usar (4-5, padrão: 5) + Send command to Myriadcoin Core + - Send trace/debug info to console instead of debug.log file Enviar informação de rastreio/depuração para a consola e não para o ficheiro debug.log - - Send trace/debug info to debugger - Enviar informação de rastreio/depuração para o depurador - - - - Set maximum block size in bytes (default: 250000) - Definir tamanho máximo de um bloco em bytes (por defeito: 250000) - - - Set minimum block size in bytes (default: 0) Definir tamanho minímo de um bloco em bytes (por defeito: 0) - + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + Shrink debug.log file on client startup (default: 1 when no -debug) Encolher ficheiro debug.log ao iniciar o cliente (por defeito: 1 sem -debug definido) - Signing transaction failed Falhou assinatura da transação - Specify connection timeout in milliseconds (default: 5000) Especificar tempo de espera da ligação em millisegundos (por defeito: 5000) - + Start Myriadcoin Core Daemon + + + System error: Erro de sistema: - Transaction amount too small Quantia da transação é muito baixa - Transaction amounts must be positive Quantia da transação deverá ser positiva - Transaction too large Transação grande demais - Use UPnP to map the listening port (default: 0) Usar UPnP para mapear a porta de escuta (padrão: 0) - Use UPnP to map the listening port (default: 1 when listening) Usar UPnP para mapear a porta de escuta (padrão: 1 ao escutar) - - Use proxy to reach tor hidden services (default: same as -proxy) - Utilizar proxy para aceder a serviços escondidos Tor (por defeito: mesmo que -proxy) - - - Username for JSON-RPC connections Nome de utilizador para ligações JSON-RPC - Warning Aviso - Warning: This version is obsolete, upgrade required! Atenção: Esta versão está obsoleta, é necessário actualizar! - - You need to rebuild the databases using -reindex to change -txindex - Necessita reconstruir as bases de dados usando -reindex para mudar -txindex + Zapping all transactions from wallet... + A limpar todas as transações da carteira... + + + on startup + + + + version + versão - wallet.dat corrupt, salvage failed - wallet.dat corrupta, recuperação falhou + wallet.dat corrompido, recuperação falhou - Password for JSON-RPC connections Palavra-passe para ligações JSON-RPC - Allow JSON-RPC connections from specified IP address Permitir ligações JSON-RPC do endereço IP especificado - Send commands to node running on <ip> (default: 127.0.0.1) Enviar comandos para o nó a correr em <ip> (por defeito: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) - Executar comando quando mudar o melhor bloco (no comando, %s é substituído pela hash do bloco) + Executar comando quando o melhor bloco mudar (no comando, %s é substituído pela hash do bloco) - Upgrade wallet to latest format Atualize a carteira para o formato mais recente - Set key pool size to <n> (default: 100) Definir o tamanho da memória de chaves para <n> (por defeito: 100) - Rescan the block chain for missing wallet transactions - Reexaminar a cadeia de blocos para transações em falta na carteira + Procurar transações em falta na cadeia de blocos - Use OpenSSL (https) for JSON-RPC connections Usar OpenSSL (https) para ligações JSON-RPC - Server certificate file (default: server.cert) Ficheiro de certificado do servidor (por defeito: server.cert) - Server private key (default: server.pem) Chave privada do servidor (por defeito: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Cifras aceitáveis (por defeito: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - This help message Esta mensagem de ajuda - Unable to bind to %s on this computer (bind returned error %d, %s) - Incapaz de vincular a %s neste computador (vínculo retornou erro %d, %s) + Incapaz de vincular à porta %s neste computador (vínculo retornou erro %d, %s) - - Connect through socks proxy - Ligar através de um proxy socks - - - Allow DNS lookups for -addnode, -seednode and -connect Permitir procuras DNS para -addnode, -seednode e -connect - Loading addresses... - Carregar endereços... + A carregar endereços... - Error loading wallet.dat: Wallet corrupted Erro ao carregar wallet.dat: Carteira danificada - Error loading wallet.dat: Wallet requires newer version of Myriadcoin Erro ao carregar wallet.dat: A Carteira requer uma versão mais recente do Myriadcoin - Wallet needed to be rewritten: restart Myriadcoin to complete - A Carteira precisou ser reescrita: reinicie o Myriadcoin para completar + A Carteira precisou de ser reescrita: reinicie o Myriadcoin para completar o processo - Error loading wallet.dat Erro ao carregar wallet.dat - Invalid -proxy address: '%s' Endereço -proxy inválido: '%s' - Unknown network specified in -onlynet: '%s' Rede desconhecida especificada em -onlynet: '%s' - Unknown -socks proxy version requested: %i - Versão desconhecida de proxy -socks requisitada: %i + Versão de proxy -socks requisitada desconhecida: %i - Cannot resolve -bind address: '%s' - Não conseguiu resolver endereço -bind: '%s' + Não foi possível resolver o endereço -bind: '%s' - Cannot resolve -externalip address: '%s' - Não conseguiu resolver endereço -externalip: '%s' + Não foi possível resolver o endereço -externalip: '%s' - Invalid amount for -paytxfee=<amount>: '%s' Quantia inválida para -paytxfee=<amount>: '%s' - Invalid amount Quantia inválida - Insufficient funds Fundos insuficientes - Loading block index... - Carregar índice de blocos... + A carregar índice de blocos... - Add a node to connect to and attempt to keep the connection open - Adicione um nó ao qual se ligar e tentar manter a ligação aberta + Adicionar um nó para se ligar e tentar manter a ligação aberta - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - Incapaz de vincular à porta %s neste computador. Provavelmente o Myriadcoin já está a funcionar. - - - - Fee per KB to add to transactions you send - Taxa por KB a adicionar a transações enviadas - - - Loading wallet... - Carregar carteira... + A carregar carteira... - Cannot downgrade wallet Impossível mudar a carteira para uma versão anterior - Cannot write default address Impossível escrever endereço por defeito - Rescanning... Reexaminando... - Done loading Carregamento completo - To use the %s option Para usar a opção %s - Error Erro - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_ro_RO.ts b/src/qt/locale/bitcoin_ro_RO.ts index 81e6efd3..9b040186 100644 --- a/src/qt/locale/bitcoin_ro_RO.ts +++ b/src/qt/locale/bitcoin_ro_RO.ts @@ -1,175 +1,151 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - Despre Myriadcoin + About Myriadcoin Core + Despre Nucleul Myriadcoin - - <b>Myriadcoin</b> version - <b>Myriadcoin</b> versiunea + <b>Myriadcoin Core</b> version + <b>Nucleul Myriadcoin </b> versiune - This is experimental software. Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - + +Acesta este un program experimental. + +Distribuit sub licența de programe MIT/X11, vezi fișierul însoțitor COPYING sau http://www.opensource.org/licenses/mit-license.php. + +Acest produs include programe dezvoltate de către OpenSSL Project pentru a fi folosite în OpenSSL Toolkit (http://www.openssl.org/) și programe criptografice scrise de către Eric Young (eay@cryptsoft.com) și programe UPnP scrise de către Thomas Bernard. - Copyright - + Drepturi de autor - - The Myriadcoin developers + The Myriadcoin Core developers + Dezvoltatorii Myriadcoin Core + + + (%1-bit) AddressBookPage - - Address Book - Listă de adrese - - - Double-click to edit address or label Dublu-click pentru a edita adresa sau eticheta - Create a new address - Creaţi o adresă nouă + Creează o adresă nouă + + + &New + &Nou - Copy the currently selected address to the system clipboard - Copiați adresa selectată în clipboard + Copiază adresa selectată în clipboard - - &New Address - &Adresă nouă + &Copy + &Copiere - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Acestea sunt adresele dumneavoastră Myriadcoin pentru a primi plăţi. Dacă doriţi, puteți da o adresa diferită fiecărui expeditor, pentru a putea ţine evidenţa plăţilor. + C&lose + &Inchidere - &Copy Address &Copiază adresa - - Show &QR Code - Arata codul QR - - - - Sign a message to prove you own a Myriadcoin address - Semneaza mesajul pentru a dovedi ca detii aceasta adresa Bitocin - - - - Sign &Message - Semneaza mesajul - - - Delete the currently selected address from the list Sterge adresele curent selectate din lista - Export the data in the current tab to a file - + Exporta datele din tab-ul curent într-un fișier - &Export - + &Exportă - - Verify a message to ensure it was signed with a specified Myriadcoin address - Verifica mesajul pentru a te asigura ca a fost insemnat cu o adresa myriadcoin specifica - - - - &Verify Message - Verifica mesajele - - - &Delete - &Șterge + Ște&rge + + + Choose the address to send coins to + Alegeti adresa unde vreti sa trimiteti monezile + + + Choose the address to receive coins with + Alegeti adresa unde vreti sa primiti monezile + + + C&hoose + &Alege + + + Sending addresses + Adresa Destinatarului + + + Receiving addresses + Adresa pe care primiti - These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - + Acestea sunt adresele dumneavoastra Myriadcoin care pot fi folosite la trimiterea platilor. Verificati totdeauna cantitatea si adresa de primire inainte de a trimite monezi. + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Acestea sunt adresele dumneavoastra Myriadcoin folosite pentru a primi plati. Este recomandat sa folositi cate o adresa noua de primire pentru fiecare tranzactie in parte. - Copy &Label Copiază &eticheta - &Edit &Editează - - Send &Coins - + Export Address List + Exportati Agenda - - Export Address Book Data - Exportă Lista de adrese - - - Comma separated file (*.csv) - Fisier csv: valori separate prin virgulă (*.csv) + Valori separate prin virgulă (*.csv) - - Error exporting - Eroare la exportare. + Exporting Failed + Exportare esuata - - Could not write to file %1. - Eroare la scrierea în fişerul %1. + There was an error trying to save the address list to %1. + A apărut o eroare încercând să se salveze lista de adrese la %1. AddressTableModel - Label Etichetă - Address Adresă - (no label) (fără etichetă) @@ -177,140 +153,106 @@ This product includes software developed by the OpenSSL Project for use in the O AskPassphraseDialog - Passphrase Dialog - + Dialogul pentru fraza de acces - Enter passphrase - Introduceți fraza de acces. + Introdu fraza de acces - New passphrase - Frază de acces nouă + Frază de acces nouă - Repeat new passphrase - Repetaţi noua frază de acces + Repetă noua frază de acces - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - Introduceţi noua parolă a portofelului electronic.<br/>Vă rugăm să folosiţi <b>minimum 10 caractere aleatoare</b>, sau <b>minimum 8 cuvinte</b>. + Introdu noua parolă a portofelului electronic.<br/>Te rog folosește <b>minim 10 caractere aleatoare</b>, sau <b>minim 8 cuvinte</b>. - Encrypt wallet Criptează portofelul - This operation needs your wallet passphrase to unlock the wallet. - Aceasta operație are nevoie de un portofel deblocat. + Această acțiune necesită fraza ta de acces pentru deblocarea portofelului. - Unlock wallet Deblochează portofelul - This operation needs your wallet passphrase to decrypt the wallet. - Această operaţiune necesită parola pentru decriptarea portofelului electronic. + Această acțiune necesită fraza ta de acces pentru decriptarea portofelului. - Decrypt wallet Decriptează portofelul. - Change passphrase Schimbă fraza de acces - Enter the old and new passphrase to the wallet. - Introduceţi vechea parola a portofelului eletronic şi apoi pe cea nouă. + Introdu vechea și noua parolă pentru portofel. - Confirm wallet encryption - Confirmă criptarea portofelului. + Confirmă criptarea portofelului - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! Atenție: Dacă pierdeţi parola portofelului electronic dupa criptare, <b>VEŢI PIERDE ÎNTREAGA SUMĂ DE MYRIADCOIN ACUMULATĂ</b>! - Are you sure you wish to encrypt your wallet? Sunteţi sigur că doriţi să criptaţi portofelul electronic? - 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. - + IMPORTANT: Orice copie de siguranta facuta in prealabil portofelului dumneavoastra ar trebui inlocuita cu cea generata cel mai recent fisier criptat al portofelului. Pentru siguranta, copiile de siguranta vechi ale portofelului ne-criptat vor deveni inutile de indata ce veti incepe folosirea noului fisier criptat al portofelului. - - Warning: The Caps Lock key is on! Atentie! Caps Lock este pornit - - Wallet encrypted - Portofel criptat + Portofel criptat - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. - Myriadcoin se va închide acum pentru a termina procesul de criptare. Amintiți-vă că criptarea portofelului dumneavoastră nu poate proteja în totalitate myriadcoins dvs. de a fi furate de intentii rele. + Myriadcoin se va închide acum pentru a termina procesul de criptare. Ține minte că criptarea portofelului nu te poate proteja în totalitate de furtul monedelor de către programe dăunătoare care îți infectează calculatorul. - - - - Wallet encryption failed - Criptarea portofelului a eșuat. + Criptarea portofelului a eșuat - Wallet encryption failed due to an internal error. Your wallet was not encrypted. Criptarea portofelului a eșuat din cauza unei erori interne. Portofelul tău nu a fost criptat. - - The supplied passphrases do not match. - Fraza de acces introdusă nu se potrivește. + Frazele de acces introduse nu se potrivesc. - Wallet unlock failed - Deblocarea portofelului electronic a eşuat. + Deblocarea portofelului a eșuat - - - The passphrase entered for the wallet decryption was incorrect. - Parola introdusă pentru decriptarea portofelului electronic a fost incorectă. + Fraza de acces introdusă pentru decriptarea portofelului a fost incorectă. - Wallet decryption failed - Decriptarea portofelului electronic a eşuat. + Decriptarea portofelului a eșuat - Wallet passphrase was successfully changed. Parola portofelului electronic a fost schimbată. @@ -318,680 +260,954 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - Sign &message... - Semneaza &mesaj... + Semnează &mesaj... - Synchronizing with network... - Se sincronizează cu reţeaua... + Se sincronizează cu rețeaua... - &Overview - &Detalii + &Imagine de ansamblu + + + Node + Nod - Show general overview of wallet - Afişează detalii despre portofelul electronic + Arată o stare generală de ansamblu a portofelului - &Transactions - &Tranzacţii + &Tranzacții - Browse transaction history - Istoricul tranzacţiilor + Răsfoiește istoricul tranzacțiilor - - Edit the list of stored addresses and labels - Editaţi lista de adrese şi etichete. - - - - Show the list of addresses for receiving payments - Lista de adrese pentru recepţionarea plăţilor - - - E&xit - Ieșire + &Ieșire - Quit application - Părăsiţi aplicaţia + Închide aplicația - Show information about Myriadcoin - Informaţii despre Myriadcoin + Arată informații despre Myriadcoin - About &Qt Despre &Qt - Show information about Qt - Informaţii despre Qt + Arată informații despre Qt - &Options... &Setări... - &Encrypt Wallet... Criptează portofelul electronic... - &Backup Wallet... - &Backup portofelul electronic... + &Fă o copie de siguranță a portofelului... - &Change Passphrase... - &Schimbă parola... + S&chimbă parola... + + + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + Vizitaţi &URI... - Importing blocks from disk... Importare blocks de pe disk... - Reindexing blocks on disk... - + Se reindexează blocurile pe disc... - Send coins to a Myriadcoin address - &Trimiteţi Myriadcoin către o anumită adresă + Trimite monede către o adresă Myriadcoin - Modify configuration options for Myriadcoin - Modifică setările pentru Myriadcoin + Modifică opțiunile de configurare pentru Myriadcoin - Backup wallet to another location - Creaza copie de rezerva a portofelului intr-o locatie diferita + Creează o copie de rezervă a portofelului într-o locație diferită - Change the passphrase used for wallet encryption - &Schimbă parola folosită pentru criptarea portofelului electronic + Schimbă fraza de acces folosită pentru criptarea portofelului - &Debug window - & Fereastra debug + Fereastră &debug - Open debugging and diagnostic console - Deschide consola de debug si diagnosticare + Deschide consola de debug și diagnosticare - &Verify message... - Verifica mesajul + &Verifică mesajul... - - Myriadcoin Myriadcoin - Wallet Portofelul - &Send - + &Trimite - &Receive - + &Primește - - &Addresses - - - - - &About Myriadcoin - &Despre Myriadcoin - - - &Show / Hide Arata/Ascunde - Show or hide the main Window - + Arată sau ascunde fereastra principală - Encrypt the private keys that belong to your wallet - + Criptează cheile private ale portofelului tău - Sign messages with your Myriadcoin addresses to prove you own them - + Semnează mesaje cu adresa ta Myriadcoin pentru a dovedi că îți aparțin - Verify messages to ensure they were signed with specified Myriadcoin addresses - + Verifică mesaje pentru a te asigura că au fost semnate cu adresa Myriadcoin specificată - &File - &Fişier + &Fișier - &Settings &Setări - &Help - &Ajutor + A&jutor - Tabs toolbar - Bara de ferestre de lucru + Bara de file - - [testnet] [testnet] - + Myriadcoin Core + Myriadcoin Core + + + Request payments (generates QR codes and myriadcoin: URIs) + Cereti plati (genereaza coduri QR si bitcoin-uri: URls) + + + &About Myriadcoin Core + &Despre Nucleul Myriadcoin + + + Show the list of used sending addresses and labels + Aratati lista de adrese trimise si etichete folosite. + + + Show the list of used receiving addresses and labels + Aratati lista de adrese pentru primire si etichete + + + Open a myriadcoin: URI or payment request + Deschideti un myriadcoin: o adresa URI sau o cerere de plata + + + &Command-line options + Command-line setări + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + Myriadcoin client Client Myriadcoin - %n active connection(s) to Myriadcoin network - %n active connections to Myriadcoin network%n active connections to Myriadcoin network%n active connections to Myriadcoin network + %n conexiune activă către rețeaua Myriadcoin%n conexiuni active către rețeaua Myriadcoin%n de conexiuni active către rețeaua Myriadcoin - No block source available... - + Nici o sursă de bloc disponibil ... - Processed %1 of %2 (estimated) blocks of transaction history. - + S-a procesat %1 din %2 block-uri (estimate) din istoria tranzactiei. - Processed %1 blocks of transaction history. - + S-au procesat %1 blocuri din istoricul tranzacțiilor. - %n hour(s) - + %n oră%n ore%n ore - %n day(s) - + %n zi%n zile%n zile - %n week(s) + %n săptămână%n săptămâni%n de săptămâni + + + %1 and %2 + %1 si %2 + + + %n year(s) - %1 behind - + %1 în urmă - Last received block was generated %1 ago. - + Ultimul bloc recepționat a fost generat acum %1. - Transactions after this will not yet be visible. - + Tranzacții după aceasta nu va fi încă disponibile. - Error - + Eroare - Warning - + Avertizare - Information - + Informație - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - Up to date Actualizat - Catching up... Se actualizează... - - Confirm transaction fee - Confirma taxa tranzactiei - - - Sent transaction - Tranzacţie expediată + Tranzacție expediată - Incoming transaction - Tranzacţie recepţionată + Tranzacție recepționată - Date: %1 Amount: %2 Type: %3 Address: %4 - Data: %1⏎ Suma: %2⏎ Tipul: %3⏎ Addresa: %4⏎ + Data: %1 +Suma: %2 +Tipul: %3 +Adresa: %4 + - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - Portofelul electronic este <b>criptat</b> iar in momentul de faţă este <b>deblocat</b> + Portofelul este <b>criptat</b> iar în momentul de față este <b>deblocat</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> - Portofelul electronic este <b>criptat</b> iar in momentul de faţă este <b>blocat</b> + Portofelul este <b>criptat</b> iar în momentul de față este <b>blocat</b> - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. - + A survenit o eroare fatala. Myriadcoin nu mai poate continua in siguranta si se va opri. ClientModel - Network Alert - Alerta retea + Alertă rețea + + + + CoinControlDialog + + Coin Control Address Selection + Selectare Adresă de Comandă Monedă + + + Quantity: + Cantitate: + + + Bytes: + Octeţi: + + + Amount: + Sumă: + + + Priority: + Prioritate: + + + Fee: + Taxa: + + + Low Output: + Ieşire minimă: + + + After Fee: + După taxe: + + + Change: + Schimb: + + + (un)select all + (de)selectaţi tot + + + Tree mode + Modul arborescent + + + List mode + Modul lista + + + Amount + Sumă + + + Address + Adresă + + + Date + Data + + + Confirmations + Confirmări + + + Confirmed + Confirmat + + + Priority + Prioritate + + + Copy address + Copiază adresa + + + Copy label + Copiază eticheta + + + Copy amount + Copiază suma + + + Copy transaction ID + Copiază ID tranzacție + + + Lock unspent + Blocaţi necheltuite + + + Unlock unspent + Deblocaţi necheltuite + + + Copy quantity + Copiaţi quantitea + + + Copy fee + Copiaţi taxele + + + Copy after fee + Copiaţi după taxe + + + Copy bytes + Copiaţi octeţi + + + Copy priority + Copiaţi prioritatea + + + Copy low output + Copiaţi ieşire minimă: + + + Copy change + Copiaţi schimb + + + highest + cel mai mare + + + higher + mai mare + + + high + mare + + + medium-high + marime medie + + + medium + mediu + + + low-medium + mediu-scazut + + + low + scazut + + + lower + mai scazut + + + lowest + cel mai scazut + + + (%1 locked) + (1% blocat) + + + none + nimic + + + Dust + Praf + + + yes + da + + + no + nu + + + This label turns red, if the transaction size is greater than 1000 bytes. + Această etichetă devine roşie, în cazul în care dimensiunea tranzacţiei este mai mare de 1000 de octeţi. + + + This means a fee of at least %1 per kB is required. + Aceasta înseamnă o taxă de cel puţin 1% pe kB necesar. + + + Can vary +/- 1 byte per input. + Poate varia +/- 1 octet pentru fiecare intrare. + + + Transactions with higher priority are more likely to get included into a block. + Tranzacţiile cu prioritate mai mare sunt mai susceptibile de fi incluse într-un bloc. + + + This label turns red, if the priority is smaller than "medium". + Aceasta eticheta se face rosie daca prioritatea e mai mica decat media + + + This label turns red, if any recipient receives an amount smaller than %1. + Această etichetă devine roşie, dacă orice beneficiar primeşte o sumă mai mică decât 1. + + + This means a fee of at least %1 is required. + Aceasta înseamnă că o taxă de cel puţin 1% este necesară. + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + Sume sub 0,546 ori taxa minima sunt indicate ca ignorate. + + + This label turns red, if the change is smaller than %1. + Această etichetă devine roşie, dacă schimbul e mai mic de 1%. + + + (no label) + (fără etichetă) + + + change from %1 (%2) + restul de la %1 (%2) + + + (change) + (schimb) EditAddressDialog - Edit Address Editează adresa - &Label - &Eticheta + &Etichetă - - The label associated with this address book entry - Eticheta asociată cu această înregistrare în Lista de adrese + The label associated with this address list entry + Etichetele asociate cu aceasta intrare din lista. + + + The address associated with this address list entry. This can only be modified for sending addresses. + Adresa asociata cu aceasta adresa din lista. Aceasta poate fi modificata doar pentru Destinatari. - &Address &Adresă - - The address associated with this address book entry. This can only be modified for sending addresses. - Adresa asociată cu această înregistrare în Lista de adrese. Aceasta poate fi modificată doar pentru expediere. - - - New receiving address Noua adresă de primire - New sending address Noua adresă de trimitere - Edit receiving address Editează adresa de primire - Edit sending address Editează adresa de trimitere - The entered address "%1" is already in the address book. - Adresa introdusă "%1" se află deja în Lista de adrese. + Adresa introdusă "%1" se află deja în lista de adrese. - The entered address "%1" is not a valid Myriadcoin address. - Adresa introdusă "%1" nu este o adresă myriadcoin valabilă. + Adresa introdusă "%1" nu este o adresă myriadcoin validă. - Could not unlock wallet. - Portofelul electronic nu a putut fi deblocat . + Portofelul nu a putut fi deblocat. - New key generation failed. - New key generation failed. + Generarea noii chei a eșuat. - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt - Myriadcoin-Qt + A new data directory will be created. + Va fi creat un nou dosar de date. + + + name + nume + + + Directory already exists. Add %1 if you intend to create a new directory here. + Dosarul deja există. Adaugă %1 dacă intenționezi să creezi un nou dosar aici. + + + Path already exists, and is not a directory. + Calea deja există și nu este un dosar. + + + Cannot create data directory here. + Nu se poate crea un dosar de date aici. + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + Myriadcoin Core - Opţiuni Linie de comandă + + + Myriadcoin Core + Myriadcoin Core - version versiunea - Usage: Uz: - command-line options command-line setări - UI options UI setări - Set language, for example "de_DE" (default: system locale) Seteaza limba, de exemplu: "de_DE" (initialt: system locale) - Start minimized Incepe miniaturizare - + Set SSL root certificates for payment request (default: -system-) + + + Show splash screen on startup (default: 1) Afișează pe ecran splash la pornire (implicit: 1) + + Choose data directory on startup (default: 0) + Alege dosarul de date la pornire (implicit: 0) + + + + Intro + + Welcome + Bun venit + + + Welcome to Myriadcoin Core. + Bine Aţi Venit la Nucleul Myriadcoin. + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + Dacă aceasta este prima dată când programul este lansat, puteţi alege unde Nucleul Myriadcoin va stoca datele. + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + Nucleul Myriadcoin Core se va descărca şi va stoca o copie a lanţului blocului Myriadcoin. Cel puţin 1GB de date vor fi stocate in acest dosar şi se va dezvolta în timp. Portofelul va fi, de asemenea, stocat în acest dosar. + + + Use the default data directory + Folosește dosarul de date implicit + + + Use a custom data directory: + Folosește un dosar de date personalizat: + + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" can not be created. + Eroare: Directorul datelor specificate "%1" nu poate fi creat. + + + Error + Eroare + + + GB of free space available + GB de spațiu liber disponibil + + + (of %1GB needed) + (din %1GB necesari) + + + + OpenURIDialog + + Open URI + Deschideti adresa URI + + + Open payment request from URI or file + Deschideţi cerere de plată prin intermediul adresei URI sau a fişierului + + + URI: + adresa URI: + + + Select payment request file + Selectaţi fişierul de cerere de plată + + + Select payment request file to open + Selectaţi fişierul de cerere de plată de deschis + OptionsDialog - Options Setări - &Main &Principal - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. - + Taxa optionala de tranzactie per kB care ajuta ca tranzactiile dumneavoastra sa fie procesate rapid. Majoritatea tranzactiilor sunt 1 kB. - Pay transaction &fee Plăteşte comision pentru tranzacţie &f - Automatically start Myriadcoin after logging in to the system. Porneşte automat programul Myriadcoin la pornirea computerului. - &Start Myriadcoin on system login &S Porneşte Myriadcoin la pornirea sistemului - + Size of &database cache + + + + MB + MB + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + Conecteaza-te la reteaua Myriadcoin printr-un proxy SOCKS + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + Reset all client options to default. - + Resetează toate setările clientului la valorile implicite. - &Reset Options - + &Resetează opțiunile - &Network &Retea - + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + expert + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. Deschide automat în router portul aferent clientului Myriadcoin. Funcţionează doar în cazul în care routerul e compatibil UPnP şi opţiunea e activată. - Map port using &UPnP Mapeaza portul folosind &UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - Conectare la reţeaua Myriadcoin folosind un proxy SOCKS (de exemplu, când conexiunea se stabileşte prin reţeaua Tor) - - - - &Connect through SOCKS proxy: - &Conectează prin proxy SOCKS: - - - Proxy &IP: Proxy &IP: - - IP address of the proxy (e.g. 127.0.0.1) - Adresa de IP a proxy serverului (de exemplu: 127.0.0.1) - - - &Port: &Port: - Port of the proxy (e.g. 9050) Portul pe care se concetează proxy serverul (de exemplu: 9050) - SOCKS &Version: SOCKS &Versiune: - SOCKS version of the proxy (e.g. 5) Versiunea SOCKS a proxiului (ex. 5) - &Window &Fereastra - Show only a tray icon after minimizing the window. Afişează doar un icon in tray la ascunderea ferestrei - &Minimize to the tray instead of the taskbar &M Ascunde în tray în loc de taskbar - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. Ascunde fereastra în locul părăsirii programului în momentul închiderii ferestrei. Când acestă opţiune e activă, aplicaţia se va opri doar în momentul selectării comenzii Quit din menu. - M&inimize on close &i Ascunde fereastra în locul închiderii programului - &Display &Afişare - User Interface &language: Interfata & limba userului - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. Limba interfeței utilizatorului poate fi setat aici. Această setare va avea efect după repornirea Myriadcoin. - &Unit to show amounts in: &Unitatea de măsură pentru afişarea sumelor: - Choose the default subdivision unit to show in the interface and when sending coins. - Alege subdiviziunea folosită la afişarea interfeţei şi la trimiterea de myriadcoin. + Alege subdiviziunea folosită la afişarea interfeţei şi la trimiterea de bitcoin. - Whether to show Myriadcoin addresses in the transaction list or not. Vezi dacă adresele Myriadcoin sunt în lista de tranzacție sau nu - &Display addresses in transaction list &Afişează adresele în lista de tranzacţii - + Whether to show coin control features or not. + Dacă să se afişeze controlul caracteristicilor monedei sau nu. + + &OK & OK - &Cancel & Renunta - - &Apply - Aplica - - - default Initial - + none + nimic + + Confirm options reset - + Confirmă resetarea opțiunilor - - Some settings may require a client restart to take effect. - + Client restart required to activate changes. + Este necesar un restart al clientului pentru a activa schimbările. - - Do you want to proceed? - + Client will be shutdown, do you want to proceed? + Clientul va fi închis, doriţi să continuaţi? - - - Warning - Atentie! + This change would require a client restart. + Această schimbare va necesita un restart al clientului. - - - This setting will take effect after restarting Myriadcoin. - - - - The supplied proxy address is invalid. Adresa myriadcoin pe care a-ti specificat-o este invalida @@ -999,59 +1215,54 @@ Address: %4 OverviewPage - Form Form - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. - Informațiile afișate pot fi expirate. Portofelul tău se sincronizează automat cu rețeaua Myriadcoin după ce o conexiune este stabilita, dar acest proces nu a fost finalizat încă. + Informațiile afișate pot neactualizate. Portofelul tău se sincronizează automat cu rețeaua Myriadcoin după ce o conexiune este stabilită, dar acest proces nu a fost finalizat încă. - - Balance: - Balanţă: - - - - Unconfirmed: - Neconfirmat: - - - Wallet - Portofelul + Portofel + + + Available: + Disponibil: + + + Your current spendable balance + Balanța ta curentă de cheltuieli + + + Pending: + În aşteptare: + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + Totalul tranzacțiilor care nu sunt confirmate încă și care nu sunt încă adunate la balanța de cheltuieli - Immature: Nematurizat: - Mined balance that has not yet matured Balanta minata care nu s-a maturizat inca - + Total: + Total: + + + Your current total balance + Balanța totală curentă + + <b>Recent transactions</b> - <b>Ultimele tranzacţii</b> + <b>Tranzacții recente</b> - - Your current balance - Soldul contul - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - Totalul tranzacţiilor care aşteaptă să fie confirmate şi care nu sunt încă luate în calcul la afişarea soldului contului. - - - - out of sync Nu este sincronizat @@ -1059,579 +1270,856 @@ Address: %4 PaymentServer - + URI handling + Gestionare URI + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + URI nu poate fi analizat! Acest lucru poate fi cauzat de o adresa Myriadcoin invalida sau parametri deformati URI. + + + Requested payment amount of %1 is too small (considered dust). + Cereti plata cu suma de %1 este prea mica (considerata praf) + + + Payment request error + Eroare la cererea de plată + + Cannot start myriadcoin: click-to-pay handler + Nu poate porni myriadcoin: regula clic-pentru-plata + + + Net manager warning + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + Cereri de plată neverificate prin script-uri personalizate de plată nu sunt suportate. + + + Refund from %1 + rambursare de la %1 + + + Error communicating with %1: %2 + Eroare la comunicarea cu %1: %2 + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + Răspuns greșit de la server %1 + + + Payment acknowledged + Plată acceptată + + + Network request error + Eroare în cererea de rețea + - QRCodeDialog + QObject - - QR Code Dialog - Dialogul codului QR + Myriadcoin + Myriadcoin - - Request Payment - Cerere de plata + Error: Specified data directory "%1" does not exist. + Eroare: Directorul datelor specificate "%1" nu exista. - - Amount: - Sumă: - - - - Label: - Etichetă: - - - - Message: - Mesaj: - - - - &Save As... - Salvare ca... - - - - Error encoding URI into QR Code. - Eroare la incercarea codarii URl-ului in cod QR - - - - The entered amount is invalid, please check. - Suma introdusa nu este valida, verifica suma. - - - - Resulting URI too long, try to reduce the text for label / message. + Error: Cannot parse configuration file: %1. Only use key=value syntax. - - Save QR Code - Salveaza codul QR + Error: Invalid combination of -regtest and -testnet. + Eroare: combinație nevalidă de -regtest și -testnet. - - PNG Images (*.png) - Imagini de tip PNG (*.png) + Myriadcoin Core didn't yet exit safely... + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Introdu o adresă Myriadcoin (de exemplu: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + Salvarea imaginii ... + + + &Copy Image + Copierea imaginii + + + Save QR Code + Salvează codul QR + + + PNG Image (*.png) + Imagine de tip PNG (*.png) RPCConsole - Client name - Numaele clientului + Nume client - - - - - - - - - - N/A N/A - Client version - Versiunea clientului + Versiune client - &Information - & Informatie + &Informație + + + Debug window + Fereastra de depanare + + + General + General - Using OpenSSL version Foloseste versiunea OpenSSL - Startup time - Data pornirii + Durata pornirii - Network - Retea + Rețea + + + Name + Numele - Number of connections - Numarul de conexiuni + Numărul de conexiuni - - On testnet - Pe testnet - - - Block chain - Lant bloc + Lanț de blocuri - Current number of blocks - Numarul curent de blockuri + Numărul curent de blocuri - Estimated total blocks - Estimarea totala a blocks + Blocurile totale estimate - Last block time - Ultimul block a fost gasit la: + Data ultimului bloc - &Open &Deschide - - Command-line options - Command-line setări - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - Arata mesajul de ajutor Myriadcoin-QT pentru a obtine o lista cu posibilele optiuni ale comenzilor Myriadcoin - - - - &Show - & Arata - - - &Console - &Consola + &Consolă + + + &Network Traffic + Traficul in rețea + + + &Clear + &Ştergeţi + + + Totals + Totaluri + + + In: + în: + + + Out: + Ieșire. - Build date - Construit la data: + Construit la data - - Myriadcoin - Debug window - Myriadcoin-Fereastra pentru debug - - - - Myriadcoin Core - Myriadcoin Core - - - Debug log file Loguri debug - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. Deschide logurile debug din directorul curent. Aceasta poate dura cateva secunde pentru fisierele mai mari - Clear console - Curata consola + Curăță consola - Welcome to the Myriadcoin RPC console. Bun venit la consola myriadcoin RPC - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. Foloseste sagetile sus si jos pentru a naviga in istoric si <b>Ctrl-L</b> pentru a curata. - Type <b>help</b> for an overview of available commands. Scrie <b>help</b> pentru a vedea comenzile disponibile + + %1 B + %1 B + + + %1 KB + %1 KB + + + %1 MB + %1 MB + + + %1 GB + %1 GB + + + %1 m + %1 m + + + %1 h + %1 h + + + %1 h %2 m + %1 ora %2 minute + + + + ReceiveCoinsDialog + + &Amount: + & suma: + + + &Label: + &Etichetă: + + + &Message: + & mesaj: + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + Refolositi una din adresele de primire folosite in prealabil. Refolosirea adreselor poate crea probleme de securitate si confidentialitate. Nu folositi aceasta optiune decat daca o cerere de regenerare a platii a fost facuta in prealabil. + + + R&euse an existing receiving address (not recommended) + &Refolosirea unei adrese de primire (nu este recomandat) + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + Folosește acest formular pentru a solicita plăți. Toate câmpurile sunt <b>opționale</b>. + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + Stergeti toate campurile formularului + + + Clear + Stergeti + + + Requested payments history + Istoricul platilor a fost cerut + + + &Request payment + &Cereti plata + + + Show the selected request (does the same as double clicking an entry) + Arata cererea selectata (acelas lucru ca si dublu-click pe o inregistrare) + + + Show + Arată + + + Remove the selected entries from the list + + + + Remove + Elimină + + + Copy label + Copiază eticheta + + + Copy message + Copiaţi mesajul + + + Copy amount + Copiază suma + + + + ReceiveRequestDialog + + QR Code + Cod QR + + + Copy &URI + Copiati &URl + + + Copy &Address + Copiati &Adresa + + + &Save Image... + Salvarea imaginii ... + + + Request payment to %1 + Cereti plata pentru %1 + + + Payment information + Informatiile platii + + + URI + Identificator uniform de resurse + + + Address + Adresă + + + Amount + Sumă + + + Label + Etichetă + + + Message + Mesaj + + + Resulting URI too long, try to reduce the text for label / message. + URI rezultat este prea lung, încearcă să reduci textul pentru etichetă / mesaj. + + + Error encoding URI into QR Code. + Eroare la codarea URl-ului în cod QR. + + + + RecentRequestsTableModel + + Date + Data + + + Label + Etichetă + + + Message + Mesaj + + + Amount + Sumă + + + (no label) + (fără etichetă) + + + (no message) + (nici un mesaj) + + + (no amount) + (suma nulă) + SendCoinsDialog - - - - - - - - Send Coins - Trimite Myriadcoin + Trimite monede + + + Coin Control Features + + + + Inputs... + Intrări + + + automatically selected + Selectie automatică + + + Insufficient funds! + Fonduri insuficiente! + + + Quantity: + Cantitate: + + + Bytes: + Octeţi: + + + Amount: + Sumă: + + + Priority: + Prioritate: + + + Fee: + Taxa: + + + Low Output: + Ieşire minimă: + + + After Fee: + După taxe: + + + Change: + Schimbaţi: + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + - Send to multiple recipients at once - Trimite simultan către mai mulţi destinatari + Trimite simultan către mai mulți destinatari - Add &Recipient &Adaugă destinatar - - Remove all transaction fields - Sterge toate spatiile de tranzactie + Clear all fields of the form. + Stergeti toate campurile formularului - Clear &All - Şterge &tot + Șterge &tot - Balance: - Balanţă: + Balanță: - - 123.456 BTC - 123.456 BTC - - - Confirm the send action - Confirmă operaţiunea de trimitere + Confirmă operațiunea de trimitere - S&end &S Trimite - - <b>%1</b> to %2 (%3) - <b>%1</b> la %2 (%3) - - - Confirm send coins - Confirmaţi trimiterea de myriadcoin + Confirmă trimiterea de monede - - Are you sure you want to send %1? - Sunteţi sigur că doriţi să trimiteţi %1? + %1 to %2 + %1 la %2 - - and - şi + Copy quantity + Copiaţi quantitea + + + Copy amount + Copiază suma + + + Copy fee + Copiaţi taxele + + + Copy after fee + Copiaţi după taxe + + + Copy bytes + Copiaţi octeţi + + + Copy priority + Copiaţi prioritatea + + + Copy low output + Copiaţi ieşire minimă: + + + Copy change + Copiaţi schimb + + + Total Amount %1 (= %2) + Suma totală %1 (= %2) + + + or + sau - The recipient address is not valid, please recheck. Adresa destinatarului nu este validă, vă rugăm să o verificaţi. - The amount to pay must be larger than 0. Suma de plată trebuie să fie mai mare decât 0. - The amount exceeds your balance. - Suma depăşeşte soldul contului. + Suma depășește soldul contului. - The total exceeds your balance when the %1 transaction fee is included. - Total depăşeşte soldul contului in cazul plăţii comisionului de %1. + Totalul depășește soldul contului dacă se include și plata comisionului de %1. - Duplicate address found, can only send to each address once per send operation. - S-a descoperit o adresă care figurează de două ori. Expedierea se poate realiza către fiecare adresă doar o singură dată pe operaţiune. + S-a descoperit o adresă care figurează de două ori. Expedierea se poate realiza către fiecare adresă doar o singură dată pe operațiune. - - Error: Transaction creation failed! - + Transaction creation failed! + Creare de tranzactie nereusita! - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Eroare: Tranyacţia a fost respinsă. Acesta poate fi rezultatul cheltuirii prealabile a unei sume de myriadcoin din portofelul electronic, ca în cazul folosirii unei copii a fisierului wallet.dat, în care s-au efectuat tranzacţii neînregistrate în fisierul curent. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Tranzactia a fost respinsa! Acest lucru se poate intampla daca o parte din monedele tale din portofel au fost deja cheltuite, la fel ca si cum ai fi folosit o copie a wallet.dat si monedele au fost cheltuite in copie, dar nu au fost marcate si si cheltuite si aici. + + + Warning: Invalid Myriadcoin address + Atentie: Adresa Myriadcoin invalida! + + + (no label) + (fără etichetă) + + + Warning: Unknown change address + Atentie: Schimbare de adresa necunoscuta + + + Are you sure you want to send? + Ești sigur că vrei să trimiți? + + + added as transaction fee + adăugat ca taxă de tranzacție + + + Payment request expired + Cererea de plată a expirat + + + Invalid payment address %1 + Adresă pentru plată nevalidă %1 SendCoinsEntry - - Form - Form - - - A&mount: - Su&mă : + Su&mă: - Pay &To: - Plăteşte Că&tre: + Plătește că&tre: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - + Adresa către care se va face plata (de exemplu: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book - Adaugă o etichetă acestei adrese pentru a o trece în Lista de adrese + Introdu o etichetă pentru această adresă pentru a fi adăugată în lista ta de adrese - &Label: - &L Etichetă: + &Etichetă: - - Choose address from address book - Alegeţi adresa din Listă + Choose previously used address + Alegeti adrese folosite in prealabil. + + + This is a normal payment. + Aceasta este o tranzacţie normală. - Alt+A Alt+A - Paste address from clipboard - Lipiţi adresa copiată in clipboard. + Lipește adresa din clipboard - Alt+P Alt+P - - Remove this recipient - Şterge destinatarul + Remove this entry + Scoate aceasta introducere - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Introduceţi o adresă Myriadcoin (de exemplu: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + Mesaj: + + + This is a verified payment request. + Aceasta este o cerere de plata verificata + + + Enter a label for this address to add it to the list of used addresses + Introduceti eticheta pentru ca aceasta adresa sa fie introdusa in lista de adrese folosite + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + Aceasta este o cerere de plata neverificata + + + Pay To: + Plateste catre: + + + Memo: + Memo: + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + Myriadcoin Core se închide... + + + Do not shut down the computer until this window disappears. + Nu închide calculatorul până ce această fereastră nu dispare. SignVerifyMessageDialog - Signatures - Sign / Verify a Message Semnatura- Semneaza/verifica un mesaj - &Sign Message Semneaza Mesajul - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. - + Puteti semna mesaje cu adresa dumneavoastra pentru a demostra ca sunteti proprietarul lor. Aveti grija sa nu semnati nimic vag, deoarece atacurile de tip phishing va pot pacali sa le transferati identitatea. Semnati numai declaratiile detaliate cu care sunteti deacord. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Introduceţi o adresă Myriadcoin (de exemplu: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book - Alegeţi adresa din Listă + Choose previously used address + Alegeti adrese folosite in prealabil - - Alt+A Alt+A - Paste address from clipboard Lipiţi adresa copiată in clipboard. - Alt+P Alt+P - Enter the message you want to sign here Introduce mesajul pe care vrei sa il semnezi, aici. - Signature - + Semnătură - Copy the current signature to the system clipboard Copiaza semnatura curenta in clipboard-ul sistemului - Sign the message to prove you own this Myriadcoin address Semneaza mesajul pentru a dovedi ca detii acesta adresa Myriadcoin - Sign &Message - + Semnează &Message - Reset all sign message fields Reseteaza toate spatiile mesajelor semnate. - - Clear &All Şterge &tot - &Verify Message Verifica mesajul - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. - + Introduceti adresa de semnatura, mesajul (asigurati-va ca ati copiat spatiile, taburile etc. exact) si semnatura dedesubt pentru a verifica mesajul. Aveti grija sa nu cititi mai mult in semnatura decat mesajul in sine, pentru a evita sa fiti pacaliti de un atac de tip man-in-the-middle. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Introduceţi o adresă Myriadcoin (de exemplu: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address Verifica mesajul pentru a fi sigur ca a fost semnat cu adresa Myriadcoin specifica - Verify &Message - + Verifică &Message - Reset all verify message fields Reseteaza toate spatiile mesajelor semnate. - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Introduceţi o adresă Myriadcoin (de exemplu: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature Click "Semneaza msajul" pentru a genera semnatura - - Enter Myriadcoin signature - Introduce semnatura bitocin - - - - The entered address is invalid. Adresa introdusa nu este valida - - - - Please check the address and try again. Te rugam verifica adresa si introduce-o din nou - - The entered address does not refer to a key. Adresa introdusa nu se refera la o cheie. - Wallet unlock was cancelled. Blocarea portofelului a fost intrerupta - Private key for the entered address is not available. Cheia privata pentru adresa introdusa nu este valida. - Message signing failed. Semnarea mesajului a esuat - Message signed. Mesaj Semnat! - The signature could not be decoded. Aceasta semnatura nu a putut fi decodata - - Please check the signature and try again. Verifica semnatura si incearca din nou - The signature did not match the message digest. Semnatura nu seamana! - Message verification failed. Verificarea mesajului a esuat - Message verified. Mesaj verificat @@ -1639,186 +2127,160 @@ Address: %4 SplashScreen - - The Myriadcoin developers - + Myriadcoin Core + Myriadcoin Core + + + The Myriadcoin Core developers + Dezvoltatorii Myriadcoin Core - [testnet] [testnet] + + TrafficGraphWidget + + KB/s + KB/s + + TransactionDesc - Open until %1 Deschis până la %1 - - %1/offline + conflicted - + %1/offline + %1/deconectat + + %1/unconfirmed %1/neconfirmat - %1 confirmations %1 confirmări - Status Stare - , broadcast through %n node(s) - + , distribuit prin %n nod, distribuit prin %n noduri, distribuit prin %n de noduri - Date Data - Source Sursa - Generated Generat - - From De la - - - To Către - - own address Adresa posedata - label etichetă - - - - - Credit Credit - matures in %n more block(s) - + se maturizează în încă %n blocse maturizează în încă %n blocurise maturizează în încă %n de blocuri - not accepted nu este acceptat - - - - Debit Debit - Transaction fee Comisionul tranzacţiei - Net amount Suma netă - Message Mesaj - Comment Comentarii - Transaction ID ID-ul tranzactiei - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Monedele myriadcoin generate se pot cheltui dupa parcurgerea a 120 de blocuri. După ce a fost generat, s-a propagat în reţea, urmând să fie adăugat lanţului de blocuri. Dacă nu poate fi inclus in lanţ, starea sa va deveni "neacceptat" si nu va putea fi folosit la tranzacţii. Acest fenomen se întâmplă atunci cand un alt nod a generat un bloc la o diferenţa de câteva secunde. + Merchant + Comerciant + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Monezile generate trebuie sa creasca %1 block-uri inainte sa poata fi cheltuite. Cand ati generat acest block, a fost transmis retelei pentru a fi adaugat la lantul de block-uri. Aceasta se poate intampla ocazional daca alt nod genereaza un block la numai cateva secunde de al tau. - Debug information Informatii pentru debug - Transaction Tranzacţie - Inputs Intrari - Amount Sumă - true Adevarat! - false Fals! - , has not been successfully broadcast yet , nu s-a propagat încă - Open for %n more block(s) - + Deschis pentru încă %1 blocDeschis pentru încă %1 blocuriDeschis pentru încă %1 de blocuri - unknown necunoscut @@ -1826,130 +2288,113 @@ Address: %4 TransactionDescDialog - Transaction details - Detaliile tranzacţiei + Detaliile tranzacției - This pane shows a detailed description of the transaction - Afişează detalii despre tranzacţie + Acest panou afișează o descriere detaliată a tranzacției TransactionTableModel - Date Data - Type Tipul - Address Adresa - Amount Cantitate + + Immature (%1 confirmations, will be available after %2) + + - Open for %n more block(s) - + Deschis pentru încă %1 blocDeschis pentru încă %1 blocuriDeschis pentru încă %1 de blocuri - Open until %1 Deschis până la %1 - - Offline (%1 confirmations) - Neconectat (%1 confirmări) - - - - Unconfirmed (%1 of %2 confirmations) - Neconfirmat (%1 din %2 confirmări) - - - Confirmed (%1 confirmations) Confirmat (%1 confirmări) - - - Mined balance will be available when it matures in %n more block(s) - - - This block was not received by any other nodes and will probably not be accepted! - Blocul nu a fost recepţionat de niciun alt nod şi e probabil că nu va fi acceptat. + Acest bloc nu a fost recepționat de niciun alt nod și probabil nu va fi acceptat! - Generated but not accepted - Generat, dar neacceptat + Generat dar neacceptat + + + Offline + Deconectat + + + Unconfirmed + Neconfirmat + + + Confirming (%1 of %2 recommended confirmations) + Confirmare (%1 dintre %2 confirmări recomandate) + + + Conflicted + - Received with - Recepţionat cu + Recepționat cu - Received from - Primit de la: + Primit de la - Sent to Trimis către - Payment to yourself - Plată către un cont propriu + Plată către tine - Mined Produs - (n/a) (n/a) - Transaction status. Hover over this field to show number of confirmations. - Starea tranzacţiei. Treceţi cu mouse-ul peste acest câmp pentru afişarea numărului de confirmări. + Starea tranzacției. Treci cu mausul peste acest câmp pentru afișarea numărului de confirmări. - Date and time that the transaction was received. - Data şi ora la care a fost recepţionată tranzacţia. + Data și ora la care a fost recepționată tranzacția. - Type of transaction. - Tipul tranzacţiei. + Tipul tranzacției. - Destination address of transaction. - Adresa de destinaţie a tranzacţiei. + Adresa de destinație a tranzacției. - Amount removed from or added to balance. Suma extrasă sau adăugată la sold. @@ -1957,176 +2402,156 @@ Address: %4 TransactionView - - All Toate - Today Astăzi - This week Săptămâna aceasta - This month Luna aceasta - Last month Luna trecută - This year Anul acesta - Range... Între... - Received with - Recepţionat cu... + Recepționat cu - Sent to Trimis către - To yourself - Către propriul cont + Către tine - Mined Produs - Other Altele - Enter address or label to search - Introduceţi adresa sau eticheta pentru căutare + Introdu adresa sau eticheta pentru căutare - Min amount - Cantitatea produsă + Cantitatea minimă - Copy address Copiază adresa - Copy label Copiază eticheta - Copy amount - Copiază sumă + Copiază suma - Copy transaction ID - + Copiază ID tranzacție - Edit label Editează eticheta - Show transaction details - Arata detaliile tranzactiei + Arată detaliile tranzacției - - Export Transaction Data - Exportă tranzacţiile + Export Transaction History + Exportare Istoric Tranzacţii + + + Exporting Failed + Exportare Eşuată + + + There was an error trying to save the transaction history to %1. + S-a produs o eroare încercând să se salveze istoricul tranzacţiilor la %1. + + + Exporting Successful + Exportare Reuşită + + + The transaction history was successfully saved to %1. + Istoricul tranzacţiilor a fost salvat cu succes la %1. - Comma separated file (*.csv) - Fişier text cu valori separate prin virgulă (*.csv) + Fișier text cu valori separate prin virgulă (*.csv) - Confirmed Confirmat - Date Data - Type Tipul - Label Etichetă - Address Adresă - Amount Sumă - ID ID - - Error exporting - Eroare în timpul exportului - - - - Could not write to file %1. - Fisierul %1 nu a putut fi accesat pentru scriere. - - - Range: Interval: - to către + + WalletFrame + + No wallet has been loaded. + Nu a fost încărcat niciun portofel. + + WalletModel - Send Coins Trimite Myriadcoin @@ -2134,161 +2559,121 @@ Address: %4 WalletView - &Export - + &Exportă - Export the data in the current tab to a file - + Exporta datele din tab-ul curent într-un fișier - Backup Wallet - + Fă o copie de siguranță a portofelului - Wallet Data (*.dat) Date portofel (*.dat) - Backup Failed Copia de rezerva a esuat - - There was an error trying to save the wallet data to the new location. - A apărut o eroare la încercarea de a salva datele din portofel intr-o noua locație. + There was an error trying to save the wallet data to %1. + S-a produs o eroare încercând să se salveze datele portofelului la %1. + + + The wallet data was successfully saved to %1. + Datele portofelului s-au salvat cu succes la %1. - Backup Successful - - - - - The wallet data was successfully saved to the new location. - + Copia de siguranță efectuată cu succes bitcoin-core - - Myriadcoin version - versiunea Myriadcoin - - - Usage: Uz: - - Send command to -server or myriadcoind - Trimite comanda la -server sau myriadcoind - - - List commands Listă de comenzi - Get help for a command Ajutor pentru o comandă - Options: Setări: - Specify configuration file (default: myriadcoin.conf) - Specifica-ți configurația fisierului (in mod normal: myriadcoin.conf) + Specifică fișierul de configurare (implicit: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) - + Specifică fișierul pid (implicit myriadcoind.pid) - Specify data directory - Specifica datele directorului + Specifică dosarul de date - - Set database cache size in megabytes (default: 25) - Seteaza marimea cache a bazei de date in MB (initial: 25) - - - Listen for connections on <port> (default: 8333 or testnet: 18333) - Lista a conectiunile in <port> (initial: 8333 sau testnet: 18333) + Ascultă pentru conectări pe <port> (implicit: 8333 sau testnet: 18333) - Maintain at most <n> connections to peers (default: 125) - Se menține la cele mai multe conexiuni <n> cu colegii (implicit: 125) + Menține cel mult <n> conexiuni cu partenerii (implicit: 125) - Connect to a node to retrieve peer addresses, and disconnect - Conecteaza-te la nod pentru a optine adresa peer, si deconecteaza-te + Conectează-te la nod pentru a obține adresele partenerilor, și apoi deconectează-te - Specify your own public address - Specifica adresa ta publica + Specifică adresa ta publică - Threshold for disconnecting misbehaving peers (default: 100) - Prag pentru deconectarea colegii funcționează corect (implicit: 100) + Prag pentru deconectarea partenerilor care nu funcționează corect (implicit: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Numărul de secunde pentru a păstra colegii funcționează corect la reconectare (implicit: 86400) + Numărul de secunde pentru a preveni reconectarea partenerilor care nu funcționează corect (implicit: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s - + A intervenit o eroare in timp ce se seta portul RPC %u pentru ascultare pe IPv4: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) + Ascultă pentru conexiuni JSON-RPC pe <port> (implicit:8332 sau testnet: 18332) + + + Accept command line and JSON-RPC commands + Se acceptă comenzi din linia de comandă și comenzi JSON-RPC + + + Myriadcoin Core RPC client version - - Accept command line and JSON-RPC commands - Se accepta command line si comenzi JSON-RPC - - - Run in the background as a daemon and accept commands - Ruleaza în background ca un demon și accepta comenzi. + Rulează în fundal ca un demon și acceptă comenzi - Use the test network - Utilizeaza test de retea + Utilizează rețeaua de test - Accept connections from outside (default: 1 if no -proxy or -connect) - Accepta conexiuni de la straini (initial: 1 if no -proxy or -connect) - + Acceptă conexiuni din afară (implicit: 1 dacă nu se folosește -proxy sau -connect) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2300,623 +2685,706 @@ If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com - - - - - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - - - - - Bind to given address and always listen on it. Use [host]:port notation for IPv6 - - - - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. - - - - - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - - - - - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! - - - - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - - - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - Seteaza marimea maxima a tranzactie mare/mica in bytes (initial:27000) - - - - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications - - - - - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - - - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. - - - - - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - - - - - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - - - - - Attempt to recover private keys from a corrupt wallet.dat - - - - - Block creation options: - Optiuni creare block - - - - Connect only to the specified node(s) - Conecteaza-te doar la nod(urile) specifice - - - - Corrupted block database detected - - - - - Discover own IP address (default: 1 when listening and no -externalip) - Descopera propria ta adresa IP (intial: 1) - - - - Do you want to rebuild the block database now? - - - - - Error initializing block database - - - - - Error initializing wallet database environment %s! - - - - - Error loading block database - - - - - Error opening block database - - - - - Error: Disk space is low! - - - - - Error: Wallet locked, unable to create transaction! - - - - - Error: system error: - - - - - Failed to listen on any port. Use -listen=0 if you want this. - - - - - Failed to read block info - - - - - Failed to read block - - - - - Failed to sync block index - - - - - Failed to write block index - - - - - Failed to write block info - - - - - Failed to write block - - - - - Failed to write file info - - - - - Failed to write to coin database - - - - - Failed to write transaction index - - - - - Failed to write undo data - - - - - Find peers using DNS lookup (default: 1 unless -connect) - - - - - Generate coins (default: 0) - - - - - How many blocks to check at startup (default: 288, 0 = all) - - - - - How thorough the block verification is (0-4, default: 3) - - - - - Not enough file descriptors available. - - - - - Rebuild block chain index from current blk000??.dat files - - - - - Set the number of threads to service RPC calls (default: 4) - - - - - Verifying blocks... - - - - - Verifying wallet... - - - - - Imports blocks from external blk000??.dat file - - - - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) - - - - - Information - - - - - Invalid -tor address: '%s' - - - - - Invalid amount for -minrelaytxfee=<amount>: '%s' - - - - - Invalid amount for -mintxfee=<amount>: '%s' - - - - - Maintain a full transaction index (default: 0) - - - - - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - - - - - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - - - - - Only accept block chain matching built-in checkpoints (default: 1) - - - - - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - - - - Output extra debugging information. Implies all other -debug* options - - - - - Output extra network debugging information - - - - - Prepend debug output with timestamp - Copie de ieșire de depanare cu timestamp - - - - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) - Optiuni SSl (vezi Myriadcoin wiki pentru intructiunile de instalare) - - - - Select the version of socks proxy to use (4-5, default: 5) - Selecteaza versiunea socks-ului pe care vrei sa il folosesti (4-5, initial: 5) - - - - Send trace/debug info to console instead of debug.log file - Trimite urmări / debug info la consola loc de debug.log fișier - - - - Send trace/debug info to debugger - Trimite urmări / debug info la depanatorul - - - - Set maximum block size in bytes (default: 250000) - - - - - Set minimum block size in bytes (default: 0) - - - - - Shrink debug.log file on client startup (default: 1 when no -debug) - - - - - Signing transaction failed - - - - - Specify connection timeout in milliseconds (default: 5000) - - - - - System error: - - - - - Transaction amount too small - - - - - Transaction amounts must be positive - - - - - Transaction too large - - - - - Use UPnP to map the listening port (default: 0) - Foloseste UPnP pentru a vedea porturile (initial: 0) - - - - Use UPnP to map the listening port (default: 1 when listening) - Foloseste UPnP pentru a vedea porturile (initial: 1 cand listezi) - - - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - - Username for JSON-RPC connections - Username pentru conectiunile JSON-RPC - - - - Warning - - - - - Warning: This version is obsolete, upgrade required! - - - - - You need to rebuild the databases using -reindex to change -txindex - - - - - wallet.dat corrupt, salvage failed - - - - - Password for JSON-RPC connections - Parola pentru conectiunile JSON-RPC - - - - Allow JSON-RPC connections from specified IP address - Permiteti conectiunile JSON-RPC de la o adresa IP specifica. - - - - Send commands to node running on <ip> (default: 127.0.0.1) - Trimite comenzi la nod, ruland pe ip-ul (initial: 127.0.0.1) - - - - Execute command when the best block changes (%s in cmd is replaced by block hash) - Executa comanda cand cel mai bun block se schimba (%s in cmd se inlocuieste cu block hash) - - - - Upgrade wallet to latest format - Actualizeaza portofelul la ultimul format - - - - Set key pool size to <n> (default: 100) - Setarea marimii cheii bezinului la <n>(initial 100) - - - - Rescan the block chain for missing wallet transactions - Rescanare lanțul de bloc pentru tranzacțiile portofel lipsă - - - - Use OpenSSL (https) for JSON-RPC connections - Foloseste Open SSL(https) pentru coneciunile JSON-RPC - - - - Server certificate file (default: server.cert) - Certificatul serverulu (initial: server.cert) - - - - Server private key (default: server.pem) - Cheia privata a serverului ( initial: server.pem) - - - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Accepta cifruri (initial: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - This help message - Acest mesaj de ajutor. - - - - Unable to bind to %s on this computer (bind returned error %d, %s) - Nu se poate lega %s cu acest calculator (retunare eroare legatura %d, %s) + %s trebuie sa setezi o parola rpc in fisierul de configurare +%s +Este recomandat sa folosesti aceasta parola aleatorie: +rpcuser=myriadcoinrpc +parola rpc=%s +(nu este necesar ca sa iti amintesti aceasta parola) +Numele de utilizator si parola NU trebuie sa fie la fel. +Daca fisierul nu exista, creaza-l cu fisier de citit permis doar proprietarului. +Este de asemenea recomandat sa setezi alerta de notificare ca sa primesti notificari ale problemelor; +spre exemplu: alertnotify=echo %%s | mail -s "Alerta Bitcoin" admin@foo.com - - Connect through socks proxy - Conectează prin proxy SOCKS + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + Cifruri acceptabile (implicit: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + A intervenit o eroare in timp ce se seta portul RPC %u pentru ascultare pe IPv6, reintoarcere la IPv4: %s + + + Bind to given address and always listen on it. Use [host]:port notation for IPv6 + Atasati adresei date si ascultati totdeauna pe ea. Folositi [host]:port notatia pentru IPv6 + + + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + Initiati modul de test al regresie, care foloseste un lant special in care block-urile pot fi rezolvate instantaneu. Acest lucru este facut pentru utilitare si aplicatii de dezvoltare pentru testarea regresiei. + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) + + + + Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Eroare: Tranzactia a fost respinsa! Acest lucru se poate intampla daca anumite monezi din portofelul dumneavoastra au fost deja cheltuite, deasemenea daca ati folosit o copie a fisierului wallet.dat si monezile au fost folosite in acea copie dar nu au fost marcate ca fiind folosite acolo. + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! + Eroare: Aceasta tranzactie necesita o taxa de cel putin %s din cauza sumei, complexitatii sau folosirii fondurilor recent primite! + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + Executati comanda cand o tranzactie a portofelului se schimba (%s in cmd este inlocuit de TxID) + + + Fees smaller than this are considered zero fee (for transaction creation) (default: + Taxe mai mici decat aceasta suma sunt considerate taxe nule (pentru crearea tranzactiilor) (pentru nespecificare: + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + + + + This is a pre-release test build - use at your own risk - do not use for mining or merchant applications + Aceasta este o versiune de test preliminara - va asumati riscul folosind-o - nu folositi pentru minerit sau aplicatiile comerciantilor. + + + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + Utilizare proxy SOCKS5 separat pentru a ajunge la servicii ascunse TOR (implicit: -proxy) + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + Atentie: setarea -paytxfee este foarte ridicata! Aceasta este taxa tranzactiei pe care o vei plati daca trimiti o tranzactie. + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. + Atentie: Va rugam verificati daca data/timpul computerului dumneavoastra sunt corecte! Daca ceasul computerului este decalat, Myriadcoin nu va functiona corect. + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + Atentie: Reteaua nu pare sa fie deacord in totalitate! Aparent niste mineri au probleme. + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + Atentie: Aparent, nu suntem deacord cu toti membrii nostri! Va trebui sa faci un upgrade, sau alte noduri ar necesita upgrade. + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + Atentie: eroare la citirea fisierului wallet.dat! Toate cheile sunt citite corect, dar datele tranzactiei sau anumite intrari din agenda sunt incorecte sau lipsesc. + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + Atentie: fisierul wallet.dat este corupt, date salvate! Fisierul original wallet.dat a fost salvat ca wallet.{timestamp}.bak in %s; daca balansul sau tranzactiile sunt incorecte ar trebui sa restaurati dintr-o copie de siguranta. + + + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + <category> poate fi: + + + Attempt to recover private keys from a corrupt wallet.dat + Încearcă recuperarea cheilor private dintr-un wallet.dat corupt + + + Myriadcoin Core Daemon + Daemon-ul Myriadcoin Core + + + Block creation options: + Optiuni creare block + + + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + + Connect only to the specified node(s) + Conecteaza-te doar la nod(urile) specifice + + + Connect through SOCKS proxy + Conectare prin proxy SOCKS + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + Conectat la JSON-RPC pe <portul> (implicit: 8332 sau testnet: 18332) + + + Connection options: + + + + Corrupted block database detected + Baza de date 'bloc' defectată a fost detectată + + + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + + Discover own IP address (default: 1 when listening and no -externalip) + Descopera propria ta adresa IP (intial: 1) + + + Do not load the wallet and disable wallet RPC calls + + + + Do you want to rebuild the block database now? + Doriți să reconstruiți baza de date 'bloc' acum? + + + Error initializing block database + Eroare la inițializarea bazei de date de blocuri + + + Error initializing wallet database environment %s! + Eroare la initializarea mediului de baza de date a portofelului %s! + + + Error loading block database + Eroare la încărcarea bazei de date de blocuri + + + Error opening block database + Eroare la deschiderea bazei de date de blocuri + + + Error: Disk space is low! + Eroare: Spațiu pe disc redus! + + + Error: Wallet locked, unable to create transaction! + Eroare: Portofel blocat, nu se poate crea o tranzacție! + + + Error: system error: + Eroare: eroare de sistem: + + + Failed to listen on any port. Use -listen=0 if you want this. + Am esuat ascultarea pe orice port. Folositi -listen=0 daca vreti asta. + + + Failed to read block info + Citirea informațiilor despre bloc a eșuat + + + Failed to read block + Citirea blocului a eșuat + + + Failed to sync block index + A eșuat sincronizarea indexului de blocuri + + + Failed to write block index + A eșuat scrierea indexului de blocuri + + + Failed to write block info + Scrierea informațiilor despre bloc a eșuat + + + Failed to write block + Scrierea blocului a eșuat + + + Failed to write file info + Nu a reușit scrierea informației în fișier + + + Failed to write to coin database + Eșuarea scrierii în baza de date de monede + + + Failed to write transaction index + Nu a reușit scrierea indexului de tranzacție + + + Failed to write undo data + Esuare in scrierea datelor anulate + + + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + + Find peers using DNS lookup (default: 1 unless -connect) + Găsește parteneri folosind căutarea DNS (implicit: 1 doar dacă nu s-a folosit -connect) + + + Force safe mode (default: 0) + Pornire fortata a modului safe mode (prestabilit: 0) + + + Generate coins (default: 0) + Generează monede (implicit: 0) + + + How many blocks to check at startup (default: 288, 0 = all) + Cate block-uri se verifica la initializare (implicit: 288, 0=toate) + + + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + Incorect sau nici un bloc de Geneza găsite. Directorul de retea greşit? + + + Invalid -onion address: '%s' + Adresa -onion invalidă: '%s' + + + Not enough file descriptors available. + Nu sunt destule descriptoare disponibile. + + + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + Opţiuni client RPC: + + + Rebuild block chain index from current blk000??.dat files + Reconstruirea indexului lantului de block-uri din fisierele actuale blk000???.dat + + + Select SOCKS version for -proxy (4 or 5, default: 5) + Selectaţi versiunea SOCKS pentru -proxy (4 din 5; iniţial: 5) + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + Setaţi dimensiunea maximă a unui block în bytes (implicit: %d) + + + Set the number of threads to service RPC calls (default: 4) + Stabileste numarul de thread-uri care servesc apeluri RPC (implicit: 4) + + + Specify wallet file (within data directory) + Specifică fișierul wallet (în dosarul de date) + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + Este folosita pentru programe de testare a regresiei in algoritmi si dezvoltare de alte aplicatii. + + + Usage (deprecated, use myriadcoin-cli): + Utilizare (învechită, folositi myriadcoin-cli): + + + Verifying blocks... + Se verifică blocurile... + + + Verifying wallet... + Se verifică portofelul... + + + Wait for RPC server to start + Aşteptaţi serverul RPC să pornească + + + Wallet %s resides outside data directory %s + Portofelul %s se află în afara dosarului de date %s + + + Wallet options: + Optiuni de portofel + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + Trebuie să reconstruiești baza de date folosind -reindex pentru a schimba -txindex + + + Imports blocks from external blk000??.dat file + Importă blocuri dintr-un fișier extern blk000??.dat + + + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + Executati comanda cand o alerta relevanta este primita sau vedem o bifurcatie foarte lunga (%s in cmd este inlocuti de mesaj) + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + + + + Information + Informație + + + Invalid amount for -minrelaytxfee=<amount>: '%s' + Suma invalida pentru -minrelaytxfee=<suma>:'%s' + + + Invalid amount for -mintxfee=<amount>: '%s' + Suma invalida pentru -mintxfee=<suma>: '%s' + + + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + + Maintain a full transaction index (default: 0) + Păstrează un index complet al tranzacțiilor (implicit: 0) + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + Tampon maxim pentru recepție per conexiune, <n>*1000 baiți (implicit: 5000) + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + Tampon maxim pentru transmitere per conexiune, <n>*1000 baiți (implicit: 1000) + + + Only accept block chain matching built-in checkpoints (default: 1) + Se accepta decat lantul de block care se potriveste punctului de control implementat (implicit: 1) + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + Efectuează conexiuni doar către nodurile din rețeaua <net> (IPv4, IPv6 sau Tor) + + + Print block on startup, if found in block index + Publica bloc la pornire daca exista in index-ul de blocuri. + + + Print block tree on startup (default: 0) + Publicare arbore blocuri la pornire (prestabilit: 0) + + + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + + + + SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + Optiuni SSl (vezi Myriadcoin wiki pentru intructiunile de instalare) + + + Send command to Myriadcoin Core + Trimitere comenzi catre Myriadcoin Core + + + Send trace/debug info to console instead of debug.log file + Trimite informațiile trace/debug la consolă în locul fișierului debug.log + + + Set minimum block size in bytes (default: 0) + Setează mărimea minimă a blocului în baiți (implicit: 0) + + + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + Micsorati fisierul debug.log la inceperea clientului (implicit: 1 cand nu -debug) + + + Signing transaction failed + Semnarea tranzacției a eșuat + + + Specify connection timeout in milliseconds (default: 5000) + Specifică intervalul maxim de conectare în milisecunde (implicit: 5000) + + + Start Myriadcoin Core Daemon + + + + System error: + Eroare de sistem: + + + Transaction amount too small + Suma tranzacționată este prea mică + + + Transaction amounts must be positive + Sumele tranzacționate trebuie să fie pozitive + + + Transaction too large + Tranzacția este prea mare + + + Use UPnP to map the listening port (default: 0) + Foloseste UPnP pentru a vedea porturile (initial: 0) + + + Use UPnP to map the listening port (default: 1 when listening) + Foloseste UPnP pentru a vedea porturile (initial: 1 cand listezi) + + + Username for JSON-RPC connections + Utilizator pentru conexiunile JSON-RPC + + + Warning + Avertizare + + + Warning: This version is obsolete, upgrade required! + Atenție: această versiune este depășită, este necesară actualizarea! + + + Zapping all transactions from wallet... + + + + on startup + in timpul pornirii + + + version + versiunea + + + wallet.dat corrupt, salvage failed + wallet.dat corupt, recuperare eșuată + + + Password for JSON-RPC connections + Parola pentru conexiunile JSON-RPC + + + Allow JSON-RPC connections from specified IP address + Permite conexiuni JSON-RPC de la adresa IP specificată + + + Send commands to node running on <ip> (default: 127.0.0.1) + Trimite comenzi la nodul care rulează la <ip> (implicit: 127.0.0.1) + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + Execută comanda când cel mai bun bloc se modifică (%s în cmd este înlocuit cu hash-ul blocului) + + + Upgrade wallet to latest format + Actualizează portofelul la ultimul format + + + Set key pool size to <n> (default: 100) + Setează mărimea bazinului de chei la <n> (implicit: 100) + + + Rescan the block chain for missing wallet transactions + Rescanează lanțul de bloc pentru tranzacțiile portofel lipsă + + + Use OpenSSL (https) for JSON-RPC connections + Folosește OpenSSL (https) pentru conexiunile JSON-RPC + + + Server certificate file (default: server.cert) + Certificatul serverului (implicit: server.cert) + + + Server private key (default: server.pem) + Cheia privată a serverului (implicit: server.pem) + + + This help message + Acest mesaj de ajutor + + + Unable to bind to %s on this computer (bind returned error %d, %s) + Nu se poate folosi %s pe acest calculator (eroarea returnată este %d, %s) - Allow DNS lookups for -addnode, -seednode and -connect - Permite DNS-ului sa se uite dupa -addnode, -seednode si -connect + Permite căutări DNS pentru -addnode, -seednode și -connect - Loading addresses... Încarc adrese... - Error loading wallet.dat: Wallet corrupted - Eroare incarcand wallet.dat: Portofel corupt + Eroare la încărcarea wallet.dat: Portofel corupt - Error loading wallet.dat: Wallet requires newer version of Myriadcoin - Eroare incarcare wallet.dat: Portofelul are nevoie de o versiune Myriadcoin mai noua + Eroare la încărcarea wallet.dat: Portofelul are nevoie de o versiune Myriadcoin mai nouă - Wallet needed to be rewritten: restart Myriadcoin to complete - Portofelul trebuie rescris: restarteaza aplicatia myriadcoin pentru a face asta. + Portofelul trebuie rescris: repornește Myriadcoin pentru finalizare - Error loading wallet.dat - Eroare incarcand wallet.dat + Eroare la încărcarea wallet.dat - Invalid -proxy address: '%s' - Adresa proxy invalida: '%s' + Adresa -proxy nevalidă: '%s' - Unknown network specified in -onlynet: '%s' - Retea specificata necunoscuta -onlynet: '%s' + Rețeaua specificată în -onlynet este necunoscută: '%s' - Unknown -socks proxy version requested: %i - Necunoscut -socks proxy version requested: %i + S-a cerut o versiune necunoscută de proxy -socks: %i - Cannot resolve -bind address: '%s' - Nu se poate rezolca -bind address: '%s' + Nu se poate rezolva adresa -bind: '%s' - Cannot resolve -externalip address: '%s' - Nu se poate rezolva -externalip address: '%s' + Nu se poate rezolva adresa -externalip: '%s' - Invalid amount for -paytxfee=<amount>: '%s' - Suma invalida pentru -paytxfee=<amount>: '%s' + Suma nevalidă pentru -paytxfee=<amount>: '%s' - Invalid amount - Suma invalida + Sumă nevalidă - Insufficient funds Fonduri insuficiente - Loading block index... Încarc indice bloc... - Add a node to connect to and attempt to keep the connection open - Add a node to connect to and attempt to keep the connection open -details suggestions history - + Adaugă un nod la care te poți conecta pentru a menține conexiunea deschisă - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - Imposibilitatea de a lega la% s pe acest computer. Myriadcoin este, probabil, deja în execuție. - - - - Fee per KB to add to transactions you send - Taxa pe kb pentru a adauga tranzactii trimise - - - Loading wallet... Încarc portofel... - Cannot downgrade wallet - Nu se poate face downgrade la portofel + Nu se poate retrograda portofelul - Cannot write default address - Nu se poate scrie adresa initiala + Nu se poate scrie adresa implicită - Rescanning... Rescanez... - Done loading Încărcare terminată - To use the %s option - Pentru a folosii optiunea %s + Pentru a folosi opțiunea %s - Error Eroare - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. - + Trebuie sa setezi rpcpassword=<password> în fișierul de configurare:⏎ +%s⏎ +Dacă fișierul nu există, creează-l cu permisiuni de citire doar de către proprietar. \ No newline at end of file diff --git a/src/qt/locale/bitcoin_ru.ts b/src/qt/locale/bitcoin_ru.ts index 1dcc2175..db68dcd8 100644 --- a/src/qt/locale/bitcoin_ru.ts +++ b/src/qt/locale/bitcoin_ru.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - &О Myriadcoin + About Myriadcoin Core + О Myriadcoin Core - - <b>Myriadcoin</b> version - <b>Myriadcoin</b> версия + <b>Myriadcoin Core</b> version + версия <b>Myriadcoin Core</b> - This is experimental software. @@ -28,153 +24,128 @@ This product includes software developed by the OpenSSL Project for use in the O Этот продукт включает ПО, разработанное OpenSSL Project для использования в OpenSSL Toolkit (http://www.openssl.org/) и криптографическое ПО, написанное Eric Young (eay@cryptsoft.com) и ПО для работы с UPnP, написанное Thomas Bernard. - Copyright Все права защищены - - The Myriadcoin developers - Разработчики Myriadcoin + The Myriadcoin Core developers + Разработчики Myriadcoin Core + + + (%1-bit) + (%1-бит) AddressBookPage - - Address Book - &Адресная книга - - - Double-click to edit address or label Для того, чтобы изменить адрес или метку, дважды кликните по изменяемому объекту - Create a new address Создать новый адрес - + &New + &Новый + + Copy the currently selected address to the system clipboard Копировать текущий выделенный адрес в буфер обмена - - &New Address - &Новый адрес + &Copy + &Копировать - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Это Ваши адреса для получения платежей. Вы можете дать разные адреса отправителям, чтобы отслеживать, кто именно вам платит. + C&lose + &Закрыть - &Copy Address &Копировать адрес - - Show &QR Code - Показать &QR код - - - - Sign a message to prove you own a Myriadcoin address - Подписать сообщение, чтобы доказать владение адресом Myriadcoin - - - - Sign &Message - &Подписать сообщение - - - Delete the currently selected address from the list Удалить выбранный адрес из списка - Export the data in the current tab to a file Экспортировать данные из вкладки в файл - &Export &Экспорт - - Verify a message to ensure it was signed with a specified Myriadcoin address - Проверить сообщение, чтобы убедиться, что оно было подписано указанным адресом Myriadcoin - - - - &Verify Message - &Проверить сообщение - - - &Delete &Удалить - - These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - Ваши адреса для получения средств. Совет: проверьте сумму и адрес назначения перед переводом. + Choose the address to send coins to + Выберите адрес для отправки на него монет + + + Choose the address to receive coins with + Выберите адрес для получения монет + + + C&hoose + &Выбрать + + + Sending addresses + Адреса отправки + + + Receiving addresses + Адреса получения + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + Это ваши адреса Myriadcoin для отправки платежей. Всегда проверяйте количество и адрес получателя перед отправкой перевода. + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Это ваши адреса Myriadcoin для приёма платежей. Рекомендуется использовать новый адрес получения для каждой транзакции. - Copy &Label Копировать &метку - &Edit &Правка - - Send &Coins - &Отправить монеты + Export Address List + Экспортировать список адресов - - Export Address Book Data - Экспортировать адресную книгу - - - Comma separated file (*.csv) Текст, разделённый запятыми (*.csv) - - Error exporting - Ошибка экспорта + Exporting Failed + Экспорт не удался - - Could not write to file %1. - Невозможно записать в файл %1. + There was an error trying to save the address list to %1. + Произошла ошибка при сохранении списка адресов в %1. AddressTableModel - Label Метка - Address Адрес - (no label) [нет метки] @@ -182,140 +153,106 @@ This product includes software developed by the OpenSSL Project for use in the O AskPassphraseDialog - Passphrase Dialog Диалог ввода пароля - Enter passphrase Введите пароль - New passphrase Новый пароль - Repeat new passphrase Повторите новый пароль - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. Введите новый пароль для бумажника. <br/> Пожалуйста, используйте фразы из <b>10 или более случайных символов,</b> или <b>восьми и более слов.</b> - Encrypt wallet Зашифровать бумажник - This operation needs your wallet passphrase to unlock the wallet. Для выполнения операции требуется пароль вашего бумажника. - Unlock wallet Разблокировать бумажник - This operation needs your wallet passphrase to decrypt the wallet. Для выполнения операции требуется пароль вашего бумажника. - Decrypt wallet Расшифровать бумажник - Change passphrase Сменить пароль - Enter the old and new passphrase to the wallet. Введите старый и новый пароль для бумажника. - Confirm wallet encryption Подтвердите шифрование бумажника - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! - Внимание: если вы зашифруете бумажник и потеряете пароль, вы <b>ПОТЕРЯЕТЕ ВСЕ ВАШИ БИТКОИНЫ</b>! + Внимание: если вы зашифруете бумажник и потеряете пароль, вы <b>ПОТЕРЯЕТЕ ВСЕ ВАШИ БИТКОЙНЫ</b>! - Are you sure you wish to encrypt your wallet? Вы уверены, что хотите зашифровать ваш бумажник? - 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. - ВАЖНО: все предыдущие резервные копии вашего кошелька должны быть заменены новым зашифрованным файлом. В целях безопасности предыдущие резервные копии нешифрованного кошелька станут бесполезны, как только вы начнёте использовать новый шифрованный кошелёк. + ВАЖНО: все предыдущие резервные копии вашего бумажника должны быть заменены новым зашифрованным файлом. В целях безопасности предыдущие резервные копии незашифрованного бумажника станут бесполезны, как только вы начнёте использовать новый зашифрованный бумажник. - - Warning: The Caps Lock key is on! Внимание: Caps Lock включен! - - Wallet encrypted Бумажник зашифрован - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. - Сейчас программа закроется для завершения процесса шифрования. Помните, что шифрование вашего бумажника не может полностью защитить ваши биткоины от кражи с помощью инфицирования вашего компьютера вредоносным ПО. + Сейчас программа закроется для завершения процесса шифрования. Помните, что шифрование вашего бумажника не может полностью защитить ваши биткойны от кражи с помощью инфицирования вашего компьютера вредоносным ПО. - - - - Wallet encryption failed Не удалось зашифровать бумажник - Wallet encryption failed due to an internal error. Your wallet was not encrypted. Шифрование бумажника не удалось из-за внутренней ошибки. Ваш бумажник не был зашифрован. - - The supplied passphrases do not match. Введённые пароли не совпадают. - Wallet unlock failed Разблокировка бумажника не удалась - - - The passphrase entered for the wallet decryption was incorrect. Указанный пароль не подходит. - Wallet decryption failed Расшифрование бумажника не удалось - Wallet passphrase was successfully changed. Пароль бумажника успешно изменён. @@ -323,354 +260,306 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - Sign &message... &Подписать сообщение... - Synchronizing with network... Синхронизация с сетью... - &Overview - О&бзор + &Обзор + + + Node + Узел - Show general overview of wallet Показать общий обзор действий с бумажником - &Transactions &Транзакции - Browse transaction history Показать историю транзакций - - Edit the list of stored addresses and labels - Изменить список сохранённых адресов и меток к ним - - - - Show the list of addresses for receiving payments - Показать список адресов для получения платежей - - - E&xit В&ыход - Quit application Закрыть приложение - Show information about Myriadcoin - Показать информацию о Myriadcoin'е + Показать информацию о Myriadcoin - About &Qt О &Qt - Show information about Qt Показать информацию о Qt - &Options... - Оп&ции... + Опции - &Encrypt Wallet... &Зашифровать бумажник... - &Backup Wallet... &Сделать резервную копию бумажника... - &Change Passphrase... &Изменить пароль... - + &Sending addresses... + &Адреса отправки... + + + &Receiving addresses... + Адреса &получения... + + + Open &URI... + Открыть &URI... + + Importing blocks from disk... Импортируются блоки с диска... - Reindexing blocks on disk... Идёт переиндексация блоков на диске... - Send coins to a Myriadcoin address Отправить монеты на указанный адрес Myriadcoin - Modify configuration options for Myriadcoin Изменить параметры конфигурации Myriadcoin - Backup wallet to another location Сделать резервную копию бумажника в другом месте - Change the passphrase used for wallet encryption Изменить пароль шифрования бумажника - &Debug window &Окно отладки - Open debugging and diagnostic console Открыть консоль отладки и диагностики - &Verify message... &Проверить сообщение... - - Myriadcoin - Биткоин + Myriadcoin - Wallet Бумажник - &Send &Отправить - &Receive &Получить - - &Addresses - &Адреса - - - - &About Myriadcoin - &О Myriadcoin - - - &Show / Hide &Показать / Скрыть - Show or hide the main Window Показать или скрыть главное окно - Encrypt the private keys that belong to your wallet Зашифровать приватные ключи, принадлежащие вашему бумажнику - Sign messages with your Myriadcoin addresses to prove you own them - Подписать сообщения вашим адресом Myriadcoin, чтобы доказать, что вы им владеете + Подписать сообщения вашим адресом Bitcoin, чтобы доказать, что вы им владеете - Verify messages to ensure they were signed with specified Myriadcoin addresses Проверить сообщения, чтобы удостовериться, что они были подписаны определённым адресом Myriadcoin - &File &Файл - &Settings &Настройки - &Help &Помощь - Tabs toolbar Панель вкладок - - [testnet] [тестовая сеть] - + Myriadcoin Core + Myriadcoin Core + + + Request payments (generates QR codes and myriadcoin: URIs) + Запросить платежи (создаёт QR-коды и myriadcoin: ссылки) + + + &About Myriadcoin Core + &О Myriadcoin Core + + + Show the list of used sending addresses and labels + Показать список использованных адресов и меток отправки + + + Show the list of used receiving addresses and labels + Показать список использованных адресов и меток получения + + + Open a myriadcoin: URI or payment request + Открыть myriadcoin: URI или запрос платежа + + + &Command-line options + &Опции командной строки + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + Показать помощь по Myriadcoin Core и получить список доступных опций командной строки. + + Myriadcoin client Myriadcoin клиент - %n active connection(s) to Myriadcoin network - %n активное соединение с сетью%n активных соединений с сетью%n активных соединений с сетью + %n активное соединение с сетью%n активных соединений с сетью%n активных соединений с сетью Myriadcoin - No block source available... Источник блоков недоступен... - Processed %1 of %2 (estimated) blocks of transaction history. Обработано %1 из %2 (примерно) блоков истории транзакций. - Processed %1 blocks of transaction history. Обработано %1 блоков истории транзакций. - %n hour(s) %n час%n часа%n часов - %n day(s) %n день%n дня%n дней - %n week(s) %n неделя%n недели%n недель - + %1 and %2 + %1 и %2 + + + %n year(s) + %n год%n лет%n года + + %1 behind %1 позади - Last received block was generated %1 ago. Последний полученный блок был сгенерирован %1 назад. - Transactions after this will not yet be visible. - Транзакции после этой пока не будут видны. + Транзакции после него пока не будут видны. - Error Ошибка - Warning Внимание - Information Информация - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - Транзакция превышает максимальный размер. Вы можете провести её, заплатив комиссию %1, которая достанется узлам, обрабатывающим эту транзакцию, и поможет работе сети. Вы действительно хотите заплатить комиссию? - - - Up to date Синхронизировано - Catching up... Синхронизируется... - - Confirm transaction fee - Подтвердите комиссию - - - Sent transaction Исходящая транзакция - Incoming transaction Входящая транзакция - Date: %1 Amount: %2 Type: %3 Address: %4 Дата: %1 -Количество: %2 +Сумма: %2 Тип: %3 Адрес: %4 - - - URI handling - Обработка URI - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - Не удалось обработать URI! Это может быть связано с неверным адресом Myriadcoin или неправильными параметрами URI. - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> Бумажник <b>зашифрован</b> и в настоящее время <b>разблокирован</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> Бумажник <b>зашифрован</b> и в настоящее время <b>заблокирован</b> - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. Произошла неисправимая ошибка. Myriadcoin не может безопасно продолжать работу и будет закрыт. @@ -678,329 +567,647 @@ Address: %4 ClientModel - Network Alert Сетевая Тревога + + CoinControlDialog + + Coin Control Address Selection + Выбор адреса контроля монет + + + Quantity: + Количество: + + + Bytes: + Байт: + + + Amount: + Сумма: + + + Priority: + Приоритет: + + + Fee: + Комиссия: + + + Low Output: + Малый выход: + + + After Fee: + После комиссии: + + + Change: + Сдача: + + + (un)select all + Отменить выбор всего + + + Tree mode + Режим дерева + + + List mode + Режим списка + + + Amount + Сумма + + + Address + Адрес + + + Date + Дата + + + Confirmations + Подтверждений + + + Confirmed + Подтверждено + + + Priority + Приоритет + + + Copy address + Копировать адрес + + + Copy label + Копировать метку + + + Copy amount + Скопировать сумму + + + Copy transaction ID + Скопировать ID транзакции + + + Lock unspent + Заблокировать непотраченное + + + Unlock unspent + Разблокировать непотраченное + + + Copy quantity + Копировать количество + + + Copy fee + Копировать комиссию + + + Copy after fee + Копировать после комиссии + + + Copy bytes + Копировать байты + + + Copy priority + Копировать приоритет + + + Copy low output + Копировать малый выход + + + Copy change + Копировать сдачу + + + highest + самый высокий + + + higher + выше + + + high + высокий + + + medium-high + выше среднего + + + medium + средний + + + low-medium + ниже среднего + + + low + низкий + + + lower + ниже + + + lowest + самый низкий + + + (%1 locked) + (%1 заблокировано) + + + none + ничего + + + Dust + Пыль + + + yes + да + + + no + нет + + + This label turns red, if the transaction size is greater than 1000 bytes. + Эта пометка становится красной, если размер транзакции больше 1000 байт. + + + This means a fee of at least %1 per kB is required. + Это значит, что требуется комиссия как минимум %1 на КБ. + + + Can vary +/- 1 byte per input. + Может отличаться на +/- 1 байт на вход. + + + Transactions with higher priority are more likely to get included into a block. + Транзакции с более высоким приоритетом будут вероятнее других включены в блок. + + + This label turns red, if the priority is smaller than "medium". + Эта пометка становится красной, если приоритет ниже, чем "средний". + + + This label turns red, if any recipient receives an amount smaller than %1. + Эта пометка становится красной, если какой-либо из адресатов получает сумму менее %1. + + + This means a fee of at least %1 is required. + Это значит, что требуется комиссия как минимум %1. + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + Суммы ниже, чем 0.546 минимальных комиссий ретрансляции, показаны как пыль. + + + This label turns red, if the change is smaller than %1. + Эта пометка становится красной, если сдача меньше %1. + + + (no label) + [нет метки] + + + change from %1 (%2) + сдача с %1 (%2) + + + (change) + (размен) + + EditAddressDialog - Edit Address Изменить адрес - &Label &Метка - - The label associated with this address book entry - Метка, связанная с данной записью + The label associated with this address list entry + Метка, связанная с этой записью списка адресов + + + The address associated with this address list entry. This can only be modified for sending addresses. + Адрес, связанный с этой записью списка адресов. Он может быть изменён только для адресов отправки. - &Address &Адрес - - The address associated with this address book entry. This can only be modified for sending addresses. - Адрес, связанный с данной записью. - - - New receiving address Новый адрес для получения - New sending address Новый адрес для отправки - Edit receiving address Изменение адреса для получения - Edit sending address Изменение адреса для отправки - The entered address "%1" is already in the address book. Введённый адрес «%1» уже находится в адресной книге. - The entered address "%1" is not a valid Myriadcoin address. - Введённый адрес "%1" не является правильным Myriadcoin-адресом. + Введённый адрес "%1" не является правильным Bitcoin-адресом. - Could not unlock wallet. Не удается разблокировать бумажник. - New key generation failed. Генерация нового ключа не удалась. - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt - Myriadcoin-Qt + A new data directory will be created. + Будет создан новый каталог данных. + + + name + имя + + + Directory already exists. Add %1 if you intend to create a new directory here. + Каталог уже существует. Добавьте %1, если вы хотите создать здесь новый каталог. + + + Path already exists, and is not a directory. + Путь уже существует и не является каталогом. + + + Cannot create data directory here. + Не удаётся создать здесь каталог данных. + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + Myriadcoin Core - опции командной строки + + + Myriadcoin Core + Myriadcoin Core - version версия - Usage: Использование: - command-line options - параметры командной строки + опции командной строки - UI options Опции интерфейса - Set language, for example "de_DE" (default: system locale) Выберите язык, например "de_DE" (по умолчанию: как в системе) - Start minimized Запускать свёрнутым - + Set SSL root certificates for payment request (default: -system-) + Указать корневые SSL-сертификаты для запроса платежа (по умолчанию: -system-) + + Show splash screen on startup (default: 1) Показывать сплэш при запуске (по умолчанию: 1) + + Choose data directory on startup (default: 0) + Выбрать каталог данных при запуске (по умолчанию: 0) + + + + Intro + + Welcome + Добро пожаловать + + + Welcome to Myriadcoin Core. + Добро пожаловать в Myriadcoin Core. + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + Так как вы впервые запустили программу, вы можете выбрать, где Myriadcoin Core будет хранить данные. + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + Myriadcoin Core скачает и сохранит копию цепи блоков. Как минимум, %1ГБ данных будет храниться в этом каталоге, и со временем он будет расти. Бумажник будет также сохранён в этом каталоге. + + + Use the default data directory + Использовать каталог данных по умолчанию + + + Use a custom data directory: + Использовать другой каталог данных: + + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" can not be created. + Ошибка: не удалось создать указанный каталог данных "%1". + + + Error + Ошибка + + + GB of free space available + ГБ свободного места доступно + + + (of %1GB needed) + (из необходимых %1ГБ) + + + + OpenURIDialog + + Open URI + Открыть URI + + + Open payment request from URI or file + Открыть запрос платежа из URI или файла + + + URI: + URI: + + + Select payment request file + Выбрать файл запроса платежа + + + Select payment request file to open + Выберите файл запроса платежа + OptionsDialog - Options Опции - &Main &Главная - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Необязательная комиссия за каждый КБ транзакции, которая ускоряет обработку Ваших транзакций. Большинство транзакций занимают 1КБ. - Pay transaction &fee Заплатить ко&миссию - Automatically start Myriadcoin after logging in to the system. Автоматически запускать Myriadcoin после входа в систему - &Start Myriadcoin on system login &Запускать Myriadcoin при входе в систему - + Size of &database cache + Размер кэша &БД + + + MB + МБ + + + Number of script &verification threads + Число потоков проверки &сценария + + + Connect to the Myriadcoin network through a SOCKS proxy. + Подключаться к сети Myriadcoin через прокси SOCKS. + + + &Connect through SOCKS proxy (default proxy): + &Подключаться через SOCKS прокси (прокси по умолчанию): + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + IP-адрес прокси (например IPv4: 127.0.0.1 / IPv6: ::1) + + + 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 |. + Сторонние URL (например, block explorer), которые отображаются на вкладке транзакций как пункты контекстного меню. %s в URL заменяется хэшем транзакции. URL отделяются друг от друга вертикальной чертой |. + + + Third party transaction URLs + Сторонние URL транзакций. + + + Active command-line options that override above options: + Активные опции командной строки, которые перекрывают вышеуказанные опции: + + Reset all client options to default. Сбросить все опции клиента на значения по умолчанию. - &Reset Options &Сбросить опции - &Network &Сеть - - Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. - Автоматически открыть порт для Myriadcoin-клиента на роутере. Работает только если Ваш роутер поддерживает UPnP, и данная функция включена. + (0 = auto, <0 = leave that many cores free) + (0 = автоматически, <0 = оставить столько незагруженных ядер) + + + W&allet + Б&умажник + + + Expert + Эксперт + + + Enable coin &control features + Включить управление входами + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + При отключении траты неподтверждённой сдачи, сдача от транзакции не может быть использована до тех пор пока у этой транзакции не будет хотя бы одно подтверждение. Это также влияет как ваш баланс рассчитывается. + + + &Spend unconfirmed change + &Тратить неподтверждённую сдачу + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. + Автоматически открыть порт для Bitcoin-клиента на роутере. Работает только если Ваш роутер поддерживает UPnP, и данная функция включена. - Map port using &UPnP Пробросить порт через &UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - Подключаться к сети Myriadcoin через прокси SOCKS (например, при подключении через Tor). - - - - &Connect through SOCKS proxy: - &Подключаться через SOCKS прокси: - - - Proxy &IP: &IP Прокси: - - IP address of the proxy (e.g. 127.0.0.1) - IP-адрес прокси (например 127.0.0.1) - - - &Port: По&рт: - Port of the proxy (e.g. 9050) Порт прокси-сервера (например, 9050) - SOCKS &Version: &Версия SOCKS: - SOCKS version of the proxy (e.g. 5) Версия SOCKS-прокси (например, 5) - &Window &Окно - Show only a tray icon after minimizing the window. Показывать только иконку в системном лотке после сворачивания окна. - &Minimize to the tray instead of the taskbar &Cворачивать в системный лоток вместо панели задач - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. Сворачивать вместо закрытия. Если данная опция будет выбрана — приложение закроется только после выбора соответствующего пункта в меню. - M&inimize on close С&ворачивать при закрытии - &Display О&тображение - User Interface &language: &Язык интерфейса: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. Здесь можно выбрать язык интерфейса. Настройки вступят в силу после перезапуска Myriadcoin. - &Unit to show amounts in: &Отображать суммы в единицах: - Choose the default subdivision unit to show in the interface and when sending coins. Выберите единицу измерения монет при отображении и отправке. - Whether to show Myriadcoin addresses in the transaction list or not. Показывать ли адреса Myriadcoin в списке транзакций. - &Display addresses in transaction list &Показывать адреса в списке транзакций - - &OK - О&К + Whether to show coin control features or not. + Показывать ли функции контроля монет или нет. + + + &OK + &OK - &Cancel &Отмена - - &Apply - &Применить - - - default по умолчанию - + none + ничего + + Confirm options reset Подтвердите сброс опций - - Some settings may require a client restart to take effect. - Некоторые настройки могут потребовать перезапуск клиента, чтобы вступить в силу. + Client restart required to activate changes. + Для применения изменений требуется перезапуск клиента. - - Do you want to proceed? - Желаете продолжить? + Client will be shutdown, do you want to proceed? + Клиент будет выключен, желаете продолжить? - - - Warning - Внимание + This change would require a client restart. + Это изменение потребует перезапуска клиента. - - - This setting will take effect after restarting Myriadcoin. - Эта настройка вступит в силу после перезапуска Myriadcoin - - - The supplied proxy address is invalid. Адрес прокси неверен. @@ -1008,59 +1215,54 @@ Address: %4 OverviewPage - Form Форма - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. Отображаемая информация может быть устаревшей. Ваш бумажник автоматически синхронизируется с сетью Myriadcoin после подключения, но этот процесс пока не завершён. - - Balance: - Баланс: - - - - Unconfirmed: - Не подтверждено: - - - Wallet Бумажник - + Available: + Доступно: + + + Your current spendable balance + Ваш текущий расходный баланс + + + Pending: + В ожидании: + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + Общая сумма всех транзакций, которые до сих пор не подтверждены, и до сих пор не учитываются в расходном балансе + + Immature: Незрелые: - Mined balance that has not yet matured Баланс добытых монет, который ещё не созрел - + Total: + Итого: + + + Your current total balance + Ваш текущий общий баланс + + <b>Recent transactions</b> - <b>Последние транзакции</b> + <b>Недавние транзакции</b> - - Your current balance - Ваш текущий баланс - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - Общая сумма всех транзакций, которые до сих пор не подтверждены, и до сих пор не учитываются в текущем балансе - - - - out of sync не синхронизировано @@ -1068,579 +1270,856 @@ Address: %4 PaymentServer - + URI handling + Обработка URI + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + Не удалось разобрать URI! Это может быть связано с неверным адресом Myriadcoin или неправильными параметрами URI. + + + Requested payment amount of %1 is too small (considered dust). + Запрошенная сумма платежа %1 слишком мала (считается пылью). + + + Payment request error + Ошибка запроса платежа + + Cannot start myriadcoin: click-to-pay handler Не удаётся запустить myriadcoin: обработчик click-to-pay + + Net manager warning + Предупреждение менеджера сети + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + Активный прокси не поддерживает SOCKS5, который необходим для запроса платежей через прокси. + + + Payment request fetch URL is invalid: %1 + Неверный URL запроса платежа: %1 + + + Payment request file handling + Обработка файла запроса платежа + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + Файл запроса платежа не может быть прочитан или обработан! Обычно это происходит из-за неверного файла запроса платежа. + + + Unverified payment requests to custom payment scripts are unsupported. + Непроверенные запросы платежей с нестандартными платёжными сценариями не поддерживаются. + + + Refund from %1 + Возврат от %1 + + + Error communicating with %1: %2 + Ошибка связи с %1: %2 + + + Payment request can not be parsed or processed! + Запрос платежа не может быть разобран или обработан! + + + Bad response from server %1 + Плохой ответ от сервера %1 + + + Payment acknowledged + Платёж принят + + + Network request error + Ошибка сетевого запроса + - QRCodeDialog + QObject - - QR Code Dialog - Диалог QR-кода + Myriadcoin + Myriadcoin - - Request Payment - Запросить платёж + Error: Specified data directory "%1" does not exist. + Ошибка: указанный каталог "%1" не существует. - - Amount: - Количество: + Error: Cannot parse configuration file: %1. Only use key=value syntax. + Ошибка: не удалось разобрать конфигурационный файл: %1. Используйте синтаксис вида ключ=значение. - - Label: - Метка: + Error: Invalid combination of -regtest and -testnet. + Ошибка: неверная комбинация -regtest и -testnet. - - Message: - Сообщение: + Myriadcoin Core didn't yet exit safely... + Myriadcoin Core ещё не завершился безопасно... - - &Save As... - &Сохранить как... + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Введите Bitcoin-адрес (например 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + &Сохранить изображение... - - Error encoding URI into QR Code. - Ошибка кодирования URI в QR-код + &Copy Image + &Копировать изображение - - The entered amount is invalid, please check. - Введено неверное количество, проверьте ещё раз. - - - - Resulting URI too long, try to reduce the text for label / message. - Получившийся URI слишком длинный, попробуйте сократить текст метки / сообщения. - - - Save QR Code Сохранить QR-код - - PNG Images (*.png) - PNG Изображения (*.png) + PNG Image (*.png) + Изображение PNG (*.png) RPCConsole - Client name Имя клиента - - - - - - - - - - N/A Н/Д - Client version Версия клиента - &Information &Информация - + Debug window + Окно отладки + + + General + Общие + + Using OpenSSL version Используется версия OpenSSL - Startup time Время запуска - Network Сеть - + Name + Имя + + Number of connections Число подключений - - On testnet - В тестовой сети - - - Block chain Цепь блоков - Current number of blocks Текущее число блоков - Estimated total blocks Расчётное число блоков - Last block time Время последнего блока - &Open &Открыть - - Command-line options - Параметры командной строки - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - Показать помощь по Myriadcoin-Qt, чтобы получить список доступных параметров командной строки. - - - - &Show - &Показать - - - &Console Консоль - + &Network Traffic + Сетевой &трафик + + + &Clear + &Очистить + + + Totals + Всего + + + In: + Вход: + + + Out: + Выход: + + Build date Дата сборки - - Myriadcoin - Debug window - Myriadcoin - Окно отладки - - - - Myriadcoin Core - Ядро Myriadcoin - - - Debug log file Отладочный лог-файл - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. Открыть отладочный лог-файл Myriadcoin из текущего каталога данных. Это может занять несколько секунд для больших лог-файлов. - Clear console Очистить консоль - Welcome to the Myriadcoin RPC console. Добро пожаловать в RPC-консоль Myriadcoin. - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. Используйте стрелки вверх и вниз для просмотра истории и <b>Ctrl-L</b> для очистки экрана. - Type <b>help</b> for an overview of available commands. Напишите <b>help</b> для просмотра доступных команд. + + %1 B + %1 Б + + + %1 KB + %1 КБ + + + %1 MB + %1 МБ + + + %1 GB + %1 ГБ + + + %1 m + %1 мин + + + %1 h + %1 ч + + + %1 h %2 m + %1 ч %2 мин + + + + ReceiveCoinsDialog + + &Amount: + &Сумма: + + + &Label: + &Метка: + + + &Message: + &Сообщение + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + Повторно использовать один из ранее использованных адресов. Повторное использование адресов несёт риски безопасности и приватности. Не используйте эту опцию, если вы не создаёте повторно ранее сделанный запрос платежа. + + + R&euse an existing receiving address (not recommended) + &Повторно использовать существующий адрес получения (не рекомендуется) + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + Необязательное сообщение для запроса платежа, которое будет показано при открытии запроса. Заметьте: сообщение не будет отправлено вместе с платежом через сеть Myriadcoin. + + + An optional label to associate with the new receiving address. + Необязательная метка для нового адреса получения. + + + Use this form to request payments. All fields are <b>optional</b>. + Заполните форму для запроса платежей. Все поля <b>необязательны</b>. + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + Необязательная сумма для запроса. Оставьте пустым или укажите ноль, чтобы запросить неопределённую сумму. + + + Clear all fields of the form. + Очистить все поля формы. + + + Clear + Очистить + + + Requested payments history + История запрошенных платежей + + + &Request payment + &Запросить платёж + + + Show the selected request (does the same as double clicking an entry) + Показать выбранный запрос (то же самое, что и двойной клик по записи) + + + Show + Показать + + + Remove the selected entries from the list + Удалить выбранные записи из списка + + + Remove + Удалить + + + Copy label + Копировать метку + + + Copy message + Копировать сообщение + + + Copy amount + Скопировать сумму + + + + ReceiveRequestDialog + + QR Code + QR код + + + Copy &URI + Копировать &URI + + + Copy &Address + Копировать &адрес + + + &Save Image... + &Сохранить изображение... + + + Request payment to %1 + Запросить платёж на %1 + + + Payment information + Информация платежа + + + URI + URI + + + Address + Адрес + + + Amount + Сумма + + + Label + Метка + + + Message + Сообщение + + + Resulting URI too long, try to reduce the text for label / message. + Получившийся URI слишком длинный, попробуйте сократить текст метки / сообщения. + + + Error encoding URI into QR Code. + Ошибка кодирования URI в QR-код + + + + RecentRequestsTableModel + + Date + Дата + + + Label + Метка + + + Message + Сообщение + + + Amount + Сумма + + + (no label) + [нет метки] + + + (no message) + (нет сообщения) + + + (no amount) + (нет суммы) + SendCoinsDialog - - - - - - - - Send Coins Отправка - + Coin Control Features + Функции Контроля Монет + + + Inputs... + Входы... + + + automatically selected + автоматически выбрано + + + Insufficient funds! + Недостаточно средств! + + + Quantity: + Количество: + + + Bytes: + Байт: + + + Amount: + Сумма: + + + Priority: + Приоритет: + + + Fee: + Комиссия: + + + Low Output: + Малый выход: + + + After Fee: + После комиссии: + + + Change: + Размен: + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + Если это выбрано, но адрес сдачи пустой или неверный, сдача будет отправлена на новый сгенерированный адрес. + + + Custom change address + Свой адрес для сдачи + + Send to multiple recipients at once Отправить нескольким получателям одновременно - Add &Recipient &Добавить получателя - - Remove all transaction fields - Удалить все поля транзакции + Clear all fields of the form. + Очистить все поля формы - Clear &All Очистить &всё - Balance: Баланс: - - 123.456 BTC - 123.456 BTC - - - Confirm the send action Подтвердить отправку - S&end &Отправить - - <b>%1</b> to %2 (%3) - <b>%1</b> адресату %2 (%3) - - - Confirm send coins Подтвердите отправку монет - - Are you sure you want to send %1? - Вы уверены, что хотите отправить %1? + %1 to %2 + С %1 на %2 - - and - и + Copy quantity + Копировать количество + + + Copy amount + Скопировать сумму + + + Copy fee + Копировать комиссию + + + Copy after fee + Копировать после комиссии + + + Copy bytes + Копировать байты + + + Copy priority + Копировать приоритет + + + Copy low output + Копировать малый выход + + + Copy change + Копировать размен + + + Total Amount %1 (= %2) + Общая сумма %1 (= %2) + + + or + или - The recipient address is not valid, please recheck. Адрес получателя неверный, пожалуйста, перепроверьте. - The amount to pay must be larger than 0. - Количество монет для отправки должно быть больше 0. + Сумма для отправки должно быть больше 0. - The amount exceeds your balance. - Количество отправляемых монет превышает Ваш баланс + Сумма превышает Ваш баланс - The total exceeds your balance when the %1 transaction fee is included. Сумма превысит Ваш баланс, если комиссия в размере %1 будет добавлена к транзакции - Duplicate address found, can only send to each address once per send operation. Обнаружен дублирующийся адрес. Отправка на один и тот же адрес возможна только один раз за одну операцию отправки - - Error: Transaction creation failed! - Ошибка: не удалось создать транзакцию! + Transaction creation failed! + Не удалось создать транзакцию! - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Ошибка: В транзакции отказано. Такое может произойти, если некоторые монеты уже были потрачены, например, если Вы используете одну копию файла wallet.dat, а монеты были потрачены из другой копии, но не были отмечены как потраченные в этой. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Транзакция была отклонена! Такое может произойти, если некоторые монеты уже были потрачены, например, если Вы используете одну копию бумажника (wallet.dat), а монеты были потрачены из другой копии, но не были отмечены как потраченные в этой. + + + Warning: Invalid Myriadcoin address + Внимание: неверный адрес Myriadcoin + + + (no label) + [нет метки] + + + Warning: Unknown change address + Внимание: неизвестный адрес для сдачи + + + Are you sure you want to send? + Вы уверены, что хотите отправить? + + + added as transaction fee + добавлено как комиссия + + + Payment request expired + Запрос платежа просрочен + + + Invalid payment address %1 + Неверный адрес платежа %1 SendCoinsEntry - - Form - Форма - - - A&mount: Ко&личество: - Pay &To: Полу&чатель: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Адрес, на который будет выслан платёж (например 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book Введите метку для данного адреса (для добавления в адресную книгу) - &Label: &Метка: - - Choose address from address book - Выберите адрес из адресной книги + Choose previously used address + Выберите ранее использованный адрес + + + This is a normal payment. + Это нормальный платёж. - Alt+A Alt+A - Paste address from clipboard Вставить адрес из буфера обмена - Alt+P Alt+P - - Remove this recipient - Удалить этого получателя + Remove this entry + Удалить эту запись - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Введите Myriadcoin-адрес (например 1LA5FtQhnnWnkK6zjFfutR7Stiit4wKd63) + Message: + Сообщение: + + + This is a verified payment request. + Это проверенный запрос платежа. + + + Enter a label for this address to add it to the list of used addresses + Введите метку для этого адреса, чтобы добавить его в список использованных + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + К myriadcoin: URI было прикреплено сообщение, которое будет сохранено вместе с транзакцией для вашего сведения. Заметьте: сообщение не будет отправлено через сеть Myriadcoin. + + + This is an unverified payment request. + Это непроверенный запрос платежа. + + + Pay To: + Получатель: + + + Memo: + Примечание: + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + Myriadcoin Core выключается... + + + Do not shut down the computer until this window disappears. + Не выключайте компьютер, пока это окно не исчезнет. SignVerifyMessageDialog - Signatures - Sign / Verify a Message Подписи - подписать/проверить сообщение - &Sign Message &Подписать сообщение - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. Вы можете подписывать сообщения своими адресами, чтобы доказать владение ими. Будьте осторожны, не подписывайте что-то неопределённое, так как фишинговые атаки могут обманным путём заставить вас подписать нежелательные сообщения. Подписывайте только те сообщения, с которыми вы согласны вплоть до мелочей. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Адрес, которым вы хотите подписать сообщение (напр. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book - Выберите адрес из адресной книги + Choose previously used address + Выберите ранее использованный адрес - - Alt+A Alt+A - Paste address from clipboard Вставить адрес из буфера обмена - Alt+P Alt+P - Enter the message you want to sign here Введите сообщение для подписи - Signature Подпись - Copy the current signature to the system clipboard Скопировать текущую подпись в системный буфер обмена - Sign the message to prove you own this Myriadcoin address Подписать сообщение, чтобы доказать владение адресом Myriadcoin - Sign &Message Подписать &Сообщение - Reset all sign message fields Сбросить значения всех полей подписывания сообщений - - Clear &All Очистить &всё - &Verify Message &Проверить сообщение - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Введите ниже адрес для подписи, сообщение (убедитесь, что переводы строк, пробелы, табы и т.п. в точности скопированы) и подпись, чтобы проверить сообщение. Убедитесь, что не скопировали лишнего в подпись, по сравнению с самим подписываемым сообщением, чтобы не стать жертвой атаки "man-in-the-middle". - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Адрес, которым было подписано сообщение (напр. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address Проверить сообщение, чтобы убедиться, что оно было подписано указанным адресом Myriadcoin - Verify &Message Проверить &Сообщение - Reset all verify message fields Сбросить все поля проверки сообщения - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Введите адрес Myriadcoin (напр. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature Нажмите "Подписать сообщение" для создания подписи - - Enter Myriadcoin signature - Введите подпись Myriadcoin - - - - The entered address is invalid. Введённый адрес неверен - - - - Please check the address and try again. Пожалуйста, проверьте адрес и попробуйте ещё раз. - - The entered address does not refer to a key. Введённый адрес не связан с ключом - Wallet unlock was cancelled. Разблокировка бумажника была отменена. - Private key for the entered address is not available. Для введённого адреса недоступен закрытый ключ - Message signing failed. Не удалось подписать сообщение - Message signed. Сообщение подписано - The signature could not be decoded. Подпись не может быть раскодирована. - - Please check the signature and try again. Пожалуйста, проверьте подпись и попробуйте ещё раз. - The signature did not match the message digest. Подпись не соответствует отпечатку сообщения. - Message verification failed. Проверка сообщения не удалась. - Message verified. Сообщение проверено. @@ -1648,186 +2127,160 @@ Address: %4 SplashScreen - - The Myriadcoin developers - Разработчики Myriadcoin + Myriadcoin Core + Myriadcoin Core + + + The Myriadcoin Core developers + Разработчики Myriadcoin Core - [testnet] [тестовая сеть] + + TrafficGraphWidget + + KB/s + КБ/сек + + TransactionDesc - Open until %1 Открыто до %1 - + conflicted + в противоречии + + %1/offline %1/отключен - %1/unconfirmed %1/не подтверждено - %1 confirmations %1 подтверждений - Status Статус - , broadcast through %n node(s) , разослано через %n узел, разослано через %n узла, разослано через %n узлов - Date Дата - Source Источник - Generated Сгенерированно - - From От - - - To Для - - own address свой адрес - label метка - - - - - Credit Кредит - matures in %n more block(s) будет доступно через %n блокбудет доступно через %n блокабудет доступно через %n блоков - not accepted не принято - - - - Debit Дебет - Transaction fee Комиссия - Net amount Чистая сумма - Message Сообщение - Comment Комментарий: - Transaction ID ID транзакции - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Сгенерированные монеты должны подождать 120 блоков, прежде чем они могут быть потрачены. Когда Вы сгенерировали этот блок, он был отправлен в сеть для добавления в цепочку блоков. Если данная процедура не удастся, статус изменится на «не подтверждено», и монеты будут недействительны. Это иногда происходит в случае, если другой узел сгенерирует блок на несколько секунд раньше вас. + Merchant + Продавец + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Сгенерированные монеты должны подождать %1 блоков, прежде чем они могут быть потрачены. Когда Вы сгенерировали этот блок, он был отправлен в сеть для добавления в цепочку блоков. Если он не попадёт в цепь, его статус изменится на "не принят", и монеты будут недействительны. Это иногда происходит в случае, если другой узел сгенерирует блок на несколько секунд раньше вас. - Debug information Отладочная информация - Transaction Транзакция - Inputs Входы - Amount - Количество + Сумма - true истина - false ложь - , has not been successfully broadcast yet , ещё не было успешно разослано - Open for %n more block(s) Открыто для ещё %n блокаОткрыто для ещё %n блоковОткрыто для ещё %n блоков - unknown неизвестно @@ -1835,130 +2288,113 @@ Address: %4 TransactionDescDialog - Transaction details Детали транзакции - This pane shows a detailed description of the transaction - Данный диалог показывает детализированную статистику по выбранной транзакции + Эта панель отображает детальное описание транзакции. TransactionTableModel - Date Дата - Type Тип - Address Адрес - Amount - Количество + Сумма + + + Immature (%1 confirmations, will be available after %2) + Незрелый (%1 подтверждений, будет доступен после %2) - Open for %n more block(s) Открыто для ещё %n блокаОткрыто для ещё %n блоковОткрыто для ещё %n блоков - Open until %1 Открыто до %1 - - Offline (%1 confirmations) - Оффлайн (%1 подтверждений) - - - - Unconfirmed (%1 of %2 confirmations) - Не подтверждено (%1 из %2 подтверждений) - - - Confirmed (%1 confirmations) Подтверждено (%1 подтверждений) - - - Mined balance will be available when it matures in %n more block(s) - Добытыми монетами можно будет воспользоваться через %n блокДобытыми монетами можно будет воспользоваться через %n блокаДобытыми монетами можно будет воспользоваться через %n блоков - - This block was not received by any other nodes and will probably not be accepted! Этот блок не был получен другими узлами и, возможно, не будет принят! - Generated but not accepted Сгенерированно, но не подтверждено - + Offline + Нет активных соединений с сетью + + + Unconfirmed + Неподтверждено + + + Confirming (%1 of %2 recommended confirmations) + Подтверждено(%1 подтверждений, рекомендуется 2% подтверждений) + + + Conflicted + В противоречии + + Received with Получено - Received from Получено от - Sent to Отправлено - Payment to yourself Отправлено себе - Mined Добыто - (n/a) [не доступно] - Transaction status. Hover over this field to show number of confirmations. Статус транзакции. Подведите курсор к нужному полю для того, чтобы увидеть количество подтверждений. - Date and time that the transaction was received. Дата и время, когда транзакция была получена. - Type of transaction. Тип транзакции. - Destination address of transaction. Адрес назначения транзакции. - Amount removed from or added to balance. Сумма, добавленная, или снятая с баланса. @@ -1966,176 +2402,156 @@ Address: %4 TransactionView - - All Все - Today Сегодня - This week На этой неделе - This month В этом месяце - Last month - За последний месяц + В прошлом месяце - This year В этом году - Range... Промежуток... - Received with Получено на - Sent to Отправлено на - To yourself Отправленные себе - Mined Добытые - Other Другое - Enter address or label to search Введите адрес или метку для поиска - Min amount Мин. сумма - Copy address Копировать адрес - Copy label Копировать метку - Copy amount Скопировать сумму - Copy transaction ID Скопировать ID транзакции - Edit label Изменить метку - Show transaction details Показать подробности транзакции - - Export Transaction Data - Экспортировать данные транзакций + Export Transaction History + Экспортировать историю транзакций + + + Exporting Failed + Экспорт не удался + + + There was an error trying to save the transaction history to %1. + Произошла ошибка при сохранении истории транзакций в %1. + + + Exporting Successful + Экспорт успешно завершён + + + The transaction history was successfully saved to %1. + История транзакций была успешно сохранена в %1. - Comma separated file (*.csv) Текст, разделённый запятыми (*.csv) - Confirmed Подтверждено - Date Дата - Type Тип - Label Метка - Address Адрес - Amount - Количество + Сумма - ID ID - - Error exporting - Ошибка экспорта - - - - Could not write to file %1. - Невозможно записать в файл %1. - - - Range: Промежуток от: - to до + + WalletFrame + + No wallet has been loaded. + Не был загружен ни один бумажник. + + WalletModel - Send Coins Отправка @@ -2143,161 +2559,122 @@ Address: %4 WalletView - &Export &Экспорт - Export the data in the current tab to a file Экспортировать данные из вкладки в файл - Backup Wallet Сделать резервную копию бумажника - Wallet Data (*.dat) Данные бумажника (*.dat) - Backup Failed Резервное копирование не удалось - - There was an error trying to save the wallet data to the new location. - При попытке сохранения данных бумажника в новое место произошла ошибка. + There was an error trying to save the wallet data to %1. + Произошла ошибка при сохранении данных бумажника в %1. + + + The wallet data was successfully saved to %1. + Данные бумажника были успешно сохранены в %1. - Backup Successful Резервное копирование успешно завершено - - - The wallet data was successfully saved to the new location. - Данные бумажника успешно сохранены в новое место. - bitcoin-core - - Myriadcoin version - Версия - - - Usage: Использование: - - Send command to -server or myriadcoind - Отправить команду на -server или myriadcoind - - - List commands Список команд - Get help for a command Получить помощь по команде - Options: Опции: - Specify configuration file (default: myriadcoin.conf) Указать конфигурационный файл (по умолчанию: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) - Задать pid-файл (по умолчанию: myriadcoin.pid) + Задать pid-файл (по умолчанию: bitcoin.pid) - Specify data directory Задать каталог данных - - Set database cache size in megabytes (default: 25) - Установить размер кэша базы данных в мегабайтах (по умолчанию: 25) - - - Listen for connections on <port> (default: 8333 or testnet: 18333) Принимать входящие подключения на <port> (по умолчанию: 8333 или 18333 в тестовой сети) - Maintain at most <n> connections to peers (default: 125) Поддерживать не более <n> подключений к узлам (по умолчанию: 125) - Connect to a node to retrieve peer addresses, and disconnect Подключиться к узлу, чтобы получить список адресов других участников и отключиться - Specify your own public address Укажите ваш собственный публичный адрес - Threshold for disconnecting misbehaving peers (default: 100) Порог для отключения неправильно ведущих себя узлов (по умолчанию: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Число секунд блокирования неправильно ведущих себя узлов (по умолчанию: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s Произошла ошибка при открытии RPC-порта %u для прослушивания на IPv4: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) Прослушивать подключения JSON-RPC на <порту> (по умолчанию: 8332 или для testnet: 18332) - Accept command line and JSON-RPC commands Принимать командную строку и команды JSON-RPC - + Myriadcoin Core RPC client version + Версия RPC-клиента Myriadcoin Core + + Run in the background as a daemon and accept commands Запускаться в фоне как демон и принимать команды - Use the test network Использовать тестовую сеть - Accept connections from outside (default: 1 if no -proxy or -connect) Принимать подключения извне (по умолчанию: 1, если не используется -proxy или -connect) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2322,613 +2699,687 @@ rpcpassword=%s - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + Разрешённые алгоритмы(по умолчанию: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s Произошла ошибка при открытии на прослушивание IPv6 RCP-порта %u, возвращаемся к IPv4: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 Привязаться к указанному адресу и всегда прослушивать только его. Используйте [хост]:порт для IPv6 - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. - Не удаётся установить блокировку на каталог данных %s. Возможно, Myriadcoin уже работает. + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + Ограничить скорость передачи бесплатных транзакций до <n>*1000 байт в минуту (по умолчанию: 15) + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + Войти в режим тестирования на регрессии, в котором используется специальная цепь, где блоки находятся мгновенно. Этот режим рассчитан на инструменты регрессионного тестирования и разработку приложений. + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + Войти в режим тестирования на регрессии, в котором используется специальная цепь, где блоки находятся мгновенно. + + + Error: Listening for incoming connections failed (listen returned error %d) + Ошибка: не удалось начать прослушивание входящих подключений (прослушивание вернуло ошибку %d) - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. Ошибка: транзакция была отклонена! Это могло произойти в случае, если некоторые монеты в вашем бумажнике уже были потрачены, например, если вы используете копию wallet.dat, и монеты были использованы в копии, но не отмечены как потраченные здесь. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! Ошибка: эта транзакция требует комиссию как минимум %s из-за суммы, сложности или использования недавно полученных средств! - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - Выполнить команду, когда приходит сообщение о тревоге (%s в команде заменяется на сообщение) - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Выполнить команду, когда меняется транзакция в бумажнике (%s в команде заменяется на TxID) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - Максимальный размер высокоприоритетных/низкокомиссионных транзакций в байтах (по умолчанию: 27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + Комиссии меньшие этого значения считаются нулевыми (для создания транзакции) (по умолчанию: + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + Сбрасывать активность базы данных из памяти на диск каждые <n> мегабайт (по умолчанию: 100) + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + Насколько тщательна проверка контрольных блоков -checkblocks (0-4, по умолчанию: 3) + + + In this mode -genproclimit controls how many blocks are generated immediately. + В этом режиме -genproclimit определяет, сколько блоков генерируется немедленно. + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + Задать число потоков проверки скрипта (от %u до %d, 0=авто, <0 = оставить столько ядер свободными, по умолчанию: %d) + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + Задать лимит процессора, когда генерация работает (-1 = безлимитно, по умолчанию: -1) - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications Это пре-релизная тестовая сборка - используйте на свой страх и риск - не используйте для добычи или торговых приложений - + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + Не удалось забиндиться на %s на этом компьютере. Возможно, Myriadcoin Core уже запущен. + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + Использовать отдельный прокси SOCKS5 для соединения с участниками через скрытые сервисы Tor (по умолчанию: -proxy) + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Внимание: установлено очень большое значение -paytxfee. Это комиссия, которую вы заплатите при проведении транзакции. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - Внимание: отображаемые транзакции могут быть некорректны! Вам или другим узлам, возможно, следует обновиться. - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. Внимание: убедитесь, что дата и время на Вашем компьютере выставлены верно. Если Ваши часы идут неправильно, Myriadcoin будет работать некорректно. - + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + Внимание: похоже, в сети нет полного согласия! Некоторый майнеры, возможно, испытывают проблемы. + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + Внимание: мы не полностью согласны с подключенными участниками! Вам или другим узлам, возможно, следует обновиться. + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Внимание: ошибка чтения wallet.dat! Все ключи прочитаны верно, но данные транзакций или записи адресной книги могут отсутствовать или быть неправильными. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. Внимание: wallet.dat повреждён, данные спасены! Оригинальный wallet.dat сохранён как wallet.{timestamp}.bak в %s; если ваш баланс или транзакции некорректны, вы должны восстановить файл из резервной копии. - + (default: 1) + (по умолчанию: 1) + + + (default: wallet.dat) + (по умолчанию: wallet.dat) + + + <category> can be: + <category> может быть: + + Attempt to recover private keys from a corrupt wallet.dat Попытаться восстановить приватные ключи из повреждённого wallet.dat - + Myriadcoin Core Daemon + Демон Myriadcoin Core + + Block creation options: Параметры создания блоков: - + Clear list of wallet transactions (diagnostic tool; implies -rescan) + Очистить список транзакций кошелька (диагностический инструмент; включает в себя -rescan) + + Connect only to the specified node(s) Подключаться только к указанному узлу(ам) - + Connect through SOCKS proxy + Подключаться через SOCKS прокси + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + Подключаться к JSON-RPC на <порт> (по умолчанию: 8332 или testnet: 18332) + + + Connection options: + Параметры подключения: + + Corrupted block database detected БД блоков повреждена - + Debugging/Testing options: + Параметры отладки/тестирования: + + + Disable safemode, override a real safe mode event (default: 0) + Отключить безопасный режим, отклонить реальное событие безопасного режима (по умолчанию: 0) + + Discover own IP address (default: 1 when listening and no -externalip) Определить свой IP (по умолчанию: 1 при прослушивании и если не используется -externalip) - + Do not load the wallet and disable wallet RPC calls + Не загружать бумажник и запретить обращения к нему через RPC + + Do you want to rebuild the block database now? Пересобрать БД блоков прямо сейчас? - Error initializing block database Ошибка инициализации БД блоков - Error initializing wallet database environment %s! Ошибка инициализации окружения БД бумажника %s! - Error loading block database Ошибка чтения базы данных блоков - Error opening block database Не удалось открыть БД блоков - Error: Disk space is low! Ошибка: мало места на диске! - Error: Wallet locked, unable to create transaction! Ошибка: бумажник заблокирован, невозможно создать транзакцию! - Error: system error: Ошибка: системная ошибка: - Failed to listen on any port. Use -listen=0 if you want this. Не удалось начать прослушивание на порту. Используйте -listen=0 если вас это устраивает. - Failed to read block info Не удалось прочитать информацию блока - Failed to read block Не удалось прочитать блок - Failed to sync block index Не удалось синхронизировать индекс блоков - Failed to write block index Не удалось записать индекс блоков - Failed to write block info Не удалось записать информацию блока - Failed to write block Не удалось записать блок - Failed to write file info Не удалось записать информацию файла - Failed to write to coin database Не удалось записать БД монет - Failed to write transaction index Не удалось записать индекс транзакций - Failed to write undo data Не удалось записать данные для отмены - + Fee per kB to add to transactions you send + Комиссия на КБ, добавляемая к вашим переводам + + + Fees smaller than this are considered zero fee (for relaying) (default: + Комиссии меньшие этого значения считаются нулевыми (для ретрансляции) (по умолчанию: + + Find peers using DNS lookup (default: 1 unless -connect) Искать узлы с помощью DNS (по умолчанию: 1, если не указан -connect) - + Force safe mode (default: 0) + Принудительный безопасный режим (по умолчанию: 0) + + Generate coins (default: 0) Включить добычу монет (по умолчанию: 0) - How many blocks to check at startup (default: 288, 0 = all) Сколько блоков проверять при запуске (по умолчанию: 288, 0 = все) - - How thorough the block verification is (0-4, default: 3) - Насколько тщательно проверять блок (0-4, по умолчанию: 3) + If <category> is not supplied, output all debugging information. + Если <category> не предоставлена, выводить всю отладочную информацию. + + + Importing... + Импорт ... + + + Incorrect or no genesis block found. Wrong datadir for network? + Неверный или отсутствующий начальный блок. Неправильный каталог данных для сети? + + + Invalid -onion address: '%s' + Неверный -onion адрес: '%s' - Not enough file descriptors available. Недостаточно файловых дескрипторов. - + Prepend debug output with timestamp (default: 1) + Дописывать отметки времени к отладочному выводу (по умолчанию: 1) + + + RPC client options: + Параметры RPC клиента: + + Rebuild block chain index from current blk000??.dat files Перестроить индекс цепи блоков из текущих файлов blk000??.dat - + Select SOCKS version for -proxy (4 or 5, default: 5) + Выбрать версию SOCKS для -proxy (4 или 5, по умолчанию: 5) + + + Set database cache size in megabytes (%d to %d, default: %d) + Установить размер кэша БД в мегабайтах(от %d до %d, по умолчанию: %d) + + + Set maximum block size in bytes (default: %d) + Задать максимальный размер блока в байтах (по умолчанию: %d) + + Set the number of threads to service RPC calls (default: 4) Задать число потоков выполнения(по умолчанию: 4) - + Specify wallet file (within data directory) + Укажите файл бумажника (внутри каталога данных) + + + Spend unconfirmed change when sending transactions (default: 1) + Тратить неподтвержденную сдачу при отправке транзакций (по умолчанию: 1) + + + This is intended for regression testing tools and app development. + Это рассчитано на инструменты регрессионного тестирования и разработку приложений. + + + Usage (deprecated, use myriadcoin-cli): + Использование (устарело, используйте myriadcoin-cli): + + Verifying blocks... Проверка блоков... - Verifying wallet... Проверка бумажника... - + Wait for RPC server to start + Ожидание запуска RPC сервера + + + Wallet %s resides outside data directory %s + Бумажник %s располагается вне каталога данных %s + + + Wallet options: + Опции бумажника: + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + Внимание: устаревший аргумент -debugnet проигнорирован, используйте -debug=net + + + You need to rebuild the database using -reindex to change -txindex + Вам необходимо пересобрать базы данных с помощью -reindex, чтобы изменить -txindex + + Imports blocks from external blk000??.dat file Импортировать блоки из внешнего файла blk000??.dat - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) - Задать число потоков проверки скрипта (вплоть до 16, 0=авто, <0 = оставить столько ядер свободными, по умолчанию: 0) + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + Не удалось установить блокировку на каталог данных %s. Возможно, Myriadcoin Core уже запущен. + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + Выполнить команду, когда приходит соответствующее сообщение о тревоге или наблюдается очень длинное расщепление цепи (%s в команде заменяется на сообщение) + + + Output debugging information (default: 0, supplying <category> is optional) + Выводить отладочную информацию (по умолчанию: 0, указание <category> необязательно) + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + Задать максимальный размер высокоприоритетных/низкокомиссионных транзакций в байтах (по умолчанию: %d) - Information Информация - - Invalid -tor address: '%s' - Неверный адрес -tor: '%s' - - - Invalid amount for -minrelaytxfee=<amount>: '%s' - Неверное количество в параметре -minrelaytxfee=<кол-во>: '%s' + Неверная сумма в параметре -minrelaytxfee=<кол-во>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' - Неверное количество в параметре -mintxfee=<кол-во>: '%s' + Неверная сумма в параметре -mintxfee=<кол-во>: '%s' + + + Limit size of signature cache to <n> entries (default: 50000) + Ограничить размер кэша подписей <n> записями (по умолчанию: 50000) + + + Log transaction priority and fee per kB when mining blocks (default: 0) + Записывать в лог приоритет транзакции и комиссию на килобайт во время добычи блоков (по умолчанию: 0) - Maintain a full transaction index (default: 0) Держать полный индекс транзакций (по умолчанию: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) Максимальный размер буфера приёма на соединение, <n>*1000 байт (по умолчанию: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) Максимальный размер буфера отправки на соединение, <n>*1000 байт (по умолчанию: 1000) - Only accept block chain matching built-in checkpoints (default: 1) Принимать цепь блоков, только если она соответствует встроенным контрольным точкам (по умолчанию: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Подключаться только к узлам из сети <net> (IPv4, IPv6 или Tor) - - Output extra debugging information. Implies all other -debug* options - Выводить больше отладочной информации. Включает все остальные опции -debug* + Print block on startup, if found in block index + Печатать блок при запуске, если он найден в индексе блоков - - Output extra network debugging information - Выводить дополнительную сетевую отладочную информацию + Print block tree on startup (default: 0) + Печатать дерево блоков при запуске (по умолчанию: 0) - - Prepend debug output with timestamp - Дописывать отметки времени к отладочному выводу + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + Параметры RPC SSL: (см. Myriadcoin вики для инструкций по настройке SSL) + + + RPC server options: + Параметры сервера RPC: + + + Randomly drop 1 of every <n> network messages + Случайно отбрасывать 1 из каждых <n> сетевых сообщений + + + Randomly fuzz 1 of every <n> network messages + Случайно разбрасывать 1 из каждых <n> сетевых сообщений + + + Run a thread to flush wallet periodically (default: 1) + Запустить поток для периодического сохранения бумажника (по умолчанию: 1) - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) Параметры SSL: (см. Myriadcoin Wiki для инструкций по настройке SSL) - - Select the version of socks proxy to use (4-5, default: 5) - Выбрать версию SOCKS-прокси (4-5, по умолчанию: 5) + Send command to Myriadcoin Core + Отправить команду Myriadcoin Core - Send trace/debug info to console instead of debug.log file Выводить информацию трассировки/отладки на консоль вместо файла debug.log - - Send trace/debug info to debugger - Отправлять информацию трассировки/отладки в отладчик - - - - Set maximum block size in bytes (default: 250000) - Максимальный размер блока в байтах (по умолчанию: 250000) - - - Set minimum block size in bytes (default: 0) Минимальный размер блока в байтах (по умолчанию: 0) - + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + Установить флаг DB_PRIVATE в окружении базы данных бумажника (по умолчанию: 1) + + + Show all debugging options (usage: --help -help-debug) + Показать все отладочные параметры (использование: --help -help-debug) + + + Show benchmark information (default: 0) + Показать информацию нагрузочного тестирования (по умолчанию: 0) + + Shrink debug.log file on client startup (default: 1 when no -debug) Сжимать файл debug.log при запуске клиента (по умолчанию: 1, если нет -debug) - Signing transaction failed Не удалось подписать транзакцию - Specify connection timeout in milliseconds (default: 5000) - Таймаут соединения в миллисекундах (по умолчанию: 5000) + Тайм-аут соединения в миллисекундах (по умолчанию: 5000) + + + Start Myriadcoin Core Daemon + Запустить Myriadcoin Core демон - System error: Системная ошибка: - Transaction amount too small - Объём транзакции слишком мал + Сумма транзакции слишком мала - Transaction amounts must be positive - Объём транзакции должен быть положителен + Сумма транзакции должна быть положительна - Transaction too large Транзакция слишком большая - Use UPnP to map the listening port (default: 0) Использовать UPnP для проброса порта (по умолчанию: 0) - Use UPnP to map the listening port (default: 1 when listening) Использовать UPnP для проброса порта (по умолчанию: 1, если используется прослушивание) - - Use proxy to reach tor hidden services (default: same as -proxy) - Использовать прокси для скрытых сервисов (по умолчанию: тот же, что и в -proxy) - - - Username for JSON-RPC connections Имя для подключений JSON-RPC - Warning Внимание - Warning: This version is obsolete, upgrade required! Внимание: эта версия устарела, требуется обновление! - - You need to rebuild the databases using -reindex to change -txindex - Вам необходимо пересобрать базы данных с помощью -reindex, чтобы изменить -txindex + Zapping all transactions from wallet... + Стираем все транзакции из кошелька... + + + on startup + при запуске + + + version + версия - wallet.dat corrupt, salvage failed wallet.dat повреждён, спасение данных не удалось - Password for JSON-RPC connections Пароль для подключений JSON-RPC - Allow JSON-RPC connections from specified IP address Разрешить подключения JSON-RPC с указанного IP - Send commands to node running on <ip> (default: 127.0.0.1) Посылать команды узлу, запущенному на <ip> (по умолчанию: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) Выполнить команду, когда появляется новый блок (%s в команде заменяется на хэш блока) - Upgrade wallet to latest format Обновить бумажник до последнего формата - Set key pool size to <n> (default: 100) Установить размер запаса ключей в <n> (по умолчанию: 100) - Rescan the block chain for missing wallet transactions Перепроверить цепь блоков на предмет отсутствующих в бумажнике транзакций - Use OpenSSL (https) for JSON-RPC connections Использовать OpenSSL (https) для подключений JSON-RPC - Server certificate file (default: server.cert) Файл серверного сертификата (по умолчанию: server.cert) - Server private key (default: server.pem) Приватный ключ сервера (по умолчанию: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Разрешённые алгоритмы (по умолчанию: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - This help message Эта справка - Unable to bind to %s on this computer (bind returned error %d, %s) Невозможно привязаться к %s на этом компьютере (bind вернул ошибку %d, %s) - - Connect through socks proxy - Подключаться через socks прокси - - - Allow DNS lookups for -addnode, -seednode and -connect Разрешить поиск в DNS для -addnode, -seednode и -connect - Loading addresses... Загрузка адресов... - Error loading wallet.dat: Wallet corrupted Ошибка загрузки wallet.dat: Бумажник поврежден - Error loading wallet.dat: Wallet requires newer version of Myriadcoin Ошибка загрузки wallet.dat: бумажник требует более новую версию Myriadcoin - Wallet needed to be rewritten: restart Myriadcoin to complete Необходимо перезаписать бумажник, перезапустите Myriadcoin для завершения операции. - Error loading wallet.dat Ошибка при загрузке wallet.dat - Invalid -proxy address: '%s' Неверный адрес -proxy: '%s' - Unknown network specified in -onlynet: '%s' В параметре -onlynet указана неизвестная сеть: '%s' - Unknown -socks proxy version requested: %i В параметре -socks запрошена неизвестная версия: %i - Cannot resolve -bind address: '%s' Не удаётся разрешить адрес в параметре -bind: '%s' - Cannot resolve -externalip address: '%s' Не удаётся разрешить адрес в параметре -externalip: '%s' - Invalid amount for -paytxfee=<amount>: '%s' - Неверное количество в параметре -paytxfee=<кол-во>: '%s' + Неверная сумма в параметре -paytxfee=<кол-во>: '%s' - Invalid amount - Неверное количество + Неверная сумма - Insufficient funds Недостаточно монет - Loading block index... Загрузка индекса блоков... - Add a node to connect to and attempt to keep the connection open Добавить узел для подключения и пытаться поддерживать соединение открытым - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - Невозможно привязаться к %s на этом компьютере. Возможно, Myriadcoin уже работает. - - - - Fee per KB to add to transactions you send - Комиссия на килобайт, добавляемая к вашим транзакциям - - - Loading wallet... Загрузка бумажника... - Cannot downgrade wallet Не удаётся понизить версию бумажника - Cannot write default address Не удаётся записать адрес по умолчанию - Rescanning... Сканирование... - Done loading Загрузка завершена - To use the %s option Чтобы использовать опцию %s - Error Ошибка - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_sah.ts b/src/qt/locale/bitcoin_sah.ts new file mode 100644 index 00000000..a905752f --- /dev/null +++ b/src/qt/locale/bitcoin_sah.ts @@ -0,0 +1,3368 @@ + + + AboutDialog + + About Myriadcoin Core + + + + <b>Myriadcoin Core</b> version + + + + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. + + + + Copyright + + + + The Myriadcoin Core developers + + + + (%1-bit) + + + + + AddressBookPage + + Double-click to edit address or label + Аадырыскын уларытаргар иккитэ баттаа + + + Create a new address + + + + &New + + + + Copy the currently selected address to the system clipboard + + + + &Copy + + + + C&lose + + + + &Copy Address + + + + Delete the currently selected address from the list + + + + Export the data in the current tab to a file + + + + &Export + + + + &Delete + + + + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + + Copy &Label + + + + &Edit + + + + Export Address List + + + + Comma separated file (*.csv) + + + + Exporting Failed + + + + There was an error trying to save the address list to %1. + + + + + AddressTableModel + + Label + + + + Address + + + + (no label) + + + + + AskPassphraseDialog + + Passphrase Dialog + + + + Enter passphrase + + + + New passphrase + + + + Repeat new passphrase + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + + + + Encrypt wallet + + + + This operation needs your wallet passphrase to unlock the wallet. + + + + Unlock wallet + + + + This operation needs your wallet passphrase to decrypt the wallet. + + + + Decrypt wallet + + + + Change passphrase + + + + Enter the old and new passphrase to the wallet. + + + + Confirm wallet encryption + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! + + + + Are you sure you wish to encrypt your wallet? + + + + 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. + + + + Warning: The Caps Lock key is on! + + + + Wallet encrypted + + + + Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. + + + + Wallet encryption failed + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + + + + The supplied passphrases do not match. + + + + Wallet unlock failed + + + + The passphrase entered for the wallet decryption was incorrect. + + + + Wallet decryption failed + + + + Wallet passphrase was successfully changed. + + + + + BitcoinGUI + + Sign &message... + + + + Synchronizing with network... + + + + &Overview + + + + Node + + + + Show general overview of wallet + + + + &Transactions + + + + Browse transaction history + + + + E&xit + + + + Quit application + + + + Show information about Myriadcoin + + + + About &Qt + + + + Show information about Qt + + + + &Options... + + + + &Encrypt Wallet... + + + + &Backup Wallet... + + + + &Change Passphrase... + + + + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + + Importing blocks from disk... + + + + Reindexing blocks on disk... + + + + Send coins to a Myriadcoin address + + + + Modify configuration options for Myriadcoin + + + + Backup wallet to another location + + + + Change the passphrase used for wallet encryption + + + + &Debug window + + + + Open debugging and diagnostic console + + + + &Verify message... + + + + Myriadcoin + + + + Wallet + + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your Myriadcoin addresses to prove you own them + + + + Verify messages to ensure they were signed with specified Myriadcoin addresses + + + + &File + + + + &Settings + + + + &Help + + + + Tabs toolbar + + + + [testnet] + + + + Myriadcoin Core + + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + + Myriadcoin client + + + + %n active connection(s) to Myriadcoin network + + + + No block source available... + + + + Processed %1 of %2 (estimated) blocks of transaction history. + + + + Processed %1 blocks of transaction history. + + + + %n hour(s) + + + + %n day(s) + + + + %n week(s) + + + + %1 and %2 + + + + %n year(s) + + + + %1 behind + + + + Last received block was generated %1 ago. + + + + Transactions after this will not yet be visible. + + + + Error + + + + Warning + + + + Information + + + + Up to date + + + + Catching up... + + + + Sent transaction + + + + Incoming transaction + + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + A fatal error occurred. Myriadcoin can no longer continue safely and will quit. + + + + + ClientModel + + Network Alert + + + + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + + + + Address + + + + Date + + + + Confirmations + + + + Confirmed + + + + Priority + + + + Copy address + + + + Copy label + + + + Copy amount + + + + Copy transaction ID + + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + + + + Dust + + + + yes + + + + no + + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + + + + change from %1 (%2) + + + + (change) + + + + + EditAddressDialog + + Edit Address + + + + &Label + + + + The label associated with this address list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + + + + &Address + + + + New receiving address + + + + New sending address + + + + Edit receiving address + + + + Edit sending address + + + + The entered address "%1" is already in the address book. + + + + The entered address "%1" is not a valid Myriadcoin address. + + + + Could not unlock wallet. + + + + New key generation failed. + + + + + FreespaceChecker + + A new data directory will be created. + + + + name + + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core + + + + version + + + + Usage: + + + + command-line options + + + + UI options + + + + Set language, for example "de_DE" (default: system locale) + + + + Start minimized + + + + Set SSL root certificates for payment request (default: -system-) + + + + Show splash screen on startup (default: 1) + + + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + + + + Error: Specified data directory "%1" can not be created. + + + + Error + + + + GB of free space available + + + + (of %1GB needed) + + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open + + + + + OptionsDialog + + Options + + + + &Main + + + + Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. + + + + Pay transaction &fee + + + + Automatically start Myriadcoin after logging in to the system. + + + + &Start Myriadcoin on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + + Reset all client options to default. + + + + &Reset Options + + + + &Network + + + + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. + + + + Map port using &UPnP + + + + Proxy &IP: + + + + &Port: + + + + Port of the proxy (e.g. 9050) + + + + SOCKS &Version: + + + + SOCKS version of the proxy (e.g. 5) + + + + &Window + + + + Show only a tray icon after minimizing the window. + + + + &Minimize to the tray instead of the taskbar + + + + Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. + + + + M&inimize on close + + + + &Display + + + + User Interface &language: + + + + The user interface language can be set here. This setting will take effect after restarting Myriadcoin. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show Myriadcoin addresses in the transaction list or not. + + + + &Display addresses in transaction list + + + + Whether to show coin control features or not. + + + + &OK + + + + &Cancel + + + + default + + + + none + + + + Confirm options reset + + + + Client restart required to activate changes. + + + + Client will be shutdown, do you want to proceed? + + + + This change would require a client restart. + + + + The supplied proxy address is invalid. + + + + + OverviewPage + + Form + + + + The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. + + + + Wallet + + + + Available: + + + + Your current spendable balance + + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + + + + Immature: + + + + Mined balance that has not yet matured + + + + Total: + + + + Your current total balance + + + + <b>Recent transactions</b> + + + + out of sync + + + + + PaymentServer + + URI handling + + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start myriadcoin: click-to-pay handler + + + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + + + + Network request error + + + + + QObject + + Myriadcoin + + + + Error: Specified data directory "%1" does not exist. + + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + + + + Error: Invalid combination of -regtest and -testnet. + + + + Myriadcoin Core didn't yet exit safely... + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + + QRImageWidget + + &Save Image... + + + + &Copy Image + + + + Save QR Code + + + + PNG Image (*.png) + + + + + RPCConsole + + Client name + + + + N/A + + + + Client version + + + + &Information + + + + Debug window + + + + General + + + + Using OpenSSL version + + + + Startup time + + + + Network + + + + Name + + + + Number of connections + + + + Block chain + + + + Current number of blocks + + + + Estimated total blocks + + + + Last block time + + + + &Open + + + + &Console + + + + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + + Build date + + + + Debug log file + + + + Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the Myriadcoin RPC console. + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + Type <b>help</b> for an overview of available commands. + + + + %1 B + + + + %1 KB + + + + %1 MB + + + + %1 GB + + + + %1 m + + + + %1 h + + + + %1 h %2 m + + + + + ReceiveCoinsDialog + + &Amount: + + + + &Label: + + + + &Message: + + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + + + + Clear + + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + + + + Remove the selected entries from the list + + + + Remove + + + + Copy label + + + + Copy message + + + + Copy amount + + + + + ReceiveRequestDialog + + QR Code + + + + Copy &URI + + + + Copy &Address + + + + &Save Image... + + + + Request payment to %1 + + + + Payment information + + + + URI + + + + Address + + + + Amount + + + + Label + + + + Message + + + + Resulting URI too long, try to reduce the text for label / message. + + + + Error encoding URI into QR Code. + + + + + RecentRequestsTableModel + + Date + + + + Label + + + + Message + + + + Amount + + + + (no label) + + + + (no message) + + + + (no amount) + + + + + SendCoinsDialog + + Send Coins + + + + Coin Control Features + + + + Inputs... + + + + automatically selected + + + + Insufficient funds! + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + + Send to multiple recipients at once + + + + Add &Recipient + + + + Clear all fields of the form. + + + + Clear &All + + + + Balance: + + + + Confirm the send action + + + + S&end + + + + Confirm send coins + + + + %1 to %2 + + + + Copy quantity + + + + Copy amount + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + + + + or + + + + The recipient address is not valid, please recheck. + + + + The amount to pay must be larger than 0. + + + + The amount exceeds your balance. + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + Duplicate address found, can only send to each address once per send operation. + + + + Transaction creation failed! + + + + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + + + + (no label) + + + + Warning: Unknown change address + + + + Are you sure you want to send? + + + + added as transaction fee + + + + Payment request expired + + + + Invalid payment address %1 + + + + + SendCoinsEntry + + A&mount: + + + + Pay &To: + + + + The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Enter a label for this address to add it to your address book + + + + &Label: + + + + Choose previously used address + + + + This is a normal payment. + + + + Alt+A + + + + Paste address from clipboard + + + + Alt+P + + + + Remove this entry + + + + Message: + + + + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. + + + + + SignVerifyMessageDialog + + Signatures - Sign / Verify a Message + + + + &Sign Message + + + + You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. + + + + The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Choose previously used address + + + + Alt+A + + + + Paste address from clipboard + + + + Alt+P + + + + Enter the message you want to sign here + + + + Signature + + + + Copy the current signature to the system clipboard + + + + Sign the message to prove you own this Myriadcoin address + + + + Sign &Message + + + + Reset all sign message fields + + + + Clear &All + + + + &Verify Message + + + + Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. + + + + The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Verify the message to ensure it was signed with the specified Myriadcoin address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Click "Sign Message" to generate signature + + + + The entered address is invalid. + + + + Please check the address and try again. + + + + The entered address does not refer to a key. + + + + Wallet unlock was cancelled. + + + + Private key for the entered address is not available. + + + + Message signing failed. + + + + Message signed. + + + + The signature could not be decoded. + + + + Please check the signature and try again. + + + + The signature did not match the message digest. + + + + Message verification failed. + + + + Message verified. + + + + + SplashScreen + + Myriadcoin Core + + + + The Myriadcoin Core developers + + + + [testnet] + + + + + TrafficGraphWidget + + KB/s + + + + + TransactionDesc + + Open until %1 + + + + conflicted + + + + %1/offline + + + + %1/unconfirmed + + + + %1 confirmations + + + + Status + + + + , broadcast through %n node(s) + + + + Date + + + + Source + + + + Generated + + + + From + + + + To + + + + own address + + + + label + + + + Credit + + + + matures in %n more block(s) + + + + not accepted + + + + Debit + + + + Transaction fee + + + + Net amount + + + + Message + + + + Comment + + + + Transaction ID + + + + Merchant + + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + Debug information + + + + Transaction + + + + Inputs + + + + Amount + + + + true + + + + false + + + + , has not been successfully broadcast yet + + + + Open for %n more block(s) + + + + unknown + + + + + TransactionDescDialog + + Transaction details + + + + This pane shows a detailed description of the transaction + + + + + TransactionTableModel + + Date + + + + Type + + + + Address + + + + Amount + + + + Immature (%1 confirmations, will be available after %2) + + + + Open for %n more block(s) + + + + Open until %1 + + + + Confirmed (%1 confirmations) + + + + This block was not received by any other nodes and will probably not be accepted! + + + + Generated but not accepted + + + + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + + Received with + + + + Received from + + + + Sent to + + + + Payment to yourself + + + + Mined + + + + (n/a) + + + + Transaction status. Hover over this field to show number of confirmations. + + + + Date and time that the transaction was received. + + + + Type of transaction. + + + + Destination address of transaction. + + + + Amount removed from or added to balance. + + + + + TransactionView + + All + + + + Today + + + + This week + + + + This month + + + + Last month + + + + This year + + + + Range... + + + + Received with + + + + Sent to + + + + To yourself + + + + Mined + + + + Other + + + + Enter address or label to search + + + + Min amount + + + + Copy address + + + + Copy label + + + + Copy amount + + + + Copy transaction ID + + + + Edit label + + + + Show transaction details + + + + Export Transaction History + + + + Exporting Failed + + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + + + + The transaction history was successfully saved to %1. + + + + Comma separated file (*.csv) + + + + Confirmed + + + + Date + + + + Type + + + + Label + + + + Address + + + + Amount + + + + ID + + + + Range: + + + + to + + + + + WalletFrame + + No wallet has been loaded. + + + + + WalletModel + + Send Coins + + + + + WalletView + + &Export + + + + Export the data in the current tab to a file + + + + Backup Wallet + + + + Wallet Data (*.dat) + + + + Backup Failed + + + + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. + + + + Backup Successful + + + + + bitcoin-core + + Usage: + + + + List commands + + + + Get help for a command + + + + Options: + + + + Specify configuration file (default: myriadcoin.conf) + + + + Specify pid file (default: myriadcoind.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 8333 or testnet: 18333) + + + + Maintain at most <n> connections to peers (default: 125) + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + Specify your own public address + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) + + + + Accept command line and JSON-RPC commands + + + + Myriadcoin Core RPC client version + + + + Run in the background as a daemon and accept commands + + + + Use the test network + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=myriadcoinrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + Bind to given address and always listen on it. Use [host]:port notation for IPv6 + + + + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) + + + + Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + + + + This is a pre-release test build - use at your own risk - do not use for mining or merchant applications + + + + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. + + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + Myriadcoin Core Daemon + + + + Block creation options: + + + + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + + Connect only to the specified node(s) + + + + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + + Corrupted block database detected + + + + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + Do not load the wallet and disable wallet RPC calls + + + + Do you want to rebuild the block database now? + + + + Error initializing block database + + + + Error initializing wallet database environment %s! + + + + Error loading block database + + + + Error opening block database + + + + Error: Disk space is low! + + + + Error: Wallet locked, unable to create transaction! + + + + Error: system error: + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + Failed to read block info + + + + Failed to read block + + + + Failed to sync block index + + + + Failed to write block index + + + + Failed to write block info + + + + Failed to write block + + + + Failed to write file info + + + + Failed to write to coin database + + + + Failed to write transaction index + + + + Failed to write undo data + + + + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + + Find peers using DNS lookup (default: 1 unless -connect) + + + + Force safe mode (default: 0) + + + + Generate coins (default: 0) + + + + How many blocks to check at startup (default: 288, 0 = all) + + + + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' + + + + Not enough file descriptors available. + + + + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + + Rebuild block chain index from current blk000??.dat files + + + + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + + Set the number of threads to service RPC calls (default: 4) + + + + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + + Verifying blocks... + + + + Verifying wallet... + + + + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + + + + Imports blocks from external blk000??.dat file + + + + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + + + + Information + + + + Invalid amount for -minrelaytxfee=<amount>: '%s' + + + + Invalid amount for -mintxfee=<amount>: '%s' + + + + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + + Maintain a full transaction index (default: 0) + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + Only accept block chain matching built-in checkpoints (default: 1) + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + Print block on startup, if found in block index + + + + Print block tree on startup (default: 0) + + + + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + + + + SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + Send command to Myriadcoin Core + + + + Send trace/debug info to console instead of debug.log file + + + + Set minimum block size in bytes (default: 0) + + + + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + Signing transaction failed + + + + Specify connection timeout in milliseconds (default: 5000) + + + + Start Myriadcoin Core Daemon + + + + System error: + + + + Transaction amount too small + + + + Transaction amounts must be positive + + + + Transaction too large + + + + Use UPnP to map the listening port (default: 0) + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + Username for JSON-RPC connections + + + + Warning + + + + Warning: This version is obsolete, upgrade required! + + + + Zapping all transactions from wallet... + + + + on startup + + + + version + + + + wallet.dat corrupt, salvage failed + + + + Password for JSON-RPC connections + + + + Allow JSON-RPC connections from specified IP address + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + Upgrade wallet to latest format + + + + Set key pool size to <n> (default: 100) + + + + Rescan the block chain for missing wallet transactions + + + + Use OpenSSL (https) for JSON-RPC connections + + + + Server certificate file (default: server.cert) + + + + Server private key (default: server.pem) + + + + This help message + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + Loading addresses... + + + + Error loading wallet.dat: Wallet corrupted + + + + Error loading wallet.dat: Wallet requires newer version of Myriadcoin + + + + Wallet needed to be rewritten: restart Myriadcoin to complete + + + + Error loading wallet.dat + + + + Invalid -proxy address: '%s' + + + + Unknown network specified in -onlynet: '%s' + + + + Unknown -socks proxy version requested: %i + + + + Cannot resolve -bind address: '%s' + + + + Cannot resolve -externalip address: '%s' + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + Invalid amount + + + + Insufficient funds + + + + Loading block index... + + + + Add a node to connect to and attempt to keep the connection open + + + + Loading wallet... + + + + Cannot downgrade wallet + + + + Cannot write default address + + + + Rescanning... + + + + Done loading + + + + To use the %s option + + + + Error + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + \ No newline at end of file diff --git a/src/qt/locale/bitcoin_sk.ts b/src/qt/locale/bitcoin_sk.ts index 418bbc20..da2dd414 100644 --- a/src/qt/locale/bitcoin_sk.ts +++ b/src/qt/locale/bitcoin_sk.ts @@ -1,175 +1,151 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - O Myriadcoin + About Myriadcoin Core + O jadre Myriadcoin - - <b>Myriadcoin</b> version - <b>Myriadcoin</b> verzia + <b>Myriadcoin Core</b> version + Verzia <b>Bitcoin jadra</b> - This is experimental software. Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - + +Toto je experimentálny softvér. + +Distribuovaný pod MIT/X11 softvérovou licenciou, viď sprevádzajúci súbor COPYING alebo http://www.opensource.org/licenses/mit-license.php. + +Tento výrobok obsahuje sofvér, ktorý vyvynul OpenSSL Project pre použitie v OpenSSL Toolkit (http://www.openssl.org/) a kryptografický softvér napísaný Ericom Youngom (eay@cryptsoft.com) a UPnP softvér napísaný Thomasom Bernardom. - Copyright - + Autorské práva - - The Myriadcoin developers - + The Myriadcoin Core developers + Vývojári jadra Myriadcoin + + + (%1-bit) + (%1-bit) AddressBookPage - - Address Book - Adresár - - - Double-click to edit address or label Dvojklikom editovať adresu alebo popis - Create a new address Vytvoriť novú adresu - + &New + &Nové + + Copy the currently selected address to the system clipboard Kopírovať práve zvolenú adresu do systémového klipbordu - - &New Address - &Nová adresa + &Copy + &Kopírovať - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Toto sú Vaše Myriadcoin adresy pre prijímanie platieb. Môžete dať každému odosielateľovi inú rôznu adresu a tak udržiavať prehľad o platbách. + C&lose + Zatvoriť - &Copy Address &Kopírovať adresu - - Show &QR Code - Zobraz &QR Kód - - - - Sign a message to prove you own a Myriadcoin address - Podpísať správu a dokázať že vlastníte túto adresu - - - - Sign &Message - Podpísať &správu - - - Delete the currently selected address from the list - + Vymaž vybranú adresu zo zoznamu - Export the data in the current tab to a file Exportovať tento náhľad do súboru - &Export - + &Exportovať... - - Verify a message to ensure it was signed with a specified Myriadcoin address - - - - - &Verify Message - - - - &Delete &Zmazať - - These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - + Choose the address to send coins to + Zvoľte adresu kam poslať coins + + + Choose the address to receive coins with + Zvoľte adresu na ktorú prijať coins + + + C&hoose + Vybrať + + + Sending addresses + Adresa odoslania + + + Receiving addresses + Adresa prijatia + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + Toto sú Vaše Myriadcoin adresy pre posielanie platieb. Vždy skontrolujte množstvo a prijímaciu adresu pred poslaním coins. + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Toto sú vaše Myriadcoin adresy pre prijímanie platieb. Odporúča sa použiť novú prijímaciu adresu pre každú transakciu. - Copy &Label Kopírovať &popis - &Edit &Upraviť - - Send &Coins - + Export Address List + Exportovať zoznam adries - - Export Address Book Data - Exportovať dáta z adresára - - - Comma separated file (*.csv) Čiarkou oddelený súbor (*.csv) - - Error exporting - Chyba exportu. + Exporting Failed + Export zlyhal - - Could not write to file %1. - Nedalo sa zapisovať do súboru %1. + There was an error trying to save the address list to %1. + Nastala chyba pri pokuse uložiť zoznam adries do %1. AddressTableModel - Label Popis - Address Adresa - (no label) (bez popisu) @@ -177,140 +153,106 @@ This product includes software developed by the OpenSSL Project for use in the O AskPassphraseDialog - Passphrase Dialog - + Dialóg hesla - Enter passphrase Zadajte heslo - New passphrase Nové heslo - Repeat new passphrase Zopakujte nové heslo - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. Zadajte nové heslo k peňaženke.<br/>Prosím použite heslo s dĺžkou aspon <b>10 alebo viac náhodných znakov</b>, alebo <b>8 alebo viac slov</b>. - Encrypt wallet Zašifrovať peňaženku - This operation needs your wallet passphrase to unlock the wallet. Táto operácia potrebuje heslo k vašej peňaženke aby ju mohla dešifrovať. - Unlock wallet Odomknúť peňaženku - This operation needs your wallet passphrase to decrypt the wallet. Táto operácia potrebuje heslo k vašej peňaženke na dešifrovanie peňaženky. - Decrypt wallet Dešifrovať peňaženku - Change passphrase Zmena hesla - Enter the old and new passphrase to the wallet. Zadajte staré a nové heslo k peňaženke. - Confirm wallet encryption Potvrďte šifrovanie peňaženky - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! Varovanie: Ak zašifrujete peňaženku a stratíte heslo, <b>STRATÍTE VŠETKY VAŠE MYRIADCOINY</b>!⏎ - Are you sure you wish to encrypt your wallet? Ste si istí, že si želáte zašifrovať peňaženku? - 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. - + DÔLEŽITÉ: Všetky doterajšie záložné kópie peňaženky ktoré ste zhotovili by mali byť nahradené novým zašifrovaným súborom s peňaženkou. Z bezpečnostných dôvodov sa predchádzajúce kópie nezašifrovanej peňaženky stanú neužitočné keď začnete používať novú zašifrovanú peňaženku. - - Warning: The Caps Lock key is on! Varovanie: Caps Lock je zapnutý - - Wallet encrypted Peňaženka zašifrovaná - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. - Myriadcoin sa teraz ukončí pre dokončenie procesu šifrovania. Pamätaj že šifrovanie peňaženky Ťa nemôže úplne ochrániť pred kráďežou myriadcoinov pomocou škodlivého software. + Myriadcoin sa teraz ukončí pre dokončenie procesu šifrovania. Pamätaj že šifrovanie peňaženky Ťa nemôže úplne ochrániť pred kráďežou bitcoinov pomocou škodlivého software. - - - - Wallet encryption failed Šifrovanie peňaženky zlyhalo - Wallet encryption failed due to an internal error. Your wallet was not encrypted. Šifrovanie peňaženky zlyhalo kôli internej chybe. Vaša peňaženka nebola zašifrovaná. - - The supplied passphrases do not match. Zadané heslá nesúhlasia. - Wallet unlock failed Odomykanie peňaženky zlyhalo - - - The passphrase entered for the wallet decryption was incorrect. Zadané heslo pre dešifrovanie peňaženky bolo nesprávne. - Wallet decryption failed Zlyhalo šifrovanie peňaženky. - Wallet passphrase was successfully changed. Heslo k peňaženke bolo úspešne zmenené. @@ -318,319 +260,286 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - Sign &message... Podpísať &správu... - Synchronizing with network... Synchronizácia so sieťou... - &Overview &Prehľad - + Node + Uzol + + Show general overview of wallet Zobraziť celkový prehľad o peňaženke - &Transactions &Transakcie - Browse transaction history Prechádzať históriu transakcií - - Edit the list of stored addresses and labels - Editovať zoznam uložených adries a popisov - - - - Show the list of addresses for receiving payments - Zobraziť zoznam adries pre prijímanie platieb. - - - E&xit U&končiť - Quit application Ukončiť program - Show information about Myriadcoin Zobraziť informácie o Myriadcoin - About &Qt O &Qt - Show information about Qt Zobrazit informácie o Qt - &Options... &Možnosti... - &Encrypt Wallet... &Zašifrovať Peňaženku... - &Backup Wallet... &Backup peňaženku... - &Change Passphrase... &Zmena Hesla... - + &Sending addresses... + Posielajúca adresa ... + + + &Receiving addresses... + Prijímajúca adresa... + + + Open &URI... + Otvoriť &URI... + + Importing blocks from disk... - + Importujem bloky z disku... - Reindexing blocks on disk... - + Preindexúvam bloky na disku... - Send coins to a Myriadcoin address Poslať myriadcoins na adresu - Modify configuration options for Myriadcoin - Upraviť možnosti nastavenia pre myriadcoin + Upraviť možnosti nastavenia pre bitcoin - Backup wallet to another location Zálohovať peňaženku na iné miesto - Change the passphrase used for wallet encryption Zmeniť heslo použité na šifrovanie peňaženky - &Debug window &Okno pre ladenie - Open debugging and diagnostic console Otvor konzolu pre ladenie a diagnostiku - &Verify message... - + Overiť správu - - Myriadcoin - + Myriadcoin - Wallet Peňaženka - &Send - + &Odoslať - &Receive - + &Prijať - - &Addresses - - - - - &About Myriadcoin - &O Myriadcoin - - - &Show / Hide - + Zobraziť / skryť - Show or hide the main Window - + Zobraziť alebo skryť hlavné okno - Encrypt the private keys that belong to your wallet - + Zašifruj súkromné kľúče ktoré patria do vašej peňaženky - Sign messages with your Myriadcoin addresses to prove you own them - + Podpísať správu s vašou adresou Myriadcoin aby ste preukázali že ju vlastníte - Verify messages to ensure they were signed with specified Myriadcoin addresses - + Overiť či správa bola podpísaná uvedenou Myriadcoin adresou - &File &Súbor - &Settings &Nastavenia - &Help &Pomoc - Tabs toolbar Lišta záložiek - - [testnet] [testovacia sieť] - + Myriadcoin Core + Jadro Myriadcoin + + + Request payments (generates QR codes and myriadcoin: URIs) + Vyžiadať platbu (vygeneruje QR kód a myriadcoin: URI) + + + &About Myriadcoin Core + O jadre Myriadcoin + + + Show the list of used sending addresses and labels + Zobraziť zoznam použitých adries odosielateľa a ich popisy + + + Show the list of used receiving addresses and labels + Zobraziť zoznam použitých prijímacích adries a ich popisov + + + Open a myriadcoin: URI or payment request + Otvoriť myriadcoin URI alebo výzvu k platbe + + + &Command-line options + Možnosti príkazového riadku + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + Zobraziť pomocnú správu od Myriadcoin Jadra pre získanie zoznamu dostupných možností príkazového riadku + + Myriadcoin client Myriadcoin klient - %n active connection(s) to Myriadcoin network %n aktívne spojenie v Myriadcoin sieti%n aktívne spojenia v Myriadcoin sieti%n aktívnych spojení v Bitconi sieti - No block source available... - + Nedostupný zdroj blokov... - Processed %1 of %2 (estimated) blocks of transaction history. - + Spracovaných %1 z %2 (odhadovaných) blokov transakčnej histórie. - Processed %1 blocks of transaction history. - + Spracovaných %1 blokov transakčnej histórie. - %n hour(s) - + %n hodina%n hodiny%n hodín - %n day(s) - + %n deň%n dni%n dní - %n week(s) - + %n týždeň%n týždne%n týždňov + + + %1 and %2 + %1 a %2 + + + %n year(s) + %%d)%n rokov - %1 behind - + %1 pozadu - Last received block was generated %1 ago. - + Posledný prijatý blok bol vygenerovaný pred %1. - Transactions after this will not yet be visible. - + Transakcie potom nebudú ešte viditeľné. - Error - + Chyba - Warning - + Upozornenie - Information - + Informácia - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - Up to date Aktualizovaný - Catching up... Sťahujem... - - Confirm transaction fee - Potvrď poplatok za transakciu. - - - Sent transaction Odoslané transakcie - Incoming transaction Prijaté transakcie - Date: %1 Amount: %2 Type: %3 @@ -642,1186 +551,1735 @@ Typ: %3 Adresa: %4 - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> Peňaženka je <b>zašifrovaná</b> a momentálne <b>odomknutá</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> Peňaženka je <b>zašifrovaná</b> a momentálne <b>zamknutá</b> - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. - + Vyskytla sa neblahá chyba. Myriadcoin nemôže daľej bezpečne pokračovať a vypne sa. ClientModel - Network Alert - + Výstraha siete + + + + CoinControlDialog + + Coin Control Address Selection + Coin Control výber adresy + + + Quantity: + Množstvo: + + + Bytes: + Bajtov: + + + Amount: + Suma: + + + Priority: + Priorita: + + + Fee: + Poplatok: + + + Low Output: + Malá hodnota na výstupe: + + + After Fee: + Po poplatku: + + + Change: + Zmena: + + + (un)select all + (ne)vybrať všetko + + + Tree mode + Stromový režim + + + List mode + Zoznamový režim + + + Amount + Suma + + + Address + Adresa + + + Date + Dátum + + + Confirmations + Potvrdenia + + + Confirmed + Potvrdené + + + Priority + Priorita + + + Copy address + Kopírovať adresu + + + Copy label + Kopírovať popis + + + Copy amount + Kopírovať sumu + + + Copy transaction ID + Kopírovať ID transakcie + + + Lock unspent + Uzamknúť neminuté + + + Unlock unspent + Odomknúť neminuté + + + Copy quantity + Kopírovať množstvo + + + Copy fee + Kopírovať poplatok + + + Copy after fee + Kopírovať za poplatok + + + Copy bytes + Kopírovať bajty + + + Copy priority + Kopírovať prioritu + + + Copy low output + Kopírovať malý výstup. + + + Copy change + Kopírovať zmenu + + + highest + najvyššie + + + higher + vyššie + + + high + vysoké + + + medium-high + stredne vysoké + + + medium + stredné + + + low-medium + stredne nízke + + + low + nízke + + + lower + nižšie + + + lowest + najnižšie + + + (%1 locked) + (%1 zamknutých) + + + none + žiadne + + + Dust + Prach + + + yes + áno + + + no + nie + + + This label turns red, if the transaction size is greater than 1000 bytes. + Tento popis zčervená ak veľkosť transakcie presiahne 1000 bytov. + + + This means a fee of at least %1 per kB is required. + To znamená že požadovaný poplatok je aspoň %1 za kB. + + + Can vary +/- 1 byte per input. + Môže sa pohybovať +/- 1 bajt pre vstup. + + + Transactions with higher priority are more likely to get included into a block. + Transakcie s vysokou prioritou sa pravdepodobnejsie dostanú do bloku. + + + This label turns red, if the priority is smaller than "medium". + Tento popis zčervenie ak je priorita nižčia ako "medium". + + + This label turns red, if any recipient receives an amount smaller than %1. + Tento popis zčervenie ak ktorýkoľvek príjemca dostane sumu menšiu ako %1. + + + This means a fee of at least %1 is required. + To znamená že je požadovaný poplatok aspoň %1. + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + Sumy pod 0.546 násobkom minimálneho poplatku pre prenos sú považované za prach. + + + This label turns red, if the change is smaller than %1. + Tento popis zžervenie ak výdavok je menší než %1. + + + (no label) + (bez popisu) + + + change from %1 (%2) + zmena od %1 (%2) + + + (change) + (zmena) EditAddressDialog - Edit Address Upraviť adresu - &Label &Popis - - The label associated with this address book entry - Popis priradený k tomuto záznamu v adresári + The label associated with this address list entry + Popis tejto položký v zozname adries je prázdny + + + The address associated with this address list entry. This can only be modified for sending addresses. + Adresa spojená s týmto záznamom v adresári. Možno upravovať len pre odosielajúce adresy. - &Address &Adresa - - The address associated with this address book entry. This can only be modified for sending addresses. - Adresa spojená s týmto záznamom v adresári. Možno upravovať len pre odosielajúce adresy. - - - New receiving address Nová adresa pre prijímanie - New sending address Nová adresa pre odoslanie - Edit receiving address Upraviť prijímacie adresy - Edit sending address Upraviť odosielaciu adresu - The entered address "%1" is already in the address book. Vložená adresa "%1" sa už nachádza v adresári. - The entered address "%1" is not a valid Myriadcoin address. - Vložená adresa "%1" nieje platnou adresou myriadcoin. + Vložená adresa "%1" nieje platnou adresou bitcoin. - Could not unlock wallet. Nepodarilo sa odomknúť peňaženku. - New key generation failed. Generovanie nového kľúča zlyhalo. - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt - + A new data directory will be created. + Bude vytvorený nový dátový adresár. + + + name + názov + + + Directory already exists. Add %1 if you intend to create a new directory here. + Priečinok už existuje. Pridajte "%1" ak chcete vytvoriť nový priečinok tu. + + + Path already exists, and is not a directory. + Cesta už existuje a nie je to adresár. + + + Cannot create data directory here. + Tu nemôžem vytvoriť dátový adresár. + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + Jadro Myriadcoin - možnosti príkazového riadku + + + Myriadcoin Core + Jadro Myriadcoin - version verzia - Usage: Použitie: - command-line options - + voľby príkazového riadku - UI options UI možnosti - Set language, for example "de_DE" (default: system locale) - + Nastaviť jazyk, napríklad "sk_SK" (predvolené: systémový) - Start minimized Spustiť minimalizované - + Set SSL root certificates for payment request (default: -system-) + Nastaviť koreňový certifikát pre výzvy na platbu (prednastavené: -system-) + + Show splash screen on startup (default: 1) - + Zobraziť splash screen pri spustení (predvolené: 1) + + + Choose data directory on startup (default: 0) + Zvoľte dátový priečinok pri štarte (prednastavené: 0) + + + + Intro + + Welcome + Vitajte + + + Welcome to Myriadcoin Core. + Vitajte v jadre Myriadcoin. + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + Keďže spúštate program prvý krát, môžte si vybrať kde bude Myriadcoin Jadro ukladať svoje dáta. + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + Jadro Myriadcoin stiahne zo siete a uloží kópiu Myriadcoin blockchain. Aspoň %1GB dát bude uložených v tomto priečinku a časom porastie. Peňaženka bude tiež uložená v tomto priečinku. + + + Use the default data directory + Použiť predvolený dátový adresár + + + Use a custom data directory: + Použiť vlastný dátový adresár: + + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" can not be created. + Chyba: Predpísaný priečinok pre dáta "%1" nemôže byt vytvorený. + + + Error + Chyba + + + GB of free space available + GB dostupného voľného miesta + + + (of %1GB needed) + (z %1GB potrebných) + + + + OpenURIDialog + + Open URI + Otvoriť URI + + + Open payment request from URI or file + Otvoriť požiadavku na zaplatenie z URI alebo súboru + + + URI: + URI: + + + Select payment request file + Vyberte súbor s výzvou k platbe + + + Select payment request file to open + Vyberte ktorý súbor s výzvou k platbe otvoriť OptionsDialog - Options Možnosti - &Main &Hlavné - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. - + Voliteľný transakčný poplatok za kB ktorý pomôže rýchlemu spracovaniu transakcie. Väčšina transakcií má 1 kB. Poplatok 0.01 je odporúčaný. - Pay transaction &fee Zaplatiť transakčné &poplatky - Automatically start Myriadcoin after logging in to the system. Automaticky spustiť Myriadcoin po zapnutí počítača - &Start Myriadcoin on system login &Spustiť Myriadcoin pri spustení systému správy okien - + Size of &database cache + Veľkosť vyrovnávacej pamäti databázy + + + MB + MB + + + Number of script &verification threads + Počet skript overujucich vlákien + + + Connect to the Myriadcoin network through a SOCKS proxy. + Pripojiť k Myriadcoin sieti cez SOCKS proxy. + + + &Connect through SOCKS proxy (default proxy): + Pripojiť sa cez SOCKS proxy (predvolené proxy) + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + IP adresy proxy (napr. IPv4: 127.0.0.1 / IPv6: ::1) + + + 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 |. + URL tretích strán (napr. prehliadač blockchain) ktoré sa zobrazujú v záložke transakcií ako položky kontextového menu. %s v URL je nahradené hash-om transakcie. Viaceré URL sú oddelené zvislou čiarou |. + + + Third party transaction URLs + URL transakcií s tretími stranami + + + Active command-line options that override above options: + Aktévne možnosti príkazového riadku ktoré prepíšu možnosti vyššie: + + Reset all client options to default. - + Vynulovať všetky voľby klienta na predvolené. - &Reset Options - + Vynulovať voľby - &Network - + Sieť + + + (0 = auto, <0 = leave that many cores free) + (0 = auto, <0 = nechať toľko jadier voľných) + + + W&allet + Peňaženka + + + Expert + Expert + + + Enable coin &control features + Povoliť možnosti coin control + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + Ak vypnete míňanie nepotvrdeného výdavku tak výdavok z transakcie bude možné použiť až keď daná transakcia bude mať aspoň jedno potvrdenie. Toto má vplyv aj na výpočet vášho zostatku. + + + &Spend unconfirmed change + Minúť nepotvrdený výdavok - Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. Automaticky otvorit port pre Myriadcoin na routeri. Toto funguje len ak router podporuje UPnP a je táto podpora aktivovaná. - Map port using &UPnP Mapovať port pomocou &UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - Pripojiť do siete Myriadcoin cez SOCKS proxy (napr. keď sa pripájate cez Tor) - - - - &Connect through SOCKS proxy: - &Pripojiť cez SOCKS proxy: - - - Proxy &IP: - + Proxy &IP: - - IP address of the proxy (e.g. 127.0.0.1) - IP addresa proxy (napr. 127.0.0.1) - - - &Port: - + &Port: - Port of the proxy (e.g. 9050) Port proxy (napr. 9050) - SOCKS &Version: - + Verzia SOCKS: - SOCKS version of the proxy (e.g. 5) - + SOCKS verzia proxy (napr. 5) - &Window - + Okno - Show only a tray icon after minimizing the window. Zobraziť len ikonu na lište po minimalizovaní okna. - &Minimize to the tray instead of the taskbar Zobraziť len ikonu na lište po minimalizovaní okna. - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. Minimalizovat namiesto ukončenia aplikácie keď sa okno zavrie. Keď je zvolená táto možnosť, aplikácia sa zavrie len po zvolení Ukončiť v menu. - M&inimize on close M&inimalizovať pri zavretí - &Display &Displej - User Interface &language: - + Jazyk užívateľského rozhrania: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. - + Tu sa dá nastaviť jazyk užívateľského rozhrania. Toto nastavenie bude účinné po reštartovaní Myriadcoin. - &Unit to show amounts in: &Zobrazovať hodnoty v jednotkách: - Choose the default subdivision unit to show in the interface and when sending coins. - + Zvoľte ako deliť myriadcoin pri zobrazovaní pri platbách a užívateľskom rozhraní. - Whether to show Myriadcoin addresses in the transaction list or not. - + Či ukazovať Myriadcoin adresy v zozname transakcií alebo nie. - &Display addresses in transaction list &Zobraziť adresy zo zoznamu transakcií - + Whether to show coin control features or not. + Či zobrazovať možnosti "Coin control" alebo nie. + + &OK - + &OK - &Cancel - + Zrušiť - - &Apply - - - - default - + predvolené + + + none + žiadne - Confirm options reset - + Potvrdiť obnovenie možností - - Some settings may require a client restart to take effect. - + Client restart required to activate changes. + Reštart klienta potrebný pre aktivovanie zmien. - - Do you want to proceed? - + Client will be shutdown, do you want to proceed? + Klient bude vypnutý, chcete pokračovať? - - - Warning - Varovanie + This change would require a client restart. + Táto zmena by vyžadovala reštart klienta. - - - This setting will take effect after restarting Myriadcoin. - - - - The supplied proxy address is invalid. - + Zadaná proxy adresa je neplatná. OverviewPage - Form Forma - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. - + Zobrazené informácie môžu byť neaktuápne. Vaša peňaženka sa automaticky synchronizuje so sieťou Myriadcoin po nadviazaní spojenia ale tento proces ešte nieje ukončený. - - Balance: - Zostatok: - - - - Unconfirmed: - Nepotvrdené: - - - Wallet Peňaženka - + Available: + Disponibilné: + + + Your current spendable balance + Váš aktuálny disponibilný zostatok + + + Pending: + Čakajúce potvrdenie + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + Suma transakcií ktoré ešte neboli potvrdené a ešte sa nepočítajú do disponibilného zostatku + + Immature: - + Nezrelé: - Mined balance that has not yet matured - + Vytvorený zostatok ktorý ešte nedosiahol zrelosť + + + Total: + Celkovo: + + + Your current total balance + Váš súčasný celkový zostatok - <b>Recent transactions</b> <b>Nedávne transakcie</b> - - Your current balance - Váš súčasný zostatok - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - Suma transakcií ktoré ešte neboli potvrdené a nezapočítavaju sa do celkového zostatku. - - - - out of sync - + nesynchronizované PaymentServer - + URI handling + Spracovanie URI + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + URI sa nedá rozložiť! To môže byť spôsobené neplatou Myriadcoin adresou alebo zle upravenými vlastnosťami URI. + + + Requested payment amount of %1 is too small (considered dust). + Požadovaná platba sumy %1 je príliš malá (považovaná za prach). + + + Payment request error + Chyba pri vyžiadaní platby + + Cannot start myriadcoin: click-to-pay handler - + Nedá sa spustiť obslužný program myriadcoin: click-to-pay zaplatiť kliknutím + + + Net manager warning + Varovanie správcu siete + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + Vaše aktívne proxy nepodporuje SOCKS5, ktoré je potrebné pre vyzvu na zaplatenie cez proxy. + + + Payment request fetch URL is invalid: %1 + URL pre stiahnutie výzvy na zaplatenie je neplatné: %1 + + + Payment request file handling + Obsluha súboru s požiadavkou na platbu + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + Súbor s výzvou na zaplatenie sa nedá čítať alebo spracovať! To môže byť spôsobené aj neplatným súborom s výzvou. + + + Unverified payment requests to custom payment scripts are unsupported. + Program nepodporuje neoverené platobné výzvy na vlastná skripty. + + + Refund from %1 + Vrátenie z %1 + + + Error communicating with %1: %2 + Chyba komunikácie s %1: %2 + + + Payment request can not be parsed or processed! + Požiadavka na platbu nemôže byť analyzovaná alebo spracovaná! + + + Bad response from server %1 + Zlá odpoveď zo servera %1 + + + Payment acknowledged + Platba potvrdená + + + Network request error + Chyba požiadavky siete - QRCodeDialog + QObject - - QR Code Dialog - + Myriadcoin + Myriadcoin - - Request Payment - Vyžiadať platbu + Error: Specified data directory "%1" does not exist. + Chyba: Uvedený priečinok s dátami "%1" neexistuje. - - Amount: - Suma: + Error: Cannot parse configuration file: %1. Only use key=value syntax. + Chyba: Nedá sa rozlúštit súbor s nastaveniami: %1. Používajte výlučne kľúč=hodnota syntax. - - Label: - Popis: + Error: Invalid combination of -regtest and -testnet. + Chyba: Nesprávna kombinácia -regtest a -testnet. - - Message: - Správa: + Myriadcoin Core didn't yet exit safely... + Jadro Myriadcoin sa ešte úspešne nevyplo ... - - &Save As... - &Uložiť ako... + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Zadajte Myriadcoin adresu (napr. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + Uložiť obrázok... - - Error encoding URI into QR Code. - Chyba v zakódovaní URI do QR kódu + &Copy Image + Kopírovať obrázok - - The entered amount is invalid, please check. - - - - - Resulting URI too long, try to reduce the text for label / message. - Výsledné URI príliš dlhé, skráť text pre názov / správu. - - - Save QR Code Ukladanie QR kódu - - PNG Images (*.png) - PNG obrázky (*.png) + PNG Image (*.png) + PNG obrázok (*.png) RPCConsole - Client name Meno klienta - - - - - - - - - - N/A nie je k dispozícii - Client version Verzia klienta - &Information - + &Informácia + + + Debug window + Okno pre ladenie + + + General + Všeobecné - Using OpenSSL version - + Používa OpenSSL verziu - Startup time - + Čas spustenia - Network Sieť - + Name + Názov + + Number of connections Počet pripojení - - On testnet - Na testovacej sieti - - - Block chain Reťazec blokov - Current number of blocks Aktuálny počet blokov - Estimated total blocks - + Očakávaných blokov celkovo - Last block time - + Čas posledného bloku - &Open - + &Otvoriť - - Command-line options - - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - - - - - &Show - - - - &Console - + &Konzola + + + &Network Traffic + Sieťová prevádzka + + + &Clear + &Vyčistiť + + + Totals + Celkovo + + + In: + Dnu: + + + Out: + Von: - Build date - + Dátum zostavenia - - Myriadcoin - Debug window - - - - - Myriadcoin Core - - - - Debug log file - + Súbor záznamu ladenia - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. - + Otvoriť Myriadcoin log súbor pre ladenie z aktuálneho dátového adresára. Toto môže trvať niekoľko sekúnd pre veľké súbory. - Clear console - + Vymazať konzolu - Welcome to the Myriadcoin RPC console. - + Vitajte v Myriadcoin RPC konzole. Baník, pyčo! - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - + Použi šipky hore a dolu pre navigáciu históriou a <b>Ctrl-L</b> pre vyčistenie obrazovky. - Type <b>help</b> for an overview of available commands. - + Napíš <b>help</b> pre prehľad dostupných príkazov. + + + %1 B + %1 B + + + %1 KB + %1 KB + + + %1 MB + %1 MB + + + %1 GB + %1 GB + + + %1 m + %1 m + + + %1 h + %1 h + + + %1 h %2 m + %1 h %2 m + + + + ReceiveCoinsDialog + + &Amount: + &Suma: + + + &Label: + &Popis: + + + &Message: + &Správa: + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + Znovu použiť jednu z už použitých adries pre prijímanie. Znovu používanie adries je sporná otázka bezpečnosti aj súkromia. Používajte to len v prípade ak znovu generujete výzvu na zaplatenie ktorú ste už vyrobili v minulosti. + + + R&euse an existing receiving address (not recommended) + Znovu použiť jestvujúcu prijímaciu adresu (neodporúča sa) + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + Pridať voliteľnú správu k výzve na zaplatenie, ktorá sa zobrazí keď bude výzva otvorená. Poznámka: Správa nebude poslaná s platbou cez sieť Myriadcoin. + + + An optional label to associate with the new receiving address. + Voliteľný popis ktorý sa pridá k tejto novej prijímajúcej adrese. + + + Use this form to request payments. All fields are <b>optional</b>. + Použite tento formulár pre vyžiadanie platby. Všetky polia sú <b>voliteľné</b>. + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + Voliteľná požadovaná suma. Nechajte prázdne alebo nulu ak nepožadujete určitú sumu. + + + Clear all fields of the form. + Vyčistiť všetky polia formulára. + + + Clear + Vyčistiť + + + Requested payments history + História vyžiadaných platieb + + + &Request payment + Vyžiadať platbu + + + Show the selected request (does the same as double clicking an entry) + Zobraz zvolenú požiadavku (urobí to isté ako dvoj-klik na záznam) + + + Show + Zobraziť + + + Remove the selected entries from the list + Odstrániť zvolené záznamy zo zoznamu + + + Remove + Odstrániť + + + Copy label + Kopírovať popis + + + Copy message + Kopírovať správu + + + Copy amount + Kopírovať sumu + + + + ReceiveRequestDialog + + QR Code + QR kód + + + Copy &URI + Kopírovať &URI + + + Copy &Address + Kopírovať adresu + + + &Save Image... + Uložiť obrázok... + + + Request payment to %1 + Vyžiadať platbu pre %1 + + + Payment information + Informácia o platbe + + + URI + URI + + + Address + Adresa + + + Amount + Suma + + + Label + Popis + + + Message + Správa + + + Resulting URI too long, try to reduce the text for label / message. + Výsledné URI príliš dlhé, skráť text pre názov / správu. + + + Error encoding URI into QR Code. + Chyba v zakódovaní URI do QR kódu + + + + RecentRequestsTableModel + + Date + Dátum + + + Label + Popis + + + Message + Správa + + + Amount + Suma + + + (no label) + (bez popisu) + + + (no message) + (žiadna správa) + + + (no amount) + (žiadna suma) SendCoinsDialog - - - - - - - - Send Coins - Poslať Myriadcoins + Poslať Bitcoins + + + Coin Control Features + Možnosti "Coin Control" + + + Inputs... + Vstupy... + + + automatically selected + automaticky vybrané + + + Insufficient funds! + Nedostatok prostriedkov! + + + Quantity: + Množstvo: + + + Bytes: + Bajtov: + + + Amount: + Suma: + + + Priority: + Priorita: + + + Fee: + Poplatok: + + + Low Output: + Malá hodnota na výstupe: + + + After Fee: + Po poplatku: + + + Change: + Zmena: + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + Ak aktivované ale adresa pre výdavok je prázdna alebo neplatná, výdavok bude poslaný na novovytvorenú adresu. + + + Custom change address + Vlastná adresa zmeny - Send to multiple recipients at once Poslať viacerým príjemcom naraz - Add &Recipient &Pridať príjemcu - - Remove all transaction fields - Odobrať všetky políčka transakcie + Clear all fields of the form. + Vyčistiť všetky polia formulára. - Clear &All Zmazať &všetko - Balance: Zostatok: - - 123.456 BTC - 123.456 BTC - - - Confirm the send action Potvrďte odoslanie - S&end &Odoslať - - <b>%1</b> to %2 (%3) - <b>%1</b> do %2 (%3) - - - Confirm send coins Potvrdiť odoslanie myriadcoins - - Are you sure you want to send %1? - Ste si istí, že chcete odoslať %1? + %1 to %2 + %1 do %2 - - and - a + Copy quantity + Kopírovať množstvo + + + Copy amount + Kopírovať sumu + + + Copy fee + Kopírovať poplatok + + + Copy after fee + Kopírovať za poplatok + + + Copy bytes + Kopírovať bajty + + + Copy priority + Kopírovať prioritu + + + Copy low output + Kopírovať nízky výstup + + + Copy change + Kopírovať zmenu + + + Total Amount %1 (= %2) + Celková suma %1 (= %2) + + + or + alebo - The recipient address is not valid, please recheck. Adresa príjemcu je neplatná, prosím, overte ju. - The amount to pay must be larger than 0. Suma na úhradu musí byť väčšia ako 0. - The amount exceeds your balance. Suma je vyššia ako Váš zostatok. - The total exceeds your balance when the %1 transaction fee is included. Suma celkom prevyšuje Váš zostatok ak sú započítané %1 transakčné poplatky. - Duplicate address found, can only send to each address once per send operation. Duplikát adresy objavený, je možné poslať na každú adresu len raz v jednej odchádzajúcej transakcii. - - Error: Transaction creation failed! - + Transaction creation failed! + Vytvorenie transakcie zlyhalo! - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Chyba: Transakcia bola odmietnutá. Toto sa môže stať ak niektoré z mincí vo vašej peňaženke boli už utratené, napríklad ak používaš kópiu wallet.dat a mince označené v druhej kópií neboli označené ako utratené v tejto. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Transakcia bola zamietnutá! Toto sa môže stať ak niektoré coins vo vašej peňaženke už boli minuté, ako keď použijete kópiu wallet.dat a coins boli minuté z kópie ale neoznačené ako minuté tu. + + + Warning: Invalid Myriadcoin address + Varovanie: Nesprávna Myriadcoin adresa + + + (no label) + (bez popisu) + + + Warning: Unknown change address + Varovanie: Neznáma adresa pre výdavok + + + Are you sure you want to send? + Určite to chcete odoslať? + + + added as transaction fee + pridané ako transakčný poplatok + + + Payment request expired + Vypršala platnosť požiadavky na platbu + + + Invalid payment address %1 + Neplatná adresa platby %1 SendCoinsEntry - - Form - Forma - - - A&mount: Su&ma: - Pay &To: Zapla&tiť: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - + Adresa na odoslanie platby (napr. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book Vložte popis pre túto adresu aby sa pridala do adresára - &Label: &Popis: - - Choose address from address book - Zvoľte adresu z adresára + Choose previously used address + Vybrať predtým použitú adresu + + + This is a normal payment. + Toto je normálna platba. - Alt+A Alt+A - Paste address from clipboard Vložiť adresu z klipbordu - Alt+P Alt+P - - Remove this recipient - Odstrániť tohto príjemcu + Remove this entry + Odstrániť túto položku - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Zadajte Myriadcoin adresu (napr. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + Správa: + + + This is a verified payment request. + Toto je overená výzva k platbe. + + + Enter a label for this address to add it to the list of used addresses + Vložte popis pre túto adresu aby sa uložila do zoznamu použitých adries + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + Správa ktorá bola pripojená k myriadcoin: URI a ktorá bude uložená s transakcou pre Vaše potreby. Poznámka: Táto správa nebude poslaná cez sieť Myriadcoin. + + + This is an unverified payment request. + Toto je neoverená výzva k platbe. + + + Pay To: + Platba pre: + + + Memo: + Poznámka: + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + Jadro Myriadcoin sa ukončuje... + + + Do not shut down the computer until this window disappears. + Nevypínajte počítač kým toto okno nezmizne. SignVerifyMessageDialog - Signatures - Sign / Verify a Message - + Podpisy - Podpísať / Overiť správu - &Sign Message &Podpísať Správu - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. Môžete podpísať správy svojou adresou a dokázať, že ju vlastníte. Buďte opatrní a podpíšte len prehlásenia s ktorými plne súhlasíte, nakoľko útoky typu "phishing" Vás môžu lákať k ich podpísaniu. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Zadajte Myriadcoin adresu (napr. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book - Zvoľte adresu z adresára + Choose previously used address + Vybrať predtým použitú adresu - - Alt+A Alt+A - Paste address from clipboard Vložte adresu z klipbordu - Alt+P Alt+P - Enter the message you want to sign here Sem vložte správu ktorú chcete podpísať - Signature - + Podpis - Copy the current signature to the system clipboard - + Kopírovať práve zvolenú adresu do systémového klipbordu - Sign the message to prove you own this Myriadcoin address Podpíšte správu aby ste dokázali že vlastníte túto adresu - Sign &Message - + Podpísať &správu - Reset all sign message fields - + Vynulovať všetky polia podpisu správy - - Clear &All Zmazať &všetko - &Verify Message - + Overiť správu... - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. - + Vložte podpisovaciu adresu, správu (uistite sa, že kopírujete ukončenia riadkov, medzery, odrážky, atď. presne) a podpis pod to na overenie adresy. Buďte opatrní a nečítajte ako podpísané viac než je v samotnej podpísanej správe a môžete sa tak vyhnúť podvodu mitm útokom. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Zadajte Myriadcoin adresu (napr. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address - + Overím správy sa uistiť že bola podpísaná označenou Myriadcoin adresou - Verify &Message - + Overiť správu - Reset all verify message fields - + Obnoviť všetky polia v overiť správu - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Zadajte Myriadcoin adresu (napr. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature Kliknite "Podpísať Správu" na získanie podpisu - - Enter Myriadcoin signature - - - - - The entered address is invalid. - + Zadaná adresa je neplatná. - - - - Please check the address and try again. - + Prosím skontrolujte adresu a skúste znova. - - The entered address does not refer to a key. - + Vložená adresa nezodpovedá žiadnemu kľúcu. - Wallet unlock was cancelled. - + Odomknutie peňaženky bolo zrušené. - Private key for the entered address is not available. - + Súkromný kľúč pre vložená adresu nieje k dispozícii. - Message signing failed. - + Podpísanie správy zlyhalo. - Message signed. - + Správa podpísaná. - The signature could not be decoded. - + Podpis nie je možné dekódovať. - - Please check the signature and try again. - + Prosím skontrolujte podpis a skúste znova. - The signature did not match the message digest. - + Podpis sa nezhoduje so zhrnutím správy - Message verification failed. - + Overenie správy zlyhalo. - Message verified. - + Správa overená. SplashScreen - - The Myriadcoin developers - + Myriadcoin Core + Jadro Myriadcoin + + + The Myriadcoin Core developers + Vývojári jadra Myriadcoin - [testnet] [testovacia sieť] + + TrafficGraphWidget + + KB/s + KB/s + + TransactionDesc - Open until %1 Otvorené do %1 - - %1/offline - + conflicted + sporné + + + %1/offline + %1/offline - %1/unconfirmed %1/nepotvrdené - %1 confirmations %1 potvrdení - Status Stav - , broadcast through %n node(s) - + ,,, vysielať cez %n nód - Date Dátum - Source - + Zdroj - Generated - + Vygenerované - - From od - - - To - + Pre - - own address - + vlastná adresa - label popis - - - - - Credit Kredit - matures in %n more block(s) - + Dospeje o %n blokovDospeje o %n blokovdospeje o %n blokov - not accepted neprijaté - - - - Debit Debet - Transaction fee Transakčný poplatok - Net amount Suma netto - Message Správa - Comment Komentár - Transaction ID ID transakcie - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - + Merchant + Kupec + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Vytvorené coins musia dospieť %1 blokov kým môžu byť minuté. Keď vytvoríte tento blok, bude rozoslaný do siete aby bol akceptovaný do reťaze blokov. Ak sa nedostane reťaze, jeho stav sa zmení na "zamietnutý" a nebude sa dať minúť. Toto sa môže občas stať ak iná nóda vytvorí blok približne v tom istom čase. - Debug information - + Ladiace informácie - Transaction Transakcie - Inputs - + Vstupy - Amount Suma - true - + pravda - false - + nepravda - , has not been successfully broadcast yet , ešte nebola úspešne odoslaná - Open for %n more block(s) - + Otvoriť pre %n viac blokOtvoriť pre %n viac blokov Otvoriť pre %n viac blokov - unknown neznámy @@ -1829,12 +2287,10 @@ Adresa: %4 TransactionDescDialog - Transaction details Detaily transakcie - This pane shows a detailed description of the transaction Táto časť obrazovky zobrazuje detailný popis transakcie @@ -1842,117 +2298,102 @@ Adresa: %4 TransactionTableModel - Date Dátum - Type Typ - Address Adresa - Amount Hodnota + + Immature (%1 confirmations, will be available after %2) + Nezrelé (%1 potvrdení, bude k dispozícii po %2) + - Open for %n more block(s) - + Otvorené pre ešte %1 blokOtvorené pre %n viac blokov Otvorené pre %n blokov - Open until %1 Otvorené do %1 - - Offline (%1 confirmations) - Offline (%1 potvrdení) - - - - Unconfirmed (%1 of %2 confirmations) - Nepotvrdené (%1 z %2 potvrdení) - - - Confirmed (%1 confirmations) Potvrdené (%1 potvrdení) - - - Mined balance will be available when it matures in %n more block(s) - - - This block was not received by any other nodes and will probably not be accepted! Ten blok nebol prijatý žiadnou inou nódou a pravdepodobne nebude akceptovaný! - Generated but not accepted Vypočítané ale neakceptované - + Offline + Offline + + + Unconfirmed + Nepotvrdené + + + Confirming (%1 of %2 recommended confirmations) + Potvrdzuje sa ( %1 z %2 odporúčaných potvrdení) + + + Conflicted + V rozpore + + Received with Prijaté s - Received from Prijaté od: - Sent to Odoslané na - Payment to yourself Platba sebe samému - Mined Vyfárané - (n/a) (n/a) - Transaction status. Hover over this field to show number of confirmations. Status transakcie. Pohybujte myšou nad týmto poľom a zjaví sa počet potvrdení. - Date and time that the transaction was received. Dátum a čas prijatia transakcie. - Type of transaction. Typ transakcie. - Destination address of transaction. Cieľová adresa transakcie. - Amount removed from or added to balance. Suma pridaná alebo odobraná k zostatku. @@ -1960,337 +2401,278 @@ Adresa: %4 TransactionView - - All Všetko - Today Dnes - This week Tento týždeň - This month Tento mesiac - Last month Minulý mesiac - This year Tento rok - Range... Rozsah... - Received with Prijaté s - Sent to Odoslané na - To yourself Samému sebe - Mined Vyfárané - Other Iné - Enter address or label to search Vložte adresu alebo popis pre vyhľadávanie - Min amount Min množstvo - Copy address Kopírovať adresu - Copy label Kopírovať popis - Copy amount Kopírovať sumu - Copy transaction ID - + Kopírovať ID transakcie - Edit label Editovať popis - Show transaction details - + Zobraziť podrobnosti transakcie - - Export Transaction Data - Exportovať transakčné dáta + Export Transaction History + Exportovať históriu transakcií + + + Exporting Failed + Export zlyhal + + + There was an error trying to save the transaction history to %1. + Vyskytla sa chyba pri pokuse o uloženie histórie transakcií do %1. + + + Exporting Successful + Export úspešný + + + The transaction history was successfully saved to %1. + História transakciá bola úspešne uložená do %1. - Comma separated file (*.csv) Čiarkou oddelovaný súbor (*.csv) - Confirmed Potvrdené - Date Dátum - Type Typ - Label Popis - Address Adresa - Amount Suma - ID ID - - Error exporting - Chyba exportu - - - - Could not write to file %1. - Nedalo sa zapisovať do súboru %1. - - - Range: Rozsah: - to do + + WalletFrame + + No wallet has been loaded. + Nie je načítaná peňaženka. + + WalletModel - Send Coins - Poslať Myriadcoins + Poslať Bitcoins WalletView - &Export - + &Exportovať... - Export the data in the current tab to a file Exportovať tento náhľad do súboru - Backup Wallet - + Zálohovať peňaženku - Wallet Data (*.dat) - + Údaje peňaženky (*.dat) - Backup Failed - + Záloha zlyhala - - There was an error trying to save the wallet data to the new location. - + There was an error trying to save the wallet data to %1. + Vyskytla sa chyba pri pokuse o uloženie dát peňaženky do %1. + + + The wallet data was successfully saved to %1. + Dáta peňaženky boli úspešne uložené do %1. - Backup Successful - - - - - The wallet data was successfully saved to the new location. - + Záloha úspešná bitcoin-core - - Myriadcoin version - Myriadcoin verzia - - - Usage: Použitie: - - Send command to -server or myriadcoind - Odoslať príkaz -server alebo myriadcoind - - - List commands Zoznam príkazov - Get help for a command Dostať pomoc pre príkaz - Options: Možnosti: - Specify configuration file (default: myriadcoin.conf) Určiť súbor s nastaveniami (predvolené: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) Určiť súbor pid (predvolené: myriadcoind.pid) - Specify data directory Určiť priečinok s dátami - - Set database cache size in megabytes (default: 25) - Veľkosť vyrovnávajúcej pamäte pre databázu v megabytoch (predvolené:25) - - - Listen for connections on <port> (default: 8333 or testnet: 18333) Načúvať spojeniam na <port> (prednastavené: 8333 alebo testovacia sieť: 18333) - Maintain at most <n> connections to peers (default: 125) Udržiavať maximálne <n> spojení (predvolené: 125) - Connect to a node to retrieve peer addresses, and disconnect - + Pripojiť sa k nóde, získať adresy ďaľších počítačov v sieti a odpojit sa. - Specify your own public address - + Určite vašu vlastnú verejnú adresu - Threshold for disconnecting misbehaving peers (default: 100) Hranica pre odpojenie zle sa správajúcich peerov (predvolené: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Počet sekúnd kedy sa zabráni zle sa správajúcim peerom znovupripojenie (predvolené: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s - + Vyskytla sa chyba pri nastavovaní RPC portu %u pre počúvanie na IPv4: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) Počúvať JSON-RPC spojeniam na <port> (predvolené: 8332 or testnet: 18332) - Accept command line and JSON-RPC commands Prijímať príkazy z príkazového riadku a JSON-RPC - + Myriadcoin Core RPC client version + Verzia RPC klienta Jadra Myriadcoin + + Run in the background as a daemon and accept commands Bežať na pozadí ako démon a prijímať príkazy - Use the test network Použiť testovaciu sieť - Accept connections from outside (default: 1 if no -proxy or -connect) - + Prijať spojenia zvonku (predvolené: 1 ak žiadne -proxy alebo -connect) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2302,615 +2684,701 @@ If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com - + %s, musíte nastaviť rpcpassword heslo v súbore nastavení: +%s +Odporúča sa používať nasledujúce náhodné heslo: +rpcuser=myriadcoinrpc +rpcpassword=%s +(nemusíte si pamätať toto heslo) +Užívateľské meno a heslo NESMÚ byť rovnaké. +Ak súbor neexistuje, vytvorte ho s prístupovým právom owner-readable-only čitateľné len pre majiteľa. +Tiež sa odporúča nastaviť alertnotify aby ste boli upozorňovaní na problémy; +napríklad: alertnotify=echo %%s | mail -s "Myriadcoin Výstraha" admin@foo.com + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + Prijateľlné šifry (prednastavené: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - + Vyskytla sa chyba pri nastavovaní RPC portu %u pre počúvanie na IPv6, vraciam sa späť ku IPv4: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 - + Spojiť s danou adresou a vždy na nej počúvať. Použite zápis [host]:port pre IPv6 - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. - + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + Priebežne obmedzuj transakcie bez poplatku na <n>*1000 bajtov za minútu (prednastavené: 15) + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + Vstúpiť do regresného testovacieho módu, ktorý používa špeciálnu reťaz v ktorej môžu byť bloky v okamihu vyriešené. Pre účely regresného testovania a vývoja aplikácie. + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + Vojsť do režimu regresného testovania, ktorý používa špeciálnu reťaz v ktorej môžu byť bloky v okamihu vyriešené. + + + Error: Listening for incoming connections failed (listen returned error %d) + Chyba: Zlyhalo počúvanie prichádzajúcich spojení (listen vrátil chybu %d) - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - + Transakcia bola zamietnutá! Toto sa môže stať ak niektoré coins vo vašej peňaženke už boli minuté, ako keď použijete kópiu wallet.dat a coins boli minuté z kópie ale neoznačené ako minuté tu. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! - + Chyba: Táto transakcia vyžaduje transakčný poplatok aspoň %s kvôli svojej sume, komplexite alebo použitiu nedávno prijatých prostriedkov. - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - + Vykonaj príkaz keď sa zmení transakcia peňaženky (%s v príkaze je nahradená TxID) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - + Fees smaller than this are considered zero fee (for transaction creation) (default: + Poplatky menšie než toto sa považujú za nulové (pre vytvorenie transakcie) (prednastavené: + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + Odložiť aktivitu databázy spoločnej pamäti do logu na disku každých <n> megabajtov (prednastavené: 100) + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + Ako dôkladne sú overované bloky -checkblocks (0-4, prednastavené: 3) + + + In this mode -genproclimit controls how many blocks are generated immediately. + V tomto režime -getproclimit kontroluje koľko blokov sa vytvorí okamžite. + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + Nastaviť počeť vlákien overujúcich skripty (%u až %d, 0 = auto, <0 = nechať toľkoto jadier voľných, prednastavené: %d) + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + Nastaviť obmedzenie pre procesor keď je zapnuté generovanie (-1 = bez obmedzenia, prednastavené: -1) - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications - + Toto je pred-testovacia verzia - použitie je na vlastné riziko - nepoužívajte na tvorbu myriadcoin ani obchodovanie. + + + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + Nepodarilo sa pripojiť na %s na tomto počítači. Myriadcoin Jadro je už pravdepodobne spustené. + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + Použite rozdielne SOCKS5 proxy pre dosiahnutie peer-ov cez Tor skryté služby (prednastavené: -proxy) - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Varovanie: -paytxfee je nastavené veľmi vysoko. Toto sú transakčné poplatky ktoré zaplatíte ak odošlete transakciu. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. - + Varovanie: Skontroluj či je na počítači nastavený správny čas a dátum. Ak sú hodiny nastavené nesprávne, Myriadcoin nebude správne pracovať. + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + Varovanie: Javí sa že sieť sieť úplne nesúhlasí! Niektorí mineri zjavne majú ťažkosti. + +The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + Varovanie: Zjavne sa úplne nezhodujeme s našimi peer-mi! Možno potrebujete prejsť na novšiu verziu alebo ostatné nódy potrebujú vyššiu verziu. - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - + Varovanie: chyba pri čítaní wallet.dad! Všetky kľúče sú čitateľné ale transakčné dáta alebo záznamy v adresári môžu byť nesprávne. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - + Varovanie: wallet.dat je poškodený, údaje úspešne získané! Pôvodný wallet.dat uložený ako wallet.{timestamp}.bak v %s; ak váš zostatok alebo transakcie niesu správne, mali by ste súbor obnoviť zo zálohy. + + + (default: 1) + (predvolené: 1) + + + (default: wallet.dat) + (predvolené: wallet.dat) + + + <category> can be: + <category> môže byť: - Attempt to recover private keys from a corrupt wallet.dat - + Pokus zachrániť súkromné kľúče z poškodeného wallet.dat + + + Myriadcoin Core Daemon + Démon Jadro Myriadcoin - Block creation options: - + Voľby vytvorenia bloku: + + + Clear list of wallet transactions (diagnostic tool; implies -rescan) + Vyčistiť zoznam transakcií peňaženky (diagnostický nástroj; zahŕňa -rescan) - Connect only to the specified node(s) Pripojiť sa len k určenej nóde - + Connect through SOCKS proxy + Pripojiť cez SOCKS proxy + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + Pripojiť ku JSON-RPC na <port> (prednastavené: 8332 alebo testnet: 18332) + + + Connection options: + Možnosti pripojenia: + + Corrupted block database detected - + Zistená poškodená databáza blokov + + + Debugging/Testing options: + Možnosti ladenia/testovania: + + + Disable safemode, override a real safe mode event (default: 0) + Vypnúť bezpečný režim, vypnúť udalosť skutočný bezpečný režim (prednastavené: 0) - Discover own IP address (default: 1 when listening and no -externalip) - + Zisti vlastnú IP adresu (predvolené: 1 pri počúvaní/listening a žiadnej -externalip) + + + Do not load the wallet and disable wallet RPC calls + Nenahrat peňaženku a zablokovať volania RPC. - Do you want to rebuild the block database now? - + Chcete znovu zostaviť databázu blokov? - Error initializing block database - + Chyba inicializácie databázy blokov - Error initializing wallet database environment %s! - + Chyba spustenia databázového prostredia peňaženky %s! - Error loading block database - + Chyba načítania databázy blokov - Error opening block database - + Chyba otvárania databázy blokov - Error: Disk space is low! - + Chyba: Málo miesta na disku! - Error: Wallet locked, unable to create transaction! - + Chyba: Peňaženka je zamknutá, nemôžem vytvoriť transakciu! - Error: system error: - + Chyba: systémová chyba: - Failed to listen on any port. Use -listen=0 if you want this. - + Chyba počúvania na ktoromkoľvek porte. Použi -listen=0 ak toto chcete. - Failed to read block info - + Zlyhalo čítanie info o bloku - Failed to read block - + Zlyhalo čítanie bloku - Failed to sync block index - + Zlyhalo synchronizovanie zoznamu blokov - Failed to write block index - + Zlyhalo zapisovanie do zoznamu blokov - Failed to write block info - + Zlyhal zápis info o bloku - Failed to write block - + Zlyhal zápis bloku - Failed to write file info - + Zlyhalo zapisovanie informácié o súbore - Failed to write to coin database - + Zlyhalo zapisovanie do databázy coins - Failed to write transaction index - + Zlyhal zápis zoznamu transakcií - Failed to write undo data - + Zlyhalo zapisovanie + + + Fee per kB to add to transactions you send + Poplatok za kB ktorý treba pridať k odoslanej transakcii + + + Fees smaller than this are considered zero fee (for relaying) (default: + Poplatky menšie než toto sa považujú za nulové (pre preposielanie) (prednastavené: - Find peers using DNS lookup (default: 1 unless -connect) - + Nájsť počítače v myriadcoin sieti použitím DNS vyhľadávania (predvolené: 1 okrem -connect) + + + Force safe mode (default: 0) + Vnútiť bezpečný režim (prenastavené: 0) - Generate coins (default: 0) - + Vytvárať mince (predvolené: 0) - How many blocks to check at startup (default: 288, 0 = all) - + Koľko blokov skontrolovať pri spustení (predvolené: 288, 0 = všetky) - - How thorough the block verification is (0-4, default: 3) - + If <category> is not supplied, output all debugging information. + Ak nie je uvedená <category>, na výstupe zobrazuj všetky informácie pre ladenie. + + + Importing... + Prebieha import ... + + + Incorrect or no genesis block found. Wrong datadir for network? + Nesprávny alebo žiadny genesis blok nájdený. Nesprávny dátový priečinok alebo sieť? + + + Invalid -onion address: '%s' + Neplatná -onion adresa: '%s' - Not enough file descriptors available. - + Nedostatok kľúčových slov súboru. + + + Prepend debug output with timestamp (default: 1) + Na začiatok logu pre ladenie vlož dátum a čas (prednastavené: 1) + + + RPC client options: + Možnosti klienta RPC baník pyčo: - Rebuild block chain index from current blk000??.dat files - + Znovu vytvoriť zoznam blokov zo súčasných blk000??.dat súborov + + + Select SOCKS version for -proxy (4 or 5, default: 5) + Zvoľte SOCKS verziu -proxy (4 alebo 5, predvolené 5) + + + Set database cache size in megabytes (%d to %d, default: %d) + Nastaviť veľkosť pomocnej pamäti databázy v megabajtoch (%d na %d, prednatavené: %d) + + + Set maximum block size in bytes (default: %d) + Nastaviť najväčšiu veľkosť bloku v bytoch (predvolené: %d) - Set the number of threads to service RPC calls (default: 4) - + Nastaviť množstvo vlákien na obsluhu RPC volaní (predvolené: 4) + + + Specify wallet file (within data directory) + Označ súbor peňaženky (v priečinku s dátami) + + + Spend unconfirmed change when sending transactions (default: 1) + Míňať nepotvrdený výdavok pri odosielaní (prednastavené: 1) + + + This is intended for regression testing tools and app development. + Toto je mienené nástrojom pre regresné testovania a vývoj programu. + + + Usage (deprecated, use myriadcoin-cli): + Použitie (neodporúča sa, použite myriadcoin-cli): - Verifying blocks... - + Overujem bloky... - Verifying wallet... - + Overujem peňaženku... + + + Wait for RPC server to start + Čakanie na štart RPC servra + + + Wallet %s resides outside data directory %s + Peňaženka %s sa nachádza mimo dátového priečinka %s + + + Wallet options: + Voľby peňaženky: + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + Varovanie: Zastaralý parameter -debugnet bol ignorovaný, použite -debug=net + + + You need to rebuild the database using -reindex to change -txindex + Potrebujete prebudovať databázu použitím -reindex zmeniť -txindex - Imports blocks from external blk000??.dat file - + Importuje bloky z externého súboru blk000??.dat - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) - + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + Neviem uzamknúť data adresár %s. Jadro Myriadcoin je pravdepodobne už spustené. + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + Vykonať príkaz keď po prijatí patričné varovanie alebo vidíme veľmi dlhé rozdvojenie siete (%s v cmd je nahradené správou) + + + Output debugging information (default: 0, supplying <category> is optional) + Výstup informácií pre ladenie (prednastavené: 0, uvádzanie <category> je voliteľné) + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + Nastaviť najväčšiu veľkosť vysoká-dôležitosť/nízke-poplatky transakcií v bajtoch (prednastavené: %d) - Information - + Informácia - - Invalid -tor address: '%s' - Neplatná adresa tor: '%s' - - - Invalid amount for -minrelaytxfee=<amount>: '%s' - + Neplatná suma pre -minrelaytxfee=<amount>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' - + Neplatná suma pre -mintxfee=<amount>: '%s' + + + Limit size of signature cache to <n> entries (default: 50000) + Obmedziť veľkosť pomocnej pamäti pre podpisy na <n> vstupov (prednastavené: 50000) + + + Log transaction priority and fee per kB when mining blocks (default: 0) + Zaznamenávať dôležitosť transakcií a poplatky za kB ak hľadáme bloky (prednastavené: 0) - Maintain a full transaction index (default: 0) - + Udržiavaj úplný zoznam transakcií (prednastavené: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - + Maximálna veľkosť prijímacieho zásobníka pre jedno spojenie, <n>*1000 bytov (predvolené: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - + Maximálna veľkosť vysielacieho zásobníka pre jedno spojenie, <n>*1000 bytov (predvolené: 1000) - Only accept block chain matching built-in checkpoints (default: 1) - + Akceptuj iba kontrolné body zhodné s blockchain (prednastavené: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - + Pripájať sa len k nódam v sieti <net> (IPv4, IPv6 alebo Tor) - - Output extra debugging information. Implies all other -debug* options - Produkovať extra ladiace informácie. Implies all other -debug* options + Print block on startup, if found in block index + Vytlač blok pri spustení, ak nájdený v zozname blokov - - Output extra network debugging information - + Print block tree on startup (default: 0) + Vytlačiť strom blokov pri spustení (prednastavené: 0) - - Prepend debug output with timestamp - Pridať na začiatok ladiaceho výstupu časový údaj + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + Možnosti RPC SSL: (Pozri v Myriadcoin Wiki pokyny pre SSL nastavenie) + + + RPC server options: + Možnosti servra RPC: + + + Randomly drop 1 of every <n> network messages + Náhodne zahadzuj 1 z každých <n> sieťových správ + + + Randomly fuzz 1 of every <n> network messages + Náhodne premiešaj 1 z každých <n> sieťových správ + + + Run a thread to flush wallet periodically (default: 1) + Mať spustené vlákno pravidelného čístenia peňaženky (predvolené: 1) - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) SSL možnosť: (pozrite Myriadcoin Wiki pre návod na nastavenie SSL) - - Select the version of socks proxy to use (4-5, default: 5) - + Send command to Myriadcoin Core + Poslať príkaz Jadru Myriadcoin - Send trace/debug info to console instead of debug.log file Odoslať trace/debug informácie na konzolu namiesto debug.info žurnálu - - Send trace/debug info to debugger - Odoslať trace/debug informácie do ladiaceho programu - - - - Set maximum block size in bytes (default: 250000) - - - - Set minimum block size in bytes (default: 0) - + Nastaviť minimálnu veľkosť bloku v bytoch (predvolené: 0) + + + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + Nastaví DB_PRIVATE možnosť v db prostredí peňaženky (prednastavené: 1) + + + Show all debugging options (usage: --help -help-debug) + Zobraziť všetky možnosti ladenia (použitie: --help --help-debug) + + + Show benchmark information (default: 0) + Zobraziť porovnávacie informácie (prednastavené: 0) - Shrink debug.log file on client startup (default: 1 when no -debug) - + Zmenšiť debug.log pri spustení klienta (predvolené: 1 ak bez -debug) - Signing transaction failed - + Podpísanie správy zlyhalo - Specify connection timeout in milliseconds (default: 5000) Určiť aut spojenia v milisekundách (predvolené: 5000) - + Start Myriadcoin Core Daemon + Štart služby Jadro Myriadcoin + + System error: - + Systémová chyba: - Transaction amount too small - + Suma transakcie príliš malá - Transaction amounts must be positive - + Hodnoty transakcie musia byť väčšie ako nula (pozitívne) - Transaction too large - + Transakcia príliš veľká - Use UPnP to map the listening port (default: 0) Skúsiť použiť UPnP pre mapovanie počúvajúceho portu (default: 0) - Use UPnP to map the listening port (default: 1 when listening) Skúsiť použiť UPnP pre mapovanie počúvajúceho portu (default: 1 when listening) - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - Username for JSON-RPC connections Užívateľské meno pre JSON-RPC spojenia - Warning - + Upozornenie - Warning: This version is obsolete, upgrade required! - + Upozornenie: Táto verzia je zastaraná, vyžaduje sa aktualizácia! - - You need to rebuild the databases using -reindex to change -txindex - + Zapping all transactions from wallet... + Zmazať všetky transakcie z peňaženky... + + + on startup + pri štarte + + + version + verzia - wallet.dat corrupt, salvage failed - + wallet.dat je poškodený, záchrana zlyhala - Password for JSON-RPC connections Heslo pre JSON-rPC spojenia - Allow JSON-RPC connections from specified IP address Povoliť JSON-RPC spojenia z určenej IP adresy. - Send commands to node running on <ip> (default: 127.0.0.1) Poslať príkaz nóde bežiacej na <ip> (predvolené: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) Vykonaj príkaz, ak zmeny v najlepšom bloku (%s v príkaze nahradí blok hash) - Upgrade wallet to latest format Aktualizuj peňaženku na najnovší formát. - Set key pool size to <n> (default: 100) Nastaviť zásobu adries na <n> (predvolené: 100) - Rescan the block chain for missing wallet transactions Znovu skenovať reťaz blokov pre chýbajúce transakcie - Use OpenSSL (https) for JSON-RPC connections Použiť OpenSSL (https) pre JSON-RPC spojenia - Server certificate file (default: server.cert) Súbor s certifikátom servra (predvolené: server.cert) - Server private key (default: server.pem) Súkromný kľúč servra (predvolené: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Prijateľné šifry (predvolené: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - This help message Táto pomocná správa - Unable to bind to %s on this computer (bind returned error %d, %s) - + Nepodarilo sa spojiť s %s na tomto počítači (bind vrátil chybu %d, %s) - - Connect through socks proxy - Pripojenie cez socks proxy - - - Allow DNS lookups for -addnode, -seednode and -connect Povoliť vyhľadávanie DNS pre pridanie nódy a spojenie - Loading addresses... Načítavanie adries... - Error loading wallet.dat: Wallet corrupted Chyba načítania wallet.dat: Peňaženka je poškodená - Error loading wallet.dat: Wallet requires newer version of Myriadcoin Chyba načítania wallet.dat: Peňaženka vyžaduje novšiu verziu Myriadcoin - Wallet needed to be rewritten: restart Myriadcoin to complete Bolo potrebné prepísať peňaženku: dokončite reštartovaním Myriadcoin - Error loading wallet.dat Chyba načítania wallet.dat - Invalid -proxy address: '%s' Neplatná adresa proxy: '%s' - Unknown network specified in -onlynet: '%s' - + Neznáma sieť upresnená v -onlynet: '%s' - Unknown -socks proxy version requested: %i - + Neznáma verzia -socks proxy požadovaná: %i - Cannot resolve -bind address: '%s' - + Nemožno rozriešiť -bind adress: '%s' - Cannot resolve -externalip address: '%s' - + Nemožno rozriešiť -externalip address: '%s' - Invalid amount for -paytxfee=<amount>: '%s' Neplatná suma pre -paytxfee=<amount>: '%s' - Invalid amount Neplatná suma - Insufficient funds Nedostatok prostriedkov - Loading block index... Načítavanie zoznamu blokov... - Add a node to connect to and attempt to keep the connection open Pridať nód na pripojenie a pokus o udržanie pripojenia otvoreného - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - - - - - Fee per KB to add to transactions you send - Poplatok za kB ktorý treba pridať k odoslanej transakcii - - - Loading wallet... Načítavam peňaženku... - Cannot downgrade wallet Nie je možné prejsť na nižšiu verziu peňaženky - Cannot write default address Nie je možné zapísať predvolenú adresu. - Rescanning... - + Nové prehľadávanie... - Done loading Dokončené načítavanie - To use the %s option Použiť %s možnosť. - Error Chyba - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_sl_SI.ts b/src/qt/locale/bitcoin_sl_SI.ts new file mode 100644 index 00000000..96ac1565 --- /dev/null +++ b/src/qt/locale/bitcoin_sl_SI.ts @@ -0,0 +1,3374 @@ + + + AboutDialog + + About Myriadcoin Core + O jedru Bitcoina + + + <b>Myriadcoin Core</b> version + <b>Jedro Bitcoina</b> različica + + + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. + + + + Copyright + + + + The Myriadcoin Core developers + + + + (%1-bit) + + + + + AddressBookPage + + Double-click to edit address or label + Dvakrat klikni za urejanje naslovov ali oznak + + + Create a new address + Ustvari nov naslov + + + &New + &Novo + + + Copy the currently selected address to the system clipboard + Kopiraj trenutno izbrani naslov v odložišče + + + &Copy + &Kopiraj + + + C&lose + &Zapri (close) + + + &Copy Address + &Kopiraj naslov + + + Delete the currently selected address from the list + + + + Export the data in the current tab to a file + + + + &Export + &Izvozi + + + &Delete + &Zbriši + + + Choose the address to send coins to + Izberi naslov prejemnika kovancev + + + Choose the address to receive coins with + Izberi naslov pošiljatelja kovancev + + + C&hoose + &Izberi + + + Sending addresses + Pošiljati naslove + + + Receiving addresses + Prejemati naslovi + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + To so vaši Myriadcoin naslovi za prejemanje plačil. Priporočljivo je uporabljati nov prejemni naslov za vsako izmed transakcij. + + + Copy &Label + Kopiraj &oznako + + + &Edit + &Uredi + + + Export Address List + Izvozi seznam naslovov + + + Comma separated file (*.csv) + Datoteka s podatki, ločenimi z vejico (*.csv) + + + Exporting Failed + Neuspešen izvoz + + + There was an error trying to save the address list to %1. + + + + + AddressTableModel + + Label + Oznaka + + + Address + Naslov + + + (no label) + (ni oznake) + + + + AskPassphraseDialog + + Passphrase Dialog + Poziv gesla + + + Enter passphrase + Vnesite geslo + + + New passphrase + Novo geslo + + + Repeat new passphrase + Ponovite novo geslo + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Vnesite novo geslo za vstop v denarnico.<br/>Prosimo, da geslo sestavite iz <b> 10 ali več naključnih znakov</b> oz. <b>osem ali več besed</b>. + + + Encrypt wallet + Šifriraj denarnico + + + This operation needs your wallet passphrase to unlock the wallet. + To dejanje zahteva geslo za odklepanje vaše denarnice. + + + Unlock wallet + Odkleni denarnico + + + This operation needs your wallet passphrase to decrypt the wallet. + To dejanje zahteva geslo za dešifriranje vaše denarnice. + + + Decrypt wallet + Dešifriraj denarnico + + + Change passphrase + Zamenjaj geslo + + + Enter the old and new passphrase to the wallet. + Vnesite staro in novo geslo denarnice. + + + Confirm wallet encryption + Potrdi šifriranje denarnice + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! + + + + Are you sure you wish to encrypt your wallet? + Ali ste prepričani, da želite šifrirati vašo denarnico? + + + 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. + + + + Warning: The Caps Lock key is on! + Opozorilo: imate prižgan Cap Lock + + + Wallet encrypted + Denarnica šifrirana + + + Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. + Myriadcoin se bo zaprl, da bi dokončal proces šifriranja. Zapomnite si, da šifriranje vaše denarnice ne more popolnoma zaščititi pred krajami zlonamernih programov, ki bi lahko bili nameščeni na vašem računalniku. + + + Wallet encryption failed + Šifriranje denarnice spodletelo + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Šifriranje denarnice spodletelo zaradi notranje napake. Vaša denarnica ni šifrirana. + + + The supplied passphrases do not match. + Vnešeno geslo se ne ujema + + + Wallet unlock failed + Odklep denarnice spodletel + + + The passphrase entered for the wallet decryption was incorrect. + Geslo za dešifriranje denarnice, ki ste ga vnesli, ni pravilno. + + + Wallet decryption failed + Dešifriranje denarnice spodletelo + + + Wallet passphrase was successfully changed. + + + + + BitcoinGUI + + Sign &message... + Podpiši &sporočilo ... + + + Synchronizing with network... + Sinhroniziranje z omrežjem ... + + + &Overview + &Pregled + + + Node + + + + Show general overview of wallet + Pokaži splošen pregled denarnice + + + &Transactions + &Transakcije + + + Browse transaction history + Brskaj po zgodovini transakcij + + + E&xit + I&zhod + + + Quit application + Izhod iz aplikacije + + + Show information about Myriadcoin + Pokaži informacije o Bitcoinu + + + About &Qt + O &Qt + + + Show information about Qt + Prikaži informacije o Qt + + + &Options... + &Možnosti ... + + + &Encrypt Wallet... + &Šifriraj denarnico ... + + + &Backup Wallet... + &Napravi varnostno kopijo denarnice ... + + + &Change Passphrase... + &Spremeni geslo ... + + + &Sending addresses... + &Pošiljanje naslovov... + + + &Receiving addresses... + &Prejemanje naslovov... + + + Open &URI... + Odpri &URI... + + + Importing blocks from disk... + Uvažam bloke z diska... + + + Reindexing blocks on disk... + Poustvarjam kazalo blokov na disku... + + + Send coins to a Myriadcoin address + Pošlji kovance na Myriadcoin naslov + + + Modify configuration options for Myriadcoin + Spremeni konfiguracijo nastavitev za Myriadcoin + + + Backup wallet to another location + Napravi varnostno kopijo denarnice na drugo lokacijo + + + Change the passphrase used for wallet encryption + Spremeni šifrirno geslo denarnice + + + &Debug window + &Razhroščevalno okno + + + Open debugging and diagnostic console + Odpri razhroščevalno in diagnostično konzolo + + + &Verify message... + %Preveri sporočilo ... + + + Myriadcoin + Myriadcoin + + + Wallet + Denarnica + + + &Send + &Pošlji + + + &Receive + &Sprejmi + + + &Show / Hide + &Prikaži / Skrij + + + Show or hide the main Window + Prikaži ali skrij glavno okno + + + Encrypt the private keys that belong to your wallet + Šifiraj zasebne ključe v moji denarnici + + + Sign messages with your Myriadcoin addresses to prove you own them + Za dokaz, da ste lastniki sporočil, se podpišite z Myriadcoin naslovom + + + Verify messages to ensure they were signed with specified Myriadcoin addresses + + + + &File + &Datoteka + + + &Settings + &Nastavitve + + + &Help + &Pomoč + + + Tabs toolbar + Orodna vrstica zavihkov + + + [testnet] + [testnet] + + + Myriadcoin Core + Jedro Bitcoina + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + &O jedru Bitcoina + + + Show the list of used sending addresses and labels + Prikaži seznam uporabljenih naslovov za pošiljanje in oznak + + + Show the list of used receiving addresses and labels + Prikaži seznam uporabljenih sprejemnih naslovov in oznak + + + Open a myriadcoin: URI or payment request + Odpri Bitcoin: URI ali zahteva o plačilu + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + + Myriadcoin client + Myriadcoin odjemalec + + + %n active connection(s) to Myriadcoin network + %n aktivna povezava v myriadcoin omrežje%n aktivni povezavi v myriadcoin omrežje%n aktivnih povezav v myriadcoin omrežje%n aktivnih povezav v myriadcoin omrežje + + + No block source available... + + + + Processed %1 of %2 (estimated) blocks of transaction history. + + + + Processed %1 blocks of transaction history. + + + + %n hour(s) + %n ura%n uri%n ure%n ura + + + %n day(s) + %n dan%n dneva%n dnevi%n dni + + + %n week(s) + %n teden%n tedna%n tedni%n tednov + + + %1 and %2 + + + + %n year(s) + %n leto%n leti%n leta%n let + + + %1 behind + %1 odzadaj + + + Last received block was generated %1 ago. + + + + Transactions after this will not yet be visible. + Transkacija za tem ne bo bila še na voljo. + + + Error + Napaka + + + Warning + Opozorilo + + + Information + Informacije + + + Up to date + Posodobljeno + + + Catching up... + Pridobivanje ... + + + Sent transaction + Odlivi + + + Incoming transaction + Prilivi + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + Datum: %1 +Količina: %2 +Vrsta: %3 +Naslov: %4 + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + Denarnica je <b>šifrirana</b> in trenutno <b>odklenjena</b> + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + Denarnica je <b>šifrirana</b> in trenutno <b>zaklenjena</b> + + + A fatal error occurred. Myriadcoin can no longer continue safely and will quit. + + + + + ClientModel + + Network Alert + Omrežno Opozorilo + + + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + Količina: + + + Bytes: + Biti: + + + Amount: + Količina: + + + Priority: + Prednostno mesto: + + + Fee: + Provizija: + + + Low Output: + + + + After Fee: + + + + Change: + Sprememba: + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + Količina + + + Address + Naslov + + + Date + Datum + + + Confirmations + Potrdila + + + Confirmed + Potrjeno + + + Priority + Prednostno mesto + + + Copy address + Kopiraj naslov + + + Copy label + Kopiraj oznako + + + Copy amount + Kopiraj količino + + + Copy transaction ID + Kopiraj ID transakcije + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + Kopiraj količino + + + Copy fee + Kopiraj provizijo + + + Copy after fee + + + + Copy bytes + Kopiraj bite + + + Copy priority + Kopiraj prednostno mesto + + + Copy low output + + + + Copy change + + + + highest + najvišja + + + higher + višja + + + high + visoka + + + medium-high + srednje visoka + + + medium + srednje + + + low-medium + srednje nizka + + + low + nizka + + + lower + nižja + + + lowest + najnižja + + + (%1 locked) + (%1 zaklenjeno) + + + none + + + + Dust + Prah + + + yes + da + + + no + ne + + + This label turns red, if the transaction size is greater than 1000 bytes. + V primeru, da je velikost transakcije večja od 1000 bitov, se ta oznaka se obarva rdeče. + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + (ni oznake) + + + change from %1 (%2) + + + + (change) + + + + + EditAddressDialog + + Edit Address + Uredi naslov + + + &Label + &Oznaka + + + The label associated with this address list entry + Oznaka je povezana s tem vnosom seznama naslovov + + + The address associated with this address list entry. This can only be modified for sending addresses. + + + + &Address + &Naslov + + + New receiving address + Nov naslov za prilive + + + New sending address + Nov naslov za odlive + + + Edit receiving address + Uredi naslov za prilive + + + Edit sending address + Uredi naslov za odlive + + + The entered address "%1" is already in the address book. + Vnešeni naslov "&1" je že v imeniku. + + + The entered address "%1" is not a valid Myriadcoin address. + Vnešeni naslov "%1" ni veljaven Myriadcoin naslov. + + + Could not unlock wallet. + Ni bilo moč odkleniti denarnice. + + + New key generation failed. + Generiranje novega ključa je spodletelo. + + + + FreespaceChecker + + A new data directory will be created. + + + + name + ime + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core + Jedro Bitcoina + + + version + različica + + + Usage: + Uporaba: + + + command-line options + možnosti ukazne vrstice + + + UI options + možnosti uporabniškega vmesnika + + + Set language, for example "de_DE" (default: system locale) + Nastavi jezik, npr. "sl_SI" (privzeto: jezikovna oznaka sistema) + + + Start minimized + Zaženi pomanjšano + + + Set SSL root certificates for payment request (default: -system-) + + + + Show splash screen on startup (default: 1) + + + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + Dobrodošli + + + Welcome to Myriadcoin Core. + Dobrodošli v jedru Bitcoina + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" can not be created. + + + + Error + Napaka + + + GB of free space available + GB prostora na voljo + + + (of %1GB needed) + + + + + OpenURIDialog + + Open URI + Odpri URl + + + Open payment request from URI or file + Odpri zahtevo o plačilo od ORI ali datoteke + + + URI: + URI: + + + Select payment request file + + + + Select payment request file to open + + + + + OptionsDialog + + Options + Možnosti + + + &Main + &Glavno + + + Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. + + + + Pay transaction &fee + Nakazilo plačila & provizija + + + Automatically start Myriadcoin after logging in to the system. + Po prijavi v sistem samodejno zaženite Myriadcoin. + + + &Start Myriadcoin on system login + &Zaženi Myriadcoin ob prijavi v sistem + + + Size of &database cache + + + + MB + megabite + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + + Reset all client options to default. + + + + &Reset Options + + + + &Network + &Omrežje + + + (0 = auto, <0 = leave that many cores free) + + + + W&allet + &Denarnica + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. + + + + Map port using &UPnP + + + + Proxy &IP: + IP posredniškega strežnika: + + + &Port: + &Vrata: + + + Port of the proxy (e.g. 9050) + Vrata strežnika (npr.: 9050) + + + SOCKS &Version: + SOCKS &različica: + + + SOCKS version of the proxy (e.g. 5) + SOCKS različica posredniškega strežnika (npr.: 5) + + + &Window + &Okno + + + Show only a tray icon after minimizing the window. + + + + &Minimize to the tray instead of the taskbar + + + + Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. + + + + M&inimize on close + + + + &Display + &Prikaz + + + User Interface &language: + Vmesnik uporabnika &jezik: + + + The user interface language can be set here. This setting will take effect after restarting Myriadcoin. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show Myriadcoin addresses in the transaction list or not. + + + + &Display addresses in transaction list + + + + Whether to show coin control features or not. + + + + &OK + &Potrdi + + + &Cancel + &Prekini + + + default + privzeto + + + none + + + + Confirm options reset + + + + Client restart required to activate changes. + + + + Client will be shutdown, do you want to proceed? + + + + This change would require a client restart. + + + + The supplied proxy address is invalid. + + + + + OverviewPage + + Form + Oblika + + + The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. + Prikazanim podatkom je lahko potekel rok. Vaša denarnica bo po vzpostavitvi povezave samodejno sinhronizirana z Myriadcoin omrežjem, ampak ta proces še ni bil zaključen. + + + Wallet + Denarnica + + + Available: + Razpoložljivost: + + + Your current spendable balance + Vaše trenutno razpoložljivo stanje + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + Skupno število potrjenih transakcij, ki sicer niso bile prištete k razpoložljivem stanju + + + Immature: + + + + Mined balance that has not yet matured + + + + Total: + Skupaj: + + + Your current total balance + Vaše trenutno skupno stanje + + + <b>Recent transactions</b> + <b>Nedavne transakcije</> + + + out of sync + + + + + PaymentServer + + URI handling + Rokovanje z URI + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + Napaka pri zahtevi plačila + + + Cannot start myriadcoin: click-to-pay handler + + + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + Napaka pri povezavi z %1: %2 + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + Slab odziv strežnika %1 + + + Payment acknowledged + Plačilo priznano + + + Network request error + Napaka omrežne zahteve + + + + QObject + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" does not exist. + Napaka: Želena nahajališče datoteke "%1" ne obstaja. + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + + + + Error: Invalid combination of -regtest and -testnet. + Napaka: Neveljavna kombinacija -regtest and -testnet + + + Myriadcoin Core didn't yet exit safely... + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Vnesite myriadcoin naslov (npr.: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + &Shrani sliko... + + + &Copy Image + &Kopiraj sliko + + + Save QR Code + Shrani QR kodo + + + PNG Image (*.png) + PNG slika (*.png) + + + + RPCConsole + + Client name + Ime odjemalca + + + N/A + Neznano + + + Client version + Različica odjemalca + + + &Information + &Informacije + + + Debug window + + + + General + + + + Using OpenSSL version + OpenSSL različica v rabi + + + Startup time + Čas zagona + + + Network + Omrežje + + + Name + + + + Number of connections + Število povezav + + + Block chain + Veriga blokov + + + Current number of blocks + Trenutno število blokov + + + Estimated total blocks + Ocenjeno skupno število blokov + + + Last block time + Čas zadnjega bloka + + + &Open + &Odpri + + + &Console + &Konzola + + + &Network Traffic + &Omrežni promet + + + &Clear + &Pošisti + + + Totals + Vsote + + + In: + + + + Out: + + + + Build date + Datum izgradnje + + + Debug log file + Razhroščevalna dnevniška datoteka + + + Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + Počisti konzolo + + + Welcome to the Myriadcoin RPC console. + Dobrodošli na Myriadcoin RPC konzoli. + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + Uporabi puščice za gor in dol za navigacijo po zgodovini in <b>Ctrl-L</b> za izbris izpisa na ekranu. + + + Type <b>help</b> for an overview of available commands. + Vtipkaj <b>pomoč</b> za vpogled v razpožljive ukaze. + + + %1 B + %1 bitov + + + %1 KB + %1 kilobitov + + + %1 MB + %1 megabitov + + + %1 GB + %1 gigabitov + + + %1 m + %1 minut + + + %1 h + %1 ur + + + %1 h %2 m + %1 ur %2 minut + + + + ReceiveCoinsDialog + + &Amount: + &Količina: + + + &Label: + &Oznaka: + + + &Message: + &Sporočilo: + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + Pomožna oznaka je povezana z novim sprejemnim naslovom. + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + + + + Clear + Počisti + + + Requested payments history + + + + &Request payment + &Zahtevaj plačilo + + + Show the selected request (does the same as double clicking an entry) + + + + Show + Pokaži + + + Remove the selected entries from the list + Odstrani označene vnose iz seznama + + + Remove + Odstrani + + + Copy label + Kopiraj oznako + + + Copy message + Kopiraj sporočilo + + + Copy amount + Kopiraj količino + + + + ReceiveRequestDialog + + QR Code + QR Koda + + + Copy &URI + Kopraj &URl + + + Copy &Address + Kopiraj &Naslov + + + &Save Image... + &Shrani sliko.. + + + Request payment to %1 + + + + Payment information + Informacija o plačilu + + + URI + + + + Address + Naslov + + + Amount + Količina + + + Label + Oznaka + + + Message + Sporočilo + + + Resulting URI too long, try to reduce the text for label / message. + URI predolg, skušajte zmanjšati besedilo oznake/sporočila. + + + Error encoding URI into QR Code. + + + + + RecentRequestsTableModel + + Date + Datum + + + Label + Oznaka + + + Message + Sporočilo + + + Amount + Količina + + + (no label) + (ni oznake) + + + (no message) + (ni sporočila) + + + (no amount) + (brez količine) + + + + SendCoinsDialog + + Send Coins + Pošlji kovance + + + Coin Control Features + + + + Inputs... + Vnosi... + + + automatically selected + samodejno izbran + + + Insufficient funds! + Premalo sredstev! + + + Quantity: + Količina: + + + Bytes: + Biti: + + + Amount: + Znesek: + + + Priority: + Prednostno mesto: + + + Fee: + Provizija: + + + Low Output: + + + + After Fee: + + + + Change: + Sprememba: + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + + Send to multiple recipients at once + Pošlji več prejemnikom hkrati + + + Add &Recipient + Dodaj &prejemnika + + + Clear all fields of the form. + + + + Clear &All + Počisti &vse + + + Balance: + Dobroimetje: + + + Confirm the send action + Potrdi odlivno dejanje + + + S&end + P&ošlji + + + Confirm send coins + Potrdi odliv kovancev + + + %1 to %2 + + + + Copy quantity + Kopiraj količino + + + Copy amount + Kopiraj količino + + + Copy fee + Kopiraj provizijo + + + Copy after fee + + + + Copy bytes + Kopiraj bite + + + Copy priority + Kopiraj prednostno mesto + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + + + + or + ali + + + The recipient address is not valid, please recheck. + + + + The amount to pay must be larger than 0. + Količina za plačilo mora biti večja od 0. + + + The amount exceeds your balance. + Količina presega vaše dobroimetje + + + The total exceeds your balance when the %1 transaction fee is included. + Celotni znesek presega vaše stanje, ko je zaračunana 1% provizija. + + + Duplicate address found, can only send to each address once per send operation. + Najdena kopija naslova, možnost pošiljanja na vsakega izmed naslov le enkrat ob pošiljanju. + + + Transaction creation failed! + + + + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + Opozorilo: Neveljaven Myriadcoin naslov + + + (no label) + (ni oznake) + + + Warning: Unknown change address + + + + Are you sure you want to send? + Ali ste prepričani, da želite poslati? + + + added as transaction fee + dodano kot provizija transakcije + + + Payment request expired + Zahteva plačila je potekla + + + Invalid payment address %1 + Neveljaven naslov plačila %1 + + + + SendCoinsEntry + + A&mount: + K&oličina: + + + Pay &To: + Prejemnik &plačila: + + + The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Enter a label for this address to add it to your address book + Vnesite oznako za ta naslov, ki bo shranjena v imenik + + + &Label: + &Oznaka: + + + Choose previously used address + Izberi zadnje uporabljen naslov + + + This is a normal payment. + + + + Alt+A + Alt+A + + + Paste address from clipboard + Prilepi naslov iz odložišča + + + Alt+P + Alt+P + + + Remove this entry + + + + Message: + Sporočilo: + + + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + Vnesite oznako za ta naslov, ki bo shranjena v seznam uporabljenih naslovov + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. + Ne zaustavite računalnika dokler to okno ne izgine. + + + + SignVerifyMessageDialog + + Signatures - Sign / Verify a Message + Podpisi - Podpiši/preveri sporočilo + + + &Sign Message + &Podpiši sporočilo + + + You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. + + + + The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Choose previously used address + Izberi zadnje uporabljen naslov + + + Alt+A + Alt+A + + + Paste address from clipboard + Prilepi naslov iz odložišča + + + Alt+P + Alt+P + + + Enter the message you want to sign here + + + + Signature + Podpis + + + Copy the current signature to the system clipboard + + + + Sign the message to prove you own this Myriadcoin address + + + + Sign &Message + Podpiši &sporočilo + + + Reset all sign message fields + + + + Clear &All + Počisti &vse + + + &Verify Message + &Preveri sporočilo + + + Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. + + + + The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Verify the message to ensure it was signed with the specified Myriadcoin address + + + + Verify &Message + Preveri &Sporočilo + + + Reset all verify message fields + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Vnesite myriadcoin naslov (npr.: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + Click "Sign Message" to generate signature + Kliknite "Podpiši sporočilo" za ustvaritev podpisa + + + The entered address is invalid. + Vnešeni naslov ni veljaven. + + + Please check the address and try again. + Prosimo preverite naslov in poizkusite znova. + + + The entered address does not refer to a key. + + + + Wallet unlock was cancelled. + Odklepanje denarnice je bilo prekinjeno. + + + Private key for the entered address is not available. + Zasebni ključ vnešenega naslov ni na voljo. + + + Message signing failed. + Podpisovanje sporočila spodletelo. + + + Message signed. + Sporočilo podpisano. + + + The signature could not be decoded. + Ni bilo mogoče dešifrirati podpisa. + + + Please check the signature and try again. + Prosimo preverite podpis in poizkusite znova. + + + The signature did not match the message digest. + + + + Message verification failed. + Pregledovanje sporočila spodletelo. + + + Message verified. + Sporočilo pregledano. + + + + SplashScreen + + Myriadcoin Core + Jedro Bitcoina + + + The Myriadcoin Core developers + + + + [testnet] + [testnet] + + + + TrafficGraphWidget + + KB/s + + + + + TransactionDesc + + Open until %1 + Odpri enoto %1 + + + conflicted + + + + %1/offline + + + + %1/unconfirmed + %1/nepotrjeno + + + %1 confirmations + %1 potrdil + + + Status + Stanje + + + , broadcast through %n node(s) + + + + Date + Datum + + + Source + Izvor + + + Generated + Generirano + + + From + Pošiljatelj + + + To + Prejemnik + + + own address + lasten naslov + + + label + oznaka + + + Credit + + + + matures in %n more block(s) + + + + not accepted + ni bilo sprejeto + + + Debit + Dolg + + + Transaction fee + Provizija transakcije + + + Net amount + Neto količina + + + Message + Sporočilo + + + Comment + Opomba + + + Transaction ID + ID transakcije + + + Merchant + Trgovec + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + Debug information + Razhroščevalna informacija + + + Transaction + Transakcija + + + Inputs + Vnosi + + + Amount + Količina + + + true + pravilno + + + false + nepravilno + + + , has not been successfully broadcast yet + , še ni bila uspešno raznešena + + + Open for %n more block(s) + + + + unknown + neznano + + + + TransactionDescDialog + + Transaction details + Podrobnosti transakcije + + + This pane shows a detailed description of the transaction + To podokno prikazuje podroben opis transakcije + + + + TransactionTableModel + + Date + Datum + + + Type + Vrsta + + + Address + Naslov + + + Amount + Količina + + + Immature (%1 confirmations, will be available after %2) + + + + Open for %n more block(s) + + + + Open until %1 + Odpri enoto %1 + + + Confirmed (%1 confirmations) + Potrjeno (%1 potrdil) + + + This block was not received by any other nodes and will probably not be accepted! + Ta blok ni prejelo še nobeno vozlišče. Najverjetneje ne bo sprejet! + + + Generated but not accepted + Generirano, toda ne sprejeto + + + Offline + + + + Unconfirmed + Nepotrjeno + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + + Received with + Prejeto z + + + Received from + Prejeto od + + + Sent to + Poslano + + + Payment to yourself + Izplačilo sebi + + + Mined + Minirano + + + (n/a) + (ni na voljo) + + + Transaction status. Hover over this field to show number of confirmations. + Stanje transakcije. Zapeljite z miško čez to polje za prikaz števila potrdil. + + + Date and time that the transaction was received. + Datum in čas, ko je transakcija bila prejeta. + + + Type of transaction. + Vrsta transakcije. + + + Destination address of transaction. + Naslov prejemnika transakcije. + + + Amount removed from or added to balance. + Količina odlita ali prilita dobroimetju. + + + + TransactionView + + All + Vse + + + Today + Danes + + + This week + Ta teden + + + This month + Ta mesec + + + Last month + Prejšnji mesec + + + This year + To leto + + + Range... + Območje ... + + + Received with + Prejeto z + + + Sent to + Poslano + + + To yourself + Samemu sebi + + + Mined + Minirano + + + Other + Drugo + + + Enter address or label to search + Vnesite naslov ali oznako za iskanje + + + Min amount + Minimalna količina + + + Copy address + Kopiraj naslov + + + Copy label + Kopiraj oznako + + + Copy amount + Kopiraj količino + + + Copy transaction ID + Kopiraj ID transakcije + + + Edit label + Uredi oznako + + + Show transaction details + Prikaži podrobnosti transakcije + + + Export Transaction History + + + + Exporting Failed + Neuspešen izvoz + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + Uspešen izvoz + + + The transaction history was successfully saved to %1. + Zgodovina poteklih transakcij je bila uspešno shranjena na %1. + + + Comma separated file (*.csv) + Datoteka s podatki, ločenimi z vejico (*.csv) + + + Confirmed + Potrjeno + + + Date + Datum + + + Type + Vrsta + + + Label + Oznaka + + + Address + Naslov + + + Amount + Količina + + + ID + ID + + + Range: + Območje: + + + to + za + + + + WalletFrame + + No wallet has been loaded. + + + + + WalletModel + + Send Coins + Pošlji kovance + + + + WalletView + + &Export + &Izvozi + + + Export the data in the current tab to a file + + + + Backup Wallet + Napravi varnostno kopijo denarnice + + + Wallet Data (*.dat) + Podatki denarnice (*.dat) + + + Backup Failed + Varnostna kopijo neuspešna + + + There was an error trying to save the wallet data to %1. + Prišlo je do napake pri shranjevanju podatkov denarnice na %1. + + + The wallet data was successfully saved to %1. + Podatki denarnice so bili uspešno shranjena na %1. + + + Backup Successful + Varnostna kopija uspešna + + + + bitcoin-core + + Usage: + Uporaba: + + + List commands + Prikaži ukaze + + + Get help for a command + Prikaži pomoč za ukaz + + + Options: + Možnosti: + + + Specify configuration file (default: myriadcoin.conf) + Določi datoteko z nastavitvami (privzeta: myriadcoin.conf) + + + Specify pid file (default: myriadcoind.pid) + Določi pid datoteko (privzeta: bitcoin.pid) + + + Specify data directory + Določi podatkovni imenik + + + Listen for connections on <port> (default: 8333 or testnet: 18333) + Sprejmi povezave na <port> (privzeta vrata: 8333 ali testnet: 18333) + + + Maintain at most <n> connections to peers (default: 125) + Obdrži maksimalno število <n> povezav (privzeto: 125) + + + Connect to a node to retrieve peer addresses, and disconnect + Povežite se z vozliščem za pridobitev naslovov uporabnikov in nato prekinite povezavo. + + + Specify your own public address + Določite vaš lasten javni naslov + + + Threshold for disconnecting misbehaving peers (default: 100) + Prag za prekinitev povezav s slabimi odjemalci (privzeto: 1000) + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + Število sekund za težavo pri vzpostavitvi povezave med uporabniki (privzeto: 86400) + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) + + + + Accept command line and JSON-RPC commands + Sprejmi ukaze iz ukazne vrstice in JSON-RPC + + + Myriadcoin Core RPC client version + + + + Run in the background as a daemon and accept commands + Teci v ozadju in sprejemaj ukaze + + + Use the test network + Uporabi testno omrežje + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=myriadcoinrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + Bind to given address and always listen on it. Use [host]:port notation for IPv6 + + + + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) + + + + Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Napaka: Transakcija ni bila sprejeta! To se je morebiti zgodilo, ker so nekateri kovanci v vaši denarnici bili že porabljeni, na primer če ste uporabili kopijo wallet.dat in so tako kovanci bili porabljeni v kopiji, ostali pa označeni kot neporabljeni. + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! + Napaka: Ta transakcija potrebuje povizijo, ki je najmanj %s zaradi svoje količine, kompliciranosti, ali zaradi uporabe prejetih sredstev. + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + Izvedi ukaz, ko bo transakcija denarnice se spremenila (V cmd je bil TxID zamenjan za %s) + + + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + + + + This is a pre-release test build - use at your own risk - do not use for mining or merchant applications + To je pred izdana poizkusna verzija - uporaba na lastno odgovornost - ne uporabljajte je za rudarstvo ali trgovske aplikacije + + + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. + + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + Opozorilo: napaka pri branju wallet.dat! Vsi ključi so bili pravilno prebrani, podatki o transakciji ali imenik vnešenih naslovov so morda izgubljeni ali nepravilni. + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + <kategorija> je lahko: + + + Attempt to recover private keys from a corrupt wallet.dat + + + + Myriadcoin Core Daemon + + + + Block creation options: + Možnosti ustvarjanja blokov: + + + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + + Connect only to the specified node(s) + + + + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + + Corrupted block database detected + + + + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + Do not load the wallet and disable wallet RPC calls + + + + Do you want to rebuild the block database now? + + + + Error initializing block database + + + + Error initializing wallet database environment %s! + + + + Error loading block database + + + + Error opening block database + + + + Error: Disk space is low! + Opozorilo: Premalo prostora na disku! + + + Error: Wallet locked, unable to create transaction! + Opozorilo: Denarnica je zaklenjena, ni mogoče opraviti transkacijo! + + + Error: system error: + Napaka: sistemska napaka: + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + Failed to read block info + + + + Failed to read block + + + + Failed to sync block index + + + + Failed to write block index + + + + Failed to write block info + + + + Failed to write block + + + + Failed to write file info + Zapisovanje informacij o datoteki neuspešno + + + Failed to write to coin database + Neuspešno zapisovanje na bazi podatkov kovancev + + + Failed to write transaction index + + + + Failed to write undo data + + + + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + + Find peers using DNS lookup (default: 1 unless -connect) + + + + Force safe mode (default: 0) + + + + Generate coins (default: 0) + Ustvari kovance (privzeto: 0) + + + How many blocks to check at startup (default: 288, 0 = all) + + + + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' + + + + Not enough file descriptors available. + + + + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + + Rebuild block chain index from current blk000??.dat files + + + + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + + Set the number of threads to service RPC calls (default: 4) + + + + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + + Verifying blocks... + + + + Verifying wallet... + + + + Wait for RPC server to start + Počakajte na zagon RPC strežnika + + + Wallet %s resides outside data directory %s + + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + + + + Imports blocks from external blk000??.dat file + + + + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + + + + Information + Informacije + + + Invalid amount for -minrelaytxfee=<amount>: '%s' + + + + Invalid amount for -mintxfee=<amount>: '%s' + + + + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + + Maintain a full transaction index (default: 0) + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + Only accept block chain matching built-in checkpoints (default: 1) + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + Print block on startup, if found in block index + + + + Print block tree on startup (default: 0) + + + + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + + + + SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + SSL možnosti: (glejte Myriadcoin Wiki za navodla, kako nastaviti SSL) + + + Send command to Myriadcoin Core + + + + Send trace/debug info to console instead of debug.log file + Pošlji sledilne/razhroščevalne informacije v konzolo namesto jih shraniti v debug.log datoteko + + + Set minimum block size in bytes (default: 0) + + + + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + Signing transaction failed + Podpisovanje transakcije spodletelo + + + Specify connection timeout in milliseconds (default: 5000) + + + + Start Myriadcoin Core Daemon + + + + System error: + Sistemska napaka: + + + Transaction amount too small + Količina transakcije je pramajhna + + + Transaction amounts must be positive + Količina transkacije mora biti pozitivna + + + Transaction too large + Transkacija je prevelika + + + Use UPnP to map the listening port (default: 0) + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + Username for JSON-RPC connections + Uporabniško ime za JSON-RPC povezave + + + Warning + Opozorilo + + + Warning: This version is obsolete, upgrade required! + Opozorilo: ta različica je zastarela, potrebna je nadgradnja! + + + Zapping all transactions from wallet... + + + + on startup + + + + version + različica + + + wallet.dat corrupt, salvage failed + wallet.dat poškodovana, neuspešna obnova + + + Password for JSON-RPC connections + Geslo za JSON-RPC povezave + + + Allow JSON-RPC connections from specified IP address + Dovoli JSON-RPC povezave z določenega IP naslova + + + Send commands to node running on <ip> (default: 127.0.0.1) + Pošlji ukaze vozlišču na <ip> (privzet: 127.0.0.1) + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + Upgrade wallet to latest format + Posodobi denarnico v najnovejši zapis + + + Set key pool size to <n> (default: 100) + Nastavi velikost ključa bazena na <n> (privzeto: 100) + + + Rescan the block chain for missing wallet transactions + Ponovno preglej verigo blokov za manjkajoče transakcije denarnice + + + Use OpenSSL (https) for JSON-RPC connections + Uporabi OpenSSL (https) za JSON-RPC povezave + + + Server certificate file (default: server.cert) + Datoteka potrdila strežnika (privzeta: server.cert) + + + Server private key (default: server.pem) + Zasebni ključ strežnika (privzet: server.pem) + + + This help message + To sporočilo pomoči + + + Unable to bind to %s on this computer (bind returned error %d, %s) + Nemogoče je povezati s/z %s na tem računalniku (povezava je vrnila napaka %d, %s) + + + Allow DNS lookups for -addnode, -seednode and -connect + Omogoči DNS poizvedbe za -addnode, -seednode in -connect. + + + Loading addresses... + Nalaganje naslovov ... + + + Error loading wallet.dat: Wallet corrupted + Napaka pri nalaganju wallet.dat: denarnica pokvarjena + + + Error loading wallet.dat: Wallet requires newer version of Myriadcoin + Napaka pri nalaganju wallet.dat: denarnica zahteva novejšo različico Bitcoina + + + Wallet needed to be rewritten: restart Myriadcoin to complete + Denarnica mora biti prepisana: ponovno zaženite Myriadcoin za doknčanje + + + Error loading wallet.dat + Napaka pri nalaganju wallet.dat + + + Invalid -proxy address: '%s' + Neveljaven -proxy naslov: '%s' + + + Unknown network specified in -onlynet: '%s' + Neznano omrežje določeno v -onlynet: '%s'. + + + Unknown -socks proxy version requested: %i + Neznano -socks zahtevan zastopnik različice: %i + + + Cannot resolve -bind address: '%s' + Nemogoče rešiti -bind naslova: '%s' + + + Cannot resolve -externalip address: '%s' + Nemogoče rešiti -externalip naslova: '%s' + + + Invalid amount for -paytxfee=<amount>: '%s' + Neveljavna količina za -paytxfee=<amount>: '%s' + + + Invalid amount + Neveljavna količina + + + Insufficient funds + Premalo sredstev + + + Loading block index... + Nalaganje indeksa blokov ... + + + Add a node to connect to and attempt to keep the connection open + Dodaj vozlišče za povezavo nanj in skušaj le to obdržati odprto + + + Loading wallet... + Nalaganje denarnice ... + + + Cannot downgrade wallet + Ne morem + + + Cannot write default address + Ni mogoče zapisati privzetega naslova + + + Rescanning... + Ponovno pregledovanje ... + + + Done loading + Nalaganje končano + + + To use the %s option + Za uporabo %s opcije + + + Error + Napaka + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + Potrebno je nastaviti rpcpassword=<password> v nastavitveni datoteki: +%s +Če datoteka ne obstaja jo ustvarite z dovoljenjem, da jo lahko bere samo uporabnik. + + + \ No newline at end of file diff --git a/src/qt/locale/bitcoin_sq.ts b/src/qt/locale/bitcoin_sq.ts new file mode 100644 index 00000000..1303b581 --- /dev/null +++ b/src/qt/locale/bitcoin_sq.ts @@ -0,0 +1,3368 @@ + + + AboutDialog + + About Myriadcoin Core + + + + <b>Myriadcoin Core</b> version + + + + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. + + + + Copyright + + + + The Myriadcoin Core developers + + + + (%1-bit) + + + + + AddressBookPage + + Double-click to edit address or label + Klikoni 2 herë për të ndryshuar adressën ose etiketën + + + Create a new address + Krijo një adresë të re + + + &New + + + + Copy the currently selected address to the system clipboard + Kopjo adresën e zgjedhur në memorjen e sistemit + + + &Copy + + + + C&lose + + + + &Copy Address + + + + Delete the currently selected address from the list + + + + Export the data in the current tab to a file + + + + &Export + + + + &Delete + &Fshi + + + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + + Copy &Label + + + + &Edit + + + + Export Address List + + + + Comma separated file (*.csv) + Skedar i ndarë me pikëpresje(*.csv) + + + Exporting Failed + + + + There was an error trying to save the address list to %1. + + + + + AddressTableModel + + Label + Etiketë + + + Address + Adresë + + + (no label) + (pa etiketë) + + + + AskPassphraseDialog + + Passphrase Dialog + + + + Enter passphrase + Futni frazkalimin + + + New passphrase + Frazkalim i ri + + + Repeat new passphrase + Përsërisni frazkalimin e ri + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + Futni frazkalimin e ri në portofol.<br/>Ju lutemi përdorni një frazkalim prej<b>10 ose më shumë shkronjash të rastësishme<b/>, ose tetë apo më shumë fjalë</b>. + + + Encrypt wallet + Enkripto portofolin + + + This operation needs your wallet passphrase to unlock the wallet. + Ky veprim ka nevojë per frazkalimin e portofolit tuaj që të ç'kyç portofolin. + + + Unlock wallet + ç'kyç portofolin. + + + This operation needs your wallet passphrase to decrypt the wallet. + Ky veprim kërkon frazkalimin e portofolit tuaj që të dekriptoj portofolin. + + + Decrypt wallet + Dekripto portofolin + + + Change passphrase + Ndrysho frazkalimin + + + Enter the old and new passphrase to the wallet. + Futni frazkalimin e vjetër dhe të ri në portofol. + + + Confirm wallet encryption + Konfirmoni enkriptimin e portofolit + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! + + + + Are you sure you wish to encrypt your wallet? + + + + 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. + + + + Warning: The Caps Lock key is on! + + + + Wallet encrypted + Portofoli u enkriptua + + + Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. + + + + Wallet encryption failed + Enkriptimi i portofolit dështoi + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Enkriptimi i portofolit dështoi për shkak të një gabimi të brëndshëm. portofoli juaj nuk u enkriptua. + + + The supplied passphrases do not match. + Frazkalimet e plotësuara nuk përputhen. + + + Wallet unlock failed + ç'kyçja e portofolit dështoi + + + The passphrase entered for the wallet decryption was incorrect. + Frazkalimi i futur për dekriptimin e portofolit nuk ishte i saktë. + + + Wallet decryption failed + Dekriptimi i portofolit dështoi + + + Wallet passphrase was successfully changed. + + + + + BitcoinGUI + + Sign &message... + + + + Synchronizing with network... + Duke u sinkronizuar me rrjetin... + + + &Overview + &Përmbledhje + + + Node + + + + Show general overview of wallet + Trego një përmbledhje te përgjithshme të portofolit + + + &Transactions + &Transaksionet + + + Browse transaction history + Shfleto historinë e transaksioneve + + + E&xit + + + + Quit application + Mbyllni aplikacionin + + + Show information about Myriadcoin + Trego informacionin rreth Botkoin-it + + + About &Qt + + + + Show information about Qt + + + + &Options... + &Opsione + + + &Encrypt Wallet... + + + + &Backup Wallet... + + + + &Change Passphrase... + + + + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + + Importing blocks from disk... + + + + Reindexing blocks on disk... + + + + Send coins to a Myriadcoin address + + + + Modify configuration options for Myriadcoin + + + + Backup wallet to another location + + + + Change the passphrase used for wallet encryption + Ndrysho frazkalimin e përdorur per enkriptimin e portofolit + + + &Debug window + + + + Open debugging and diagnostic console + + + + &Verify message... + + + + Myriadcoin + + + + Wallet + + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your Myriadcoin addresses to prove you own them + + + + Verify messages to ensure they were signed with specified Myriadcoin addresses + + + + &File + &Skedar + + + &Settings + &Konfigurimet + + + &Help + &Ndihmë + + + Tabs toolbar + Shiriti i mjeteve + + + [testnet] + [testo rrjetin] + + + Myriadcoin Core + + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + + Myriadcoin client + + + + %n active connection(s) to Myriadcoin network + %n lidhje aktive me rrjetin e Bitkoin%n lidhje aktive me rrjetin e Bitkoin + + + No block source available... + + + + Processed %1 of %2 (estimated) blocks of transaction history. + + + + Processed %1 blocks of transaction history. + + + + %n hour(s) + + + + %n day(s) + + + + %n week(s) + + + + %1 and %2 + + + + %n year(s) + + + + %1 behind + + + + Last received block was generated %1 ago. + + + + Transactions after this will not yet be visible. + + + + Error + + + + Warning + + + + Information + + + + Up to date + I azhornuar + + + Catching up... + Duke u azhornuar... + + + Sent transaction + Dërgo transaksionin + + + Incoming transaction + Transaksion në ardhje + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + Portofoli po <b> enkriptohet</b> dhe është <b> i ç'kyçur</b> + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + Portofoli po <b> enkriptohet</b> dhe është <b> i kyçur</b> + + + A fatal error occurred. Myriadcoin can no longer continue safely and will quit. + + + + + ClientModel + + Network Alert + + + + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + Sasia + + + Address + Adresë + + + Date + Data + + + Confirmations + + + + Confirmed + + + + Priority + + + + Copy address + + + + Copy label + + + + Copy amount + + + + Copy transaction ID + + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + + + + Dust + + + + yes + + + + no + + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + (pa etiketë) + + + change from %1 (%2) + + + + (change) + + + + + EditAddressDialog + + Edit Address + Ndrysho Adresën + + + &Label + &Etiketë + + + The label associated with this address list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + + + + &Address + &Adresa + + + New receiving address + Adresë e re pritëse + + + New sending address + Adresë e re dërgimi + + + Edit receiving address + Ndrysho adresën pritëse + + + Edit sending address + ndrysho adresën dërguese + + + The entered address "%1" is already in the address book. + Adresa e dhënë "%1" është e zënë në librin e adresave. + + + The entered address "%1" is not a valid Myriadcoin address. + + + + Could not unlock wallet. + Nuk mund të ç'kyçet portofoli. + + + New key generation failed. + Krijimi i çelësit të ri dështoi. + + + + FreespaceChecker + + A new data directory will be created. + + + + name + + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core + + + + version + + + + Usage: + + + + command-line options + + + + UI options + + + + Set language, for example "de_DE" (default: system locale) + + + + Start minimized + + + + Set SSL root certificates for payment request (default: -system-) + + + + Show splash screen on startup (default: 1) + + + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + + + + Error: Specified data directory "%1" can not be created. + + + + Error + + + + GB of free space available + + + + (of %1GB needed) + + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open + + + + + OptionsDialog + + Options + Opsionet + + + &Main + + + + Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. + + + + Pay transaction &fee + + + + Automatically start Myriadcoin after logging in to the system. + + + + &Start Myriadcoin on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + + Reset all client options to default. + + + + &Reset Options + + + + &Network + + + + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. + + + + Map port using &UPnP + + + + Proxy &IP: + + + + &Port: + + + + Port of the proxy (e.g. 9050) + + + + SOCKS &Version: + + + + SOCKS version of the proxy (e.g. 5) + + + + &Window + + + + Show only a tray icon after minimizing the window. + + + + &Minimize to the tray instead of the taskbar + + + + Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. + + + + M&inimize on close + + + + &Display + + + + User Interface &language: + + + + The user interface language can be set here. This setting will take effect after restarting Myriadcoin. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show Myriadcoin addresses in the transaction list or not. + + + + &Display addresses in transaction list + + + + Whether to show coin control features or not. + + + + &OK + + + + &Cancel + + + + default + + + + none + + + + Confirm options reset + + + + Client restart required to activate changes. + + + + Client will be shutdown, do you want to proceed? + + + + This change would require a client restart. + + + + The supplied proxy address is invalid. + + + + + OverviewPage + + Form + Formilarë + + + The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. + + + + Wallet + + + + Available: + + + + Your current spendable balance + + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + + + + Immature: + + + + Mined balance that has not yet matured + + + + Total: + + + + Your current total balance + + + + <b>Recent transactions</b> + <b>Transaksionet e fundit</b> + + + out of sync + + + + + PaymentServer + + URI handling + + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start myriadcoin: click-to-pay handler + + + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + + + + Network request error + + + + + QObject + + Myriadcoin + + + + Error: Specified data directory "%1" does not exist. + + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + + + + Error: Invalid combination of -regtest and -testnet. + + + + Myriadcoin Core didn't yet exit safely... + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Futni një adresë Bitkoini (p.sh. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + + + + &Copy Image + + + + Save QR Code + + + + PNG Image (*.png) + + + + + RPCConsole + + Client name + + + + N/A + + + + Client version + + + + &Information + + + + Debug window + + + + General + + + + Using OpenSSL version + + + + Startup time + + + + Network + + + + Name + + + + Number of connections + + + + Block chain + + + + Current number of blocks + + + + Estimated total blocks + + + + Last block time + + + + &Open + + + + &Console + + + + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + + Build date + + + + Debug log file + + + + Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the Myriadcoin RPC console. + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + Type <b>help</b> for an overview of available commands. + + + + %1 B + + + + %1 KB + + + + %1 MB + + + + %1 GB + + + + %1 m + + + + %1 h + + + + %1 h %2 m + + + + + ReceiveCoinsDialog + + &Amount: + + + + &Label: + &Etiketë: + + + &Message: + + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + + + + Clear + + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + + + + Remove the selected entries from the list + + + + Remove + + + + Copy label + + + + Copy message + + + + Copy amount + + + + + ReceiveRequestDialog + + QR Code + + + + Copy &URI + + + + Copy &Address + + + + &Save Image... + + + + Request payment to %1 + + + + Payment information + + + + URI + + + + Address + Adresë + + + Amount + Sasia + + + Label + Etiketë + + + Message + + + + Resulting URI too long, try to reduce the text for label / message. + + + + Error encoding URI into QR Code. + + + + + RecentRequestsTableModel + + Date + Data + + + Label + Etiketë + + + Message + + + + Amount + Sasia + + + (no label) + (pa etiketë) + + + (no message) + + + + (no amount) + + + + + SendCoinsDialog + + Send Coins + Dërgo Monedha + + + Coin Control Features + + + + Inputs... + + + + automatically selected + + + + Insufficient funds! + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + + Send to multiple recipients at once + Dërgo marrësve të ndryshëm njëkohësisht + + + Add &Recipient + + + + Clear all fields of the form. + + + + Clear &All + + + + Balance: + Balanca: + + + Confirm the send action + Konfirmo veprimin e dërgimit + + + S&end + + + + Confirm send coins + konfirmo dërgimin e monedhave + + + %1 to %2 + + + + Copy quantity + + + + Copy amount + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + + + + or + + + + The recipient address is not valid, please recheck. + + + + The amount to pay must be larger than 0. + Shuma e paguar duhet të jetë më e madhe se 0. + + + The amount exceeds your balance. + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + Duplicate address found, can only send to each address once per send operation. + + + + Transaction creation failed! + + + + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + + + + (no label) + (pa etiketë) + + + Warning: Unknown change address + + + + Are you sure you want to send? + + + + added as transaction fee + + + + Payment request expired + + + + Invalid payment address %1 + + + + + SendCoinsEntry + + A&mount: + Sh&uma: + + + Pay &To: + Paguaj &drejt: + + + The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Enter a label for this address to add it to your address book + Krijoni një etiketë për këtë adresë që t'ja shtoni librit të adresave + + + &Label: + &Etiketë: + + + Choose previously used address + + + + This is a normal payment. + + + + Alt+A + Alt+A + + + Paste address from clipboard + Ngjit nga memorja e sistemit + + + Alt+P + Alt+P + + + Remove this entry + + + + Message: + + + + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. + + + + + SignVerifyMessageDialog + + Signatures - Sign / Verify a Message + + + + &Sign Message + + + + You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. + + + + The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Choose previously used address + + + + Alt+A + Alt+A + + + Paste address from clipboard + Ngjit nga memorja e sistemit + + + Alt+P + Alt+P + + + Enter the message you want to sign here + + + + Signature + + + + Copy the current signature to the system clipboard + + + + Sign the message to prove you own this Myriadcoin address + + + + Sign &Message + + + + Reset all sign message fields + + + + Clear &All + + + + &Verify Message + + + + Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. + + + + The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Verify the message to ensure it was signed with the specified Myriadcoin address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Futni një adresë Bitkoini (p.sh. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + Click "Sign Message" to generate signature + + + + The entered address is invalid. + + + + Please check the address and try again. + + + + The entered address does not refer to a key. + + + + Wallet unlock was cancelled. + + + + Private key for the entered address is not available. + + + + Message signing failed. + + + + Message signed. + + + + The signature could not be decoded. + + + + Please check the signature and try again. + + + + The signature did not match the message digest. + + + + Message verification failed. + + + + Message verified. + + + + + SplashScreen + + Myriadcoin Core + + + + The Myriadcoin Core developers + + + + [testnet] + [testo rrjetin] + + + + TrafficGraphWidget + + KB/s + + + + + TransactionDesc + + Open until %1 + Hapur deri më %1 + + + conflicted + + + + %1/offline + + + + %1/unconfirmed + %1/I pakonfirmuar + + + %1 confirmations + %1 konfirmimet + + + Status + + + + , broadcast through %n node(s) + + + + Date + Data + + + Source + + + + Generated + + + + From + + + + To + + + + own address + + + + label + + + + Credit + + + + matures in %n more block(s) + + + + not accepted + + + + Debit + + + + Transaction fee + + + + Net amount + + + + Message + + + + Comment + + + + Transaction ID + + + + Merchant + + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + Debug information + + + + Transaction + + + + Inputs + + + + Amount + Sasia + + + true + + + + false + + + + , has not been successfully broadcast yet + , nuk është transmetuar me sukses deri tani + + + Open for %n more block(s) + + + + unknown + i/e panjohur + + + + TransactionDescDialog + + Transaction details + Detajet e transaksionit + + + This pane shows a detailed description of the transaction + Ky panel tregon një përshkrim të detajuar të transaksionit + + + + TransactionTableModel + + Date + Data + + + Type + Lloji + + + Address + Adresë + + + Amount + Sasia + + + Immature (%1 confirmations, will be available after %2) + + + + Open for %n more block(s) + + + + Open until %1 + Hapur deri më %1 + + + Confirmed (%1 confirmations) + I/E konfirmuar(%1 konfirmime) + + + This block was not received by any other nodes and will probably not be accepted! + Ky bllok është marrë nga ndonjë nyje dhe ka shumë mundësi të mos pranohet! + + + Generated but not accepted + I krijuar por i papranuar + + + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + + Received with + Marrë me + + + Received from + + + + Sent to + Dërguar drejt + + + Payment to yourself + Pagesë ndaj vetvetes + + + Mined + Minuar + + + (n/a) + (p/a) + + + Transaction status. Hover over this field to show number of confirmations. + + + + Date and time that the transaction was received. + + + + Type of transaction. + + + + Destination address of transaction. + + + + Amount removed from or added to balance. + + + + + TransactionView + + All + + + + Today + + + + This week + + + + This month + + + + Last month + + + + This year + + + + Range... + + + + Received with + Marrë me + + + Sent to + Dërguar drejt + + + To yourself + + + + Mined + Minuar + + + Other + + + + Enter address or label to search + + + + Min amount + + + + Copy address + + + + Copy label + + + + Copy amount + + + + Copy transaction ID + + + + Edit label + + + + Show transaction details + + + + Export Transaction History + + + + Exporting Failed + + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + + + + The transaction history was successfully saved to %1. + + + + Comma separated file (*.csv) + Skedar i ndarë me pikëpresje(*.csv) + + + Confirmed + + + + Date + Data + + + Type + Lloji + + + Label + Etiketë + + + Address + Adresë + + + Amount + Sasia + + + ID + + + + Range: + + + + to + + + + + WalletFrame + + No wallet has been loaded. + + + + + WalletModel + + Send Coins + Dërgo Monedha + + + + WalletView + + &Export + + + + Export the data in the current tab to a file + + + + Backup Wallet + + + + Wallet Data (*.dat) + + + + Backup Failed + + + + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. + + + + Backup Successful + + + + + bitcoin-core + + Usage: + + + + List commands + + + + Get help for a command + + + + Options: + + + + Specify configuration file (default: myriadcoin.conf) + + + + Specify pid file (default: myriadcoind.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 8333 or testnet: 18333) + + + + Maintain at most <n> connections to peers (default: 125) + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + Specify your own public address + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) + + + + Accept command line and JSON-RPC commands + + + + Myriadcoin Core RPC client version + + + + Run in the background as a daemon and accept commands + + + + Use the test network + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=myriadcoinrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + Bind to given address and always listen on it. Use [host]:port notation for IPv6 + + + + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) + + + + Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + + + + This is a pre-release test build - use at your own risk - do not use for mining or merchant applications + + + + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. + + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + Myriadcoin Core Daemon + + + + Block creation options: + + + + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + + Connect only to the specified node(s) + + + + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + + Corrupted block database detected + + + + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + Do not load the wallet and disable wallet RPC calls + + + + Do you want to rebuild the block database now? + + + + Error initializing block database + + + + Error initializing wallet database environment %s! + + + + Error loading block database + + + + Error opening block database + + + + Error: Disk space is low! + + + + Error: Wallet locked, unable to create transaction! + + + + Error: system error: + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + Failed to read block info + + + + Failed to read block + + + + Failed to sync block index + + + + Failed to write block index + + + + Failed to write block info + + + + Failed to write block + + + + Failed to write file info + + + + Failed to write to coin database + + + + Failed to write transaction index + + + + Failed to write undo data + + + + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + + Find peers using DNS lookup (default: 1 unless -connect) + + + + Force safe mode (default: 0) + + + + Generate coins (default: 0) + + + + How many blocks to check at startup (default: 288, 0 = all) + + + + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' + + + + Not enough file descriptors available. + + + + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + + Rebuild block chain index from current blk000??.dat files + + + + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + + Set the number of threads to service RPC calls (default: 4) + + + + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + + Verifying blocks... + + + + Verifying wallet... + + + + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + + + + Imports blocks from external blk000??.dat file + + + + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + + + + Information + + + + Invalid amount for -minrelaytxfee=<amount>: '%s' + + + + Invalid amount for -mintxfee=<amount>: '%s' + + + + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + + Maintain a full transaction index (default: 0) + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + Only accept block chain matching built-in checkpoints (default: 1) + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + Print block on startup, if found in block index + + + + Print block tree on startup (default: 0) + + + + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + + + + SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + Send command to Myriadcoin Core + + + + Send trace/debug info to console instead of debug.log file + + + + Set minimum block size in bytes (default: 0) + + + + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + Signing transaction failed + + + + Specify connection timeout in milliseconds (default: 5000) + + + + Start Myriadcoin Core Daemon + + + + System error: + + + + Transaction amount too small + + + + Transaction amounts must be positive + + + + Transaction too large + + + + Use UPnP to map the listening port (default: 0) + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + Username for JSON-RPC connections + + + + Warning + + + + Warning: This version is obsolete, upgrade required! + + + + Zapping all transactions from wallet... + + + + on startup + + + + version + + + + wallet.dat corrupt, salvage failed + + + + Password for JSON-RPC connections + + + + Allow JSON-RPC connections from specified IP address + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + Upgrade wallet to latest format + + + + Set key pool size to <n> (default: 100) + + + + Rescan the block chain for missing wallet transactions + + + + Use OpenSSL (https) for JSON-RPC connections + + + + Server certificate file (default: server.cert) + + + + Server private key (default: server.pem) + + + + This help message + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + Loading addresses... + + + + Error loading wallet.dat: Wallet corrupted + + + + Error loading wallet.dat: Wallet requires newer version of Myriadcoin + + + + Wallet needed to be rewritten: restart Myriadcoin to complete + + + + Error loading wallet.dat + + + + Invalid -proxy address: '%s' + + + + Unknown network specified in -onlynet: '%s' + + + + Unknown -socks proxy version requested: %i + + + + Cannot resolve -bind address: '%s' + + + + Cannot resolve -externalip address: '%s' + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + Invalid amount + + + + Insufficient funds + + + + Loading block index... + + + + Add a node to connect to and attempt to keep the connection open + + + + Loading wallet... + + + + Cannot downgrade wallet + + + + Cannot write default address + + + + Rescanning... + + + + Done loading + + + + To use the %s option + + + + Error + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + \ No newline at end of file diff --git a/src/qt/locale/bitcoin_sr.ts b/src/qt/locale/bitcoin_sr.ts index cba81578..f49f3bcc 100644 --- a/src/qt/locale/bitcoin_sr.ts +++ b/src/qt/locale/bitcoin_sr.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - О Myriadcoin-у + About Myriadcoin Core + - - <b>Myriadcoin</b> version - <b>Myriadcoin</b> верзија + <b>Myriadcoin Core</b> version + - This is experimental software. @@ -23,153 +19,128 @@ This product includes software developed by the OpenSSL Project for use in the O - Copyright - - The Myriadcoin developers + The Myriadcoin Core developers + + + + (%1-bit) AddressBookPage - - Address Book - Адресар - - - Double-click to edit address or label Кликните два пута да промените адресу и/или етикету - Create a new address Прави нову адресу - + &New + + + Copy the currently selected address to the system clipboard Копира изабрану адресу на системски клипборд - - &New Address - &Нова адреса + &Copy + - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Ово су Ваше Myriadcoin адресе за примање уплата. Можете да сваком пошиљаоцу дате другачију адресу да би пратили ко је вршио уплате. + C&lose + - &Copy Address - - Show &QR Code - Prikaži &QR kod - - - - Sign a message to prove you own a Myriadcoin address - - - - - Sign &Message - - - - Delete the currently selected address from the list - Export the data in the current tab to a file - &Export - - Verify a message to ensure it was signed with a specified Myriadcoin address - - - - - &Verify Message - - - - &Delete &Избриши - + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + Copy &Label - &Edit - - Send &Coins + Export Address List - - Export Address Book Data - Извоз података из адресара - - - Comma separated file (*.csv) Зарезом одвојене вредности (*.csv) - - Error exporting - Грешка током извоза + Exporting Failed + - - Could not write to file %1. - Није могуће писати у фајл %1. + There was an error trying to save the address list to %1. + AddressTableModel - Label Етикета - Address Адреса - (no label) (без етикете) @@ -177,140 +148,106 @@ This product includes software developed by the OpenSSL Project for use in the O AskPassphraseDialog - Passphrase Dialog - Enter passphrase Унесите лозинку - New passphrase Нова лозинка - Repeat new passphrase Поновите нову лозинку - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. Унесите нову лозинку за приступ новчанику.<br/>Молимо Вас да лозинка буде <b>10 или више насумице одабраних знакова</b>, или <b>осам или више речи</b>. - Encrypt wallet Шифровање новчаника - This operation needs your wallet passphrase to unlock the wallet. Ова акција захтева лозинку Вашег новчаника да би га откључала. - Unlock wallet Откључавање новчаника - This operation needs your wallet passphrase to decrypt the wallet. Ова акција захтева да унесете лозинку да би дешифловала новчаник. - Decrypt wallet Дешифровање новчаника - Change passphrase Промена лозинке - Enter the old and new passphrase to the wallet. Унесите стару и нову лозинку за шифровање новчаника. - Confirm wallet encryption Одобрите шифровање новчаника - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! Упозорење: Ако се ваш новчаник шифрује а потом изгубите лозинкзу, ви ћете <b>ИЗГУБИТИ СВЕ MYRIADCOIN-Е</b>! - Are you sure you wish to encrypt your wallet? Да ли сте сигурни да желите да се новчаник шифује? - 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. - - Warning: The Caps Lock key is on! - - Wallet encrypted Новчаник је шифрован - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. - Myriadcoin će se sad zatvoriti da bi završio proces enkripcije. Zapamti da enkripcija tvog novčanika ne može u potpunosti da zaštiti tvoje myriadcoine da ne budu ukradeni od malawarea koji bi inficirao tvoj kompjuter. + Myriadcoin će se sad zatvoriti da bi završio proces enkripcije. Zapamti da enkripcija tvog novčanika ne može u potpunosti da zaštiti tvoje bitcoine da ne budu ukradeni od malawarea koji bi inficirao tvoj kompjuter. - - - - Wallet encryption failed Неуспело шифровање новчаника - Wallet encryption failed due to an internal error. Your wallet was not encrypted. Настала је унутрашња грешка током шифровања новчаника. Ваш новчаник није шифрован. - - The supplied passphrases do not match. Лозинке које сте унели се не подударају. - Wallet unlock failed Неуспело откључавање новчаника - - - The passphrase entered for the wallet decryption was incorrect. Лозинка коју сте унели за откључавање новчаника је нетачна. - Wallet decryption failed Неуспело дешифровање новчаника - Wallet passphrase was successfully changed. Лозинка за приступ новчанику је успешно промењена. @@ -318,319 +255,286 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - Sign &message... - Synchronizing with network... Синхронизација са мрежом у току... - &Overview &Општи преглед - + Node + + + Show general overview of wallet Погледајте општи преглед новчаника - &Transactions &Трансакције - Browse transaction history Претражите историјат трансакција - - Edit the list of stored addresses and labels - Уредите запамћене адресе и њихове етикете - - - - Show the list of addresses for receiving payments - Прегледајте листу адреса на којима прихватате уплате - - - E&xit I&zlaz - Quit application Напустите програм - Show information about Myriadcoin - Прегледајте информације о Myriadcoin-у + Прегледајте информације о Bitcoin-у - About &Qt О &Qt-у - Show information about Qt Прегледајте информације о Qt-у - &Options... П&оставке... - &Encrypt Wallet... &Шифровање новчаника... - &Backup Wallet... &Backup новчаника - &Change Passphrase... Промени &лозинку... - + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + Importing blocks from disk... - Reindexing blocks on disk... - Send coins to a Myriadcoin address Пошаљите новац на myriadcoin адресу - Modify configuration options for Myriadcoin - Изаберите могућности myriadcoin-а + Изаберите могућности bitcoin-а - Backup wallet to another location - Change the passphrase used for wallet encryption Мењање лозинке којом се шифрује новчаник - &Debug window - Open debugging and diagnostic console - &Verify message... - - Myriadcoin - Wallet новчаник - &Send - &Receive - - &Addresses - - - - - &About Myriadcoin - &О Myriadcoin-у - - - &Show / Hide - Show or hide the main Window - Encrypt the private keys that belong to your wallet - Sign messages with your Myriadcoin addresses to prove you own them - Verify messages to ensure they were signed with specified Myriadcoin addresses - &File &Фајл - &Settings &Подешавања - &Help П&омоћ - Tabs toolbar Трака са картицама - - [testnet] [testnet] - + Myriadcoin Core + + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + Myriadcoin client - %n active connection(s) to Myriadcoin network %n активна веза са Myriadcoin мрежом%n активне везе са Myriadcoin мрежом%n активних веза са Myriadcoin мрежом - No block source available... - Processed %1 of %2 (estimated) blocks of transaction history. - Processed %1 blocks of transaction history. - %n hour(s) - %n day(s) - %n week(s) - + %1 and %2 + + + + %n year(s) + + + %1 behind - Last received block was generated %1 ago. - Transactions after this will not yet be visible. - Error - Warning - Information - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - Up to date Ажурно - Catching up... Ажурирање у току... - - Confirm transaction fee - - - - Sent transaction Послана трансакција - Incoming transaction Придошла трансакција - Date: %1 Amount: %2 Type: %3 @@ -639,29 +543,14 @@ Address: %4 Datum: %1⏎ Iznos: %2⏎ Tip: %3⏎ Adresa: %4⏎ - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> Новчаник јс <b>шифрован</b> и тренутно <b>откључан</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> Новчаник јс <b>шифрован</b> и тренутно <b>закључан</b> - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. @@ -669,329 +558,647 @@ Address: %4 ClientModel - Network Alert + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + + + + Bytes: + + + + Amount: + Iznos: + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + iznos + + + Address + Адреса + + + Date + datum + + + Confirmations + + + + Confirmed + Potvrdjen + + + Priority + + + + Copy address + kopiraj adresu + + + Copy label + kopiraj naziv + + + Copy amount + kopiraj iznos + + + Copy transaction ID + + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + + + + Dust + + + + yes + + + + no + + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + (без етикете) + + + change from %1 (%2) + + + + (change) + + + EditAddressDialog - Edit Address Измени адресу - &Label &Етикета - - The label associated with this address book entry + The label associated with this address list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. - &Address &Адреса - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - New receiving address - New sending address - Edit receiving address - Edit sending address - The entered address "%1" is already in the address book. Унешена адреса "%1" се већ налази у адресару. - The entered address "%1" is not a valid Myriadcoin address. - Could not unlock wallet. Немогуће откључати новчаник. - New key generation failed. - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt + A new data directory will be created. + + + + name + + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core - version верзија - Usage: Korišćenje: - command-line options - UI options - Set language, for example "de_DE" (default: system locale) - Start minimized - + Set SSL root certificates for payment request (default: -system-) + + + Show splash screen on startup (default: 1) + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + + + + Error: Specified data directory "%1" can not be created. + + + + Error + + + + GB of free space available + + + + (of %1GB needed) + + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open + + OptionsDialog - Options Поставке - &Main - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. - Pay transaction &fee - Automatically start Myriadcoin after logging in to the system. - &Start Myriadcoin on system login - + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + Reset all client options to default. - &Reset Options - &Network - + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. - Map port using &UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - - - - - &Connect through SOCKS proxy: - - - - Proxy &IP: - - IP address of the proxy (e.g. 127.0.0.1) - - - - &Port: - Port of the proxy (e.g. 9050) - SOCKS &Version: - SOCKS version of the proxy (e.g. 5) - &Window - Show only a tray icon after minimizing the window. - &Minimize to the tray instead of the taskbar - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. - M&inimize on close - &Display - User Interface &language: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. - &Unit to show amounts in: &Јединица за приказивање износа: - Choose the default subdivision unit to show in the interface and when sending coins. - Whether to show Myriadcoin addresses in the transaction list or not. - &Display addresses in transaction list - - &OK + Whether to show coin control features or not. - + &OK + &OK + + &Cancel - - &Apply - - - - default - + none + + + Confirm options reset - - Some settings may require a client restart to take effect. + Client restart required to activate changes. - - Do you want to proceed? + Client will be shutdown, do you want to proceed? - - - Warning + This change would require a client restart. - - - This setting will take effect after restarting Myriadcoin. - - - - The supplied proxy address is invalid. @@ -999,59 +1206,54 @@ Address: %4 OverviewPage - Form Форма - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. - - Balance: - - - - - Unconfirmed: - Непотврђено: - - - Wallet новчаник - + Available: + + + + Your current spendable balance + + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + + + Immature: - Mined balance that has not yet matured - + Total: + + + + Your current total balance + + + <b>Recent transactions</b> <b>Недавне трансакције</b> - - Your current balance - - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - - - - - out of sync @@ -1059,579 +1261,856 @@ Address: %4 PaymentServer - + URI handling + + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + Cannot start myriadcoin: click-to-pay handler + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + + + + Network request error + + - QRCodeDialog + QObject - - QR Code Dialog + Myriadcoin - - Request Payment - Zatraži isplatu - - - - Amount: - Iznos: - - - - Label: - &Етикета - - - - Message: - Poruka: - - - - &Save As... - &Snimi kao... - - - - Error encoding URI into QR Code. + Error: Specified data directory "%1" does not exist. - - The entered amount is invalid, please check. + Error: Cannot parse configuration file: %1. Only use key=value syntax. - - Resulting URI too long, try to reduce the text for label / message. + Error: Invalid combination of -regtest and -testnet. + + + + Myriadcoin Core didn't yet exit safely... + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Unesite Myriadcoin adresu (n.pr. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + + + + &Copy Image - Save QR Code - - PNG Images (*.png) + PNG Image (*.png) RPCConsole - Client name - - - - - - - - - - N/A - Client version - &Information - + Debug window + + + + General + + + Using OpenSSL version - Startup time - Network - + Name + + + Number of connections - - On testnet - - - - Block chain - Current number of blocks - Estimated total blocks - Last block time - &Open - - Command-line options - - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - - - - - &Show - - - - &Console - + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + Build date - - Myriadcoin - Debug window - - - - - Myriadcoin Core - - - - Debug log file - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. - Clear console - Welcome to the Myriadcoin RPC console. - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Type <b>help</b> for an overview of available commands. + + %1 B + + + + %1 KB + + + + %1 MB + + + + %1 GB + + + + %1 m + + + + %1 h + + + + %1 h %2 m + + + + + ReceiveCoinsDialog + + &Amount: + + + + &Label: + &Етикета + + + &Message: + + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + + + + Clear + + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + + + + Remove the selected entries from the list + + + + Remove + + + + Copy label + kopiraj naziv + + + Copy message + + + + Copy amount + kopiraj iznos + + + + ReceiveRequestDialog + + QR Code + + + + Copy &URI + + + + Copy &Address + + + + &Save Image... + + + + Request payment to %1 + + + + Payment information + + + + URI + + + + Address + Адреса + + + Amount + iznos + + + Label + Етикета + + + Message + + + + Resulting URI too long, try to reduce the text for label / message. + + + + Error encoding URI into QR Code. + + + + + RecentRequestsTableModel + + Date + datum + + + Label + Етикета + + + Message + + + + Amount + iznos + + + (no label) + (без етикете) + + + (no message) + + + + (no amount) + + SendCoinsDialog - - - - - - - - Send Coins Слање новца - + Coin Control Features + + + + Inputs... + + + + automatically selected + + + + Insufficient funds! + + + + Quantity: + + + + Bytes: + + + + Amount: + Iznos: + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + Send to multiple recipients at once - Add &Recipient - - Remove all transaction fields - Ukloni sva polja sa transakcijama + Clear all fields of the form. + - Clear &All - Balance: - - 123.456 BTC - - - - Confirm the send action Потврди акцију слања - S&end &Пошаљи - - <b>%1</b> to %2 (%3) - - - - Confirm send coins - - Are you sure you want to send %1? - Да ли сте сигурни да желите да пошаљете %1? + %1 to %2 + - - and - и + Copy quantity + + + + Copy amount + kopiraj iznos + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + + + + or + - The recipient address is not valid, please recheck. - The amount to pay must be larger than 0. - The amount exceeds your balance. - The total exceeds your balance when the %1 transaction fee is included. - Duplicate address found, can only send to each address once per send operation. - - Error: Transaction creation failed! + Transaction creation failed! - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + + + + (no label) + (без етикете) + + + Warning: Unknown change address + + + + Are you sure you want to send? + + + + added as transaction fee + + + + Payment request expired + + + + Invalid payment address %1 SendCoinsEntry - - Form - Форма - - - A&mount: - Pay &To: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book - &Label: &Етикета - - Choose address from address book - Izaberite adresu iz adresara - - - - Alt+A + Choose previously used address - + This is a normal payment. + + + + Alt+A + Alt+ + + Paste address from clipboard - Alt+P + Alt+П + + + Remove this entry - - Remove this recipient + Message: + Poruka: + + + This is a verified payment request. - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Unesite Myriadcoin adresu (n.pr. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. + SignVerifyMessageDialog - Signatures - Sign / Verify a Message - &Sign Message - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book + Choose previously used address - - Alt+A - + Alt+A - Paste address from clipboard - Alt+P - + Alt+П - Enter the message you want to sign here - Signature - Copy the current signature to the system clipboard - Sign the message to prove you own this Myriadcoin address - Sign &Message - Reset all sign message fields - - Clear &All - &Verify Message - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address - Verify &Message - Reset all verify message fields - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Unesite Myriadcoin adresu (n.pr. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature - - Enter Myriadcoin signature - - - - - The entered address is invalid. - - - - Please check the address and try again. - - The entered address does not refer to a key. - Wallet unlock was cancelled. - Private key for the entered address is not available. - Message signing failed. - Message signed. - The signature could not be decoded. - - Please check the signature and try again. - The signature did not match the message digest. - Message verification failed. - Message verified. @@ -1639,186 +2118,160 @@ Address: %4 SplashScreen - - The Myriadcoin developers + Myriadcoin Core + + + + The Myriadcoin Core developers - [testnet] [testnet] + + TrafficGraphWidget + + KB/s + + + TransactionDesc - Open until %1 Otvorite do %1 - + conflicted + + + %1/offline - %1/unconfirmed %1/nepotvrdjeno - %1 confirmations %1 potvrde - Status - , broadcast through %n node(s) - Date datum - Source - Generated - - From - - - To - - own address - label етикета - - - - - Credit - matures in %n more block(s) - not accepted - - - - Debit - Transaction fee - Net amount - Message - Comment - Transaction ID - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Merchant + + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Debug information - Transaction - Inputs - Amount iznos - true - false - , has not been successfully broadcast yet , nije još uvek uspešno emitovan - Open for %n more block(s) - unknown nepoznato @@ -1826,12 +2279,10 @@ Address: %4 TransactionDescDialog - Transaction details detalji transakcije - This pane shows a detailed description of the transaction Ovaj odeljak pokazuje detaljan opis transakcije @@ -1839,117 +2290,102 @@ Address: %4 TransactionTableModel - Date datum - Type tip - Address Адреса - Amount iznos + + Immature (%1 confirmations, will be available after %2) + + - Open for %n more block(s) - Open until %1 Otvoreno do %1 - - Offline (%1 confirmations) - Offline * van mreže (%1 potvrdjenih) - - - - Unconfirmed (%1 of %2 confirmations) - Nepotvrdjeno (%1 of %2 potvrdjenih) - - - Confirmed (%1 confirmations) Potvrdjena (%1 potvrdjenih) - - - Mined balance will be available when it matures in %n more block(s) - - - This block was not received by any other nodes and will probably not be accepted! Ovaj blok nije primljen od ostalih čvorova (nodova) i verovatno neće biti prihvaćen! - Generated but not accepted Generisan ali nije prihvaćen - + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + Received with Primljen sa - Received from Primljeno od - Sent to Poslat ka - Payment to yourself Isplata samom sebi - Mined Minirano - (n/a) (n/a) - Transaction status. Hover over this field to show number of confirmations. Status vaše transakcije. Predjite mišem preko ovog polja da bi ste videli broj konfirmacija - Date and time that the transaction was received. Datum i vreme primljene transakcije. - Type of transaction. Tip transakcije - Destination address of transaction. Destinacija i adresa transakcije - Amount removed from or added to balance. Iznos odbijen ili dodat balansu. @@ -1957,176 +2393,156 @@ Address: %4 TransactionView - - All Sve - Today Danas - This week ove nedelje - This month Ovog meseca - Last month Prošlog meseca - This year Ove godine - Range... Opseg... - Received with Primljen sa - Sent to Poslat ka - To yourself Vama - samom sebi - Mined Minirano - Other Drugi - Enter address or label to search Navedite adresu ili naziv koji bi ste potražili - Min amount Min iznos - Copy address kopiraj adresu - Copy label kopiraj naziv - Copy amount kopiraj iznos - Copy transaction ID - Edit label promeni naziv - Show transaction details - - Export Transaction Data - Izvezi podatke o transakcijama + Export Transaction History + + + + Exporting Failed + + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + + + + The transaction history was successfully saved to %1. + - Comma separated file (*.csv) Зарезом одвојене вредности (*.csv) - Confirmed Potvrdjen - Date datum - Type tip - Label Етикета - Address Адреса - Amount iznos - ID - - Error exporting - Грешка током извоза - - - - Could not write to file %1. - Није могуће писати у фајл %1. - - - Range: Opseg: - to do + + WalletFrame + + No wallet has been loaded. + + + WalletModel - Send Coins Слање новца @@ -2134,162 +2550,122 @@ Address: %4 WalletView - &Export - Export the data in the current tab to a file - Backup Wallet - Wallet Data (*.dat) - Backup Failed - - There was an error trying to save the wallet data to the new location. + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. - Backup Successful - - - The wallet data was successfully saved to the new location. - - bitcoin-core - - Myriadcoin version - Myriadcoin верзија - - - Usage: Korišćenje: - - Send command to -server or myriadcoind - Pošalji naredbu na -server ili myriadcoinid - - - - List commands Listaj komande - Get help for a command Zatraži pomoć za komande - Options: Opcije - Specify configuration file (default: myriadcoin.conf) Potvrdi željeni konfiguracioni fajl (podrazumevani:myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) Konkretizuj pid fajl (podrazumevani: myriadcoind.pid) - Specify data directory Gde je konkretni data direktorijum - - Set database cache size in megabytes (default: 25) - - - - Listen for connections on <port> (default: 8333 or testnet: 18333) Slušaj konekcije na <port> (default: 8333 or testnet: 18333) - Maintain at most <n> connections to peers (default: 125) Održavaj najviše <n> konekcija po priključku (default: 125) - Connect to a node to retrieve peer addresses, and disconnect - Specify your own public address - Threshold for disconnecting misbehaving peers (default: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) - Accept command line and JSON-RPC commands Prihvati komandnu liniju i JSON-RPC komande - + Myriadcoin Core RPC client version + + + Run in the background as a daemon and accept commands Radi u pozadini kao daemon servis i prihvati komande - Use the test network Koristi testnu mrežu - Accept connections from outside (default: 1 if no -proxy or -connect) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2304,612 +2680,686 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications - + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. - + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + Attempt to recover private keys from a corrupt wallet.dat - + Myriadcoin Core Daemon + + + Block creation options: - + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + Connect only to the specified node(s) - + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + Corrupted block database detected - + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + Discover own IP address (default: 1 when listening and no -externalip) - + Do not load the wallet and disable wallet RPC calls + + + Do you want to rebuild the block database now? - Error initializing block database - Error initializing wallet database environment %s! - Error loading block database - Error opening block database - Error: Disk space is low! - Error: Wallet locked, unable to create transaction! - Error: system error: - Failed to listen on any port. Use -listen=0 if you want this. - Failed to read block info - Failed to read block - Failed to sync block index - Failed to write block index - Failed to write block info - Failed to write block - Failed to write file info - Failed to write to coin database - Failed to write transaction index - Failed to write undo data - + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + Find peers using DNS lookup (default: 1 unless -connect) - + Force safe mode (default: 0) + + + Generate coins (default: 0) - How many blocks to check at startup (default: 288, 0 = all) - - How thorough the block verification is (0-4, default: 3) + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' - Not enough file descriptors available. - + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + Rebuild block chain index from current blk000??.dat files - + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + Set the number of threads to service RPC calls (default: 4) - + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + Verifying blocks... - Verifying wallet... - + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + + + Imports blocks from external blk000??.dat file - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) - Information - - Invalid -tor address: '%s' - - - - Invalid amount for -minrelaytxfee=<amount>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' - + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + Maintain a full transaction index (default: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Only accept block chain matching built-in checkpoints (default: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - Output extra debugging information. Implies all other -debug* options + Print block on startup, if found in block index - - Output extra network debugging information + Print block tree on startup (default: 0) - - Prepend debug output with timestamp + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) - - Select the version of socks proxy to use (4-5, default: 5) + Send command to Myriadcoin Core - Send trace/debug info to console instead of debug.log file - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - Set minimum block size in bytes (default: 0) - + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + Shrink debug.log file on client startup (default: 1 when no -debug) - Signing transaction failed - Specify connection timeout in milliseconds (default: 5000) - + Start Myriadcoin Core Daemon + + + System error: - Transaction amount too small - Transaction amounts must be positive - Transaction too large - Use UPnP to map the listening port (default: 0) - Use UPnP to map the listening port (default: 1 when listening) - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - Username for JSON-RPC connections Korisničko ime za JSON-RPC konekcije - Warning - Warning: This version is obsolete, upgrade required! - - You need to rebuild the databases using -reindex to change -txindex + Zapping all transactions from wallet... - + on startup + + + + version + верзија + + wallet.dat corrupt, salvage failed - Password for JSON-RPC connections Lozinka za JSON-RPC konekcije - Allow JSON-RPC connections from specified IP address Dozvoli JSON-RPC konekcije sa posebne IP adrese - Send commands to node running on <ip> (default: 127.0.0.1) Pošalji komande to nodu koji radi na <ip> (default: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) - Upgrade wallet to latest format - Set key pool size to <n> (default: 100) Odredi veličinu zaštićenih ključeva na <n> (default: 100) - Rescan the block chain for missing wallet transactions Ponovo skeniraj lanac blokova za nedostajuće transakcije iz novčanika - Use OpenSSL (https) for JSON-RPC connections Koristi OpenSSL (https) za JSON-RPC konekcije - Server certificate file (default: server.cert) - Server private key (default: server.pem) privatni ključ za Server (podrazumevan: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Prihvatljive cifre (podrazumevano: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - This help message Ova poruka Pomoći - Unable to bind to %s on this computer (bind returned error %d, %s) - - Connect through socks proxy - - - - Allow DNS lookups for -addnode, -seednode and -connect - Loading addresses... učitavam adrese.... - Error loading wallet.dat: Wallet corrupted - + Грешка током учитавања wallet.dat: Новчаник је покварен - Error loading wallet.dat: Wallet requires newer version of Myriadcoin - + Грешка током учитавања wallet.dat: Новчанику је неопходна нова верзија Bitcoin-a. - Wallet needed to be rewritten: restart Myriadcoin to complete - Error loading wallet.dat - + Грешка током учитавања wallet.dat - Invalid -proxy address: '%s' - Unknown network specified in -onlynet: '%s' - Unknown -socks proxy version requested: %i - Cannot resolve -bind address: '%s' - Cannot resolve -externalip address: '%s' - Invalid amount for -paytxfee=<amount>: '%s' - Invalid amount - Insufficient funds - Loading block index... Učitavam blok indeksa... - Add a node to connect to and attempt to keep the connection open - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - Loading wallet... Новчаник се учитава... - Cannot downgrade wallet - Cannot write default address - Rescanning... Ponovo skeniram... - Done loading Završeno učitavanje - To use the %s option - Error - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_sv.ts b/src/qt/locale/bitcoin_sv.ts index 5e7e53b8..1b2aaef9 100644 --- a/src/qt/locale/bitcoin_sv.ts +++ b/src/qt/locale/bitcoin_sv.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - Om Myriadcoin + About Myriadcoin Core + Om Myriadcoin Core - - <b>Myriadcoin</b> version - <b>Myriadcoin</b>-version + <b>Myriadcoin Core</b> version + <b>Myriadcoin Core</b>-version - This is experimental software. @@ -29,153 +25,128 @@ Distribuerad under mjukvarulicensen MIT/X11, se den medföljande filen COPYING e Denna produkten innehåller mjukvara utvecklad av OpenSSL Project för användning i OpenSSL Toolkit (http://www.openssl.org/) och kryptografisk mjukvara utvecklad av Eric Young (eay@cryptsoft.com) samt UPnP-mjukvara skriven av Thomas Bernard. - Copyright Copyright - - The Myriadcoin developers - Myriadcoin-utvecklarna + The Myriadcoin Core developers + Myriadcoin Core-utvecklarna + + + (%1-bit) + (%1-bit) AddressBookPage - - Address Book - Adressbok - - - Double-click to edit address or label - Dubbel-klicka för att ändra adressen eller etiketten + Dubbelklicka för att ändra adressen eller etiketten - Create a new address Skapa ny adress - + &New + &Ny + + Copy the currently selected address to the system clipboard Kopiera den markerade adressen till systemets Urklipp - - &New Address - &Ny adress + &Copy + &Kopiera - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Detta är dina Myriadcoin-adresser för att ta emot betalningar. Du kan ge varje avsändare en egen adress så att du kan hålla reda på vem som betalar dig. + C&lose + S&täng - &Copy Address &Kopiera adress - - Show &QR Code - Visa &QR-kod - - - - Sign a message to prove you own a Myriadcoin address - Signera ett meddelande för att bevisa att du äger denna adress - - - - Sign &Message - Signera &Meddelande - - - Delete the currently selected address from the list Ta bort den valda adressen från listan - Export the data in the current tab to a file Exportera informationen i den nuvarande fliken till en fil - &Export &Exportera - - Verify a message to ensure it was signed with a specified Myriadcoin address - Verifiera meddelandet för att vara säker på att den var signerad med den specificerade Myriadcoin-adressen - - - - &Verify Message - &Verifiera Meddelande - - - &Delete &Radera - - These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - Detta är dina Myriadcoin adresser för att skicka betalningar. Kolla alltid summan och den mottagande adressen innan du skickar Myriadcoins. + Choose the address to send coins to + Välj en adress att sända betalning till + + + Choose the address to receive coins with + Välj en adress att ta emot betalning till + + + C&hoose + V&älj + + + Sending addresses + Avsändaradresser + + + Receiving addresses + Mottagaradresser + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + Detta är dina Myriadcoin adresser för att skicka betalningar. Kolla alltid summan och den mottagande adressen innan du skickar Bitcoins. + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Detta är dina Myriadcoin adresser för att ta emot betalningar. Det rekommenderas att använda en ny mottagningsadress för varje transaktion. - Copy &Label Kopiera &etikett - &Edit &Editera - - Send &Coins - Skicka &Myriadcoins + Export Address List + Exportera adresslistan - - Export Address Book Data - Exportera Adressbok - - - Comma separated file (*.csv) Kommaseparerad fil (*.csv) - - Error exporting - Fel vid export + Exporting Failed + Exporteringen misslyckades - - Could not write to file %1. - Kunde inte skriva till filen %1. + There was an error trying to save the address list to %1. + Det inträffade ett fel när adresslistan skulle sparas till %1. AddressTableModel - Label Etikett - Address Adress - (no label) (Ingen etikett) @@ -183,140 +154,106 @@ Denna produkten innehåller mjukvara utvecklad av OpenSSL Project för användni AskPassphraseDialog - Passphrase Dialog Lösenords Dialog - Enter passphrase Ange lösenord - New passphrase Nytt lösenord - Repeat new passphrase Upprepa nytt lösenord - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. Ange plånbokens nya lösenord. <br/> Använd ett lösenord på <b>10 eller fler slumpmässiga tecken,</b> eller <b>åtta eller fler ord.</b> - Encrypt wallet Kryptera plånbok - This operation needs your wallet passphrase to unlock the wallet. Denna operation behöver din plånboks lösenord för att låsa upp plånboken. - Unlock wallet Lås upp plånbok - This operation needs your wallet passphrase to decrypt the wallet. Denna operation behöver din plånboks lösenord för att dekryptera plånboken. - Decrypt wallet Dekryptera plånbok - Change passphrase Ändra lösenord - Enter the old and new passphrase to the wallet. Ange plånbokens gamla och nya lösenord. - Confirm wallet encryption Bekräfta kryptering av plånbok - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! VARNING: Om du krypterar din plånbok och glömmer ditt lösenord, kommer du att <b>FÖRLORA ALLA DINA TILLGÅNGAR</b>! - Are you sure you wish to encrypt your wallet? Är du säker på att du vill kryptera din plånbok? - 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. VIKTIGT: Alla tidigare säkerhetskopior du har gjort av plånbokens fil ska ersättas med den nya genererade, krypterade plånboks filen. Av säkerhetsskäl kommer tidigare säkerhetskopior av den okrypterade plånboks filen blir oanvändbara när du börjar använda en ny, krypterad plånbok. - - Warning: The Caps Lock key is on! Varning: Caps Lock är påslaget! - - Wallet encrypted Plånboken är krypterad - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. Programmet kommer nu att stänga ner för att färdigställa krypteringen. Tänk på att en krypterad plånbok inte skyddar mot stöld om din dator är infekterad med en keylogger. - - - - Wallet encryption failed Kryptering av plånbok misslyckades - Wallet encryption failed due to an internal error. Your wallet was not encrypted. Kryptering av plånbok misslyckades på grund av ett internt fel. Din plånbok blev inte krypterad. - - The supplied passphrases do not match. De angivna lösenorden överensstämmer inte. - Wallet unlock failed Upplåsning av plånbok misslyckades - - - The passphrase entered for the wallet decryption was incorrect. Lösenordet för dekryptering av plånbok var felaktig. - Wallet decryption failed Dekryptering av plånbok misslyckades - Wallet passphrase was successfully changed. Plånbokens lösenord har ändrats. @@ -324,319 +261,286 @@ Denna produkten innehåller mjukvara utvecklad av OpenSSL Project för användni BitcoinGUI - Sign &message... Signera &meddelande... - Synchronizing with network... Synkroniserar med nätverk... - &Overview &Översikt - + Node + Nod + + Show general overview of wallet Visa översiktsvy av plånbok - &Transactions &Transaktioner - Browse transaction history Bläddra i transaktionshistorik - - Edit the list of stored addresses and labels - Redigera listan med lagrade adresser och etiketter - - - - Show the list of addresses for receiving payments - Visa listan med adresser för att ta emot betalningar - - - E&xit &Avsluta - Quit application Avsluta programmet - Show information about Myriadcoin Visa information om Myriadcoin - About &Qt Om &Qt - Show information about Qt Visa information om Qt - &Options... &Alternativ... - &Encrypt Wallet... &Kryptera plånbok... - &Backup Wallet... &Säkerhetskopiera plånbok... - &Change Passphrase... &Byt Lösenord... - + &Sending addresses... + Av&sändaradresser... + + + &Receiving addresses... + Mottaga&radresser... + + + Open &URI... + Öppna &URI... + + Importing blocks from disk... Importerar block från disk... - Reindexing blocks on disk... Återindexerar block på disken... - Send coins to a Myriadcoin address - Skicka mynt till en Myriadcoin-adress + Skicka mynt till en Bitcoin-adress - Modify configuration options for Myriadcoin Ändra konfigurationsalternativ för Myriadcoin - Backup wallet to another location Säkerhetskopiera plånboken till en annan plats - Change the passphrase used for wallet encryption Byt lösenord för kryptering av plånbok - &Debug window &Debug fönster - Open debugging and diagnostic console Öppna debug- och diagnostikkonsolen - &Verify message... &Verifiera meddelande... - - Myriadcoin Myriadcoin - Wallet Plånbok - &Send &Skicka - &Receive &Ta emot - - &Addresses - &Adresser - - - - &About Myriadcoin - &Om Myriadcoin - - - &Show / Hide &Visa / Göm - Show or hide the main Window Visa eller göm huvudfönstret - Encrypt the private keys that belong to your wallet Kryptera de privata nycklar som tillhör din plånbok - Sign messages with your Myriadcoin addresses to prove you own them - Signera meddelanden med din Myriadcoinadress för att bevisa att du äger dem + Signera meddelanden med din Bitcoinadress för att bevisa att du äger dem - Verify messages to ensure they were signed with specified Myriadcoin addresses - Verifiera meddelanden för att vara säker på att de var signerade med den specificerade Myriadcoin-adressen + Verifiera meddelanden för att vara säker på att de var signerade med den specificerade Bitcoin-adressen - &File &Arkiv - &Settings &Inställningar - &Help &Hjälp - Tabs toolbar Verktygsfält för Tabbar - - [testnet] [testnet] - - Myriadcoin client - Myriadcoin-klient - - - - %n active connection(s) to Myriadcoin network - %n aktiv anslutning till Myriadcoin-nätverket%n aktiva anslutningar till Myriadcoin-nätverket + Myriadcoin Core + Myriadcoin Kärna + + + Request payments (generates QR codes and myriadcoin: URIs) + Begär betalning (genererar QR-koder och bitcoin-URI) + + + &About Myriadcoin Core + &Om Myriadcoin Core + + + Show the list of used sending addresses and labels + Visa listan av använda avsändaradresser och etiketter + + + Show the list of used receiving addresses and labels + Visa listan av använda mottagningsadresser och etiketter + + + Open a myriadcoin: URI or payment request + Öppna en myriadcoin: URI eller betalningsbegäran + + + &Command-line options + &Kommandoradsalternativ + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + Visa Myriadcoin Core hjälpmeddelande för att få en lista med möjliga Myriadcoin kommandoradsalternativ. + + + Myriadcoin client + Bitcoin-klient + + + %n active connection(s) to Myriadcoin network + %n aktiv anslutning till Bitcoin-nätverket%n aktiva anslutningar till Bitcoin-nätverket - No block source available... Ingen block-källa tillgänglig... - Processed %1 of %2 (estimated) blocks of transaction history. Bearbetat %1 av %2 (uppskattade) block av transaktionshistorik. - Processed %1 blocks of transaction history. Bearbetat %1 block i transaktionshistoriken. - %n hour(s) %n timme%n timmar - %n day(s) %n dag%n dagar - %n week(s) %n vecka%n veckor - + %1 and %2 + %1 och %2 + + + %n year(s) + %n år%n år + + %1 behind %1 efter - Last received block was generated %1 ago. Senast mottagna block genererades %1 sen. - Transactions after this will not yet be visible. Transaktioner efter denna kommer inte ännu vara synliga. - Error Fel - Warning Varning - Information Information - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - Transaktionen överskrider storleksgränsen. Du kan dock fortfarande skicka den mot en kostnad av %1, som går till noderna som behandlar din transaktion och bidrar till nätverket. Vill du betala denna avgift? - - - Up to date Uppdaterad - Catching up... Hämtar senaste... - - Confirm transaction fee - Bekräfta överföringsavgift - - - Sent transaction Transaktion skickad - Incoming transaction Inkommande transaktion - Date: %1 Amount: %2 Type: %3 @@ -649,29 +553,14 @@ Adress: %4 - - - URI handling - URI hantering - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - URI går inte att tolkas! Detta kan orsakas av en ogiltig Myriadcoin-adress eller felaktiga URI parametrar. - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> Denna plånbok är <b>krypterad</b> och för närvarande <b>olåst</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> Denna plånbok är <b>krypterad</b> och för närvarande <b>låst</b> - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. Ett allvarligt fel har uppstått. Myriadcoin kan inte längre köras säkert och kommer att avslutas. @@ -679,329 +568,647 @@ Adress: %4 ClientModel - Network Alert Nätverkslarm + + CoinControlDialog + + Coin Control Address Selection + Adressval för myntkontroll + + + Quantity: + Kvantitet: + + + Bytes: + Antal Byte: + + + Amount: + Belopp: + + + Priority: + Prioritet: + + + Fee: + Avgift: + + + Low Output: + Låg utmatning: + + + After Fee: + Efter avgift: + + + Change: + Växel: + + + (un)select all + (av)välj allt + + + Tree mode + Trädmetod + + + List mode + Listmetod + + + Amount + Mängd + + + Address + Adress + + + Date + Datum + + + Confirmations + Konfirmationer + + + Confirmed + Bekräftad + + + Priority + Prioritet + + + Copy address + Kopiera adress + + + Copy label + Kopiera etikett + + + Copy amount + Kopiera belopp + + + Copy transaction ID + Kopiera transaktions ID + + + Lock unspent + Lås ospenderat + + + Unlock unspent + Lås upp ospenderat + + + Copy quantity + Kopiera kvantitet + + + Copy fee + Kopiera avgift + + + Copy after fee + Kopiera efter avgift + + + Copy bytes + Kopiera byte + + + Copy priority + Kopiera prioritet + + + Copy low output + Kopiera låg utmatning + + + Copy change + Kopiera växel + + + highest + högst + + + higher + högre + + + high + hög + + + medium-high + medelhög + + + medium + medel + + + low-medium + lågmedel + + + low + låg + + + lower + lägre + + + lowest + lägst + + + (%1 locked) + (%1 låst) + + + none + ingen + + + Dust + Damm + + + yes + ja + + + no + nej + + + This label turns red, if the transaction size is greater than 1000 bytes. + Denna etikett blir röd om transaktionen överstiger 1000 byte. + + + This means a fee of at least %1 per kB is required. + Detta betyder att en avgift på minst %1 per kB behövs. + + + Can vary +/- 1 byte per input. + Kan variera +/- 1 byte per inmatning. + + + Transactions with higher priority are more likely to get included into a block. + Transaktioner med högre prioritet har större sannolikhet att inkluderas i ett block. + + + This label turns red, if the priority is smaller than "medium". + Denna etikett blir röd om prioriteten är mindre än "medium". + + + This label turns red, if any recipient receives an amount smaller than %1. + Denna etikett blir röd om någon mottagare får en betalning som är mindre än %1. + + + This means a fee of at least %1 is required. + Detta betyder att en avgift på minst %1 behövs. + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + Belopp mindre än 0.546 gånger den minsta vidarebefordringsavgiften visa som damm. + + + This label turns red, if the change is smaller than %1. + Denna etikett blir röd om växeln är mindre än %1. + + + (no label) + (Ingen etikett) + + + change from %1 (%2) + växel från %1 (%2) + + + (change) + (växel) + + EditAddressDialog - Edit Address Redigera Adress - &Label &Etikett - - The label associated with this address book entry - Den etikett som är associerad med detta adressboksinlägg + The label associated with this address list entry + Etiketten associerad med denna adresslistas post + + + The address associated with this address list entry. This can only be modified for sending addresses. + Adressen associerad med denna adresslistas post. Detta kan bara ändras för sändningsadresser. - &Address &Adress - - The address associated with this address book entry. This can only be modified for sending addresses. - Adressen som är associerad med detta adressboksinlägg. Detta kan enbart ändras för sändande adresser. - - - New receiving address Ny mottagaradress - New sending address Ny avsändaradress - Edit receiving address Redigera mottagaradress - Edit sending address Redigera avsändaradress - The entered address "%1" is already in the address book. Den angivna adressen "%1" finns redan i adressboken. - The entered address "%1" is not a valid Myriadcoin address. - Den angivna adressen "%1" är inte en giltig Myriadcoin-adress. + Den angivna adressen "%1" är inte en giltig Bitcoin-adress. - Could not unlock wallet. Plånboken kunde inte låsas upp. - New key generation failed. Misslyckades med generering av ny nyckel. - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt - Myriadcoin-Qt + A new data directory will be created. + En ny datakatalog kommer att skapas. + + + name + namn + + + Directory already exists. Add %1 if you intend to create a new directory here. + Katalogen finns redan. Läggtill %1 om du vill skapa en ny katalog här. + + + Path already exists, and is not a directory. + Sökvägen finns redan, och är inte en katalog. + + + Cannot create data directory here. + Kan inte skapa datakatalog här. + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + Myriadcoin Core - Kommandoradsalternativ + + + Myriadcoin Core + Myriadcoin Kärna - version version - Usage: Användning: - command-line options kommandoradsalternativ - UI options UI alternativ - Set language, for example "de_DE" (default: system locale) Ändra språk, till exempel "de_DE" (förvalt: systemets språk) - Start minimized Starta som minimerad - + Set SSL root certificates for payment request (default: -system-) + Sätt SSL root-certifikat för betalningsbegäran (förvalt: -system-) + + Show splash screen on startup (default: 1) Visa startbilden vid uppstart (förvalt: 1) + + Choose data directory on startup (default: 0) + Välj datakatalog vid uppstart (förvalt: 0) + + + + Intro + + Welcome + Välkommen + + + Welcome to Myriadcoin Core. + Välkommen till Myriadcoin Core. + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + Eftersom detta är första gången programmet startas får du välja var Myriadcoin Core skall lagra sitt data. + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + Myriadcoin Core kommer att ladda ner och spara en kopia av Myriadcoin blockkedjan. Åtminstone %1GB av data kommer att sparas i denna katalog, och den kommer att växa över tiden. Plånboken kommer också att sparas i denna katalog. + + + Use the default data directory + Använd den förvalda datakatalogen + + + Use a custom data directory: + Använd en anpassad datakatalog: + + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" can not be created. + Fel: Den angivna datakatalogen "%1" kan inte skapas. + + + Error + Fel + + + GB of free space available + GB ledigt utrymme är tillgängligt + + + (of %1GB needed) + (av %1GB behövs) + + + + OpenURIDialog + + Open URI + Öppna URI + + + Open payment request from URI or file + Öppna betalningsbegäran från URI eller fil + + + URI: + URI: + + + Select payment request file + Välj betalningsbegäransfil + + + Select payment request file to open + Välj betalningsbegäransfil att öppna + OptionsDialog - Options Alternativ - &Main &Allmänt - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Valfri transaktionsavgift per kB som ser till att dina transaktioner behandlas snabbt. De flesta transaktioner är 1 kB. - Pay transaction &fee Betala överförings&avgift - Automatically start Myriadcoin after logging in to the system. Starta Myriadcoin automatiskt efter inloggning. - &Start Myriadcoin on system login &Starta Myriadcoin vid systemstart - + Size of &database cache + Storleken på &databascache + + + MB + MB + + + Number of script &verification threads + Antalet skript & verifikationstrådar + + + Connect to the Myriadcoin network through a SOCKS proxy. + Anslut till Bitcoin-nätverket genom en SOCKS-proxy. + + + &Connect through SOCKS proxy (default proxy): + &Anslut genom SOCKS-proxy (förvald proxy): + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + Proxyns IP-adress (t.ex. IPv4: 127.0.0.1 / IPv6: ::1) + + + 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 |. + Tredjeparts URL:er (t.ex. en block utforskare) som finns i transaktionstabben som ett menyval i sammanhanget. %s i URL:en ersätts med tansaktionshashen. Flera URL:er är separerade med vertikala streck |. + + + Third party transaction URLs + Tredjeparts transaktions-URL:er + + + Active command-line options that override above options: + Aktiva kommandoradsalternativ som överrider alternativen ovan: + + Reset all client options to default. Återställ alla klient inställningar till förvalen. - &Reset Options &Återställ Alternativ - &Network &Nätverk - - Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. - Öppna automatiskt Myriadcoin-klientens port på routern. Detta fungerar endast om din router har UPnP aktiverat. + (0 = auto, <0 = leave that many cores free) + (0 = auto, <0 = lämna så många kärnor lediga) + + + W&allet + &Plånbok + + + Expert + Expert + + + Enable coin &control features + Aktivera mynt och kontrollfunktioner + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + Om du avaktiverar betalning med okonfirmerade växel, kan inte växeln från en transaktion användas förrän den transaktionen har minst en konfirmation. + + + &Spend unconfirmed change + &Spendera okonfirmerad växel + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. + Öppna automatiskt Bitcoin-klientens port på routern. Detta fungerar endast om din router har UPnP aktiverat. - Map port using &UPnP Tilldela port med hjälp av &UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - Anslut till Myriadcoin-nätverket genom en SOCKS-proxy (t.ex. när du ansluter genom Tor). - - - - &Connect through SOCKS proxy: - &Anslut genom SOCKS-proxy: - - - Proxy &IP: Proxy-&IP: - - IP address of the proxy (e.g. 127.0.0.1) - Proxyns IP-adress (t.ex. 127.0.0.1) - - - &Port: &Port: - Port of the proxy (e.g. 9050) Proxyns port (t.ex. 9050) - SOCKS &Version: SOCKS &Version: - SOCKS version of the proxy (e.g. 5) SOCKS version av proxyn (t.ex. 5) - &Window &Fönster - Show only a tray icon after minimizing the window. Visa endast en systemfältsikon vid minimering. - &Minimize to the tray instead of the taskbar &Minimera till systemfältet istället för aktivitetsfältet - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. Minimera applikationen istället för att stänga ner den när fönstret stängs. Detta innebär att programmet fotrsätter att köras tills du väljer Avsluta i menyn. - M&inimize on close M&inimera vid stängning - &Display &Visa - User Interface &language: Användargränssnittets &språk: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. Användargränssnittets språk kan ställas in här. Denna inställning träder i kraft efter en omstart av Myriadcoin. - &Unit to show amounts in: &Måttenhet att visa belopp i: - Choose the default subdivision unit to show in the interface and when sending coins. Välj en måttenhet att visa när du skickar mynt. - Whether to show Myriadcoin addresses in the transaction list or not. - Anger om Myriadcoin-adresser skall visas i transaktionslistan. + Anger om Bitcoin-adresser skall visas i transaktionslistan. - &Display addresses in transaction list &Visa adresser i transaktionslistan - + Whether to show coin control features or not. + Om myntkontrollfunktioner skall visas eller inte + + &OK &OK - &Cancel &Avbryt - - &Apply - &Verkställ - - - default standard - + none + ingen + + Confirm options reset Bekräfta att alternativen ska återställs - - Some settings may require a client restart to take effect. - Vissa inställningar kan behöva en omstart av klienten för att börja gälla. + Client restart required to activate changes. + Klientomstart är nödvändig för att aktivera ändringarna. - - Do you want to proceed? - Vill du fortsätta? + Client will be shutdown, do you want to proceed? + Klienten skall stängas av, vill du fortsätta? - - - Warning - Varning + This change would require a client restart. + Denna ändring kräver en klientomstart. - - - This setting will take effect after restarting Myriadcoin. - Denna inställning träder i kraft efter en omstart av Myriadcoin. - - - The supplied proxy address is invalid. Den medföljande proxy adressen är ogiltig. @@ -1009,59 +1216,54 @@ Adress: %4 OverviewPage - Form Formulär - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. - Den visade informationen kan vara inaktuell. Plånboken synkroniseras automatiskt med Myriadcoin-nätverket efter att anslutningen är upprättad, men denna process har inte slutförts ännu. + Den visade informationen kan vara inaktuell. Plånboken synkroniseras automatiskt med Bitcoin-nätverket efter att anslutningen är upprättad, men denna process har inte slutförts ännu. - - Balance: - Saldo: - - - - Unconfirmed: - Obekräftade: - - - Wallet Plånbok - + Available: + Tillgängligt: + + + Your current spendable balance + Ditt tillgängliga saldo + + + Pending: + Pågående: + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + Totalt antal transaktioner som ännu inte bekräftats, och som ännu inte räknas med i aktuellt saldo + + Immature: Omogen: - Mined balance that has not yet matured Den genererade balansen som ännu inte har mognat - + Total: + Totalt: + + + Your current total balance + Ditt nuvarande totala saldo + + <b>Recent transactions</b> <b>Nyligen genomförda transaktioner</b> - - Your current balance - Ditt nuvarande saldo - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - Totalt antal transaktioner som ännu inte bekräftats, och som ännu inte räknas med i aktuellt saldo - - - - out of sync osynkroniserad @@ -1069,579 +1271,856 @@ Adress: %4 PaymentServer - + URI handling + URI hantering + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + URI går inte att tolkas! Detta kan orsakas av en ogiltig Bitcoin-adress eller felaktiga URI parametrar. + + + Requested payment amount of %1 is too small (considered dust). + Begärd betalning av %1 är för liten (betraktas som damm). + + + Payment request error + Fel vid betalningsbegäran + + Cannot start myriadcoin: click-to-pay handler - Kan inte starta bitcin: klicka-och-betala handhavare + Kan inte starta myriadcoin: klicka-och-betala handhavare + + + Net manager warning + Varningar från näthanteraren + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + Din aktiva proxy stödjer inte SOCKS5, vilket är nödvändigt för att använda betalningsbegäran via proxy. + + + Payment request fetch URL is invalid: %1 + Betalningsbegärans hämta URL är felaktig: %1 + + + Payment request file handling + Hantering av betalningsbegäransfil + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + Betalningsbegäransfilen kan inte läsas eller behandlas! Detta kan orsakas av en felaktig betalningsbegäransfil. + + + Unverified payment requests to custom payment scripts are unsupported. + Overifierade betalningsbegärningar till specialbetalningsskript stöds inte. + + + Refund from %1 + Återbetalning från %1 + + + Error communicating with %1: %2 + Kommunikationsfel med %1: %2 + + + Payment request can not be parsed or processed! + Betalningsbegäran kan inte läsas eller behandlas! + + + Bad response from server %1 + Dåligt svar från server %1 + + + Payment acknowledged + Betalningen bekräftad + + + Network request error + Fel vid närverksbegäran - QRCodeDialog + QObject - - QR Code Dialog - QR-kod dialogruta + Myriadcoin + Myriadcoin - - Request Payment - Begär Betalning + Error: Specified data directory "%1" does not exist. + Fel: Den angivna datakatalogen "%1" finns inte. - - Amount: - Belopp: + Error: Cannot parse configuration file: %1. Only use key=value syntax. + Fel: Kan inte läsa konfigurationsfilen: %1. Använd bara nyckel=värde formatet. - - Label: - Etikett: + Error: Invalid combination of -regtest and -testnet. + Fel: Felaktig kombination av -regtest och -testnet. - - Message: - Meddelande: + Myriadcoin Core didn't yet exit safely... + Myriadcoin Core avslutades inte ännu säkert... - - &Save As... - &Spara som... + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Ange en Bitcoin-adress (t.ex. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + &Spara Bild... - - Error encoding URI into QR Code. - Fel vid skapande av QR-kod från URI. + &Copy Image + &Kopiera Bild - - The entered amount is invalid, please check. - Det angivna beloppet är ogiltigt, vänligen kontrollera. - - - - Resulting URI too long, try to reduce the text for label / message. - URI:n är för lång, försöka minska texten för etikett / meddelande. - - - Save QR Code Spara QR-kod - - PNG Images (*.png) - PNG-bilder (*.png) + PNG Image (*.png) + PNG-bild (*.png) RPCConsole - Client name Klientnamn - - - - - - - - - - N/A ej tillgänglig - Client version Klient-version - &Information &Information - + Debug window + Debug fönster + + + General + Generell + + Using OpenSSL version Använder OpenSSL version - Startup time Uppstartstid - Network Nätverk - + Name + Namn + + Number of connections Antalet anslutningar - - On testnet - På testnet - - - Block chain Blockkedja - Current number of blocks Aktuellt antal block - Estimated total blocks Beräknade totala block - Last block time Sista blocktid - &Open &Öppna - - Command-line options - Kommandoradsalternativ - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - Visa Myriadcoin-Qt hjälpmeddelande för att få en lista med möjliga Myriadcoin kommandoradsalternativ. - - - - &Show - &Visa - - - &Console &Konsol - + &Network Traffic + &Nätverkstrafik + + + &Clear + &Rensa + + + Totals + Totalt + + + In: + In: + + + Out: + Ut: + + Build date Kompileringsdatum - - Myriadcoin - Debug window - Myriadcoin - Debug fönster - - - - Myriadcoin Core - Myriadcoin Kärna - - - Debug log file Debugloggfil - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. Öppna Myriadcoin debug-loggfilen som finns i datakatalogen. Detta kan ta några sekunder för stora loggfiler. - Clear console Rensa konsollen - Welcome to the Myriadcoin RPC console. Välkommen till Myriadcoin RPC-konsollen. - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. Använd upp- och ner-pilarna för att navigera i historiken, och <b>Ctrl-L</b> för att rensa skärmen. - Type <b>help</b> for an overview of available commands. Skriv <b>help</b> för en översikt av alla kommandon. + + %1 B + %1 B + + + %1 KB + %1 KB + + + %1 MB + %1 MB + + + %1 GB + %1 GB + + + %1 m + %1 m + + + %1 h + %1 h + + + %1 h %2 m + %1 h %2 m + + + + ReceiveCoinsDialog + + &Amount: + %Belopp: + + + &Label: + &Etikett: + + + &Message: + &Meddelande: + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + Återanvänd en av tidigare använda mottagningsadresser. Återanvändning av adresser har både säkerhets och integritetsbrister. Använd inte samma mottagningsadress om du inte gör om samma betalningsbegäran. + + + R&euse an existing receiving address (not recommended) + Åt&eranvänd en existerande mottagningsadress (rekommenderas inte) + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + Ett frivilligt meddelande att bifoga betalningsbegäran, vilket visas när begäran öppnas. NB: Meddelandet kommer inte att sändas med betalningen över Bitcoinnätverket. + + + An optional label to associate with the new receiving address. + En frivillig etikett att associera med den nya mottagningsadressen. + + + Use this form to request payments. All fields are <b>optional</b>. + Använd detta formulär för att begära betalningar. Alla fält är <b>frivilliga</b>. + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + En valfri summa att begära. Lämna denna tom eller noll för att inte begära en specifik summa. + + + Clear all fields of the form. + Rensa alla formulärfälten + + + Clear + Rensa + + + Requested payments history + Historik för begärda betalningar + + + &Request payment + Begä&r betalning + + + Show the selected request (does the same as double clicking an entry) + Visa valda begäranden (gör samma som att dubbelklicka på en post) + + + Show + Visa + + + Remove the selected entries from the list + Ta bort valda poster från listan + + + Remove + Ta bort + + + Copy label + Kopiera etikett + + + Copy message + Kopiera meddelande + + + Copy amount + Kopiera belopp + + + + ReceiveRequestDialog + + QR Code + QR-kod + + + Copy &URI + Kopiera &URI + + + Copy &Address + Kopiera &Adress + + + &Save Image... + &Spara Bild... + + + Request payment to %1 + Begär betalning till %1 + + + Payment information + Betalningsinformation + + + URI + URI + + + Address + Adress + + + Amount + Mängd + + + Label + Etikett + + + Message + Meddelande + + + Resulting URI too long, try to reduce the text for label / message. + URI:n är för lång, försöka minska texten för etikett / meddelande. + + + Error encoding URI into QR Code. + Fel vid skapande av QR-kod från URI. + + + + RecentRequestsTableModel + + Date + Datum + + + Label + Etikett + + + Message + Meddelande + + + Amount + Mängd + + + (no label) + (Ingen etikett) + + + (no message) + (inget meddelande) + + + (no amount) + (ingen summa) + SendCoinsDialog - - - - - - - - Send Coins Skicka pengar - + Coin Control Features + Myntkontrollfunktioner + + + Inputs... + Inmatningar... + + + automatically selected + automatiskt vald + + + Insufficient funds! + Otillräckliga medel! + + + Quantity: + Kvantitet: + + + Bytes: + Antal Byte: + + + Amount: + Belopp: + + + Priority: + Prioritet: + + + Fee: + Avgift: + + + Low Output: + Låg utmatning: + + + After Fee: + Efter avgift: + + + Change: + Växel: + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + Om denna är aktiverad men växeladressen är tom eller felaktig kommer växeln att sändas till en nygenererad adress. + + + Custom change address + Specialväxeladress + + Send to multiple recipients at once Skicka till flera mottagare samtidigt - Add &Recipient Lägg till &mottagare - - Remove all transaction fields - Ta bort alla transaktions-fält + Clear all fields of the form. + Rensa alla formulärfälten - Clear &All Rensa &alla - Balance: Balans: - - 123.456 BTC - 123,456 BTC - - - Confirm the send action Bekräfta sändordern - S&end &Skicka - - <b>%1</b> to %2 (%3) - <b>%1</b> till %2 (%3) - - - Confirm send coins Bekräfta skickade mynt - - Are you sure you want to send %1? - Är du säker på att du vill skicka %1? + %1 to %2 + %1 till %2 - - and - och + Copy quantity + Kopiera kvantitet + + + Copy amount + Kopiera belopp + + + Copy fee + Kopiera avgift + + + Copy after fee + Kopiera efter avgift + + + Copy bytes + Kopiera byte + + + Copy priority + Kopiera prioritet + + + Copy low output + Kopiera låg utmatning + + + Copy change + Kopiera växel + + + Total Amount %1 (= %2) + Totalt %1 (= %2) + + + or + eller - The recipient address is not valid, please recheck. Mottagarens adress är inte giltig, vänligen kontrollera igen. - The amount to pay must be larger than 0. Det betalade beloppet måste vara större än 0. - The amount exceeds your balance. Värdet överstiger ditt saldo. - The total exceeds your balance when the %1 transaction fee is included. Totalvärdet överstiger ditt saldo när transaktionsavgiften %1 är pålagd. - Duplicate address found, can only send to each address once per send operation. Dubblett av adress funnen, kan bara skicka till varje adress en gång per sändning. - - Error: Transaction creation failed! - Fel: Transaktionen gick inte att skapa! + Transaction creation failed! + Transaktionen gick inte att skapa! - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Fel: Transaktionen avslogs. Detta kan hända om några av mynten i plånboken redan spenderats, t.ex om du använt en kopia av wallet.dat och mynt spenderades i kopian men inte markerats som spenderas här. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + Transaktionen avslogs! Detta kan hända om några av mynten i plånboken redan spenderats, t.ex om du använt en kopia av wallet.dat och mynt spenderades i kopian men inte markerats som spenderade här. + + + Warning: Invalid Myriadcoin address + Varning: Felaktig Bitcoinadress + + + (no label) + (Ingen etikett) + + + Warning: Unknown change address + Varning: Okänd växeladress + + + Are you sure you want to send? + Är du säker på att du vill skicka? + + + added as transaction fee + adderad som transaktionsavgift + + + Payment request expired + Tiden för betalningsbegäran gick ut + + + Invalid payment address %1 + Felaktig betalningsadress %1 SendCoinsEntry - - Form - Formulär - - - A&mount: &Belopp: - Pay &To: Betala &Till: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Adressen som betalningen skall skickas till (t.ex. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book Ange ett namn för den här adressen och lägg till den i din adressbok - &Label: &Etikett: - - Choose address from address book - Välj adress från adresslistan + Choose previously used address + Välj tidigare använda adresser + + + This is a normal payment. + Detta är en normal betalning. - Alt+A Alt+A - Paste address from clipboard Klistra in adress från Urklipp - Alt+P Alt+P - - Remove this recipient - Ta bort denna mottagare + Remove this entry + Radera denna post - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Ange en Myriadcoin-adress (t.ex. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + Meddelande: + + + This is a verified payment request. + Detta är en verifierad betalningsbegäran. + + + Enter a label for this address to add it to the list of used addresses + Ange en etikett för denna adress att adderas till listan över använda adresser + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + Ett meddelande som bifogades bitcoin-URI, vilket lagras med transaktionen som referens. NB: Meddelandet kommer inte att sändas över Bitcoinnätverket. + + + This is an unverified payment request. + Detta är en overifierad betalningsbegäran. + + + Pay To: + Betala Till: + + + Memo: + PM: + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + Myriadcoin Core stängs av... + + + Do not shut down the computer until this window disappears. + Stäng inte av datorn förrän denna ruta försvinner. SignVerifyMessageDialog - Signatures - Sign / Verify a Message Signaturer - Signera / Verifiera ett Meddelande - &Sign Message &Signera Meddelande - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. Du kan signera meddelanden med dina adresser för att bevisa att du äger dem. Var försiktig med vad du signerar eftersom phising-attacker kan försöka få dig att skriva över din identitet till någon annan. Signera bara väldetaljerade påståenden du kan gå i god för. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Adressen att signera meddelandet med (t.ex. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book - Välj en adress från adressboken + Choose previously used address + Välj tidigare använda adresser - - Alt+A Alt+A - Paste address from clipboard Klistra in adress från Urklipp - Alt+P Alt+P - Enter the message you want to sign here Skriv in meddelandet du vill signera här - Signature Signatur - Copy the current signature to the system clipboard Kopiera signaturen till systemets Urklipp - Sign the message to prove you own this Myriadcoin address Signera meddelandet för att bevisa att du äger denna adress - Sign &Message Signera &Meddelande - Reset all sign message fields Rensa alla fält - - Clear &All Rensa &alla - &Verify Message &Verifiera Meddelande - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. Skriv in din adress, meddelande (se till att du kopierar radbrytningar, mellanslag, tabbar, osv. exakt) och signatur nedan för att verifiera meddelandet. Var noga med att inte läsa in mer i signaturen än vad som finns i det signerade meddelandet, för att undvika att luras av en man-in-the-middle attack. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Adressen som meddelandet var signerat med (t.ex. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address - Verifiera meddelandet för att vara säker på att den var signerad med den angivna Myriadcoin-adressen + Verifiera meddelandet för att vara säker på att den var signerad med den angivna Bitcoin-adressen - Verify &Message Verifiera &Meddelande - Reset all verify message fields Rensa alla fält - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Ange en Myriadcoin-adress (t.ex. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Ange en Bitcoin-adress (t.ex. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature Klicka "Signera Meddelande" för att få en signatur - - Enter Myriadcoin signature - Ange Myriadcoin-signatur - - - - The entered address is invalid. Den angivna adressen är ogiltig. - - - - Please check the address and try again. Vad god kontrollera adressen och försök igen. - - The entered address does not refer to a key. Den angivna adressen refererar inte till en nyckel. - Wallet unlock was cancelled. Upplåsningen av plånboken avbröts. - Private key for the entered address is not available. Privata nyckel för den angivna adressen är inte tillgänglig. - Message signing failed. Signeringen av meddelandet misslyckades. - Message signed. Meddelandet är signerat. - The signature could not be decoded. Signaturen kunde inte avkodas. - - Please check the signature and try again. Kontrollera signaturen och försök igen. - The signature did not match the message digest. Signaturen matchade inte meddelandesammanfattningen. - Message verification failed. Meddelandet verifikation misslyckades. - Message verified. Meddelandet är verifierad. @@ -1649,186 +2128,160 @@ Adress: %4 SplashScreen - - The Myriadcoin developers - Myriadcoin-utvecklarna + Myriadcoin Core + Myriadcoin Kärna + + + The Myriadcoin Core developers + Myriadcoin Core-utvecklarna - [testnet] [testnet] + + TrafficGraphWidget + + KB/s + KB/s + + TransactionDesc - Open until %1 Öppet till %1 - + conflicted + konflikterade + + %1/offline %1/nerkopplad - %1/unconfirmed %1/obekräftade - %1 confirmations %1 bekräftelser - Status Status - , broadcast through %n node(s) , sänd genom %n nod, sänd genom %n noder - Date Datum - Source Källa - Generated Genererad - - From Från - - - To Till - - own address egen adress - label etikett - - - - - Credit Kredit - matures in %n more block(s) mognar om %n blockmognar om %n fler block - not accepted inte accepterad - - - - Debit Belasta - Transaction fee Transaktionsavgift - Net amount Nettobelopp - Message Meddelande - Comment Kommentar - Transaction ID Transaktions-ID - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Genererade mynt måste vänta 120 block innan de kan användas. När du skapade detta block sändes det till nätverket för att läggas till i blockkedjan. Om blocket inte kommer in i kedjan kommer det att ändras till "accepteras inte" och kommer ej att gå att spendera. Detta kan ibland hända om en annan nod genererar ett block nästan samtidigt som dig. + Merchant + Handlare + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Genererade mynt måste vänta %1 block innan de kan användas. När du skapade detta block sändes det till nätverket för att läggas till i blockkedjan. Om blocket inte kommer in i kedjan kommer dess status att ändras till "accepteras inte" och kommer ej att gå att spendera. Detta kan ibland hända om en annan nod genererar ett block nästan samtidigt som dig. - Debug information Debug information - Transaction Transaktion - Inputs Inputs - Amount Mängd - true sant - false falsk - , has not been successfully broadcast yet , har inte lyckats skickas ännu - Open for %n more block(s) Öppet för %n mer blockÖppet för %n mer block - unknown okänd @@ -1836,12 +2289,10 @@ Adress: %4 TransactionDescDialog - Transaction details Transaktionsdetaljer - This pane shows a detailed description of the transaction Den här panelen visar en detaljerad beskrivning av transaktionen @@ -1849,117 +2300,102 @@ Adress: %4 TransactionTableModel - Date Datum - Type Typ - Address Adress - Amount Mängd + + Immature (%1 confirmations, will be available after %2) + Omogen (%1 konfirmeringar, blir tillgänglig efter %2) + - Open for %n more block(s) Öppet för %n mer blockÖppet för %n mer block - Open until %1 Öppet till %1 - - Offline (%1 confirmations) - Offline (%1 bekräftelser) - - - - Unconfirmed (%1 of %2 confirmations) - Obekräftad (%1 av %2 bekräftelser) - - - Confirmed (%1 confirmations) Bekräftad (%1 bekräftelser) - - - Mined balance will be available when it matures in %n more block(s) - Genererade balansen kommer att finnas tillgänglig när den mognar om %n mer blockGenererade balansen kommer att finnas tillgänglig när den mognar om %n fler block - - This block was not received by any other nodes and will probably not be accepted! Det här blocket togs inte emot av några andra noder och kommer antagligen inte att bli godkänt. - Generated but not accepted Genererad men inte accepterad - + Offline + Nerkopplad + + + Unconfirmed + Okonfirmerade + + + Confirming (%1 of %2 recommended confirmations) + Konfirmerar (%1 of %2 konfirmeringar) + + + Conflicted + Konflikterade + + Received with Mottagen med - Received from Mottaget från - Sent to Skickad till - Payment to yourself Betalning till dig själv - Mined Genererade - (n/a) (n/a) - Transaction status. Hover over this field to show number of confirmations. Transaktionsstatus. Håll muspekaren över för att se antal bekräftelser. - Date and time that the transaction was received. Tidpunkt då transaktionen mottogs. - Type of transaction. Transaktionstyp. - Destination address of transaction. Transaktionens destinationsadress. - Amount removed from or added to balance. Belopp draget eller tillagt till balans. @@ -1967,176 +2403,156 @@ Adress: %4 TransactionView - - All Alla - Today Idag - This week Denna vecka - This month Denna månad - Last month Föregående månad - This year Det här året - Range... Period... - Received with Mottagen med - Sent to Skickad till - To yourself Till dig själv - Mined Genererade - Other Övriga - Enter address or label to search Sök efter adress eller etikett - Min amount Minsta mängd - Copy address Kopiera adress - Copy label Kopiera etikett - Copy amount Kopiera belopp - Copy transaction ID Kopiera transaktions ID - Edit label Ändra etikett - Show transaction details Visa transaktionsdetaljer - - Export Transaction Data - Exportera Transaktionsdata + Export Transaction History + Exportera Transaktionshistoriken + + + Exporting Failed + Exporteringen misslyckades + + + There was an error trying to save the transaction history to %1. + Det inträffade ett fel när transaktionshistoriken skulle sparas till %1. + + + Exporting Successful + Exporteringen lyckades + + + The transaction history was successfully saved to %1. + Transaktionshistoriken sparades utan problem till %1. - Comma separated file (*.csv) Kommaseparerad fil (*. csv) - Confirmed Bekräftad - Date Datum - Type Typ - Label Etikett - Address Adress - Amount Mängd - ID ID - - Error exporting - Fel vid export - - - - Could not write to file %1. - Kunde inte skriva till filen %1. - - - Range: Intervall: - to till + + WalletFrame + + No wallet has been loaded. + Ingen plånbok har laddats in. + + WalletModel - Send Coins Skicka pengar @@ -2144,160 +2560,121 @@ Adress: %4 WalletView - &Export &Exportera - Export the data in the current tab to a file Exportera informationen i den nuvarande fliken till en fil - Backup Wallet Säkerhetskopiera Plånbok - Wallet Data (*.dat) Plånboks-data (*.dat) - Backup Failed Säkerhetskopiering misslyckades - - There was an error trying to save the wallet data to the new location. - Det inträffade ett fel när plånboken skulle sparas till den nya platsen. + There was an error trying to save the wallet data to %1. + Det inträffade ett fel när plånbokens data skulle sparas till %1. + + + The wallet data was successfully saved to %1. + Plånbokens data sparades utan problem till %1. - Backup Successful Säkerhetskopiering lyckades - - - The wallet data was successfully saved to the new location. - Plånbokens data har sparats till den nya platsen. - bitcoin-core - - Myriadcoin version - Myriadcoin version - - - Usage: Användning: - - Send command to -server or myriadcoind - Skicka kommando till -server eller myriadcoind - - - List commands Lista kommandon - Get help for a command Få hjälp med ett kommando - Options: Inställningar: - Specify configuration file (default: myriadcoin.conf) Ange konfigurationsfil (förvalt: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) Ange pid fil (förvalt: myriadcoind.pid) - Specify data directory Ange katalog för data - - Set database cache size in megabytes (default: 25) - Sätt databas cache storleken i megabyte (förvalt: 25) - - - Listen for connections on <port> (default: 8333 or testnet: 18333) Lyssna efter anslutningar på <port> (förvalt: 8333 eller testnet: 18333) - Maintain at most <n> connections to peers (default: 125) Ha som mest <n> anslutningar till andra klienter (förvalt: 125) - Connect to a node to retrieve peer addresses, and disconnect Anslut till en nod för att hämta klientadresser, och koppla från - Specify your own public address Ange din egen publika adress - Threshold for disconnecting misbehaving peers (default: 100) Tröskelvärde för att koppla ifrån klienter som missköter sig (förvalt: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Antal sekunder att hindra klienter som missköter sig från att ansluta (förvalt: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s Ett fel uppstod vid upprättandet av RPC port %u för att lyssna på IPv4: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) Lyssna på JSON-RPC-anslutningar på <port> (förvalt: 8332 eller testnet: 18332) - Accept command line and JSON-RPC commands Tillåt kommandon från kommandotolken och JSON-RPC-kommandon - + Myriadcoin Core RPC client version + Myriadcoin Core RPC-klient version + + Run in the background as a daemon and accept commands Kör i bakgrunden som tjänst och acceptera kommandon - Use the test network Använd testnätverket - Accept connections from outside (default: 1 if no -proxy or -connect) Acceptera anslutningar utifrån (förvalt: 1 om ingen -proxy eller -connect) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2322,612 +2699,686 @@ till exempel: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@ - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + Accepterade krypteringsalgoritmer (förvalt: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s Ett fel uppstod vid upprättandet av RPC port %u för att lyssna på IPv6, faller tillbaka till IPV4: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 Bind till given adress och lyssna alltid på den. Använd [värd]:port notation för IPv6 - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. - Kan inte låsa data-mappen %s. Myriadcoin körs förmodligen redan. + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + Antalsbegränsa kontinuerligt fria transaktioner till <n>*1000 bytes per minut (förvalt:15) + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + Ange regressiontestläge, som använder en speciell kedja i vilka block kan lösas omedelbart. Detta är avsett för regressiontestnings verktyg och applikationsutveckling. + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + Ange regressiontestläge, som använder en speciell kedja i vilka block kan lösas omedelbart. + + + Error: Listening for incoming connections failed (listen returned error %d) + Fel: Avlyssning av inkommande anslutningar misslyckades (Avlyssningen returnerade felkod %d) - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. Fel: Transaktionen avslogs! Detta kan hända om några av mynten i plånboken redan spenderats, t.ex om du använt en kopia av wallet.dat och mynt spenderades i kopian men inte markerats som spenderas här. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! Fel: Denna transaktion kräver en transaktionsavgift på minst %s på grund av dess storlek, komplexitet, eller användning av senast mottagna myriadcoins! - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - Exekvera kommando när ett relevant meddelande är mottagen (%s i cmd är utbytt med ett meddelande) - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Exekvera kommando när en plånbokstransaktion ändras (%s i cmd är ersatt av TxID) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - Sätt den maximala storleken av hög-prioriterade/låg-avgifts transaktioner i byte (förvalt: 27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + Avgifter mindre än detta betraktas som nollavgift (för transaktionsskapande) (förvalt: + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + Töm databasens minnespool till disk varje <n> megabytes (förvalt: 100) + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + Hur grundlig blockverifikationen vid -checkblocks är (0-4, förvalt: 3) + + + In this mode -genproclimit controls how many blocks are generated immediately. + I denna mode kontrollerar -genproclimit hur många block som genereras på en gång. + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + Ange antalet skriptkontrolltrådar (%u till %d, 0 = auto, <0 = lämna så många kärnor lediga, förval: %d) + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + Sätt processorbegränsning när blockgenereringen är på (-1 = obegränsad, förvalt: -1) - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications Detta är ett förhands testbygge - använd på egen risk - använd inte för mining eller handels applikationer - + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + Det går inte att binda till %s på den här datorn. Myriadcoin Core är förmodligen redan igång. + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + Använd separat SOCKS5 proxy för att nå kollegor via dolda tjänster i Tor (default: -proxy) + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Varning: -paytxfee är satt väldigt hög! Detta är avgiften du kommer betala för varje transaktion. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - Varning: Visade transaktioner kanske inte är korrekt! Du kan behöva uppgradera, eller andra noder kan behöva uppgradera. - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. Varning: Vänligen kolla så att din dators datum och tid är korrekt! Om din klocka går fel kommer Myriadcoin inte fungera korrekt. - + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + Varning: Nätverket verkar inte vara helt överens! Några miners verkar ha problem. + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + Varning: Vi verkar inte helt överens med våra peers! Du kan behöva uppgradera, eller andra noder kan behöva uppgradera. + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Varning: fel vid läsning av wallet.dat! Alla nycklar lästes korrekt, men transaktionsdatan eller adressbokens poster kanske saknas eller är felaktiga. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. Varning: wallet.dat korrupt, datan har räddats! Den ursprungliga wallet.dat har sparas som wallet.{timestamp}.bak i %s; om ditt saldo eller transaktioner är felaktiga ska du återställa från en säkerhetskopia. - + (default: 1) + (förvalt: 1) + + + (default: wallet.dat) + (förvalt: wallet.dat) + + + <category> can be: + <category> Kan vara: + + Attempt to recover private keys from a corrupt wallet.dat Försök att rädda de privata nycklarna från en korrupt wallet.dat - + Myriadcoin Core Daemon + Myriadcoin Core tjänsten + + Block creation options: Block skapande inställningar: - + Clear list of wallet transactions (diagnostic tool; implies -rescan) + Töm listan över plånbokstransaktioner (diagnostikverktyg; medför -rescan) + + Connect only to the specified node(s) Koppla enbart upp till den/de specificerade noden/noder - + Connect through SOCKS proxy + Anslut genom SOCKS-proxy + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + Anslut till JSON-RPC på <port> (förval: 8332 eller testnet: 18332) + + + Connection options: + Anslutningsoptioner: + + Corrupted block database detected Korrupt blockdatabas har upptäckts - + Debugging/Testing options: + Avlusnings/Testnings optioner: + + + Disable safemode, override a real safe mode event (default: 0) + Avaktivera säkert läge. Åsidosätt en riktigt säkert läge händelse (förvalt: 0) + + Discover own IP address (default: 1 when listening and no -externalip) Hitta egen IP-adress (förvalt: 1 under lyssning och utan -externalip) - + Do not load the wallet and disable wallet RPC calls + Ladda inte plånboken och stäng av RPC-anrop till plånboken + + Do you want to rebuild the block database now? Vill du bygga om blockdatabasen nu? - Error initializing block database Fel vid initiering av blockdatabasen - Error initializing wallet database environment %s! Fel vid initiering av plånbokens databasmiljö %s! - Error loading block database Fel vid inläsning av blockdatabasen - Error opening block database Fel vid öppning av blockdatabasen - Error: Disk space is low! Fel: Hårddiskutrymme är lågt! - Error: Wallet locked, unable to create transaction! Fel: Plånboken är låst, det går ej att skapa en transaktion! - Error: system error: Fel: systemfel: - Failed to listen on any port. Use -listen=0 if you want this. Misslyckades att lyssna på någon port. Använd -listen=0 om du vill detta. - Failed to read block info Misslyckades att läsa blockinformation - Failed to read block Misslyckades att läsa blocket - Failed to sync block index Misslyckades att synkronisera blockindex - Failed to write block index Misslyckades att skriva blockindex - Failed to write block info Misslyckades att skriva blockinformation - Failed to write block Misslyckades att skriva blocket - Failed to write file info Misslyckades att skriva filinformation - Failed to write to coin database Misslyckades att skriva till myntdatabas - Failed to write transaction index Misslyckades att skriva transaktionsindex - Failed to write undo data Misslyckades att skriva ångradata - + Fee per kB to add to transactions you send + Avgift per kB att lägga till på transaktioner du skickar + + + Fees smaller than this are considered zero fee (for relaying) (default: + Avgifter mindre än detta betraktas som nollavgift (för vidarebefodran) (förvalt: + + Find peers using DNS lookup (default: 1 unless -connect) Sök efter klienter med DNS sökningen (förvalt: 1 om inte -connect) - + Force safe mode (default: 0) + Tvångskör i säkert läge (förvalt: 0) + + Generate coins (default: 0) Generera mynt (förvalt: 0) - How many blocks to check at startup (default: 288, 0 = all) Hur många block att kontrollera vid uppstart (standardvärde: 288, 0 = alla) - - How thorough the block verification is (0-4, default: 3) - Hur grundlig blockverifikationen är (0-4, förvalt: 3) + If <category> is not supplied, output all debugging information. + Om <category> inte anges, skrivs all avlusningsinformation ut. + + + Importing... + Importerar... + + + Incorrect or no genesis block found. Wrong datadir for network? + Felaktig eller inget genesisblock hittades. Fel datadir för nätverket? + + + Invalid -onion address: '%s' + Ogiltig -onion adress:'%s' - Not enough file descriptors available. Inte tillräckligt med filbeskrivningar tillgängliga. - + Prepend debug output with timestamp (default: 1) + Skriv ut tidsstämpel i avlusningsinformationen (förvalt: 1) + + + RPC client options: + RPC klientoptioner: + + Rebuild block chain index from current blk000??.dat files Återskapa blockkedjans index från nuvarande blk000??.dat filer - + Select SOCKS version for -proxy (4 or 5, default: 5) + Välj SOCKS-version att använda för -proxy (4 eller 5, förvalt: 5) + + + Set database cache size in megabytes (%d to %d, default: %d) + Sätt databasens cachestorlek i megabyte (%d till %d, förvalt: %d) + + + Set maximum block size in bytes (default: %d) + Sätt maximal blockstorlek i byte (förvalt: %d) + + Set the number of threads to service RPC calls (default: 4) Ange antalet trådar för att hantera RPC anrop (standard: 4) - + Specify wallet file (within data directory) + Ange plånboksfil (inom datakatalogen) + + + Spend unconfirmed change when sending transactions (default: 1) + Spendera okonfirmerad växel när transaktioner sänds (förvalt: 1) + + + This is intended for regression testing tools and app development. + Detta är avsett för regressionstestningsverktyg och applikationsutveckling. + + + Usage (deprecated, use myriadcoin-cli): + Användning (föråldrat, använd myriadcoin-cli): + + Verifying blocks... Verifierar block... - Verifying wallet... Verifierar plånboken... - + Wait for RPC server to start + Vänta på att RPC.servern startar + + + Wallet %s resides outside data directory %s + Plånbok %s ligger utanför datakatalogen %s + + + Wallet options: + Plånboksinställningar: + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + Varning: Föråldrat argument -debugnet ignorerad, använd -debug=net + + + You need to rebuild the database using -reindex to change -txindex + Du måste återskapa databasen med -reindex för att ändra -txindex + + Imports blocks from external blk000??.dat file Importerar block från extern blk000??.dat fil - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) - Ange antalet skriptkontrolltrådar (upp till 16, 0 = auto, <0 = lämna så många kärnor lediga, förval: 0) + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + Kan inte låsa data-mappen %s. Myriadcoin Core körs förmodligen redan. + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + Exekvera kommando när ett relevant meddelande är mottagen eller när vi ser en väldigt lång förgrening (%s i cmd är utbytt med ett meddelande) + + + Output debugging information (default: 0, supplying <category> is optional) + Skriv ut avlusningsinformation (förvalt: 0, att ange <category> är frivilligt) + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + Sätt den maximala storleken av hög-prioriterade/låg-avgifts transaktioner i byte (förvalt: %d) - Information Information - - Invalid -tor address: '%s' - Ogiltig -tor adress: '%s' - - - Invalid amount for -minrelaytxfee=<amount>: '%s' Ogiltigt belopp för -minrelaytxfee=<belopp>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' Ogiltigt belopp för -mintxfee=<belopp>: '%s' - + Limit size of signature cache to <n> entries (default: 50000) + Begränsa signaturcachestorleken till <n> poster (förvalt: 50000) + + + Log transaction priority and fee per kB when mining blocks (default: 0) + Logga transaktionsprioritet och avgift per kB vid blockbrytning (förvalt: 0) + + Maintain a full transaction index (default: 0) Upprätthåll ett fullständigt transaktionsindex (förval: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) Maximal buffert för mottagning per anslutning, <n>*1000 byte (förvalt: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) Maximal buffert för sändning per anslutning, <n>*1000 byte (förvalt: 5000) - Only accept block chain matching built-in checkpoints (default: 1) Acceptera bara blockkedjans matchande inbyggda kontrollpunkter (förvalt: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Anslut enbart till noder i nätverket <net> (IPv4, IPv6 eller Tor) - - Output extra debugging information. Implies all other -debug* options - Skriv ut extra felsökningsinformation. Gäller alla andra -debug* alternativ + Print block on startup, if found in block index + Skriv ut block vid uppstart, om det hittas i blockindexet - - Output extra network debugging information - Skriv ut extra felsökningsinformation om nätverk + Print block tree on startup (default: 0) + Skriv ut blockträdet vid uppstart (förvalt: 0) - - Prepend debug output with timestamp - Skriv ut tid i felsökningsinformationen + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + RPC SSL optioner: (se Myriadcoin Wiki för SSL inställningsinstruktioner) + + + RPC server options: + RPC serveroptioner: + + + Randomly drop 1 of every <n> network messages + Slumpmässigt tappa 1 av varje <n> nåtverksmeddelande + + + Randomly fuzz 1 of every <n> network messages + Slupmässigt brus 1 gång varje <n> nätverksmeddelande + + + Run a thread to flush wallet periodically (default: 1) + Kör en tråd för att tömma plånboken periodiskt (förvalt: 1) - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) - SSL-inställningar: (se Myriadcoin-wikin för SSL-setup instruktioner) + SSL-inställningar: (se Bitcoin-wikin för SSL-setup instruktioner) - - Select the version of socks proxy to use (4-5, default: 5) - Välj socks-proxy version att använda (4-5, förvalt: 5) + Send command to Myriadcoin Core + Sänd kommando till Myriadcoin Core - Send trace/debug info to console instead of debug.log file Skicka trace-/debuginformation till terminalen istället för till debug.log - - Send trace/debug info to debugger - Skicka trace-/debuginformation till debugger - - - - Set maximum block size in bytes (default: 250000) - Sätt maximal blockstorlek i byte (förvalt: 250000) - - - Set minimum block size in bytes (default: 0) Sätt minsta blockstorlek i byte (förvalt: 0) - + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + Sätt DB_PRIVATE flaggan i plånbokens databasmiljö (förvalt: 1) + + + Show all debugging options (usage: --help -help-debug) + Visa alla avlusningsoptioner (använd: --help -help-debug) + + + Show benchmark information (default: 0) + Visa riktmärknings information (förvalt: 0) + + Shrink debug.log file on client startup (default: 1 when no -debug) Krymp debug.log filen vid klient start (förvalt: 1 vid ingen -debug) - Signing transaction failed Signering av transaktion misslyckades - Specify connection timeout in milliseconds (default: 5000) Ange timeout för uppkoppling i millisekunder (förvalt: 5000) - + Start Myriadcoin Core Daemon + Starta Myriadcoin Core tjänsten + + System error: Systemfel: - Transaction amount too small Transaktions belopp för liten - Transaction amounts must be positive Transaktionens belopp måste vara positiva - Transaction too large Transaktionen är för stor - Use UPnP to map the listening port (default: 0) Använd UPnP för att mappa den lyssnande porten (förvalt: 0) - Use UPnP to map the listening port (default: 1 when listening) Använd UPnP för att mappa den lyssnande porten (förvalt: 1 under lyssning) - - Use proxy to reach tor hidden services (default: same as -proxy) - Använd en proxy för att nå tor (förvalt: samma som -proxy) - - - Username for JSON-RPC connections Användarnamn för JSON-RPC-anslutningar - Warning Varning - Warning: This version is obsolete, upgrade required! Varning: denna version är föråldrad, uppgradering krävs! - - You need to rebuild the databases using -reindex to change -txindex - Du måste återskapa databaserna med -reindex för att ändra -txindex + Zapping all transactions from wallet... + Töm plånboken på alla transaktioner... + + + on startup + under uppstarten + + + version + version - wallet.dat corrupt, salvage failed wallet.dat korrupt, räddning misslyckades - Password for JSON-RPC connections Lösenord för JSON-RPC-anslutningar - Allow JSON-RPC connections from specified IP address Tillåt JSON-RPC-anslutningar från specifika IP-adresser - Send commands to node running on <ip> (default: 127.0.0.1) Skicka kommandon till klient på <ip> (förvalt: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) Exekvera kommando när det bästa blocket ändras (%s i cmd är utbytt av blockhash) - Upgrade wallet to latest format Uppgradera plånboken till senaste formatet - Set key pool size to <n> (default: 100) Sätt storleken på nyckelpoolen till <n> (förvalt: 100) - Rescan the block chain for missing wallet transactions Sök i blockkedjan efter saknade plånboks transaktioner - Use OpenSSL (https) for JSON-RPC connections Använd OpenSSL (https) för JSON-RPC-anslutningar - Server certificate file (default: server.cert) Serverns certifikatfil (förvalt: server.cert) - Server private key (default: server.pem) Serverns privata nyckel (förvalt: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Accepterade krypteringsalgoritmer (förvalt: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - This help message Det här hjälp medelandet - Unable to bind to %s on this computer (bind returned error %d, %s) Det går inte att binda till %s på den här datorn (bind returnerade felmeddelande %d, %s) - - Connect through socks proxy - Anslut genom socks-proxy - - - Allow DNS lookups for -addnode, -seednode and -connect Tillåt DNS-sökningar för -addnode, -seednode och -connect - Loading addresses... Laddar adresser... - Error loading wallet.dat: Wallet corrupted Fel vid inläsningen av wallet.dat: Plånboken är skadad - Error loading wallet.dat: Wallet requires newer version of Myriadcoin Fel vid inläsningen av wallet.dat: Plånboken kräver en senare version av Myriadcoin - Wallet needed to be rewritten: restart Myriadcoin to complete Plånboken behöver skrivas om: Starta om Myriadcoin för att färdigställa - Error loading wallet.dat Fel vid inläsning av plånboksfilen wallet.dat - Invalid -proxy address: '%s' Ogiltig -proxy adress: '%s' - Unknown network specified in -onlynet: '%s' Okänt nätverk som anges i -onlynet: '%s' - Unknown -socks proxy version requested: %i Okänd -socks proxy version begärd: %i - Cannot resolve -bind address: '%s' Kan inte matcha -bind adress: '%s' - Cannot resolve -externalip address: '%s' Kan inte matcha -externalip adress: '%s' - Invalid amount for -paytxfee=<amount>: '%s' Ogiltigt belopp för -paytxfee=<belopp>:'%s' - Invalid amount Ogiltig mängd - Insufficient funds Otillräckligt med myriadcoins - Loading block index... Laddar blockindex... - Add a node to connect to and attempt to keep the connection open Lägg till en nod att koppla upp mot och försök att hålla anslutningen öppen - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - Det går inte att binda till %s på den här datorn. Myriadcoin är förmodligen redan igång. - - - - Fee per KB to add to transactions you send - Avgift per KB att lägga till på transaktioner du skickar - - - Loading wallet... Laddar plånbok... - Cannot downgrade wallet Kan inte nedgradera plånboken - Cannot write default address Kan inte skriva standardadress - Rescanning... Söker igen... - Done loading Klar med laddning - To use the %s option Att använda %s alternativet - Error Fel - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_th_TH.ts b/src/qt/locale/bitcoin_th_TH.ts index 5088bc74..36f2e224 100644 --- a/src/qt/locale/bitcoin_th_TH.ts +++ b/src/qt/locale/bitcoin_th_TH.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - เกี่ยวกับ บิตคอย์น + About Myriadcoin Core + - - <b>Myriadcoin</b> version - <b>บิตคอย์น<b>รุ่น + <b>Myriadcoin Core</b> version + - This is experimental software. @@ -23,153 +19,128 @@ This product includes software developed by the OpenSSL Project for use in the O - Copyright - - The Myriadcoin developers + The Myriadcoin Core developers + + + + (%1-bit) AddressBookPage - - Address Book - สมุดรายชื่อ - - - Double-click to edit address or label - ดับเบิลคลิก เพื่อแก้ไขที่อยู่ หรือชื่อ + ดับเบิ้ลคลิก เพื่อแก้ไขที่อยู่ หรือชื่อ - Create a new address สร้างที่อยู่ใหม่ - + &New + + + Copy the currently selected address to the system clipboard คัดลอกที่อยู่ที่ถูกเลือกไปยัง คลิปบอร์ดของระบบ - - &New Address + &Copy - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + C&lose - &Copy Address - - Show &QR Code - - - - - Sign a message to prove you own a Myriadcoin address - - - - - Sign &Message - - - - Delete the currently selected address from the list - Export the data in the current tab to a file - &Export - - Verify a message to ensure it was signed with a specified Myriadcoin address - - - - - &Verify Message - - - - &Delete - ลบ + &ลบ + + + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + - These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + Copy &Label - &Edit - - Send &Coins + Export Address List - - Export Address Book Data - ส่งออกรายชื่อทั้งหมด - - - Comma separated file (*.csv) + คั่นไฟล์ด้วยเครื่องหมายจุลภาค (*.csv) + + + Exporting Failed - - Error exporting - ส่งออกผิดพลาด - - - - Could not write to file %1. - ไม่สามารถเขียนไปยังไฟล์ %1 + There was an error trying to save the address list to %1. + AddressTableModel - Label ชื่อ - Address ที่อยู่ - (no label) (ไม่มีชื่อ) @@ -177,140 +148,106 @@ This product includes software developed by the OpenSSL Project for use in the O AskPassphraseDialog - Passphrase Dialog - Enter passphrase ใส่รหัสผ่าน - New passphrase รหัสผา่นใหม่ - Repeat new passphrase กรุณากรอกรหัสผ่านใหม่อีกครั้งหนึ่ง - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - + ใส่รหัสผ่านใหม่ให้กับกระเป๋าเงิน. <br/> กรุณาใช้รหัสผ่านของ <b> 10 หรือแบบสุ่มมากกว่าตัวอักษร </ b> หรือ <b> แปดหรือมากกว่าคำ </ b> - Encrypt wallet กระเป๋าสตางค์ที่เข้ารหัส - This operation needs your wallet passphrase to unlock the wallet. - + การดำเนินการนี้ต้องมีรหัสผ่านกระเป๋าเงินของคุณเพื่อปลดล็อคกระเป๋าเงิน - Unlock wallet เปิดกระเป๋าสตางค์ - This operation needs your wallet passphrase to decrypt the wallet. - + การดำเนินการนี้ต้องมีรหัสผ่านกระเป๋าเงินของคุณในการถอดรหัสกระเป๋าเงิน - Decrypt wallet ถอดรหัสกระเป๋าสตางค์ - Change passphrase เปลี่ยนรหัสผ่าน - Enter the old and new passphrase to the wallet. กรอกรหัสผ่านเก่าและรหัสผ่านใหม่สำหรับกระเป๋าสตางค์ - Confirm wallet encryption ยืนยันการเข้ารหัสกระเป๋าสตางค์ - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! - Are you sure you wish to encrypt your wallet? - 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. - - Warning: The Caps Lock key is on! - - Wallet encrypted กระเป๋าสตางค์ถูกเข้ารหัสเรียบร้อยแล้ว - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. - - - - Wallet encryption failed การเข้ารหัสกระเป๋าสตางค์ผิดพลาด - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - + กระเป๋าเงินเข้ารหัสล้มเหลวเนื่องจากข้อผิดพลาดภายใน กระเป๋าเงินของคุณไม่ได้เข้ารหัส - - The supplied passphrases do not match. รหัสผ่านที่คุณกรอกไม่ตรงกัน - Wallet unlock failed - + ปลดล็อคกระเป๋าเงินล้มเหลว - - - The passphrase entered for the wallet decryption was incorrect. - + ป้อนรหัสผ่านสำหรับการถอดรหัสกระเป๋าเงินไม่ถูกต้อง - Wallet decryption failed - + ถอดรหัสกระเป๋าเงินล้มเหลว - Wallet passphrase was successfully changed. @@ -318,319 +255,286 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - Sign &message... - Synchronizing with network... - + กำลังทำข้อมูลให้ตรงกันกับเครือข่าย ... - &Overview + &ภาพรวม + + + Node - Show general overview of wallet - + แสดงภาพรวมทั่วไปของกระเป๋าเงิน - &Transactions - + &การทำรายการ - Browse transaction history - + เรียกดูประวัติการทำธุรกรรม - - Edit the list of stored addresses and labels - - - - - Show the list of addresses for receiving payments - - - - E&xit - Quit application - + ออกจากโปรแกรม - Show information about Myriadcoin - + แสดงข้อมูลเกี่ยวกับ Myriadcoin - About &Qt - Show information about Qt - &Options... - + &ตัวเลือก... - &Encrypt Wallet... - &Backup Wallet... - &Change Passphrase... - + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + Importing blocks from disk... - Reindexing blocks on disk... - Send coins to a Myriadcoin address - Modify configuration options for Myriadcoin - Backup wallet to another location - Change the passphrase used for wallet encryption - + เปลี่ยนรหัสผ่านที่ใช้สำหรับการเข้ารหัสกระเป๋าเงิน - &Debug window - Open debugging and diagnostic console - &Verify message... - - Myriadcoin - Wallet - &Send - &Receive - - &Addresses - - - - - &About Myriadcoin - - - - &Show / Hide - Show or hide the main Window - Encrypt the private keys that belong to your wallet - Sign messages with your Myriadcoin addresses to prove you own them - Verify messages to ensure they were signed with specified Myriadcoin addresses - &File - + &ไฟล์ - &Settings - + &การตั้งค่า - &Help - + &ช่วยเหลือ - Tabs toolbar - + แถบเครื่องมือ - - [testnet] + [testnet] + + + Myriadcoin Core + + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options - Myriadcoin client - %n active connection(s) to Myriadcoin network - + %n ที่ใช้งานการเชื่อมต่อกับเครือข่าย Myriadcoin - No block source available... - Processed %1 of %2 (estimated) blocks of transaction history. - Processed %1 blocks of transaction history. - %n hour(s) - %n day(s) - %n week(s) - + %1 and %2 + + + + %n year(s) + + + %1 behind - Last received block was generated %1 ago. - Transactions after this will not yet be visible. - Error - Warning - Information - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - Up to date - + ทันสมัย - Catching up... - + จับได้... - - Confirm transaction fee - - - - Sent transaction - + รายการที่ส่ง - Incoming transaction - + การทำรายการขาเข้า - Date: %1 Amount: %2 Type: %3 @@ -639,29 +543,14 @@ Address: %4 - - - URI handling - - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - + ระเป๋าเงินถูก <b>เข้ารหัส</b> และในขณะนี้ <b>ปลดล็อคแล้ว</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> - + กระเป๋าเงินถูก <b>เข้ารหัส</b> และในปัจจุบัน <b>ล็อค </b> - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. @@ -669,329 +558,647 @@ Address: %4 ClientModel - Network Alert + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + + + + Address + ที่อยู่ + + + Date + + + + Confirmations + + + + Confirmed + + + + Priority + + + + Copy address + + + + Copy label + + + + Copy amount + + + + Copy transaction ID + + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + + + + Dust + + + + yes + + + + no + + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + (ไม่มีชื่อ) + + + change from %1 (%2) + + + + (change) + + + EditAddressDialog - Edit Address - + แก้ไขที่อยู่ - &Label + &ชื่อ + + + The label associated with this address list entry - - The label associated with this address book entry + The address associated with this address list entry. This can only be modified for sending addresses. - &Address - + &ที่อยู่ - - The address associated with this address book entry. This can only be modified for sending addresses. - - - - New receiving address - + ที่อยู่ผู้รับใหม่ - New sending address - + ที่อยู่ผู้ส่งใหม่ - Edit receiving address - + แก้ไขที่อยู่ผู้รับ - Edit sending address - + แก้ไขที่อยู่ผู้ส่ง - The entered address "%1" is already in the address book. - + ป้อนที่อยู่ "%1" ที่มีอยู่แล้วในสมุดที่อยู่ - The entered address "%1" is not a valid Myriadcoin address. - Could not unlock wallet. + ไม่สามารถปลดล็อคกระเป๋าเงิน + + + New key generation failed. + สร้างกุญแจใหม่ล้มเหลว + + + + FreespaceChecker + + A new data directory will be created. - - New key generation failed. + name + + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. - GUIUtil::HelpMessageBox + HelpMessageDialog - - - Myriadcoin-Qt + Myriadcoin Core - Command-line options + + + + Myriadcoin Core - version - Usage: - command-line options - UI options - Set language, for example "de_DE" (default: system locale) - Start minimized - + Set SSL root certificates for payment request (default: -system-) + + + Show splash screen on startup (default: 1) + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + + + + Error: Specified data directory "%1" can not be created. + + + + Error + + + + GB of free space available + + + + (of %1GB needed) + + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open + + OptionsDialog - Options - + ตัวเลือก - &Main - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. - Pay transaction &fee - Automatically start Myriadcoin after logging in to the system. - &Start Myriadcoin on system login - + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + Reset all client options to default. - &Reset Options - &Network - + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. - Map port using &UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - - - - - &Connect through SOCKS proxy: - - - - Proxy &IP: - - IP address of the proxy (e.g. 127.0.0.1) - - - - &Port: - Port of the proxy (e.g. 9050) - SOCKS &Version: - SOCKS version of the proxy (e.g. 5) - &Window - Show only a tray icon after minimizing the window. - &Minimize to the tray instead of the taskbar - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. - M&inimize on close - &Display - User Interface &language: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. - &Unit to show amounts in: - Choose the default subdivision unit to show in the interface and when sending coins. - Whether to show Myriadcoin addresses in the transaction list or not. - &Display addresses in transaction list - + Whether to show coin control features or not. + + + &OK - &Cancel - - &Apply - - - - default - + none + + + Confirm options reset - - Some settings may require a client restart to take effect. + Client restart required to activate changes. - - Do you want to proceed? + Client will be shutdown, do you want to proceed? - - - Warning + This change would require a client restart. - - - This setting will take effect after restarting Myriadcoin. - - - - The supplied proxy address is invalid. @@ -999,59 +1206,54 @@ Address: %4 OverviewPage - Form - + รูป - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. - - Balance: - - - - - Unconfirmed: - - - - Wallet - + Available: + + + + Your current spendable balance + + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + + + Immature: - Mined balance that has not yet matured - + Total: + + + + Your current total balance + + + <b>Recent transactions</b> - + <b>รายการทำธุรกรรมล่าสุด</b> - - Your current balance - - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - - - - - out of sync @@ -1059,579 +1261,856 @@ Address: %4 PaymentServer - + URI handling + + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + Cannot start myriadcoin: click-to-pay handler + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + + + + Network request error + + - QRCodeDialog + QObject - - QR Code Dialog + Myriadcoin - - Request Payment + Error: Specified data directory "%1" does not exist. - - Amount: + Error: Cannot parse configuration file: %1. Only use key=value syntax. - - Label: + Error: Invalid combination of -regtest and -testnet. - - Message: + Myriadcoin Core didn't yet exit safely... - - &Save As... + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + + QRImageWidget + + &Save Image... - - Error encoding URI into QR Code. + &Copy Image - - The entered amount is invalid, please check. - - - - - Resulting URI too long, try to reduce the text for label / message. - - - - Save QR Code - - PNG Images (*.png) + PNG Image (*.png) RPCConsole - Client name - - - - - - - - - - N/A - Client version - &Information - + Debug window + + + + General + + + Using OpenSSL version - Startup time - Network - + Name + + + Number of connections - - On testnet - - - - Block chain - Current number of blocks - Estimated total blocks - Last block time - &Open - - Command-line options - - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - - - - - &Show - - - - &Console - + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + Build date - - Myriadcoin - Debug window - - - - - Myriadcoin Core - - - - Debug log file - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. - Clear console - Welcome to the Myriadcoin RPC console. - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - Type <b>help</b> for an overview of available commands. + + %1 B + + + + %1 KB + + + + %1 MB + + + + %1 GB + + + + %1 m + + + + %1 h + + + + %1 h %2 m + + + + + ReceiveCoinsDialog + + &Amount: + + + + &Label: + + + + &Message: + + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + + + + Clear + + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + + + + Remove the selected entries from the list + + + + Remove + + + + Copy label + + + + Copy message + + + + Copy amount + + + + + ReceiveRequestDialog + + QR Code + + + + Copy &URI + + + + Copy &Address + + + + &Save Image... + + + + Request payment to %1 + + + + Payment information + + + + URI + + + + Address + ที่อยู่ + + + Amount + + + + Label + ชื่อ + + + Message + + + + Resulting URI too long, try to reduce the text for label / message. + + + + Error encoding URI into QR Code. + + + + + RecentRequestsTableModel + + Date + + + + Label + ชื่อ + + + Message + + + + Amount + + + + (no label) + (ไม่มีชื่อ) + + + (no message) + + + + (no amount) + + SendCoinsDialog - - - - - - - - Send Coins + ส่งเหรียญ + + + Coin Control Features + + + + Inputs... + + + + automatically selected + + + + Insufficient funds! + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address - Send to multiple recipients at once - Add &Recipient - - Remove all transaction fields + Clear all fields of the form. - Clear &All - Balance: - - 123.456 BTC - - - - Confirm the send action - S&end - - <b>%1</b> to %2 (%3) - - - - Confirm send coins - - Are you sure you want to send %1? + %1 to %2 - - and + Copy quantity + + + + Copy amount + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + + + + or - The recipient address is not valid, please recheck. - The amount to pay must be larger than 0. - The amount exceeds your balance. - The total exceeds your balance when the %1 transaction fee is included. - Duplicate address found, can only send to each address once per send operation. - - Error: Transaction creation failed! + Transaction creation failed! - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + + + + (no label) + (ไม่มีชื่อ) + + + Warning: Unknown change address + + + + Are you sure you want to send? + + + + added as transaction fee + + + + Payment request expired + + + + Invalid payment address %1 SendCoinsEntry - - Form - - - - A&mount: - Pay &To: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book - &Label: - - Choose address from address book + Choose previously used address + + + + This is a normal payment. - Alt+A - Paste address from clipboard - Alt+P - - Remove this recipient + Remove this entry - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + + + + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. SignVerifyMessageDialog - Signatures - Sign / Verify a Message - &Sign Message - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book + Choose previously used address - - Alt+A - Paste address from clipboard - Alt+P - Enter the message you want to sign here - Signature - Copy the current signature to the system clipboard - Sign the message to prove you own this Myriadcoin address - Sign &Message - Reset all sign message fields - - Clear &All - &Verify Message - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address - Verify &Message - Reset all verify message fields - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature - - Enter Myriadcoin signature - - - - - The entered address is invalid. - - - - Please check the address and try again. - - The entered address does not refer to a key. - Wallet unlock was cancelled. - Private key for the entered address is not available. - Message signing failed. - Message signed. - The signature could not be decoded. - - Please check the signature and try again. - The signature did not match the message digest. - Message verification failed. - Message verified. @@ -1639,186 +2118,160 @@ Address: %4 SplashScreen - - The Myriadcoin developers + Myriadcoin Core + + + + The Myriadcoin Core developers - [testnet] + [testnet] + + + + TrafficGraphWidget + + KB/s TransactionDesc - Open until %1 - + conflicted + + + %1/offline - %1/unconfirmed - %1 confirmations - Status - , broadcast through %n node(s) - Date - Source - Generated - - From - - - To - - own address - label - - - - - Credit - matures in %n more block(s) - not accepted - - - - Debit - Transaction fee - Net amount - Message - Comment - Transaction ID - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Merchant + + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Debug information - Transaction - Inputs - Amount - true - false - , has not been successfully broadcast yet - Open for %n more block(s) - unknown @@ -1826,12 +2279,10 @@ Address: %4 TransactionDescDialog - Transaction details - This pane shows a detailed description of the transaction @@ -1839,117 +2290,102 @@ Address: %4 TransactionTableModel - Date - Type - Address ที่อยู่ - Amount + + Immature (%1 confirmations, will be available after %2) + + - Open for %n more block(s) - Open until %1 - - Offline (%1 confirmations) - - - - - Unconfirmed (%1 of %2 confirmations) - - - - Confirmed (%1 confirmations) - - - Mined balance will be available when it matures in %n more block(s) - - - This block was not received by any other nodes and will probably not be accepted! - Generated but not accepted - + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + Received with - Received from - Sent to - Payment to yourself - Mined - (n/a) - Transaction status. Hover over this field to show number of confirmations. - Date and time that the transaction was received. - Type of transaction. - Destination address of transaction. - Amount removed from or added to balance. @@ -1957,337 +2393,278 @@ Address: %4 TransactionView - - All - Today วันนี้ - This week - This month - Last month - This year - Range... - Received with - Sent to - To yourself - Mined - Other - Enter address or label to search - Min amount - Copy address - Copy label - Copy amount - Copy transaction ID - Edit label - Show transaction details - - Export Transaction Data + Export Transaction History + + + + Exporting Failed + + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + + + + The transaction history was successfully saved to %1. - Comma separated file (*.csv) - + คั่นไฟล์ด้วยเครื่องหมายจุลภาค (*.csv) - Confirmed - Date - Type - Label ชื่อ - Address ที่อยู่ - Amount - ID - - Error exporting - ส่งออกผิดพลาด - - - - Could not write to file %1. - ไม่สามารถเขียนไปยังไฟล์ %1 - - - Range: - to + + WalletFrame + + No wallet has been loaded. + + + WalletModel - Send Coins - + ส่งเหรียญ WalletView - &Export - Export the data in the current tab to a file - Backup Wallet - Wallet Data (*.dat) - Backup Failed - - There was an error trying to save the wallet data to the new location. + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. - Backup Successful - - - The wallet data was successfully saved to the new location. - - bitcoin-core - - Myriadcoin version - - - - Usage: - - Send command to -server or myriadcoind - - - - List commands - Get help for a command - Options: - Specify configuration file (default: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) - Specify data directory - - Set database cache size in megabytes (default: 25) - - - - Listen for connections on <port> (default: 8333 or testnet: 18333) - Maintain at most <n> connections to peers (default: 125) - Connect to a node to retrieve peer addresses, and disconnect - Specify your own public address - Threshold for disconnecting misbehaving peers (default: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) - Accept command line and JSON-RPC commands - + Myriadcoin Core RPC client version + + + Run in the background as a daemon and accept commands - Use the test network - Accept connections from outside (default: 1 if no -proxy or -connect) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2302,612 +2679,686 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications - + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. - + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + Attempt to recover private keys from a corrupt wallet.dat - + Myriadcoin Core Daemon + + + Block creation options: - + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + Connect only to the specified node(s) - + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + Corrupted block database detected - + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + Discover own IP address (default: 1 when listening and no -externalip) - + Do not load the wallet and disable wallet RPC calls + + + Do you want to rebuild the block database now? - Error initializing block database - Error initializing wallet database environment %s! - Error loading block database - Error opening block database - Error: Disk space is low! - Error: Wallet locked, unable to create transaction! - Error: system error: - Failed to listen on any port. Use -listen=0 if you want this. - Failed to read block info - Failed to read block - Failed to sync block index - Failed to write block index - Failed to write block info - Failed to write block - Failed to write file info - Failed to write to coin database - Failed to write transaction index - Failed to write undo data - + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + Find peers using DNS lookup (default: 1 unless -connect) - + Force safe mode (default: 0) + + + Generate coins (default: 0) - How many blocks to check at startup (default: 288, 0 = all) - - How thorough the block verification is (0-4, default: 3) + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' - Not enough file descriptors available. - + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + Rebuild block chain index from current blk000??.dat files - + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + Set the number of threads to service RPC calls (default: 4) - + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + Verifying blocks... - Verifying wallet... - + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + + + Imports blocks from external blk000??.dat file - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) - Information - - Invalid -tor address: '%s' - - - - Invalid amount for -minrelaytxfee=<amount>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' - + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + Maintain a full transaction index (default: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - Only accept block chain matching built-in checkpoints (default: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - - Output extra debugging information. Implies all other -debug* options + Print block on startup, if found in block index - - Output extra network debugging information + Print block tree on startup (default: 0) - - Prepend debug output with timestamp + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) - - Select the version of socks proxy to use (4-5, default: 5) + Send command to Myriadcoin Core - Send trace/debug info to console instead of debug.log file - - Send trace/debug info to debugger - - - - - Set maximum block size in bytes (default: 250000) - - - - Set minimum block size in bytes (default: 0) - + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + Shrink debug.log file on client startup (default: 1 when no -debug) - Signing transaction failed - Specify connection timeout in milliseconds (default: 5000) - + Start Myriadcoin Core Daemon + + + System error: - Transaction amount too small - Transaction amounts must be positive - Transaction too large - Use UPnP to map the listening port (default: 0) - Use UPnP to map the listening port (default: 1 when listening) - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - Username for JSON-RPC connections - Warning - Warning: This version is obsolete, upgrade required! - - You need to rebuild the databases using -reindex to change -txindex + Zapping all transactions from wallet... + + + + on startup + + + + version - wallet.dat corrupt, salvage failed - Password for JSON-RPC connections - Allow JSON-RPC connections from specified IP address - Send commands to node running on <ip> (default: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) - Upgrade wallet to latest format - Set key pool size to <n> (default: 100) - Rescan the block chain for missing wallet transactions - Use OpenSSL (https) for JSON-RPC connections - Server certificate file (default: server.cert) - Server private key (default: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - This help message - Unable to bind to %s on this computer (bind returned error %d, %s) - - Connect through socks proxy - - - - Allow DNS lookups for -addnode, -seednode and -connect - Loading addresses... - Error loading wallet.dat: Wallet corrupted - Error loading wallet.dat: Wallet requires newer version of Myriadcoin - Wallet needed to be rewritten: restart Myriadcoin to complete - Error loading wallet.dat - Invalid -proxy address: '%s' - Unknown network specified in -onlynet: '%s' - Unknown -socks proxy version requested: %i - Cannot resolve -bind address: '%s' - Cannot resolve -externalip address: '%s' - Invalid amount for -paytxfee=<amount>: '%s' - Invalid amount - Insufficient funds - Loading block index... - Add a node to connect to and attempt to keep the connection open - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - - - - - Fee per KB to add to transactions you send - - - - Loading wallet... - Cannot downgrade wallet - Cannot write default address - Rescanning... - Done loading - To use the %s option - Error - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_tr.ts b/src/qt/locale/bitcoin_tr.ts index d4537ead..7f6d809e 100644 --- a/src/qt/locale/bitcoin_tr.ts +++ b/src/qt/locale/bitcoin_tr.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - Myriadcoin hakkında + About Myriadcoin Core + Myriadcoin Çekirdeği hakkında - - <b>Myriadcoin</b> version - <b>Myriadcoin</b> sürüm + <b>Myriadcoin Core</b> version + <b>Bitcoin Çekirdek</b> sürümü - This is experimental software. @@ -28,153 +24,128 @@ This product includes software developed by the OpenSSL Project for use in the O 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. - Copyright Telif hakkı - - The Myriadcoin developers - Myriadcoin geliştiricileri + The Myriadcoin Core developers + Myriadcoin Çekirdeği geliştiricileri + + + (%1-bit) + (%1-bit) AddressBookPage - - Address Book - Adres defteri - - - Double-click to edit address or label Adresi ya da etiketi düzenlemek için çift tıklayınız - Create a new address Yeni bir adres oluştur - + &New + &Yeni + + Copy the currently selected address to the system clipboard - Şu anda seçili olan adresi panoya kopyala + Şu anda seçili olan adresi sistem panosuna kopyala - - &New Address - &Yeni adres + &Copy + &Kopyala - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Bunlar, ödeme almak için Myriadcoin adresleridir. Kimin ödeme yaptığını izleyebilmek için her ödeme yollaması gereken kişiye değişik bir adres verebilirsiniz. + C&lose + K&apat - &Copy Address Adresi &kopyala - - Show &QR Code - &QR kodunu göster - - - - Sign a message to prove you own a Myriadcoin address - Bir Myriadcoin adresinin sizin olduğunu ispatlamak için mesaj imzalayın - - - - Sign &Message - &Mesaj imzala - - - Delete the currently selected address from the list Seçili adresi listeden sil - Export the data in the current tab to a file Güncel sekmedeki verileri bir dosyaya aktar - &Export &Dışa aktar - - Verify a message to ensure it was signed with a specified Myriadcoin address - Belirtilen Myriadcoin adresi ile imzalandığını doğrulamak için bir mesajı kontrol et - - - - &Verify Message - Mesaj &kontrol et - - - &Delete &Sil - + Choose the address to send coins to + Myriadcoin yollanacak adresi seç + + + Choose the address to receive coins with + Myriadcoin alınacak adresi seç + + + C&hoose + S&eç + + + Sending addresses + Yollama adresleri + + + Receiving addresses + Alım adresleri + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. Bunlar ödeme yapmak için kullanacağınız Myriadcoin adreslerinizdir. Myriadcoin yollamadan önce meblağı ve alıcı adresini daima kontrol ediniz. - + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Bunlar ödeme almak için kullanacağınız Myriadcoin adreslerinizdir. Her muamele için yeni bir alım adresi kullanmanız tavsiye edilir. + + Copy &Label &Etiketi kopyala - &Edit &Düzenle - - Send &Coins - Bit&coin Gönder + Export Address List + Adres listesini dışa aktar - - Export Address Book Data - Adres defteri verilerini dışa aktar - - - Comma separated file (*.csv) Virgülle ayrılmış değerler dosyası (*.csv) - - Error exporting - Dışa aktarımda hata oluştu + Exporting Failed + Dışa aktarım başarısız oldu - - Could not write to file %1. - %1 dosyasına yazılamadı. + There was an error trying to save the address list to %1. + Adres listesinin %1 konumuna kaydedilmesi sırasında bir hata meydana geldi. AddressTableModel - Label Etiket - Address Adres - (no label) (boş etiket) @@ -182,140 +153,106 @@ This product includes software developed by the OpenSSL Project for use in the O AskPassphraseDialog - Passphrase Dialog Parola diyaloğu - Enter passphrase Parolayı giriniz - New passphrase Yeni parola - Repeat new passphrase Yeni parolayı tekrarlayınız - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. Cüzdanınız için yeni parolayı giriniz.<br/>Lütfen <b>10 ya da daha fazla rastgele karakter</b> veya <b>sekiz ya da daha fazla kelime</b> içeren bir parola seçiniz. - Encrypt wallet Cüzdanı şifrele - This operation needs your wallet passphrase to unlock the wallet. Bu işlem cüzdan kilidini açmak için cüzdan parolanızı gerektirir. - Unlock wallet Cüzdan kilidini aç - This operation needs your wallet passphrase to decrypt the wallet. Bu işlem, cüzdan şifresini açmak için cüzdan parolasını gerektirir. - Decrypt wallet Cüzdan şifresini aç - Change passphrase Parolayı değiştir - Enter the old and new passphrase to the wallet. Cüzdan için eski ve yeni parolaları giriniz. - Confirm wallet encryption Cüzdan şifrelenmesini teyit eder - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! Uyarı: Eğer cüzdanınızı şifrelerseniz ve parolanızı kaybederseniz, <b>TÜM BİTCOİNLERİNİZİ KAYBEDERSİNİZ</b>! - Are you sure you wish to encrypt your wallet? Cüzdanınızı şifrelemek istediğinizden emin misiniz? - 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. Ö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. - - Warning: The Caps Lock key is on! Uyarı: Caps Lock tuşu faal durumda! - - Wallet encrypted Cüzdan şifrelendi - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. - Şifreleme işlemini tamamlamak için Myriadcoin şimdi kapanacaktır. Cüzdanınızı şifrelemenin, Myriadcoinlerinizin bilgisayara bulaşan kötücül bir yazılım tarafından çalınmaya karşı tamamen koruyamayacağını unutmayınız. + Şifreleme işlemini tamamlamak için Myriadcoin ş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. - - - - Wallet encryption failed Cüzdan şifrelemesi başarısız oldu - Wallet encryption failed due to an internal error. Your wallet was not encrypted. Dahili bir hata sebebiyle cüzdan şifrelemesi başarısız oldu. Cüzdanınız şifrelenmedi. - - The supplied passphrases do not match. Girilen parolalar birbirleriyle uyumlu değil. - Wallet unlock failed Cüzdan kilidinin açılması başarısız oldu - - - The passphrase entered for the wallet decryption was incorrect. Cüzdan şifresinin açılması için girilen parola yanlıştı. - Wallet decryption failed Cüzdan şifresinin açılması başarısız oldu - Wallet passphrase was successfully changed. Cüzdan parolası başarılı bir şekilde değiştirildi. @@ -323,354 +260,306 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - Sign &message... &Mesaj imzala... - Synchronizing with network... Şebeke ile senkronizasyon... - &Overview &Genel bakış - + Node + Düğüm + + Show general overview of wallet Cüzdana genel bakışı göster - &Transactions &Muameleler - Browse transaction history Muamele tarihçesini tara - - Edit the list of stored addresses and labels - Saklanan adres ve etiket listesini düzenle - - - - Show the list of addresses for receiving payments - Ödeme alma adreslerinin listesini göster - - - E&xit &Çık - Quit application Uygulamadan çık - Show information about Myriadcoin Myriadcoin hakkında bilgi göster - About &Qt &Qt hakkında - Show information about Qt Qt hakkında bilgi görüntü - &Options... &Seçenekler... - &Encrypt Wallet... Cüzdanı &şifrele... - &Backup Wallet... Cüzdanı &yedekle... - &Change Passphrase... Parolayı &değiştir... - + &Sending addresses... + &Gönderme adresleri... + + + &Receiving addresses... + &Alma adresleri... + + + Open &URI... + &URI aç... + + Importing blocks from disk... Bloklar diskten içe aktarılıyor... - Reindexing blocks on disk... Diskteki bloklar yeniden endeksleniyor... - Send coins to a Myriadcoin address Bir Myriadcoin adresine Myriadcoin yolla - Modify configuration options for Myriadcoin Myriadcoin seçeneklerinin yapılandırmasını değiştir - Backup wallet to another location Cüzdanı diğer bir konumda yedekle - Change the passphrase used for wallet encryption Cüzdan şifrelemesi için kullanılan parolayı değiştir - &Debug window &Hata ayıklama penceresi - Open debugging and diagnostic console Hata ayıklama ve teşhis penceresini aç - &Verify message... Mesaj &kontrol et... - - Myriadcoin Myriadcoin - Wallet Cüzdan - &Send &Gönder - &Receive &Al - - &Addresses - &Adresler - - - - &About Myriadcoin - Myriadcoin &Hakkında - - - &Show / Hide &Göster / Sakla - Show or hide the main Window Ana pencereyi görüntüle ya da sakla - Encrypt the private keys that belong to your wallet Cüzdanınızın özel anahtarlarını şifrele - Sign messages with your Myriadcoin addresses to prove you own them Mesajları adreslerin size ait olduğunu ispatlamak için Myriadcoin adresleri ile imzala - Verify messages to ensure they were signed with specified Myriadcoin addresses Belirtilen Myriadcoin adresleri ile imzalandıklarından emin olmak için mesajları kontrol et - &File &Dosya - &Settings &Ayarlar - &Help &Yardım - Tabs toolbar Sekme araç çubuğu - - [testnet] [testnet] - + Myriadcoin Core + Myriadcoin Çekirdeği + + + Request payments (generates QR codes and myriadcoin: URIs) + Ödeme talep et (QR kodu ve myriadcoin URI'si oluşturur) + + + &About Myriadcoin Core + Myriadcoin Çekirdeği &hakkında + + + Show the list of used sending addresses and labels + Kullanılmış gönderme adresleri ve etiketlerin listesini göster + + + Show the list of used receiving addresses and labels + Kullanılmış alım adresleri ve etiketlerin listesini göster + + + Open a myriadcoin: URI or payment request + Bir myriadcoin: bağlantısı ya da ödeme talebi aç + + + &Command-line options + &Komut satırı seçenekleri + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + Myriadcoin komut satırı seçeneklerinin listesini elde etmek için Myriadcoin Çekirdeği yardım mesajını göster + + Myriadcoin client Myriadcoin istemcisi - %n active connection(s) to Myriadcoin network Myriadcoin şebekesine %n faal bağlantıMyriadcoin şebekesine %n faal bağlantı - No block source available... Hiçbir blok kaynağı mevcut değil... - Processed %1 of %2 (estimated) blocks of transaction history. Muamele tarihçesinin toplam (tahmini) %2 blokundan %1 blok işlendi. - Processed %1 blocks of transaction history. Muamele tarihçesinde %1 blok işlendi. - %n hour(s) %n saat%n saat - %n day(s) %n gün%n gün - %n week(s) %n hafta%n hafta - + %1 and %2 + %1 ve %2 + + + %n year(s) + %n yıl%n yıl + + %1 behind %1 geride - Last received block was generated %1 ago. Son alınan blok %1 evvel oluşturulmuştu. - Transactions after this will not yet be visible. Bundan sonraki muameleler henüz görüntülenemez. - Error Hata - Warning Uyarı - Information Bilgi - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - Bu muamele boyut sınırlarını aşmıştır. Gene de %1 ücret ödeyerek gönderebilirsiniz, ki bu ücret muamelenizi işleyen ve şebekeye yardım eden düğümlere ödenecektir. Ücreti ödemek istiyor musunuz? - - - Up to date Güncel - Catching up... Aralık kapatılıyor... - - Confirm transaction fee - Muamele ücretini teyit et - - - Sent transaction Muamele yollandı - Incoming transaction Gelen muamele - Date: %1 Amount: %2 Type: %3 Address: %4 Tarih: %1 -Miktar: %2 +Meblağ: %2 Tür: %3 Adres: %4 - - - URI handling - URI yönetimi - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - URI okunamadı! Sebebi geçersiz bir Myriadcoin adresi veya hatalı URI parametreleri olabilir. - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> Cüzdan <b>şifrelenmiştir</b> ve şu anda <b>kilidi açıktır</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> Cüzdan <b>şifrelenmiştir</b> ve şu anda <b>kilitlidir</b> - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. Ciddi bir hata oluştu. Myriadcoin artık güvenli bir şekilde işlemeye devam edemez ve kapanacaktır. @@ -678,329 +567,647 @@ Adres: %4 ClientModel - Network Alert Şebeke hakkında uyarı + + CoinControlDialog + + Coin Control Address Selection + Para kontrolü adres seçimi + + + Quantity: + Miktar: + + + Bytes: + Bayt: + + + Amount: + Meblağ: + + + Priority: + Öncelik: + + + Fee: + Ücret: + + + Low Output: + Düşük çıktı: + + + After Fee: + Ücretten sonra: + + + Change: + Para üstü: + + + (un)select all + tümünü seç(me) + + + Tree mode + Ağaç kipi + + + List mode + Liste kipi + + + Amount + Meblağ + + + Address + Adres + + + Date + Tarih + + + Confirmations + Doğrulamalar + + + Confirmed + Doğrulandı + + + Priority + Öncelik + + + Copy address + Adresi kopyala + + + Copy label + Etiketi kopyala + + + Copy amount + Meblağı kopyala + + + Copy transaction ID + Muamele kimliğini kopyala + + + Lock unspent + Harcanmamışı kilitle + + + Unlock unspent + Harcanmamışın kilidini aç + + + Copy quantity + Miktarı kopyala + + + Copy fee + Ücreti kopyala + + + Copy after fee + Ücretten sonrakini kopyala + + + Copy bytes + Baytları kopyala + + + Copy priority + Önceliği kopyala + + + Copy low output + Düşük çıktıyı kopyala + + + Copy change + Para üstünü kopyala + + + highest + azami + + + higher + daha yüksek + + + high + yüksek + + + medium-high + orta-yüksek + + + medium + orta + + + low-medium + düşük-orta + + + low + düşük + + + lower + daha düşük + + + lowest + asgari + + + (%1 locked) + (%1 kilitlendi) + + + none + boş + + + Dust + Toz + + + yes + evet + + + no + hayır + + + This label turns red, if the transaction size is greater than 1000 bytes. + Eğer muamele boyutu 1000 bayttan büyükse bu etkiket kırmızı olur. + + + This means a fee of at least %1 per kB is required. + Bu, kB başına en az %1 ücret gerektiği anlamnına gelir. + + + Can vary +/- 1 byte per input. + Girdi başına +/- 1 bayt değişebilir. + + + Transactions with higher priority are more likely to get included into a block. + Yüksek öncelikli muamelelerin bir bloğa dahil olmaları daha olasıdır. + + + This label turns red, if the priority is smaller than "medium". + Eğer öncelik "ortadan" düşükse bu etiket kırmızı olur. + + + This label turns red, if any recipient receives an amount smaller than %1. + Eğer herhangi bir alıcı %1'den düşük bir meblağ alırsa bu etiket kırmızı olur. + + + This means a fee of at least %1 is required. + Bu, en az %1 tutarında bir ücret gerektiği anlamına gelir. + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + Asgari yönlendirme ücretinin 0.546 oranının altındaki meblağlar toz olarak gösterilir. + + + This label turns red, if the change is smaller than %1. + Eğer para üstü %1'den düşükse bu etiket kırmızı olur. + + + (no label) + (boş etiket) + + + change from %1 (%2) + %1 unsurundan para üstü (%2) + + + (change) + (para üstü) + + EditAddressDialog - Edit Address Adresi düzenle - &Label &Etiket - - The label associated with this address book entry - Bu adres defteri unsuru ile ilişkili etiket + The label associated with this address list entry + Bu adres listesi girdisi ile ilişkili etiket + + + The address associated with this address list entry. This can only be modified for sending addresses. + Bu adres listesi girdisi ile ilişkili adres. Sadece gönderme adresleri için değiştirilebilir. - &Address &Adres - - The address associated with this address book entry. This can only be modified for sending addresses. - Bu adres defteri unsuru ile ilişkili adres. Bu, sadece gönderi adresi için değiştirilebilir. - - - New receiving address Yeni alım adresi - New sending address Yeni gönderi adresi - Edit receiving address Alım adresini düzenle - Edit sending address Gönderi adresini düzenle - The entered address "%1" is already in the address book. Girilen "%1" adresi hâlihazırda adres defterinde mevcuttur. - The entered address "%1" is not a valid Myriadcoin address. Girilen "%1" adresi geçerli bir Myriadcoin adresi değildir. - Could not unlock wallet. Cüzdan kilidi açılamadı. - New key generation failed. Yeni anahtar oluşturulması başarısız oldu. - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt - Myriadcoin-Qt + A new data directory will be created. + Yeni bir veri klasörü oluşturulacaktır. + + + name + isim + + + Directory already exists. Add %1 if you intend to create a new directory here. + Klasör hâlihazırda mevcuttur. Burada yeni bir klasör oluşturmak istiyorsanız, %1 ilâve ediniz. + + + Path already exists, and is not a directory. + Erişim yolu zaten mevcuttur ve klasör değildir. + + + Cannot create data directory here. + Burada veri klasörü oluşturulamaz. + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + Myriadcoin Çekirdeği - Komut satırı seçenekleri + + + Myriadcoin Core + Myriadcoin Çekirdeği - version sürüm - Usage: Kullanım: - command-line options komut satırı seçenekleri - UI options Kullanıcı arayüzü seçenekleri - Set language, for example "de_DE" (default: system locale) Lisan belirt, mesela "de_De" (varsayılan: sistem dili) - Start minimized Küçültülmüş olarak başlat - + Set SSL root certificates for payment request (default: -system-) + Ödeme talebi için SSL kök sertifikalarını belirle (varsayılan: -system-) + + Show splash screen on startup (default: 1) Başlatıldığında başlangıç ekranını göster (varsayılan: 1) + + Choose data directory on startup (default: 0) + Başlangıçta veri klasörü seç (varsayılan: 0) + + + + Intro + + Welcome + Hoş geldiniz + + + Welcome to Myriadcoin Core. + Myriadcoin Çekirdeğine hoş geldiniz. + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + Bu programı ilk kez başlattığınızdan dolayı Myriadcoin Çekirdeğinin verilerini nereye saklayacağını seçebilirsiniz. + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + Myriadcoin çekirdeği Myriadcoin blok zincirinin bir kopyasını indirip saklayacaktır. Asgari %1GB bouyutunda veri bu klasörde saklanacak ve zamanla bu boyut artacaktır. Cüzdan da bu klasörde saklanacaktır. + + + Use the default data directory + Varsayılan veri klasörünü kullan + + + Use a custom data directory: + Özel bir veri klasörü kullan: + + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" can not be created. + Hata: belirtilen "%1" veri klasörü oluşturulamaz. + + + Error + Hata + + + GB of free space available + GB boş alan mevcuttur + + + (of %1GB needed) + (gereken boyut: %1GB) + + + + OpenURIDialog + + Open URI + URI aç + + + Open payment request from URI or file + Dosyadan veya URI'den ödeme talebi aç + + + URI: + URI: + + + Select payment request file + Ödeme talebi dosyasını seç + + + Select payment request file to open + Açılacak ödeme talebi dosyasını seç + OptionsDialog - Options Seçenekler - &Main &Esas ayarlar - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. Muamelelerin hızlı işlenmesini garantilemeye yardım eden, seçime dayalı kB başı muamele ücreti. Muamelelerin çoğunluğunun boyutu 1 kB'dir. - Pay transaction &fee Muamele ücreti &öde - Automatically start Myriadcoin after logging in to the system. - Sistemde oturum açıldığında Myriadcoin'i otomatik olarak başlat. + Sistemde oturum açıldığında Bitcoin'i otomatik olarak başlat. - &Start Myriadcoin on system login - Myriadcoin'i sistem oturumuyla &başlat + Bitcoin'i sistem oturumuyla &başlat + + + Size of &database cache + &Veritabanı tamponunun boyutu + + + MB + MB + + + Number of script &verification threads + İş parçacıklarını &denetleme betiği sayısı + + + Connect to the Myriadcoin network through a SOCKS proxy. + Myriadcoin şebekesine bir SOCKS vekil sunucusu vasıtasıyla bağlan. + + + &Connect through SOCKS proxy (default proxy): + SOCKS vekil sunucusuyla &bağlan (varsayılan vekil): + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + Vekil sunucusunun IP adresi (mesela IPv4: 127.0.0.1 / IPv6: ::1) + + + 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 |. + 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. + + + Third party transaction URLs + Üçüncü taraf muamele URL'leri + + + Active command-line options that override above options: + Yukarıdaki seçeneklerin yerine geçen faal komut satırı seçenekleri: - Reset all client options to default. İstemcinin tüm seçeneklerini varsayılan değerlere geri al. - &Reset Options - Seçenekleri &sıfırla + Seçenekleri Sıfı&rla - &Network &Şebeke - + (0 = auto, <0 = leave that many cores free) + (0 = otomatik, <0 = bu kadar çekirdeği kullanma) + + + W&allet + &Cüzdan + + + Expert + Gelişmiş + + + Enable coin &control features + Para &kontrolü özelliklerini etkinleştir + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + Teyit edilmemiş para üstünü harcamayı devre dışı bırakırsanız, bir muamelenin para üstü bu muamele için en az bir teyit olana dek harcanamaz. Bu, aynı zamanda bakiyenizin nasıl hesaplandığını da etkiler. + + + &Spend unconfirmed change + Teyit edilmemiş para üstünü &harca + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. Yönlendiricide Myriadcoin istemci portlarını otomatik olarak açar. Bu, sadece yönlendiricinizin UPnP desteği bulunuyorsa ve etkinse çalışabilir. - Map port using &UPnP Portları &UPnP kullanarak haritala - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - Myriadcoin şebekesine SOCKS vekil sunucusu vasıtasıyla bağlan (mesela Tor ile bağlanıldığında). - - - - &Connect through SOCKS proxy: - SOCKS vekil sunucusu vasıtasıyla ba&ğlan: - - - Proxy &IP: Vekil &İP: - - IP address of the proxy (e.g. 127.0.0.1) - Vekil sunucunun İP adresi (mesela 127.0.0.1) - - - &Port: &Port: - Port of the proxy (e.g. 9050) Vekil sunucunun portu (mesela 9050) - SOCKS &Version: SOCKS &sürümü: - SOCKS version of the proxy (e.g. 5) Vekil sunucunun SOCKS sürümü (mesela 5) - &Window &Pencere - Show only a tray icon after minimizing the window. Küçültüldükten sonra sadece çekmece ikonu göster. - &Minimize to the tray instead of the taskbar İşlem çubuğu yerine sistem çekmecesine &küçült - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. 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. - M&inimize on close Kapatma sırasında k&üçült - &Display &Görünüm - User Interface &language: Kullanıcı arayüzü &lisanı: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. Kullanıcı arayüzünün dili burada belirtilebilir. Bu ayar Myriadcoin tekrar başlatıldığında etkinleşecektir. - &Unit to show amounts in: - Miktarı göstermek için &birim: + Meblağları göstermek için &birim: - Choose the default subdivision unit to show in the interface and when sending coins. Myriadcoin gönderildiğinde arayüzde gösterilecek varsayılan alt birimi seçiniz. - Whether to show Myriadcoin addresses in the transaction list or not. Muamele listesinde Myriadcoin adreslerinin gösterilip gösterilmeyeceklerini belirler. - &Display addresses in transaction list Muamele listesinde adresleri &göster - + Whether to show coin control features or not. + Para kontrol özelliklerinin gösterilip gösterilmeyeceğini ayarlar. + + &OK &Tamam - &Cancel &İptal - - &Apply - &Uygula - - - default varsayılan - + none + boş + + Confirm options reset Seçeneklerin sıfırlanmasını teyit et - - Some settings may require a client restart to take effect. - Bazı ayarların dikkate alınması istemcinin tekrar başlatılmasını gerektirebilir. + Client restart required to activate changes. + Değişikliklerin uygulanması için istemcinin yeniden başlatılması lazımdır. - - Do you want to proceed? - Devam etmek istiyor musunuz? + Client will be shutdown, do you want to proceed? + İstemci kapanacaktır, devam etmek istiyor musunuz? - - - Warning - Uyarı + This change would require a client restart. + Bu değişiklik istemcinin tekrar başlatılmasını gerektirir. - - - This setting will take effect after restarting Myriadcoin. - Bu ayarlar Myriadcoin tekrar başlatıldığında etkinleşecektir. - - - The supplied proxy address is invalid. Girilen vekil sunucu adresi geçersizdir. @@ -1008,59 +1215,54 @@ Adres: %4 OverviewPage - Form Form - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. Görüntülenen veriler zaman aşımına uğramış olabilir. Bağlantı kurulduğunda cüzdanınız otomatik olarak şebeke ile eşleşir ancak bu işlem henüz tamamlanmamıştır. - - Balance: - Bakiye: - - - - Unconfirmed: - Doğrulanmamış: - - - Wallet Cüzdan - + Available: + Mevcut: + + + Your current spendable balance + Güncel harcanabilir bakiyeniz + + + Pending: + Beklemede: + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + Henüz teyit edilmemiş ve harcanabilir bakiyeye eklenmemiş muamelelerin toplamı + + Immature: Olgunlaşmamış: - Mined balance that has not yet matured Oluşturulan bakiye henüz olgunlaşmamıştır - + Total: + Toplam: + + + Your current total balance + Güncel toplam bakiyeniz + + <b>Recent transactions</b> <b>Son muameleler</b> - - Your current balance - Güncel bakiyeniz - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - Doğrulanması beklenen ve henüz güncel bakiyeye ilâve edilmemiş muamelelerin toplamı - - - - out of sync eşleşme dışı @@ -1068,579 +1270,856 @@ Adres: %4 PaymentServer - + URI handling + URI yönetimi + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + URI okunamadı! Sebebi geçersiz bir Myriadcoin adresi veya hatalı URI parametreleri olabilir. + + + Requested payment amount of %1 is too small (considered dust). + Talep edilen %1 meblağında ödeme çok düşüktür (toz olarak kabul edilir). + + + Payment request error + Ödeme talebi hatası + + Cannot start myriadcoin: click-to-pay handler Myriadcoin başlatılamadı: tıkla-ve-öde yöneticisi + + Net manager warning + Şebeke yöneticisi uyarısı + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + Faal vekil sunucunuz, vekil vasıtasıyla ödeme talepleri için gereken SOCKS5'i desteklememektedir. + + + Payment request fetch URL is invalid: %1 + Ödeme talebini alma URL'i geçersiz: %1 + + + Payment request file handling + Ödeme talebi dosyası yönetimi + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + Ödeme talebi okunamaz ya da işlenemez! Bunun sebebi geçersiz bir ödeme talebi dosyası olabilir. + + + Unverified payment requests to custom payment scripts are unsupported. + Özel ödeme betiklerine teyit edilmemiş ödeme talepleri desteklenmez. + + + Refund from %1 + %1 öğesinden iade + + + Error communicating with %1: %2 + %1 ile iletişimde hata: %2 + + + Payment request can not be parsed or processed! + Ödeme talebi ayrıştırılamaz ya da işlenemez! + + + Bad response from server %1 + %1 sunucusundan hatalı cevap + + + Payment acknowledged + Ödeme teyit edildi + + + Network request error + Şebeke talebi hatası + - QRCodeDialog + QObject - - QR Code Dialog - QR kodu diyaloğu + Myriadcoin + Myriadcoin - - Request Payment - Ödeme talebi + Error: Specified data directory "%1" does not exist. + Hata: belirtilen "%1" veri klasörü yoktur. - - Amount: - Miktar: + Error: Cannot parse configuration file: %1. Only use key=value syntax. + Hata: %1 yapılandırma dosyası ayrıştırılamadı. Sadece anahtar=değer dizimini kullanınız. - - Label: - Etiket: + Error: Invalid combination of -regtest and -testnet. + Hata: -regtest ve -testnet'in geçersiz kombinasyonu. - - Message: - Mesaj: + Myriadcoin Core didn't yet exit safely... + Myriadcoin Çekirdeği henüz güvenli bir şekilde çıkış yapmamıştır... - - &Save As... - &Farklı kaydet... + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Myriadcoin adresi giriniz (mesela 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + Resmi k&aydet... - - Error encoding URI into QR Code. - URI'nin QR koduna kodlanmasında hata oluştu. + &Copy Image + Resmi &kopyala - - The entered amount is invalid, please check. - Girilen miktar geçersizdir, kontrol ediniz. - - - - Resulting URI too long, try to reduce the text for label / message. - Sonuç URI çok uzun, etiket ya da mesaj metnini kısaltmayı deneyiniz. - - - Save QR Code QR kodu kaydet - - PNG Images (*.png) - PNG resimleri (*.png) + PNG Image (*.png) + PNG resim (*.png) RPCConsole - Client name İstemci ismi - - - - - - - - - - N/A Mevcut değil - Client version İstemci sürümü - &Information &Malumat - + Debug window + Hata ayıklama penceresi + + + General + Genel + + Using OpenSSL version Kullanılan OpenSSL sürümü - Startup time Başlama zamanı - Network Şebeke - + Name + İsim + + Number of connections Bağlantı sayısı - - On testnet - Testnet üzerinde - - - Block chain Blok zinciri - Current number of blocks Güncel blok sayısı - Estimated total blocks Tahmini toplam blok sayısı - Last block time Son blok zamanı - &Open &Aç - - Command-line options - Komut satırı seçenekleri - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - Mevcut Myriadcoin komut satırı seçeneklerinin listesini içeren Myriadcoin-Qt yardımını göster. - - - - &Show - &Göster - - - &Console &Konsol - + &Network Traffic + &Şebeke trafiği + + + &Clear + &Temizle + + + Totals + Toplamlar + + + In: + İçeri: + + + Out: + Dışarı: + + Build date Derleme tarihi - - Myriadcoin - Debug window - Myriadcoin - Hata ayıklama penceresi - - - - Myriadcoin Core - Myriadcoin Çekirdeği - - - Debug log file Hata ayıklama kütük dosyası - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. Güncel veri klasöründen Myriadcoin hata ayıklama kütük dosyasını açar. Büyük kütük dosyaları için bu birkaç saniye alabilir. - Clear console Konsolu temizle - Welcome to the Myriadcoin RPC console. Myriadcoin RPC konsoluna hoş geldiniz. - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. Tarihçede gezinmek için imleç tuşlarını kullanınız, <b>Ctrl-L</b> ile de ekranı temizleyebilirsiniz. - Type <b>help</b> for an overview of available commands. Mevcut komutların listesi için <b>help</b> yazınız. + + %1 B + %1 B + + + %1 KB + %1 KB + + + %1 MB + %1 MB + + + %1 GB + %1 GB + + + %1 m + %1 d + + + %1 h + %1 s + + + %1 h %2 m + %1 s %2 d + + + + ReceiveCoinsDialog + + &Amount: + &Meblağ: + + + &Label: + &Etiket: + + + &Message: + Me&saj: + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + Daha önce kullanılmış bir alım adresini kullan. Adresleri tekrar kullanmak güvenlik ve gizlilik sorunları doğurur. Bunu, daha önce yaptığınız bir talebi tekrar oluşturmak durumu dışında kullanmayınız. + + + R&euse an existing receiving address (not recommended) + &Hâlihazırda bulunan bir alım adresini kullan (önerilmez) + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + Talep açıldığında gösterilecek, isteğinize dayalı, ödeme talebi ile ilişkilendirilecek bir mesaj. Not: Bu mesaj ödeme ile birlikte Myriadcoin şebekesi üzerinden gönderilmeyecektir. + + + An optional label to associate with the new receiving address. + Yeni alım adresi ile ilişkili, seçiminize dayalı etiket. + + + Use this form to request payments. All fields are <b>optional</b>. + Ödeme talep etmek için bu formu kullanın. Tüm alanlar <b>seçime dayalıdır</b>. + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + Seçiminize dayalı talep edilecek meblağ. Belli bir meblağ talep etmemek için bunu boş bırakın veya sıfır değerini kullanın. + + + Clear all fields of the form. + Formdaki tüm alanları temizle. + + + Clear + Temizle + + + Requested payments history + Talep edilen ödemelerin tarihçesi + + + &Request payment + Ödeme &talep et + + + Show the selected request (does the same as double clicking an entry) + Seçilen talebi göster (bir unsura çift tıklamakla aynı anlama gelir) + + + Show + Göster + + + Remove the selected entries from the list + Seçilen unsurları listeden kaldır + + + Remove + Kaldır + + + Copy label + Etiketi kopyala + + + Copy message + Mesajı kopyala + + + Copy amount + Meblağı kopyala + + + + ReceiveRequestDialog + + QR Code + QR Kodu + + + Copy &URI + &URI'yi kopyala + + + Copy &Address + &Adresi kopyala + + + &Save Image... + Resmi ka&ydet... + + + Request payment to %1 + %1 unsuruna ödeme talep et + + + Payment information + Ödeme bilgisi + + + URI + URI + + + Address + Adres + + + Amount + Meblağ + + + Label + Etiket + + + Message + Mesaj + + + Resulting URI too long, try to reduce the text for label / message. + Sonuç URI çok uzun, etiket ya da mesaj metnini kısaltmayı deneyiniz. + + + Error encoding URI into QR Code. + URI'nin QR koduna kodlanmasında hata oluştu. + + + + RecentRequestsTableModel + + Date + Tarih + + + Label + Etiket + + + Message + Mesaj + + + Amount + Meblağ + + + (no label) + (boş etiket) + + + (no message) + (boş mesaj) + + + (no amount) + (boş meblağ) + SendCoinsDialog - - - - - - - - Send Coins Myriadcoin yolla - + Coin Control Features + Para kontrolü özellikleri + + + Inputs... + Girdiler... + + + automatically selected + otomatik seçilmiş + + + Insufficient funds! + Yetersiz fon! + + + Quantity: + Miktar: + + + Bytes: + Bayt: + + + Amount: + Meblağ: + + + Priority: + Öncelik: + + + Fee: + Ücret: + + + Low Output: + Düşük çıktı: + + + After Fee: + Ücretten sonra: + + + Change: + Para üstü: + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + Bu etkinleştirildiyse fakat para üstü adresi boş ya da geçersizse para üstü yeni oluşturulan bir adrese gönderilecektir. + + + Custom change address + Özel para üstü adresi + + Send to multiple recipients at once Birçok alıcıya aynı anda gönder - Add &Recipient &Alıcı ekle - - Remove all transaction fields - Bütün muamele alanlarını kaldır + Clear all fields of the form. + Formdaki tüm alanları temizle. - Clear &All Tümünü &temizle - Balance: Bakiye: - - 123.456 BTC - 123.456 BTC - - - Confirm the send action Yollama etkinliğini teyit ediniz - S&end G&önder - - <b>%1</b> to %2 (%3) - <b>%1</b> şu adrese: %2 (%3) - - - Confirm send coins Gönderiyi teyit ediniz - - Are you sure you want to send %1? - %1 göndermek istediğinizden emin misiniz? + %1 to %2 + %1 öğesinden %2 unsuruna - - and - ve + Copy quantity + Miktarı kopyala + + + Copy amount + Meblağı kopyala + + + Copy fee + Ücreti kopyala + + + Copy after fee + Ücretten sonrakini kopyala + + + Copy bytes + Baytları kopyala + + + Copy priority + Önceliği kopyala + + + Copy low output + Düşük çıktıyı kopyala + + + Copy change + Para üstünü kopyala + + + Total Amount %1 (= %2) + Toplam meblağ %1 (= %2) + + + or + veya - The recipient address is not valid, please recheck. Alıcı adresi geçerli değildir, lütfen denetleyiniz. - The amount to pay must be larger than 0. Ödeyeceğiniz tutarın sıfırdan yüksek olması gerekir. - The amount exceeds your balance. Tutar bakiyenizden yüksektir. - The total exceeds your balance when the %1 transaction fee is included. Toplam, %1 muamele ücreti ilâve edildiğinde bakiyenizi geçmektedir. - Duplicate address found, can only send to each address once per send operation. Çift adres bulundu, belli bir gönderi sırasında her adrese sadece tek bir gönderide bulunulabilir. - - Error: Transaction creation failed! - Hata: Muamele oluşturması başarısız oldu! + Transaction creation failed! + Muamelenin oluşturulması başarısız oldu! - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Hata: 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. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + 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. + + + Warning: Invalid Myriadcoin address + Uyarı: geçersiz Myriadcoin adresi + + + (no label) + (boş etiket) + + + Warning: Unknown change address + Uyarı: geçersiz para üstü adresi + + + Are you sure you want to send? + Göndermek istediğinizden emin misiniz? + + + added as transaction fee + muamele ücreti olarak eklendi + + + Payment request expired + Ödeme talebinin ömrü doldu + + + Invalid payment address %1 + Geçersiz ödeme adresi %1 SendCoinsEntry - - Form - Form - - - A&mount: - M&iktar: + Mebla&ğ: - Pay &To: - &Şu kişiye öde: + &Şu adrese öde: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Ödemenin gönderileceği adres (mesela 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book Adres defterinize eklemek için bu adrese ilişik bir etiket giriniz - &Label: &Etiket: - - Choose address from address book - Adres defterinden adres seç + Choose previously used address + Önceden kullanılmış adres seç + + + This is a normal payment. + Bu, normal bir ödemedir. - Alt+A Alt+A - Paste address from clipboard Panodan adres yapıştır - Alt+P Alt+P - - Remove this recipient - Bu alıcıyı kaldır + Remove this entry + Bu unsuru kaldır - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Myriadcoin adresi giriniz (mesela 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + Mesaj: + + + This is a verified payment request. + Bu, teyit edilmiş bir ödeme talebidir. + + + Enter a label for this address to add it to the list of used addresses + Kullanılmış adres listesine eklemek için bu adrese bir etiket girin + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + Bitcoin: URI'siyle ilişkili ve bilginiz için muameleyle saklanacak bir mesaj. Not: Bu mesaj Myriadcoin şebekesi üzerinden gönderilmeyecektir. + + + This is an unverified payment request. + Bu, teyit edilmemiş bir ödeme talebidir. + + + Pay To: + Şu adrese öde: + + + Memo: + Not: + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + Myriadcoin Çekirdeği kapanıyor... + + + Do not shut down the computer until this window disappears. + Bu pencere kalkıncaya dek bilgisayarı kapatmayınız. SignVerifyMessageDialog - Signatures - Sign / Verify a Message İmzalar - Mesaj İmzala / Kontrol et - &Sign Message Mesaj &imzala - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. Bir adresin sizin olduğunu ispatlamak için adresinizle mesaj imzalayabilirsiniz. Oltalama saldırılarının kimliğinizi imzanızla elde etmeyi deneyebilecekleri için belirsiz hiçbir şey imzalamamaya dikkat ediniz. Sadece ayrıntılı açıklaması olan ve tümüne katıldığınız ifadeleri imzalayınız. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Mesajın imzalanmasında kullanılacak adres (mesela 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book - Adres defterinden bir adres seç + Choose previously used address + Önceden kullanılmış adres seç - - Alt+A Alt+A - Paste address from clipboard Panodan adres yapıştır - Alt+P Alt+P - Enter the message you want to sign here İmzalamak istediğiniz mesajı burada giriniz - Signature İmza - Copy the current signature to the system clipboard Güncel imzayı sistem panosuna kopyala - Sign the message to prove you own this Myriadcoin address Bu Myriadcoin adresinin sizin olduğunu ispatlamak için mesajı imzalayın - Sign &Message &Mesajı imzala - Reset all sign message fields Tüm mesaj alanlarını sıfırla - - Clear &All Tümünü &temizle - &Verify Message Mesaj &kontrol et - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. İmza için kullanılan adresi, mesajı (satır sonları, boşluklar, sekmeler vs. karakterleri tam olarak kopyaladığınızdan emin olunuz) ve imzayı aşağıda giriniz. Bir ortadaki adam saldırısı tarafından kandırılmaya mâni olmak için imzadan, imzalı mesajın içeriğini aşan bir anlam çıkarmamaya dikkat ediniz. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Mesajı imzalamak için kullanılmış olan adres (mesela 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address Belirtilen Myriadcoin adresi ile imzalandığını doğrulamak için mesajı kontrol et - Verify &Message &Mesaj kontrol et - Reset all verify message fields Tüm mesaj kontrolü alanlarını sıfırla - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Myriadcoin adresi giriniz (mesela 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature İmzayı oluşturmak için "Mesaj İmzala" unsurunu tıklayın - - Enter Myriadcoin signature - Myriadcoin imzası gir - - - - The entered address is invalid. Girilen adres geçersizdir. - - - - Please check the address and try again. Adresi kontrol edip tekrar deneyiniz. - - The entered address does not refer to a key. Girilen adres herhangi bir anahtara işaret etmemektedir. - Wallet unlock was cancelled. Cüzdan kilidinin açılması iptal edildi. - Private key for the entered address is not available. Girilen adres için özel anahtar mevcut değildir. - Message signing failed. Mesajın imzalanması başarısız oldu. - Message signed. Mesaj imzalandı. - The signature could not be decoded. İmzanın kodu çözülemedi. - - Please check the signature and try again. İmzayı kontrol edip tekrar deneyiniz. - The signature did not match the message digest. İmza mesajın hash değeri ile eşleşmedi. - Message verification failed. Mesaj doğrulaması başarısız oldu. - Message verified. Mesaj doğrulandı. @@ -1648,186 +2127,160 @@ Adres: %4 SplashScreen - - The Myriadcoin developers - Myriadcoin geliştiricileri + Myriadcoin Core + Myriadcoin Çekirdeği + + + The Myriadcoin Core developers + Myriadcoin Çekirdeği geliştiricileri - [testnet] [testnet] + + TrafficGraphWidget + + KB/s + KB/s + + TransactionDesc - Open until %1 %1 değerine dek açık - + conflicted + çakışma + + %1/offline %1/çevrim dışı - %1/unconfirmed %1/doğrulanmadı - %1 confirmations %1 teyit - Status Durum - , broadcast through %n node(s) , %n düğüm vasıtasıyla yayınlandı, %n düğüm vasıtasıyla yayınlandı - Date Tarih - Source Kaynak - Generated Oluşturuldu - - From Gönderen - - - To Alıcı - - own address kendi adresiniz - label etiket - - - - - Credit Gider - matures in %n more block(s) %n ek blok sonrasında olgunlaşacak%n ek blok sonrasında olgunlaşacak - not accepted kabul edilmedi - - - - Debit Gelir - Transaction fee Muamele ücreti - Net amount - Net miktar + Net meblağ - Message Mesaj - Comment Yorum - Transaction ID Muamele tanımlayıcı - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Oluşturulan Myriadcoin'lerin harcanabilmelerinden önce 120 blok beklemeleri gerekmektedir. Bu blok, oluşturduğunuzda blok zincirine eklenmesi için ağda yayınlandı. Zincire eklenmesi başarısız olursa, durumu "kabul edilmedi" olarak değiştirilecek ve harcanamayacaktır. Bu, bazen başka bir düğüm sizden birkaç saniye önce ya da sonra blok oluşturursa meydana gelebilir. + Merchant + Tüccar + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + Oluşturulan bitcoin'lerin harcanabilmelerinden önce %1 blok beklemeleri gerekmektedir. Bu blok, oluşturduğunuzda, blok zincirine eklenmesi için ağda yayınlandı. Zincire eklenmesi başarısız olursa, durumu "kabul edilmedi" olarak değiştirilecek ve harcanamayacaktır. Bu, bazen başka bir düğüm sizden birkaç saniye önce ya da sonra blok oluşturursa meydana gelebilir. - Debug information Hata ayıklama verileri - Transaction Muamele - Inputs Girdiler - Amount - Miktar + Meblağ - true doğru - false yanlış - , has not been successfully broadcast yet , henüz başarılı bir şekilde yayınlanmadı - Open for %n more block(s) %n ilâve blok için açık%n ilâve blok için açık - unknown bilinmiyor @@ -1835,12 +2288,10 @@ Adres: %4 TransactionDescDialog - Transaction details Muamele detayları - This pane shows a detailed description of the transaction Bu pano muamelenin ayrıntılı açıklamasını gösterir @@ -1848,294 +2299,259 @@ Adres: %4 TransactionTableModel - Date Tarih - Type Tür - Address Adres - Amount - Miktar + Meblağ + + + Immature (%1 confirmations, will be available after %2) + Olgunlaşmamış (%1 teyit, %2 teyit ardından kullanılabilir olacaktır) - Open for %n more block(s) %n ilâve blok için açık%n ilâve blok için açık - Open until %1 %1 değerine dek açık - - Offline (%1 confirmations) - Çevrimdışı (%1 teyit) - - - - Unconfirmed (%1 of %2 confirmations) - Doğrulanmadı (%1 (toplam %2 üzerinden) teyit) - - - Confirmed (%1 confirmations) Doğrulandı (%1 teyit) - - - Mined balance will be available when it matures in %n more block(s) - Madenden çıkarılan bakiye %n ek blok sonrasında olgunlaştığında kullanılabilecektirMadenden çıkarılan bakiye %n ek blok sonrasında olgunlaştığında kullanılabilecektir - - This block was not received by any other nodes and will probably not be accepted! Bu blok başka hiçbir düğüm tarafından alınmamıştır ve muhtemelen kabul edilmeyecektir! - Generated but not accepted Oluşturuldu ama kabul edilmedi - + Offline + Çevrim dışı + + + Unconfirmed + Teyit edilmemiş + + + Confirming (%1 of %2 recommended confirmations) + Teyit ediliyor (tavsiye edilen %2 teyit üzerinden %1 doğrulama) + + + Conflicted + Çakışma + + Received with Şununla alındı - Received from Alındığı kişi - Sent to Gönderildiği adres - Payment to yourself Kendinize ödeme - Mined Madenden çıkarılan - (n/a) (mevcut değil) - Transaction status. Hover over this field to show number of confirmations. Muamele durumu. Doğrulama sayısını görüntülemek için imleci bu alanda tutunuz. - Date and time that the transaction was received. Muamelenin alındığı tarih ve zaman. - Type of transaction. Muamele türü. - Destination address of transaction. Muamelenin alıcı adresi. - Amount removed from or added to balance. - Bakiyeden alınan ya da bakiyeye eklenen miktar. + Bakiyeden alınan ya da bakiyeye eklenen meblağ. TransactionView - - All Hepsi - Today Bugün - This week Bu hafta - This month Bu ay - Last month Geçen ay - This year Bu sene - Range... Aralık... - Received with Şununla alınan - Sent to Gönderildiği adres - To yourself Kendinize - Mined Oluşturulan - Other Diğer - Enter address or label to search Aranacak adres ya da etiket giriniz - Min amount - Asgari miktar + Asgari meblağ - Copy address Adresi kopyala - Copy label Etiketi kopyala - Copy amount - Miktarı kopyala + Meblağı kopyala - Copy transaction ID Muamele kimliğini kopyala - Edit label Etiketi düzenle - Show transaction details Muamele detaylarını göster - - Export Transaction Data - Muamele verilerini dışa aktar + Export Transaction History + Muamele tarihçesini dışa aktar + + + Exporting Failed + Dışa aktarım başarısız oldu + + + There was an error trying to save the transaction history to %1. + Muamele tarihçesinin %1 konumuna kaydedilmesi sırasında bir hata meydana geldi. + + + Exporting Successful + Dışa aktarım başarılı oldu + + + The transaction history was successfully saved to %1. + Muamele tarihçesi başarılı bir şekilde %1 konumuna kaydedildi. - Comma separated file (*.csv) Virgülle ayrılmış değerler dosyası (*.csv) - Confirmed Doğrulandı - Date Tarih - Type Tür - Label Etiket - Address Adres - Amount - Miktar + Meblağ - ID Tanımlayıcı - - Error exporting - Dışa aktarımda hata oluştu - - - - Could not write to file %1. - %1 dosyasına yazılamadı. - - - Range: Aralık: - to ilâ + + WalletFrame + + No wallet has been loaded. + Hiçbir cüzdan yüklenmemiştir. + + WalletModel - Send Coins Myriadcoin yolla @@ -2143,160 +2559,121 @@ Adres: %4 WalletView - &Export &Dışa aktar - Export the data in the current tab to a file Güncel sekmedeki verileri bir dosyaya aktar - Backup Wallet - Cüzdanı yedekle + Cüzdanı Yedekle - Wallet Data (*.dat) Cüzdan verileri (*.dat) - Backup Failed Yedekleme başarısız oldu - - There was an error trying to save the wallet data to the new location. - Cüzdanı değişik bir konuma kaydetmek denenirken bir hata meydana geldi. + There was an error trying to save the wallet data to %1. + Cüzdan verilerinin %1 konumuna kaydedilmesi sırasında bir hata meydana geldi. + + + The wallet data was successfully saved to %1. + Cüzdan verileri %1 konumuna başarıyla kaydedildi. - Backup Successful Yedekleme başarılı - - - The wallet data was successfully saved to the new location. - Cüzdan verileri başarılı bir şekilde yeni konuma kaydedildi. - bitcoin-core - - Myriadcoin version - Myriadcoin sürümü - - - Usage: Kullanım: - - Send command to -server or myriadcoind - -server ya da myriadcoind'ye komut gönder - - - List commands Komutları listele - Get help for a command Bir komut için yardım al - Options: Seçenekler: - Specify configuration file (default: myriadcoin.conf) Yapılandırma dosyası belirt (varsayılan: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) Pid dosyası belirt (varsayılan: myriadcoind.pid) - Specify data directory Veri dizinini belirt - - Set database cache size in megabytes (default: 25) - Veritabanı önbellek boyutunu megabayt olarak belirt (varsayılan: 25) - - - Listen for connections on <port> (default: 8333 or testnet: 18333) Bağlantılar için dinlenecek <port> (varsayılan: 8333 ya da testnet: 18333) - Maintain at most <n> connections to peers (default: 125) Eşler ile en çok <n> adet bağlantı kur (varsayılan: 125) - Connect to a node to retrieve peer addresses, and disconnect Eş adresleri elde etmek için bir düğüme bağlan ve ardından bağlantıyı kes - Specify your own public address Kendi genel adresinizi tanımlayın - Threshold for disconnecting misbehaving peers (default: 100) Aksaklık gösteren eşlerle bağlantıyı kesme sınırı (varsayılan: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Aksaklık gösteren eşlerle yeni bağlantıları engelleme süresi, saniye olarak (varsayılan: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s IPv4 üzerinde dinlemek için %u numaralı RPC portunun kurulumu sırasında hata meydana geldi: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) JSON-RPC bağlantılarını <port> üzerinde dinle (varsayılan: 8332 veya tesnet: 18332) - Accept command line and JSON-RPC commands Konut satırı ve JSON-RPC komutlarını kabul et - + Myriadcoin Core RPC client version + Myriadcoin Çekirdeği RPC istemci sürümü + + Run in the background as a daemon and accept commands Arka planda daemon (servis) olarak çalış ve komutları kabul et - Use the test network Deneme şebekesini kullan - Accept connections from outside (default: 1 if no -proxy or -connect) Dışarıdan gelen bağlantıları kabul et (varsayılan: -proxy veya -connect yoksa 1) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2321,612 +2698,686 @@ mesela: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.co - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + Kabul edilebilir şifreler (varsayılan: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s IPv6 üzerinde dinlemek için %u numaralı RPC portu kurulurken bir hata meydana geldi, IPv4'e dönülüyor: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 Belirtilen adrese bağlan ve daima ondan dinle. IPv6 için [makine]:port yazımını kullanınız - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. - %s veri dizininde kilit elde edilemedi. Myriadcoin muhtemelen hâlihazırda çalışmaktadır. + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + Devamlı olarak ücretsiz muameleleri dakikada <n>*1000 bayt olarak sınırla (varsayılan: 15) + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + Anında çözümlenebilen bloklar içeren ve özel zincir kullanan regresyon test kipine gir. Bu, uygulama geliştirme ve regresyon testi araçları için tasarlanmıştır. + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + Blokların anında çözülebileceği özel bir zincir kullanan regresyon deneme kipine gir. + + + Error: Listening for incoming connections failed (listen returned error %d) + Hata: İçeri gelen bağlantıların dinlenmesi başarısız oldu (dinleme %d hatası verdi) - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. Hata: 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. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! - Hata: Muamelenin miktarı, karmaşıklığı ya da yakın geçmişte alınan fonların kullanılması nedeniyle bu muamele en az %s tutarında ücret gerektirmektedir! + Hata: Muamelenin meblağı, karmaşıklığı ya da yakın geçmişte alınan fonların kullanılması nedeniyle bu muamele en az %s tutarında ücret gerektirmektedir! - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - İlgili bir uyarı alındığında komut çalıştır (komuttaki %s mesaj ile değiştirilecektir) - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) Bir cüzdan muamelesi değiştiğinde komutu çalıştır (komuttaki %s TxID ile değiştirilecektir) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - Yüksek öncelikli/düşük ücretli muamelelerin boyutunu bayt olarak tanımla (varsayılan: 27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + Bundan düşük ücretler sıfır değerinde sayılır (muamele oluşturulması için) (varsayılan: + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + Veritabanı etkinliğini bellekten disk kütüğüne her <n> megabaytta aktar (varsayılan: 100) + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + -checkblocks'un blok kontrolünün ne kadar kapsamlı olacağı (0 ilâ 4, varsayılan: 3) + + + In this mode -genproclimit controls how many blocks are generated immediately. + Bu kipte -genproclimit kaç sayıda bloğun anında oluşturulduğunu kontrol eder. + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + 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) + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + Oluşturma etkinken işlemci sınırını belirler (-1 = sınırsız, varsayılan: -1) - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications Bu yayın öncesi bir deneme sürümüdür - tüm riski siz üstlenmiş olursunuz - myriadcoin oluşturmak ya da ticari uygulamalar için kullanmayınız - + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + Bu bilgisayarda %s unsuruna bağlanılamadı. Myriadcoin Çekirdeği muhtemelen hâlihazırda çalışmaktadır. + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + Eşlere gizli Tor servisleri ile ulaşmak için ayrı SOCKS5 vekil sunucusu kullan (varsayılan: -proxy) + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Uyarı: -paytxfee çok yüksek bir değere ayarlanmış! Bu, muamele gönderirseniz ödeyeceğiniz muamele ücretidir. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - Uyarı: Görüntülenen muameleler doğru olmayabilir! Sizin ya da diğer düğümlerin güncelleme yapması gerekebilir. - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. Uyarı: Lütfen bilgisayarınızın tarih ve saatinin doğru olup olmadığını kontrol ediniz! Saatiniz doğru değilse Myriadcoin gerektiği gibi çalışamaz. - + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + Uyarı: şebeke tamamen mutabık değil gibi görünüyor! Bazı madenciler sorun yaşıyor gibi görünüyor. + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + Uyarı: eşlerimizle tamamen mutabık değiliz gibi görünüyor! Güncelleme yapmanız gerekebilir ya da diğer düğümlerin güncelleme yapmaları gerekebilir. + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Uyarı: wallet.dat dosyasının okunması sırasında bir hata meydana geldi! Tüm anahtarlar doğru bir şekilde okundu, ancak muamele verileri ya da adres defteri unsurları hatalı veya eksik olabilir. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. Uyarı: wallet.dat bozuk, veriler geri kazanıldı! Özgün wallet.dat, wallet.{zamandamgası}.bak olarak %s klasörüne kaydedildi; bakiyeniz ya da muameleleriniz yanlışsa bir yedeklemeden tekrar yüklemeniz gerekir. - + (default: 1) + (varsayılan: 1) + + + (default: wallet.dat) + (varsayılan: wallet.dat) + + + <category> can be: + <kategori> şunlar olabilir: + + Attempt to recover private keys from a corrupt wallet.dat Bozuk bir wallet.dat dosyasından özel anahtarları geri kazanmayı dene - + Myriadcoin Core Daemon + Myriadcoin Çekirdek servisi + + Block creation options: Blok oluşturma seçenekleri: - + Clear list of wallet transactions (diagnostic tool; implies -rescan) + Cüzdanın muamele listesini temizle (tanı aracı; -rescan ima eder) + + Connect only to the specified node(s) Sadece belirtilen düğüme veya düğümlere bağlan - + Connect through SOCKS proxy + SOCKS vekil sunucusuyla bağlan + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + <port> numarasında JSON-RPC'ye bağlan (varsayılan: 8332 veya testnet: 18332) + + + Connection options: + Bağlantı seçenekleri: + + Corrupted block database detected Bozuk blok veritabanı tespit edildi - + Debugging/Testing options: + Hata ayıklama/deneme seçenekleri: + + + Disable safemode, override a real safe mode event (default: 0) + Güvenli kipi devre dışı bırak, gerçek bir güvenli olayı geçersiz kıl (varsayılan: 0) + + Discover own IP address (default: 1 when listening and no -externalip) Kendi IP adresini keşfet (varsayılan: dinlenildiğinde ve -externalip yoksa 1) - + Do not load the wallet and disable wallet RPC calls + Cüzdanı yükleme ve cüzdan RPC çağrılarını devre dışı bırak + + Do you want to rebuild the block database now? Blok veritabanını şimdi yeniden inşa etmek istiyor musunuz? - Error initializing block database Blok veritabanını başlatılırken bir hata meydana geldi - Error initializing wallet database environment %s! %s cüzdan veritabanı ortamının başlatılmasında hata meydana geldi! - Error loading block database Blok veritabanının yüklenmesinde hata - Error opening block database Blok veritabanının açılışı sırasında hata - Error: Disk space is low! Hata: Disk alanı düşük! - Error: Wallet locked, unable to create transaction! Hata: Cüzdan kilitli, muamele oluşturulamadı! - Error: system error: Hata: sistem hatası: - Failed to listen on any port. Use -listen=0 if you want this. Herhangi bir portun dinlenmesi başarısız oldu. Bunu istiyorsanız -listen=0 seçeneğini kullanınız. - Failed to read block info Blok verileri okunamadı - Failed to read block Blok okunamadı - Failed to sync block index Blok indeksi eşleştirilemedi - Failed to write block index Blok indeksi yazılamadı - Failed to write block info Blok verileri yazılamadı - Failed to write block Blok yazılamadı - Failed to write file info Dosya verileri yazılamadı - Failed to write to coin database Madenî para veritabanına yazılamadı - Failed to write transaction index Muamele indeksi yazılamadı - Failed to write undo data Geri alma verilerinin yazılamadı - + Fee per kB to add to transactions you send + Yolladığınız muameleler için eklenecek kB başı ücret + + + Fees smaller than this are considered zero fee (for relaying) (default: + Bundan düşük ücretler sıfır değerinde sayılacaktır (aktarım için) (varsayılan: + + Find peers using DNS lookup (default: 1 unless -connect) Eşleri DNS araması vasıtasıyla bul (varsayılan: 1, eğer -connect kullanılmadıysa) - + Force safe mode (default: 0) + Güvenli kipi zorla (varsayılan: 0) + + Generate coins (default: 0) Myriadcoin oluştur (varsayılan: 0) - How many blocks to check at startup (default: 288, 0 = all) Başlangıçta kontrol edilecek blok sayısı (varsayılan: 288, 0 = hepsi) - - How thorough the block verification is (0-4, default: 3) - Blok kontrolünün ne kadar derin olacağı (0 ilâ 4, varsayılan: 3) + If <category> is not supplied, output all debugging information. + <kategori> sağlanmamışsa tüm hata ayıklama verilerini dök. + + + Importing... + İçe aktarılıyor... + + + Incorrect or no genesis block found. Wrong datadir for network? + Yanlış ya da bulunamamış doğuş bloku. Şebeke için yanlış veri klasörü mü? + + + Invalid -onion address: '%s' + Geçersiz -onion adresi: '%s' - Not enough file descriptors available. Kafi derecede dosya tanımlayıcıları mevcut değil. - + Prepend debug output with timestamp (default: 1) + Hata ayıklama verilerinin önüne zaman damgası ekle (varsayılan: 1) + + + RPC client options: + RPC istemci seçenekleri: + + Rebuild block chain index from current blk000??.dat files Blok zinciri indeksini güncel blk000??.dat dosyalarından tekrar inşa et - + Select SOCKS version for -proxy (4 or 5, default: 5) + -proxy için SOCKS sürümünü seç (4 veya 5, varsayılan: 5) + + + Set database cache size in megabytes (%d to %d, default: %d) + Veritabanı önbellek boyutunu megabayt olarak belirt (%d ilâ %d, varsayılan: %d) + + + Set maximum block size in bytes (default: %d) + Azami blok boyutunu bayt olarak ayarla (varsayılan: %d) + + Set the number of threads to service RPC calls (default: 4) RPC aramaları için iş parçacığı sayısını belirle (varsayılan: 4) - + Specify wallet file (within data directory) + Cüzdan dosyası belirtiniz (veri klasörünün içinde) + + + Spend unconfirmed change when sending transactions (default: 1) + Gönderme muamelelerinde teyit edilmemiş para üstünü harca (varsayılan: 1) + + + This is intended for regression testing tools and app development. + Bu, regresyon deneme araçları ve uygulama geliştirmesi için tasarlanmıştır. + + + Usage (deprecated, use myriadcoin-cli): + Kullanım (önerilmemektedir, myriadcoin-cli kullanın): + + Verifying blocks... Bloklar kontrol ediliyor... - Verifying wallet... Cüzdan kontrol ediliyor... - + Wait for RPC server to start + RPC sunucusunun başlamasını bekle + + + Wallet %s resides outside data directory %s + %s cüzdan %s veri klasörünün dışında bulunuyor + + + Wallet options: + Cüzdan seçenekleri: + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + Uyarı: eskimiş seçenek -debugnet görmezden gelinir, -debug=net kullanınız + + + You need to rebuild the database using -reindex to change -txindex + -txindex'i değiştirmek için veritabanını -reindex kullanarak tekrar inşa etmeniz gerekmektedir + + Imports blocks from external blk000??.dat file Harici blk000??.dat dosyasından blokları içe aktarır - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) - Betik kontrolü iş parçacığı sayısını belirt (azami 16, 0 = otomatik, <0 = bu sayıda çekirdeği boş bırak, varsayılan: 0) + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + %s veri dizininde kilit elde edilemedi. Myriadcoin Çekirdeği muhtemelen hâlihazırda çalışmaktadır. + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + İlgili bir uyarı alındığında ya da gerçekten uzun bir çatallama gördüğümüzde komutu çalıştır (komuttaki %s mesaj ile değiştirilir) + + + Output debugging information (default: 0, supplying <category> is optional) + Hata ayıklama bilgisi dök (varsayılan:0, <kategori> sağlanması seçime dayalıdır) + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + Yüksek öncelikli/düşük ücretli muamelelerin azami boyutunu bayt olarak ayarla (varsayılan: %d) - Information Bilgi - - Invalid -tor address: '%s' - Geçersiz -tor adresi: '%s' - - - Invalid amount for -minrelaytxfee=<amount>: '%s' -minrelaytxfee=<amount> için geçersiz meblağ: '%s' - Invalid amount for -mintxfee=<amount>: '%s' -mintxfee=<amount> için geçersiz meblağ: '%s' - + Limit size of signature cache to <n> entries (default: 50000) + İmza arabelleğinin boyutunu <n> unsurla sınırla (varsayılan: 50000) + + + Log transaction priority and fee per kB when mining blocks (default: 0) + Blok oluşturulduğunda muamele önceliğini ve kB başı ücreti kütüğe al (varsayılan: 0) + + Maintain a full transaction index (default: 0) Muamelelerin tamamının indeksini tut (varsayılan: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) Bağlantı başına azami alım tamponu, <n>*1000 bayt (varsayılan: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) Bağlantı başına azami yollama tamponu, <n>*1000 bayt (varsayılan: 1000) - Only accept block chain matching built-in checkpoints (default: 1) Sadece yerleşik kontrol noktalarıyla eşleşen blok zincirini kabul et (varsayılan: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) Sadece <net> şebekesindeki düğümlere bağlan (IPv4, IPv6 ya da Tor) - - Output extra debugging information. Implies all other -debug* options - İlâve hata ayıklama verileri çıkart. Diğer tüm -debug* seçeneklerini ima eder + Print block on startup, if found in block index + Başlangıçta bloğu göster, blok indeksinde bulunduysa - - Output extra network debugging information - İlâve şebeke hata ayıklama verileri çıkart + Print block tree on startup (default: 0) + Başlangıçta blok ağacını göster (varsayılan: 0) - - Prepend debug output with timestamp - Hata ayıklama çıktısına tarih ön ekleri ilâve et + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + RPC SSL seçenekleri: (SSL kurulumu yönergeleri için Myriadcoin vikisine bakınız) + + + RPC server options: + RPC sunucu seçenekleri: + + + Randomly drop 1 of every <n> network messages + Her <n> şebeke mesajından rastgele 1 mesajı görmezden gel + + + Randomly fuzz 1 of every <n> network messages + Her <n> şebeke mesajından rastgele birini bulanıklaştır + + + Run a thread to flush wallet periodically (default: 1) + Periyodik olarak cüdanı diske yazdırmak için bir iş parçacığı çalıştır (varsayılan: 1) - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) SSL seçenekleri: (SSL kurulum bilgisi için Myriadcoin vikisine bakınız) - - Select the version of socks proxy to use (4-5, default: 5) - Kullanılacak socks vekil sunucu sürümünü seç (4-5, varsayılan: 5) + Send command to Myriadcoin Core + Myriadcoin Çekirdeğine komut yolla - Send trace/debug info to console instead of debug.log file Trace/hata ayıklama verilerini debug.log dosyası yerine konsola gönder - - Send trace/debug info to debugger - Hata ayıklayıcıya -debugger- trace/hata ayıklama verileri gönder - - - - Set maximum block size in bytes (default: 250000) - Bayt olarak azami blok boyutunu tanımla (varsayılan: 250000) - - - Set minimum block size in bytes (default: 0) Bayt olarak asgari blok boyutunu tanımla (varsayılan: 0) - + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + Cüzdan veritabanı ortamında DB_PRIVATE bayrağını koyar (varsayılan: 1) + + + Show all debugging options (usage: --help -help-debug) + Tüm hata ayıklama seçeneklerini göster (kullanımı: --help -help-debug) + + + Show benchmark information (default: 0) + Denektaşı verilerini göster (varsayılan: 0) + + Shrink debug.log file on client startup (default: 1 when no -debug) İstemci başlatıldığında debug.log dosyasını küçült (varsayılan: -debug bulunmadığında 1) - Signing transaction failed Muamelenin imzalanması başarısız oldu - Specify connection timeout in milliseconds (default: 5000) Bağlantı zaman aşım süresini milisaniye olarak belirt (varsayılan: 5000) - + Start Myriadcoin Core Daemon + Myriadcoin Çekirdeği servisini başlat + + System error: Sistem hatası: - Transaction amount too small Muamele meblağı çok düşük - Transaction amounts must be positive Muamele tutarının pozitif olması lazımdır - Transaction too large Muamele çok büyük - Use UPnP to map the listening port (default: 0) Dinlenecek portu haritalamak için UPnP kullan (varsayılan: 0) - Use UPnP to map the listening port (default: 1 when listening) Dinlenecek portu haritalamak için UPnP kullan (varsayılan: dinlenildiğinde 1) - - Use proxy to reach tor hidden services (default: same as -proxy) - Gizli tor servislerine erişmek için vekil sunucu kullan (varsayılan: -proxy ile aynısı) - - - Username for JSON-RPC connections JSON-RPC bağlantıları için kullanıcı ismi - Warning Uyarı - Warning: This version is obsolete, upgrade required! Uyarı: Bu sürüm çok eskidir, güncellemeniz gerekir! - - You need to rebuild the databases using -reindex to change -txindex - -txindex'i değiştirmek için veritabanlarını -reindex kullanarak yeniden inşa etmeniz gerekir. + Zapping all transactions from wallet... + Cüzdandaki tüm muameleler kaldırılıyor... + + + on startup + başlangıçta + + + version + sürüm - wallet.dat corrupt, salvage failed wallet.dat bozuk, geri kazanım başarısız oldu - Password for JSON-RPC connections JSON-RPC bağlantıları için parola - Allow JSON-RPC connections from specified IP address Belirtilen İP adresinden JSON-RPC bağlantılarını kabul et - Send commands to node running on <ip> (default: 127.0.0.1) Şu <ip> adresinde (varsayılan: 127.0.0.1) çalışan düğüme komut yolla - Execute command when the best block changes (%s in cmd is replaced by block hash) En iyi blok değiştiğinde komutu çalıştır (komut için %s parametresi blok hash değeri ile değiştirilecektir) - Upgrade wallet to latest format Cüzdanı en yeni biçime güncelle - Set key pool size to <n> (default: 100) Anahtar alan boyutunu <n> değerine ayarla (varsayılan: 100) - Rescan the block chain for missing wallet transactions Blok zincirini eksik cüzdan muameleleri için tekrar tara - Use OpenSSL (https) for JSON-RPC connections JSON-RPC bağlantıları için OpenSSL (https) kullan - Server certificate file (default: server.cert) Sunucu sertifika dosyası (varsayılan: server.cert) - Server private key (default: server.pem) Sunucu özel anahtarı (varsayılan: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Kabul edilebilir şifreler (varsayılan: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - This help message Bu yardım mesajı - Unable to bind to %s on this computer (bind returned error %d, %s) Bu bilgisayarda %s unsuruna bağlanılamadı. (bind şu hatayı iletti: %d, %s) - - Connect through socks proxy - Socks vekil sunucusu vasıtasıyla bağlan - - - Allow DNS lookups for -addnode, -seednode and -connect -addnode, -seednode ve -connect için DNS aramalarına izin ver - Loading addresses... Adresler yükleniyor... - Error loading wallet.dat: Wallet corrupted wallet.dat dosyasının yüklenmesinde hata oluştu: bozuk cüzdan - Error loading wallet.dat: Wallet requires newer version of Myriadcoin wallet.dat dosyasının yüklenmesinde hata oluştu: cüzdanın daha yeni bir Myriadcoin sürümüne ihtiyacı var - Wallet needed to be rewritten: restart Myriadcoin to complete - Cüzdanın tekrar yazılması gerekiyordu: işlemi tamamlamak için Myriadcoin'i yeniden başlatınız + Cüzdanın tekrar yazılması gerekiyordu: işlemi tamamlamak için Bitcoin'i yeniden başlatınız - Error loading wallet.dat wallet.dat dosyasının yüklenmesinde hata oluştu - Invalid -proxy address: '%s' Geçersiz -proxy adresi: '%s' - Unknown network specified in -onlynet: '%s' -onlynet için bilinmeyen bir şebeke belirtildi: '%s' - Unknown -socks proxy version requested: %i Bilinmeyen bir -socks vekil sürümü talep edildi: %i - Cannot resolve -bind address: '%s' -bind adresi çözümlenemedi: '%s' - Cannot resolve -externalip address: '%s' -externalip adresi çözümlenemedi: '%s' - Invalid amount for -paytxfee=<amount>: '%s' - -paytxfee=<miktar> için geçersiz miktar: '%s' + -paytxfee=<meblağ> için geçersiz meblağ: '%s' - Invalid amount - Geçersiz miktar + Geçersiz meblağ - Insufficient funds Yetersiz bakiye - Loading block index... Blok indeksi yükleniyor... - Add a node to connect to and attempt to keep the connection open Bağlanılacak düğüm ekle ve bağlantıyı zinde tutmaya çalış - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - Bu bilgisayarda %s unsuruna bağlanılamadı. Myriadcoin muhtemelen hâlihazırda çalışmaktadır. - - - - Fee per KB to add to transactions you send - Yolladığınız muameleler için eklenecek KB başı ücret - - - Loading wallet... Cüzdan yükleniyor... - Cannot downgrade wallet Cüzdan eski biçime geri alınamaz - Cannot write default address Varsayılan adres yazılamadı - Rescanning... Yeniden tarama... - Done loading Yükleme tamamlandı - To use the %s option %s seçeneğini kullanmak için - Error Hata - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_uk.ts b/src/qt/locale/bitcoin_uk.ts index b66179cd..4210b1f2 100644 --- a/src/qt/locale/bitcoin_uk.ts +++ b/src/qt/locale/bitcoin_uk.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - Про Myriadcoin + About Myriadcoin Core + - - <b>Myriadcoin</b> version - Версія <b>Myriadcoin'a<b> + <b>Myriadcoin Core</b> version + - This is experimental software. @@ -28,153 +24,128 @@ This product includes software developed by the OpenSSL Project for use in the O Цей продукт включає в себе програмне забезпечення, розроблене в рамках проекту OpenSSL (http://www.openssl.org/), криптографічне програмне забезпечення, написане Еріком Янгом (eay@cryptsoft.com), та функції для роботи з UPnP, написані Томасом Бернардом. - Copyright Авторське право - - The Myriadcoin developers + The Myriadcoin Core developers + + + + (%1-bit) AddressBookPage - - Address Book - Адресна книга - - - Double-click to edit address or label Двічі клікніть на адресу чи назву для їх зміни - Create a new address Створити нову адресу - + &New + + + Copy the currently selected address to the system clipboard Копіювати виділену адресу в буфер обміну - - &New Address - &Створити адресу + &Copy + - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Це ваші адреси для отримання платежів. Ви можете давати різні адреси різним людям, таким чином маючи можливість відслідкувати хто конкретно і скільки вам заплатив. + C&lose + - &Copy Address &Скопіювати адресу - - Show &QR Code - Показати QR-&Код - - - - Sign a message to prove you own a Myriadcoin address - Підпишіть повідомлення щоб довести, що ви є власником цієї адреси - - - - Sign &Message - &Підписати повідомлення - - - Delete the currently selected address from the list Вилучити вибрані адреси з переліку - Export the data in the current tab to a file Експортувати дані з поточної вкладки в файл - &Export - + & Експорт - - Verify a message to ensure it was signed with a specified Myriadcoin address - Перевірте повідомлення для впевненості, що воно підписано вказаною Myriadcoin-адресою - - - - &Verify Message - Перевірити повідомлення - - - &Delete &Видалити - - These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + Це ваші Myriadcoin адреси для відправки платежів. Перед відправкою монети Завжди перевіряйте суму та адресу прийому. + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. - Copy &Label Скопіювати &мітку - &Edit &Редагувати - - Send &Coins + Export Address List - - Export Address Book Data - Експортувати адресну книгу - - - Comma separated file (*.csv) Файли відділені комами (*.csv) - - Error exporting - Помилка при експортуванні + Exporting Failed + - - Could not write to file %1. - Неможливо записати у файл %1. + There was an error trying to save the address list to %1. + AddressTableModel - Label Назва - Address Адреса - (no label) (немає назви) @@ -182,140 +153,106 @@ This product includes software developed by the OpenSSL Project for use in the O AskPassphraseDialog - Passphrase Dialog Діалог введення паролю - Enter passphrase Введіть пароль - New passphrase Новий пароль - Repeat new passphrase Повторіть пароль - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. Введіть новий пароль для гаманця.<br/>Будь ласка, використовуйте паролі що містять <b>як мінімум 10 випадкових символів</b>, або <b>як мінімум 8 слів</b>. - Encrypt wallet Зашифрувати гаманець - This operation needs your wallet passphrase to unlock the wallet. Ця операція потребує пароль для розблокування гаманця. - Unlock wallet Розблокувати гаманець - This operation needs your wallet passphrase to decrypt the wallet. Ця операція потребує пароль для дешифрування гаманця. - Decrypt wallet Дешифрувати гаманець - Change passphrase Змінити пароль - Enter the old and new passphrase to the wallet. Ввести старий та новий паролі для гаманця. - Confirm wallet encryption Підтвердити шифрування гаманця - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! УВАГА: Якщо ви зашифруєте гаманець і забудете пароль, ви <b>ВТРАТИТЕ ВСІ СВОЇ БІТКОІНИ</b>! - Are you sure you wish to encrypt your wallet? Ви дійсно хочете зашифрувати свій гаманець? - 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. - + ВАЖЛИВО: Всі попередні резервні копії, які ви зробили з вашого гаманця файл повинен бути замінений новоствореному, зашифрованому файлі гаманця. З міркувань безпеки, попередні резервні копії в незашифрованому файлі гаманець стане марним, як тільки ви починаєте використовувати нову, зашифрований гаманець. - - Warning: The Caps Lock key is on! Увага: Ввімкнено Caps Lock! - - Wallet encrypted Гаманець зашифровано - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. Біткоін-клієнт буде закрито для завершення процесу шифрування. Пам'ятайте, що шифрування гаманця не може повністю захистити ваші біткоіни від крадіжки, у випадку якщо ваш комп'ютер буде інфіковано шкідливими програмами. - - - - Wallet encryption failed Не вдалося зашифрувати гаманець - Wallet encryption failed due to an internal error. Your wallet was not encrypted. Виникла помилка під час шифрування гаманця. Ваш гаманець не було зашифровано. - - The supplied passphrases do not match. Введені паролі не співпадають. - Wallet unlock failed Не вдалося розблокувати гаманець - - - The passphrase entered for the wallet decryption was incorrect. Введений пароль є невірним. - Wallet decryption failed Не вдалося розшифрувати гаманець - Wallet passphrase was successfully changed. Пароль було успішно змінено. @@ -323,319 +260,286 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - Sign &message... &Підписати повідомлення... - Synchronizing with network... Синхронізація з мережею... - &Overview &Огляд - + Node + + + Show general overview of wallet Показати загальний огляд гаманця - &Transactions Транзакції - Browse transaction history Переглянути історію транзакцій - - Edit the list of stored addresses and labels - Редагувати список збережених адрес та міток - - - - Show the list of addresses for receiving payments - Показати список адрес для отримання платежів - - - E&xit &Вихід - Quit application Вийти - Show information about Myriadcoin Показати інформацію про Myriadcoin - About &Qt &Про Qt - Show information about Qt Показати інформацію про Qt - &Options... &Параметри... - &Encrypt Wallet... &Шифрування гаманця... - &Backup Wallet... &Резервне копіювання гаманця... - &Change Passphrase... Змінити парол&ь... - + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + Importing blocks from disk... Імпорт блоків з диску... - Reindexing blocks on disk... - + Переіндексація блоків на диску ... - Send coins to a Myriadcoin address Відправити монети на вказану адресу - Modify configuration options for Myriadcoin Редагувати параметри - Backup wallet to another location Резервне копіювання гаманця в інше місце - Change the passphrase used for wallet encryption Змінити пароль, який використовується для шифрування гаманця - &Debug window Вікно зневадження - Open debugging and diagnostic console Відкрити консоль зневадження і діагностики - &Verify message... Перевірити повідомлення... - - Myriadcoin Myriadcoin - Wallet Гаманець - &Send - + &Відправити - &Receive - + &Отримати - - &Addresses - - - - - &About Myriadcoin - &Про Myriadcoin - - - &Show / Hide Показати / Приховати - Show or hide the main Window Показує або приховує головне вікно - Encrypt the private keys that belong to your wallet - + Шифрування закритих ключів, які належать вашому гаманці - Sign messages with your Myriadcoin addresses to prove you own them - Підтвердіть, що Ви є власником повідомлення підписавши його Вашою Myriadcoin-адресою + Підтвердіть, що Ви є власником повідомлення підписавши його Вашою Bitcoin-адресою - Verify messages to ensure they were signed with specified Myriadcoin addresses - Перевірте повідомлення для впевненості, що воно підписано вказаною Myriadcoin-адресою + Перевірте повідомлення для впевненості, що воно підписано вказаною Bitcoin-адресою - &File &Файл - &Settings &Налаштування - &Help &Довідка - Tabs toolbar Панель вкладок - - [testnet] [тестова мережа] - + Myriadcoin Core + Myriadcoin Ядро + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + Myriadcoin client - Myriadcoin-клієнт + Bitcoin-клієнт - %n active connection(s) to Myriadcoin network %n активне з'єднання з мережею%n активні з'єднання з мережею%n активних з'єднань з мережею - No block source available... - + Ні блок джерела доступні ... - Processed %1 of %2 (estimated) blocks of transaction history. - Processed %1 blocks of transaction history. Оброблено %1 блоків історії транзакцій. - %n hour(s) - %n day(s) - %n week(s) - + %1 and %2 + + + + %n year(s) + + + %1 behind - Last received block was generated %1 ago. - Transactions after this will not yet be visible. - + Угоди після цього буде ще не буде видно. - Error Помилка - Warning Увага - Information Інформація - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - - - - Up to date Синхронізовано - Catching up... Синхронізується... - - Confirm transaction fee - Підтвердити комісію - - - Sent transaction Надіслані транзакції - Incoming transaction Отримані перекази - Date: %1 Amount: %2 Type: %3 @@ -648,359 +552,662 @@ Address: %4 - - - URI handling - Обробка URI - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - Неможливо обробити URI! Це може бути викликано неправильною Myriadcoin-адресою, чи невірними параметрами URI. - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> <b>Зашифрований</b> гаманець <b>розблоковано</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> <b>Зашифрований</b> гаманець <b>заблоковано</b> - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. - + Сталася фатальна помилка. Myriadcoin більше не може продовжувати безпечно і піде. ClientModel - Network Alert Сповіщення мережі + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + + + + Bytes: + + + + Amount: + Кількість: + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + Кількість + + + Address + Адреса + + + Date + Дата + + + Confirmations + + + + Confirmed + Підтверджені + + + Priority + + + + Copy address + Скопіювати адресу + + + Copy label + Скопіювати мітку + + + Copy amount + Копіювати кількість + + + Copy transaction ID + Копіювати ID транзакції + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + + + + Dust + + + + yes + + + + no + + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + (немає назви) + + + change from %1 (%2) + + + + (change) + + + EditAddressDialog - Edit Address Редагувати адресу - &Label &Мітка - - The label associated with this address book entry - Мітка, пов'язана з цим записом адресної книги + The label associated with this address list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + - &Address &Адреса - - The address associated with this address book entry. This can only be modified for sending addresses. - Адреса, пов'язана з цим записом адресної книги. Може бути змінено тільки для адреси відправника. - - - New receiving address Нова адреса для отримання - New sending address Нова адреса для відправлення - Edit receiving address Редагувати адресу для отримання - Edit sending address Редагувати адресу для відправлення - The entered address "%1" is already in the address book. Введена адреса «%1» вже присутня в адресній книзі. - The entered address "%1" is not a valid Myriadcoin address. Введена адреса «%1» не є коректною адресою в мережі Myriadcoin. - Could not unlock wallet. Неможливо розблокувати гаманець. - New key generation failed. Не вдалося згенерувати нові ключі. - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt - Myriadcoin-Qt + A new data directory will be created. + + + + name + назва + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core + Myriadcoin Ядро - version версія - Usage: Використання: - command-line options параметри командного рядка - UI options Параметри інтерфейсу - Set language, for example "de_DE" (default: system locale) Встановлення мови, наприклад "de_DE" (типово: системна) - Start minimized Запускати згорнутим - + Set SSL root certificates for payment request (default: -system-) + + + Show splash screen on startup (default: 1) Показувати заставку під час запуску (типово: 1) + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + Вітання + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + Myriadcoin + + + Error: Specified data directory "%1" can not be created. + + + + Error + Помилка + + + GB of free space available + ГБ вільного простору доступно + + + (of %1GB needed) + + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open + + OptionsDialog - Options Параметри - &Main &Головні - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. - + Оплата додаткових транзакцій за Кб, що допомагає переконатися, що ваші транзакції обробляються швидко. Велика частина операцій проводиться 1 Кб. - Pay transaction &fee Заплатити комісі&ю - Automatically start Myriadcoin after logging in to the system. Автоматично запускати гаманець при вході до системи. - &Start Myriadcoin on system login &Запускати гаманець при вході в систему - + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + Reset all client options to default. Скинути всі параметри клієнта на типові. - &Reset Options Скинути параметри - &Network &Мережа - + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. Автоматично відкривати порт для клієнту біткоін на роутері. Працює лише якщо ваш роутер підтримує UPnP і ця функція увімкнена. - Map port using &UPnP Відображення порту через &UPnP - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - Підключатись до мережі Myriadcoin через SOCKS-проксі (наприклад при використанні Tor). - - - - &Connect through SOCKS proxy: - Підключатись через &SOCKS-проксі: - - - Proxy &IP: &IP проксі: - - IP address of the proxy (e.g. 127.0.0.1) - IP-адреса проксі-сервера (наприклад 127.0.0.1) - - - &Port: &Порт: - Port of the proxy (e.g. 9050) Порт проксі-сервера (наприклад 9050) - SOCKS &Version: SOCKS версії: - SOCKS version of the proxy (e.g. 5) Версія SOCKS-проксі (наприклад 5) - &Window &Вікно - Show only a tray icon after minimizing the window. Показувати лише іконку в треї після згортання вікна. - &Minimize to the tray instead of the taskbar Мінімізувати &у трей - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. Згортати замість закриття. Якщо ця опція включена, програма закриється лише після вибору відповідного пункту в меню. - M&inimize on close Згортати замість закритт&я - &Display &Відображення - User Interface &language: Мова інтерфейсу користувача: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. Встановлює мову інтерфейсу. Зміни набудуть чинності після перезапуску Myriadcoin. - &Unit to show amounts in: В&имірювати монети в: - Choose the default subdivision unit to show in the interface and when sending coins. Виберіть одиницю вимірювання монет, яка буде відображатись в гаманці та при відправленні. - Whether to show Myriadcoin addresses in the transaction list or not. - + Незалежно від того, щоб показати Myriadcoin адреси в списку транзакцій чи ні. - &Display addresses in transaction list &Відображати адресу в списку транзакцій - + Whether to show coin control features or not. + + + &OK &Гаразд - &Cancel &Скасувати - - &Apply - &Застосувати - - - default типово - + none + + + Confirm options reset Підтвердження скидання параметрів - - Some settings may require a client restart to take effect. - Деякі параметри потребують перезапуск клієнта для набуття чинності. + Client restart required to activate changes. + - - Do you want to proceed? - Продовжувати? + Client will be shutdown, do you want to proceed? + - - - Warning - Увага + This change would require a client restart. + - - - This setting will take effect after restarting Myriadcoin. - Цей параметр набуде чинності після перезапуску Myriadcoin. - - - The supplied proxy address is invalid. Невірно вказано адресу проксі. @@ -1008,59 +1215,54 @@ Address: %4 OverviewPage - Form Форма - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. Показана інформація вже може бути застарілою. Ваш гаманець буде автоматично синхронізовано з мережею Myriadcoin після встановлення підключення, але цей процес ще не завершено. - - Balance: - Баланс: - - - - Unconfirmed: - Непідтверджені: - - - Wallet Гаманець - + Available: + + + + Your current spendable balance + Ваш поточний баланс расходуемого + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + Всього угод, які ще мають бути підтверджені, і до цих пір не враховуються в расходуемого балансу + + Immature: - + незрілі: - Mined balance that has not yet matured - + Замінований баланс, який ще не дозрів + + + Total: + всього: + + + Your current total balance + Ваше поточне Сукупний баланс - <b>Recent transactions</b> <b>Недавні транзакції</b> - - Your current balance - Ваш поточний баланс - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - Загальна сума всіх транзакцій, які ще не підтверджені, та до цих пір не враховуються в загальному балансі - - - - out of sync не синхронізовано @@ -1068,579 +1270,856 @@ Address: %4 PaymentServer - + URI handling + Обробка URI + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + Неможливо обробити URI! Це може бути викликано неправильною Bitcoin-адресою, чи невірними параметрами URI. + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + Cannot start myriadcoin: click-to-pay handler + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + + + + Network request error + + - QRCodeDialog + QObject - - QR Code Dialog - Діалог QR-коду + Myriadcoin + Myriadcoin - - Request Payment - Запросити Платіж + Error: Specified data directory "%1" does not exist. + - - Amount: - Кількість: + Error: Cannot parse configuration file: %1. Only use key=value syntax. + - - Label: - Мітка: + Error: Invalid combination of -regtest and -testnet. + - - Message: - Повідомлення: + Myriadcoin Core didn't yet exit safely... + - - &Save As... - &Зберегти як... + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Введіть адресу Myriadcoin (наприклад 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + &Зберегти зображення... - - Error encoding URI into QR Code. - Помилка при кодуванні URI в QR-код. + &Copy Image + &Копіювати зображення - - The entered amount is invalid, please check. - Невірно введено кількість, будь ласка, перевірте. - - - - Resulting URI too long, try to reduce the text for label / message. - Кінцевий URI занадто довгий, спробуйте зменшити текст для мітки / повідомлення. - - - Save QR Code Зберегти QR-код - - PNG Images (*.png) - PNG-зображення (*.png) + PNG Image (*.png) + RPCConsole - Client name Назва клієнту - - - - - - - - - - N/A Н/Д - Client version Версія клієнту - &Information &Інформація - + Debug window + + + + General + + + Using OpenSSL version Використовується OpenSSL версії - Startup time - + Час запуску - Network Мережа - + Name + Ім’я + + Number of connections Кількість підключень - - On testnet - В тестовій мережі - - - Block chain - + Ланцюг блоків - Current number of blocks Поточне число блоків - Estimated total blocks - + Розрахункове число блоків - Last block time - + Час останнього блоку - &Open Відкрити - - Command-line options - Параметри командного рядка - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - Показати довідку Myriadcoin-Qt для отримання переліку можливих параметрів командного рядка. - - - - &Show - Показати - - - &Console Консоль - + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + Build date Дата збирання - - Myriadcoin - Debug window - Myriadcoin - Вікно зневадження - - - - Myriadcoin Core - - - - Debug log file Файл звіту зневадження - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. - + Відкрийте налагодження файл журналу Myriadcoin з поточного каталогу даних. Це може зайняти кілька секунд для великих файлів журналів. - Clear console Очистити консоль - Welcome to the Myriadcoin RPC console. Вітаємо у консолі Myriadcoin RPC. - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. Використовуйте стрілки вгору вниз для навігації по історії, і <b>Ctrl-L</b> для очищення екрана. - Type <b>help</b> for an overview of available commands. Наберіть <b>help</b> для перегляду доступних команд. + + %1 B + + + + %1 KB + + + + %1 MB + + + + %1 GB + + + + %1 m + + + + %1 h + + + + %1 h %2 m + + + + + ReceiveCoinsDialog + + &Amount: + &Кількість: + + + &Label: + &Мітка: + + + &Message: + &Повідомлення: + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + Очистити всі поля в формі + + + Clear + Очистити + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + + + + Remove the selected entries from the list + + + + Remove + + + + Copy label + Скопіювати мітку + + + Copy message + + + + Copy amount + Копіювати кількість + + + + ReceiveRequestDialog + + QR Code + QR-Код + + + Copy &URI + + + + Copy &Address + + + + &Save Image... + &Зберегти зображення... + + + Request payment to %1 + + + + Payment information + + + + URI + + + + Address + Адреса + + + Amount + Кількість + + + Label + Назва + + + Message + Повідомлення + + + Resulting URI too long, try to reduce the text for label / message. + Кінцевий URI занадто довгий, спробуйте зменшити текст для мітки / повідомлення. + + + Error encoding URI into QR Code. + Помилка при кодуванні URI в QR-код. + + + + RecentRequestsTableModel + + Date + Дата + + + Label + Назва + + + Message + Повідомлення + + + Amount + Кількість + + + (no label) + (немає назви) + + + (no message) + + + + (no amount) + + SendCoinsDialog - - - - - - - - Send Coins Відправити - + Coin Control Features + + + + Inputs... + + + + automatically selected + + + + Insufficient funds! + + + + Quantity: + + + + Bytes: + + + + Amount: + Кількість: + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + Send to multiple recipients at once Відправити на декілька адрес - Add &Recipient Дод&ати одержувача - - Remove all transaction fields - Видалити всі поля транзакції + Clear all fields of the form. + Очистити всі поля в формі - Clear &All Очистити &все - Balance: Баланс: - - 123.456 BTC - 123.456 BTC - - - Confirm the send action Підтвердити відправлення - S&end &Відправити - - <b>%1</b> to %2 (%3) - <b>%1</b> адресату %2 (%3) - - - Confirm send coins Підтвердіть відправлення - - Are you sure you want to send %1? - Ви впевнені що хочете відправити %1? + %1 to %2 + - - and - і + Copy quantity + + + + Copy amount + Копіювати кількість + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + + + + or + - The recipient address is not valid, please recheck. Адреса отримувача невірна, будь ласка перепровірте. - The amount to pay must be larger than 0. Кількість монет для відправлення повинна бути більшою 0. - The amount exceeds your balance. Кількість монет для відправлення перевищує ваш баланс. - The total exceeds your balance when the %1 transaction fee is included. Сума перевищить ваш баланс, якщо комісія %1 буде додана до вашої транзакції. - Duplicate address found, can only send to each address once per send operation. Знайдено адресу що дублюється. Відправлення на кожну адресу дозволяється лише один раз на кожну операцію переказу. - - Error: Transaction creation failed! - Помилка: Не вдалося створити транзакцію! + Transaction creation failed! + - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - Помилка: транзакцію було відхилено. Це може статись, якщо декілька монет з вашого гаманця вже використані, наприклад, якщо ви використовуєте одну копію гаманця (wallet.dat), а монети були використані з іншої копії, але не позначені як використані в цій. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + + + + (no label) + (немає назви) + + + Warning: Unknown change address + + + + Are you sure you want to send? + Ви впевнені, що хочете відправити? + + + added as transaction fee + + + + Payment request expired + + + + Invalid payment address %1 + SendCoinsEntry - - Form - Форма - - - A&mount: &Кількість: - Pay &To: &Отримувач: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - + Звернення до відправити платіж на (наприклад 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book Введіть мітку для цієї адреси для додавання її в адресну книгу - &Label: &Мітка: - - Choose address from address book - Вибрати адресу з адресної книги + Choose previously used address + Обрати ранiш використовувану адресу + + + This is a normal payment. + - Alt+A Alt+A - Paste address from clipboard Вставити адресу - Alt+P Alt+P - - Remove this recipient - Видалити цього отримувача + Remove this entry + - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Введіть адресу Myriadcoin (наприклад 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + Повідомлення: + + + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + Нотатка: + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. + SignVerifyMessageDialog - Signatures - Sign / Verify a Message Підписи - Підпис / Перевірка повідомлення - &Sign Message &Підписати повідомлення - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. - + Ви можете зареєструватися повідомленнями зі своїми адресами, щоб довести, що ви є їх власником. Будьте обережні, щоб не підписувати що-небудь неясне, як фішинг-атак може спробувати обдурити вас в підписанні вашу особистість до них. Тільки підписати повністю докладні свідчення, користувач зобов'язується. - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Введіть адресу Myriadcoin (наприклад 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book - Вибрати адресу з адресної книги + Choose previously used address + Обрати ранiш використовувану адресу - - Alt+A Alt+A - Paste address from clipboard Вставити адресу - Alt+P Alt+P - Enter the message you want to sign here Введіть повідомлення, яке ви хочете підписати тут - Signature Підпис - Copy the current signature to the system clipboard Копіювати поточну сигнатуру до системного буферу обміну - Sign the message to prove you own this Myriadcoin address Підпишіть повідомлення щоб довести, що ви є власником цієї адреси - Sign &Message &Підписати повідомлення - Reset all sign message fields Скинути всі поля підпису повідомлення - - Clear &All Очистити &все - &Verify Message Перевірити повідомлення - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. - + Введіть адресу підписання, повідомлення (забезпечення копіюванні розриви рядків, прогалини, вкладки і т.д. точно) і підпис нижче, щоб перевірити повідомлення. Будьте обережні, щоб не читати далі в підпис, ніж те, що в підписаному самого повідомлення, щоб уникнути обдурять нападу чоловік-в-середній. - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Введіть адресу Myriadcoin (наприклад 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address - Перевірте повідомлення для впевненості, що воно підписано вказаною Myriadcoin-адресою + Перевірте повідомлення для впевненості, що воно підписано вказаною Bitcoin-адресою - Verify &Message Перевірити повідомлення - Reset all verify message fields Скинути всі поля перевірки повідомлення - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) Введіть адресу Myriadcoin (наприклад 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature Натисніть кнопку «Підписати повідомлення», для отримання підпису - - Enter Myriadcoin signature - Введіть сигнатуру Myriadcoin - - - - The entered address is invalid. Введена нечинна адреса. - - - - Please check the address and try again. Будь ласка, перевірте адресу та спробуйте ще. - - The entered address does not refer to a key. - + Введений адреса не відноситься до ключа. - Wallet unlock was cancelled. - + Розблокування Гаманець був скасований. - Private key for the entered address is not available. - + Приватний ключ для введеної адреси недоступний. - Message signing failed. Не вдалося підписати повідомлення. - Message signed. Повідомлення підписано. - The signature could not be decoded. Підпис не можливо декодувати. - - Please check the signature and try again. Будь ласка, перевірте підпис та спробуйте ще. - The signature did not match the message digest. - + Підпис не відповідає дайджест повідомлення. - Message verification failed. Не вдалося перевірити повідомлення. - Message verified. Повідомлення перевірено. @@ -1648,186 +2127,160 @@ Address: %4 SplashScreen - - The Myriadcoin developers + Myriadcoin Core + Myriadcoin Ядро + + + The Myriadcoin Core developers - [testnet] [тестова мережа] + + TrafficGraphWidget + + KB/s + КБ/с + + TransactionDesc - Open until %1 Відкрити до %1 - + conflicted + + + %1/offline %1/поза інтернетом - %1/unconfirmed %1/не підтверджено - %1 confirmations %1 підтверджень - Status Статус - , broadcast through %n node(s) - Date Дата - Source - + Джерело - Generated Згенеровано - - From Відправник - - - To Отримувач - - own address - + Власна адреса - label Мітка - - - - - Credit Кредит - matures in %n more block(s) - not accepted не прийнято - - - - Debit Дебет - Transaction fee Комісія за транзакцію - Net amount Загальна сума - Message Повідомлення - Comment Коментар - Transaction ID ID транзакції - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - Після генерації монет, потрібно зачекати 120 блоків, перш ніж їх можна буде використати. Коли ви згенерували цей блок, його було відправлено в мережу для того, щоб він був доданий до ланцюжка блоків. Якщо ця процедура не вдасться, статус буде змінено на «не підтверджено» і ви не зможете потратити згенеровані монету. Таке може статись, якщо хтось інший згенерував блок на декілька секунд раніше. - - - - Debug information + Merchant - + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + Debug information + Отладочна інформація + + Transaction Транзакція - Inputs - + витрати - Amount Кількість - true true - false false - , has not been successfully broadcast yet , ще не було успішно розіслано - Open for %n more block(s) - unknown невідомий @@ -1835,12 +2288,10 @@ Address: %4 TransactionDescDialog - Transaction details Деталі транзакції - This pane shows a detailed description of the transaction Даний діалог показує детальну статистику по вибраній транзакції @@ -1848,117 +2299,102 @@ Address: %4 TransactionTableModel - Date Дата - Type Тип - Address Адреса - Amount Кількість + + Immature (%1 confirmations, will be available after %2) + + - Open for %n more block(s) - Open until %1 Відкрити до %1 - - Offline (%1 confirmations) - Поза інтернетом (%1 підтверджень) - - - - Unconfirmed (%1 of %2 confirmations) - Непідтверджено (%1 із %2 підтверджень) - - - Confirmed (%1 confirmations) Підтверджено (%1 підтверджень) - - - Mined balance will be available when it matures in %n more block(s) - - - This block was not received by any other nodes and will probably not be accepted! Цей блок не був отриманий жодними іншими вузлами і, ймовірно, не буде прийнятий! - Generated but not accepted Згенеровано, але не підтверджено - + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + Received with Отримано - Received from Отримано від - Sent to Відправлено - Payment to yourself Відправлено собі - Mined Добуто - (n/a) (недоступно) - Transaction status. Hover over this field to show number of confirmations. Статус транзакції. Наведіть вказівник на це поле, щоб показати кількість підтверджень. - Date and time that the transaction was received. Дата і час, коли транзакцію було отримано. - Type of transaction. Тип транзакції. - Destination address of transaction. Адреса отримувача транзакції. - Amount removed from or added to balance. Сума, додана чи знята з балансу. @@ -1966,176 +2402,156 @@ Address: %4 TransactionView - - All Всі - Today Сьогодні - This week На цьому тижні - This month На цьому місяці - Last month Минулого місяця - This year Цього року - Range... Проміжок... - Received with Отримані на - Sent to Відправлені на - To yourself Відправлені собі - Mined Добуті - Other Інше - Enter address or label to search Введіть адресу чи мітку для пошуку - Min amount Мінімальна сума - Copy address Скопіювати адресу - Copy label Скопіювати мітку - Copy amount Копіювати кількість - Copy transaction ID - + Копіювати ID транзакції - Edit label Редагувати мітку - Show transaction details Показати деталі транзакції - - Export Transaction Data - Експортувати дані транзакцій + Export Transaction History + + + + Exporting Failed + + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + + + + The transaction history was successfully saved to %1. + - Comma separated file (*.csv) Файли, розділені комою (*.csv) - Confirmed Підтверджені - Date Дата - Type Тип - Label Мітка - Address Адреса - Amount Кількість - ID Ідентифікатор - - Error exporting - Помилка експорту - - - - Could not write to file %1. - Неможливо записати у файл %1. - - - Range: Діапазон від: - to до + + WalletFrame + + No wallet has been loaded. + + + WalletModel - Send Coins Відправити @@ -2143,160 +2559,121 @@ Address: %4 WalletView - &Export - + & Експорт - Export the data in the current tab to a file Експортувати дані з поточної вкладки в файл - Backup Wallet - + Зробити резервне копіювання гаманця - Wallet Data (*.dat) - + Данi гаманця (*.dat) - Backup Failed + Помилка резервного копіювання + + + There was an error trying to save the wallet data to %1. - - There was an error trying to save the wallet data to the new location. - Виникла помилка при спробі зберегти гаманець в новому місці. + The wallet data was successfully saved to %1. + - Backup Successful Успішне створення резервної копії - - - The wallet data was successfully saved to the new location. - Данні гаманця успішно збережено в новому місці призначення. - bitcoin-core - - Myriadcoin version - Версія - - - Usage: Використання: - - Send command to -server or myriadcoind - Відправити команду серверу -server чи демону - - - List commands Список команд - Get help for a command Отримати довідку по команді - Options: Параметри: - Specify configuration file (default: myriadcoin.conf) Вкажіть файл конфігурації (типово: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) Вкажіть pid-файл (типово: myriadcoind.pid) - Specify data directory Вкажіть робочий каталог - - Set database cache size in megabytes (default: 25) - Встановити розмір кешу бази даних в мегабайтах (типово: 25) - - - Listen for connections on <port> (default: 8333 or testnet: 18333) Чекати на з'єднання на <port> (типово: 8333 або тестова мережа: 18333) - Maintain at most <n> connections to peers (default: 125) Підтримувати не більше <n> зв'язків з колегами (типово: 125) - Connect to a node to retrieve peer addresses, and disconnect - + Підключитись до вузла, щоб отримати список адрес інших учасників та від'єднатись - Specify your own public address - + Вкажіть вашу власну публічну адресу - Threshold for disconnecting misbehaving peers (default: 100) Поріг відключення неправильно під'єднаних пірів (типово: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) Максимальній розмір вхідного буферу на одне з'єднання (типово: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) Прослуховувати <port> для JSON-RPC-з'єднань (типово: 8332 або тестова мережа: 18332) - Accept command line and JSON-RPC commands Приймати команди із командного рядка та команди JSON-RPC - + Myriadcoin Core RPC client version + + + Run in the background as a daemon and accept commands Запустити в фоновому режимі (як демон) та приймати команди - Use the test network Використовувати тестову мережу - Accept connections from outside (default: 1 if no -proxy or -connect) - + Приймати з'єднання ззовні (за замовчуванням: 1, якщо ні-проксі або-з'єднання) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2311,612 +2688,686 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 + Прив'язка до даного адресою і завжди слухати на ньому. Використовуйте [господаря]: позначення порту для IPv6 + + + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + Введіть тестовий режим регресії, яка використовує спеціальну ланцюг, в якій блоки можуть бути вирішені негайно. Це призначено для регресійного тестування інструментів і розробки додатків. + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. Помилка: транзакцію було відхилено. Це може статись, якщо декілька монет з вашого гаманця вже використані, наприклад, якщо ви використовуєте одну копію гаманця (wallet.dat), а монети були використані з іншої копії, але не позначені як використані в цій. - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications + Це тест збірки попередньою версією - використовуйте на свій страх і ризик - не використовувати для гірничодобувних або торгових додатків + + + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. Увага: встановлено занадто велику комісію (-paytxfee). Комісія зніматиметься кожен раз коли ви проводитимете транзакції. - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. Увага: будь ласка, перевірте дату і час на своєму комп'ютері. Якщо ваш годинник йде неправильно, Myriadcoin може працювати некоректно. - + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. Увага: помилка читання wallet.dat! Всі ключі прочитано коректно, але дані транзакцій чи записи адресної книги можуть бути пропущені, або пошкоджені. - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. Увага: файл wallet.dat пошкоджено, дані врятовано! Оригінальний wallet.dat збережено як wallet.{timestamp}.bak до %s; якщо Ваш баланс чи транзакції неправильні, Ви можете відновити їх з резервної копії. - + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + Attempt to recover private keys from a corrupt wallet.dat Спроба відновити закриті ключі з пошкодженого wallet.dat - - Block creation options: + Myriadcoin Core Daemon + + + + Block creation options: + Опції створення блоку: + + + Clear list of wallet transactions (diagnostic tool; implies -rescan) - Connect only to the specified node(s) Підключитись лише до вказаного вузла - + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + Corrupted block database detected + Виявлено пошкоджений блок бази даних + + + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) - Discover own IP address (default: 1 when listening and no -externalip) + Відкрийте власну IP-адресу (за замовчуванням: 1, коли не чує і-externalip) + + + Do not load the wallet and disable wallet RPC calls - Do you want to rebuild the block database now? - + Ви хочете перебудувати базу даних блоку зараз? - Error initializing block database Помилка ініціалізації бази даних блоків - Error initializing wallet database environment %s! - Error loading block database Помилка завантаження бази даних блоків - Error opening block database - + Помилка відкриття блоку бази даних - Error: Disk space is low! Помилка: Мало вільного місця на диску! - Error: Wallet locked, unable to create transaction! Помилка: Гаманець заблокований, неможливо створити транзакцію! - Error: system error: Помилка: системна помилка: - Failed to listen on any port. Use -listen=0 if you want this. - + Не вдалося слухати на будь-якому порту. Використовуйте-слухати = 0, якщо ви хочете цього. - Failed to read block info - + Не вдалося розпізнати блок інформації - Failed to read block - + Не вдалося розпізнати блок - Failed to sync block index - + Не вдалося синхронізувати індекс блоку - Failed to write block index - + Не вдалося записати індекс блоку - Failed to write block info - + Не вдалося записати інформацію індекса - Failed to write block - + Не вдалося записати блок - Failed to write file info - + Не вдалося записати інформацію файла - Failed to write to coin database - + Не вдалося записати до бази даних монет - Failed to write transaction index - + Не вдалося записати індекс транзакції - Failed to write undo data + Не вдалося записати скасувати дані + + + Fee per kB to add to transactions you send + Комісія за Кб + + + Fees smaller than this are considered zero fee (for relaying) (default: - Find peers using DNS lookup (default: 1 unless -connect) + Знайти однолітків за допомогою DNS пошук (за замовчуванням: 1, якщо-ні підключити) + + + Force safe mode (default: 0) - Generate coins (default: 0) - + Генерація монети (за замовчуванням: 0) - How many blocks to check at startup (default: 288, 0 = all) Скільки блоків перевіряти під час запуску (типово: 288, 0 = всі) - - How thorough the block verification is (0-4, default: 3) + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' - Not enough file descriptors available. + Бракує дескрипторів файлів, доступних. + + + Prepend debug output with timestamp (default: 1) + + + + RPC client options: - Rebuild block chain index from current blk000??.dat files - + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + Set the number of threads to service RPC calls (default: 4) + Встановити число потоків до дзвінків служба RPC (за замовчуванням: 4) + + + Specify wallet file (within data directory) - + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + Використання (застаріле, використовуйте myriadcoin-cli): + + Verifying blocks... - + Перевірка блоків... - Verifying wallet... + Перевірка гаманця... + + + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex - Imports blocks from external blk000??.dat file Імпорт блоків з зовнішнього файлу blk000??.dat - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) - Information Інформація - - Invalid -tor address: '%s' - Помилка в адресі -tor: «%s» - - - Invalid amount for -minrelaytxfee=<amount>: '%s' - Invalid amount for -mintxfee=<amount>: '%s' - - Maintain a full transaction index (default: 0) + Limit size of signature cache to <n> entries (default: 50000) - + Log transaction priority and fee per kB when mining blocks (default: 0) + + + + Maintain a full transaction index (default: 0) + Підтримувати індекс повний транзакцій (за замовчуванням: 0) + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) Максимальний буфер, <n>*1000 байт (типово: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) Максимальній розмір вихідного буферу на одне з'єднання, <n>*1000 байт (типово: 1000) - Only accept block chain matching built-in checkpoints (default: 1) - + Тільки приймати блок відповідності ланцюга вбудованих контрольно-пропускних пунктів (за замовчуванням: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + Підключити тільки до вузлів в мережі <net> (IPv4, IPv6 або Tor) + + + Print block on startup, if found in block index - - Output extra debugging information. Implies all other -debug* options - Виводити більше налагоджувальної інформації. Мається на увазі всі шнші -debug* параметри - - - - Output extra network debugging information + Print block tree on startup (default: 0) - - Prepend debug output with timestamp - Доповнювати налагоджувальний вивід відміткою часу + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) Параметри SSL: (див. Myriadcoin Wiki для налаштування SSL) - - Select the version of socks proxy to use (4-5, default: 5) - Вибір версії socks-проксі для використання (4-5, типово: 5) + Send command to Myriadcoin Core + - Send trace/debug info to console instead of debug.log file Відсилати налагоджувальну інформацію на консоль, а не у файл debug.log - - Send trace/debug info to debugger - Відсилати налагоджувальну інформацію до налагоджувача - - - - Set maximum block size in bytes (default: 250000) - Встановити максимальний розмір блоку у байтах (типово: 250000) - - - Set minimum block size in bytes (default: 0) Встановити мінімальний розмір блоку у байтах (типово: 0) - + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + Shrink debug.log file on client startup (default: 1 when no -debug) Стискати файл debug.log під час старту клієнта (типово: 1 коли відсутутній параметр -debug) - Signing transaction failed - + Підписання угоди не вдалося - Specify connection timeout in milliseconds (default: 5000) Вказати тайм-аут підключення у мілісекундах (типово: 5000) - + Start Myriadcoin Core Daemon + + + System error: Системна помилка: - Transaction amount too small - + Сума угоди занадто малий - Transaction amounts must be positive - + Суми угоди має бути позитивним - Transaction too large - + Угода занадто великий - Use UPnP to map the listening port (default: 0) Намагатись використовувати UPnP для відображення порту, що прослуховується на роутері (default: 0) - Use UPnP to map the listening port (default: 1 when listening) Намагатись використовувати UPnP для відображення порту, що прослуховується на роутері (default: 1 when listening) - - Use proxy to reach tor hidden services (default: same as -proxy) - - - - Username for JSON-RPC connections Ім'я користувача для JSON-RPC-з'єднань - Warning Попередження - Warning: This version is obsolete, upgrade required! Увага: Поточна версія застаріла, необхідне оновлення! - - You need to rebuild the databases using -reindex to change -txindex + Zapping all transactions from wallet... - + on startup + + + + version + версія + + wallet.dat corrupt, salvage failed wallet.dat пошкоджено, відновлення не вдалося - Password for JSON-RPC connections Пароль для JSON-RPC-з'єднань - Allow JSON-RPC connections from specified IP address Дозволити JSON-RPC-з'єднання з вказаної IP-адреси - Send commands to node running on <ip> (default: 127.0.0.1) Відправляти команди на вузол, запущений на <ip> (типово: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) - + Виконати команду, коли з'явиться новий блок (%s в команді змінюється на хеш блоку) - Upgrade wallet to latest format Модернізувати гаманець до останнього формату - Set key pool size to <n> (default: 100) Встановити розмір пулу ключів <n> (типово: 100) - Rescan the block chain for missing wallet transactions Пересканувати ланцюжок блоків, в пошуку втрачених транзакцій - Use OpenSSL (https) for JSON-RPC connections Використовувати OpenSSL (https) для JSON-RPC-з'єднань - Server certificate file (default: server.cert) Файл сертифіката сервера (типово: server.cert) - Server private key (default: server.pem) Закритий ключ сервера (типово: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - Допустимі шифри (типово: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - This help message Дана довідка - Unable to bind to %s on this computer (bind returned error %d, %s) Неможливо прив'язати до порту %s на цьому комп'ютері (bind returned error %d, %s) - - Connect through socks proxy - Підключитись через SOCKS-проксі - - - Allow DNS lookups for -addnode, -seednode and -connect Дозволити пошук в DNS для команд -addnode, -seednode та -connect - Loading addresses... Завантаження адрес... - Error loading wallet.dat: Wallet corrupted Помилка при завантаженні wallet.dat: Гаманець пошкоджено - Error loading wallet.dat: Wallet requires newer version of Myriadcoin Помилка при завантаженні wallet.dat: Гаманець потребує новішої версії Біткоін-клієнта - Wallet needed to be rewritten: restart Myriadcoin to complete Потрібно перезаписати гаманець: перезапустіть Біткоін-клієнт для завершення - Error loading wallet.dat Помилка при завантаженні wallet.dat - Invalid -proxy address: '%s' Помилка в адресі проксі-сервера: «%s» - Unknown network specified in -onlynet: '%s' Невідома мережа вказана в -onlynet: «%s» - Unknown -socks proxy version requested: %i - + В параметрі -socks запитується невідома версія: %i - Cannot resolve -bind address: '%s' - Cannot resolve -externalip address: '%s' - Invalid amount for -paytxfee=<amount>: '%s' Помилка у величині комісії -paytxfee=<amount>: «%s» - Invalid amount Некоректна кількість - Insufficient funds Недостатньо коштів - Loading block index... Завантаження індексу блоків... - Add a node to connect to and attempt to keep the connection open Додати вузол до підключення і лишити його відкритим - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - Неможливо прив'язати до порту %s на цьому комп'ютері. Можливо гаманець вже запущено. - - - - Fee per KB to add to transactions you send - Комісія за КБ - - - Loading wallet... Завантаження гаманця... - Cannot downgrade wallet - + Не вдається понизити версію гаманця - Cannot write default address Неможливо записати типову адресу - Rescanning... Сканування... - Done loading Завантаження завершене - To use the %s option - + Щоб використати опцію %s - Error Помилка - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_ur_PK.ts b/src/qt/locale/bitcoin_ur_PK.ts new file mode 100644 index 00000000..d5e2eeb6 --- /dev/null +++ b/src/qt/locale/bitcoin_ur_PK.ts @@ -0,0 +1,3368 @@ + + + AboutDialog + + About Myriadcoin Core + + + + <b>Myriadcoin Core</b> version + + + + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. + + + + Copyright + + + + The Myriadcoin Core developers + + + + (%1-bit) + + + + + AddressBookPage + + Double-click to edit address or label + ایڈریس یا لیبل میں ترمیم کرنے پر ڈبل کلک کریں + + + Create a new address + نیا ایڈریس بنائیں + + + &New + + + + Copy the currently selected address to the system clipboard + + + + &Copy + + + + C&lose + + + + &Copy Address + + + + Delete the currently selected address from the list + + + + Export the data in the current tab to a file + + + + &Export + + + + &Delete + + + + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + + Copy &Label + + + + &Edit + + + + Export Address List + + + + Comma separated file (*.csv) + + + + Exporting Failed + + + + There was an error trying to save the address list to %1. + + + + + AddressTableModel + + Label + چٹ + + + Address + پتہ + + + (no label) + چٹ کے بغیر + + + + AskPassphraseDialog + + Passphrase Dialog + + + + Enter passphrase + پاس فریز داخل کریں + + + New passphrase + نیا پاس فریز + + + Repeat new passphrase + نیا پاس فریز دہرائیں + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + + + + Encrypt wallet + + + + This operation needs your wallet passphrase to unlock the wallet. + + + + Unlock wallet + بٹوا ان لاک + + + This operation needs your wallet passphrase to decrypt the wallet. + + + + Decrypt wallet + خفیہ کشائی کر یںبٹوے کے + + + Change passphrase + پاس فریز تبدیل کریں + + + Enter the old and new passphrase to the wallet. + + + + Confirm wallet encryption + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! + + + + Are you sure you wish to encrypt your wallet? + + + + 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. + + + + Warning: The Caps Lock key is on! + + + + Wallet encrypted + + + + Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. + + + + Wallet encryption failed + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + + + + The supplied passphrases do not match. + + + + Wallet unlock failed + + + + The passphrase entered for the wallet decryption was incorrect. + + + + Wallet decryption failed + + + + Wallet passphrase was successfully changed. + + + + + BitcoinGUI + + Sign &message... + + + + Synchronizing with network... + + + + &Overview + + + + Node + + + + Show general overview of wallet + + + + &Transactions + + + + Browse transaction history + + + + E&xit + + + + Quit application + + + + Show information about Myriadcoin + + + + About &Qt + + + + Show information about Qt + + + + &Options... + + + + &Encrypt Wallet... + + + + &Backup Wallet... + + + + &Change Passphrase... + + + + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + + Importing blocks from disk... + + + + Reindexing blocks on disk... + + + + Send coins to a Myriadcoin address + + + + Modify configuration options for Myriadcoin + + + + Backup wallet to another location + + + + Change the passphrase used for wallet encryption + + + + &Debug window + + + + Open debugging and diagnostic console + + + + &Verify message... + + + + Myriadcoin + + + + Wallet + + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your Myriadcoin addresses to prove you own them + + + + Verify messages to ensure they were signed with specified Myriadcoin addresses + + + + &File + + + + &Settings + + + + &Help + + + + Tabs toolbar + + + + [testnet] + + + + Myriadcoin Core + + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + + Myriadcoin client + + + + %n active connection(s) to Myriadcoin network + + + + No block source available... + + + + Processed %1 of %2 (estimated) blocks of transaction history. + + + + Processed %1 blocks of transaction history. + + + + %n hour(s) + + + + %n day(s) + + + + %n week(s) + + + + %1 and %2 + + + + %n year(s) + + + + %1 behind + + + + Last received block was generated %1 ago. + + + + Transactions after this will not yet be visible. + + + + Error + نقص + + + Warning + + + + Information + + + + Up to date + + + + Catching up... + + + + Sent transaction + + + + Incoming transaction + + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + A fatal error occurred. Myriadcoin can no longer continue safely and will quit. + + + + + ClientModel + + Network Alert + + + + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + رقم + + + Address + پتہ + + + Date + تاریخ + + + Confirmations + + + + Confirmed + + + + Priority + + + + Copy address + + + + Copy label + + + + Copy amount + + + + Copy transaction ID + + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + + + + Dust + + + + yes + + + + no + + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + چٹ کے بغیر + + + change from %1 (%2) + + + + (change) + + + + + EditAddressDialog + + Edit Address + + + + &Label + + + + The label associated with this address list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + + + + &Address + + + + New receiving address + + + + New sending address + + + + Edit receiving address + + + + Edit sending address + + + + The entered address "%1" is already in the address book. + + + + The entered address "%1" is not a valid Myriadcoin address. + + + + Could not unlock wallet. + + + + New key generation failed. + + + + + FreespaceChecker + + A new data directory will be created. + + + + name + + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core + + + + version + + + + Usage: + + + + command-line options + + + + UI options + + + + Set language, for example "de_DE" (default: system locale) + + + + Start minimized + + + + Set SSL root certificates for payment request (default: -system-) + + + + Show splash screen on startup (default: 1) + + + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + + + + Error: Specified data directory "%1" can not be created. + + + + Error + نقص + + + GB of free space available + + + + (of %1GB needed) + + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open + + + + + OptionsDialog + + Options + + + + &Main + + + + Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. + + + + Pay transaction &fee + + + + Automatically start Myriadcoin after logging in to the system. + + + + &Start Myriadcoin on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + + Reset all client options to default. + + + + &Reset Options + + + + &Network + + + + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. + + + + Map port using &UPnP + + + + Proxy &IP: + + + + &Port: + + + + Port of the proxy (e.g. 9050) + + + + SOCKS &Version: + + + + SOCKS version of the proxy (e.g. 5) + + + + &Window + + + + Show only a tray icon after minimizing the window. + + + + &Minimize to the tray instead of the taskbar + + + + Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. + + + + M&inimize on close + + + + &Display + + + + User Interface &language: + + + + The user interface language can be set here. This setting will take effect after restarting Myriadcoin. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show Myriadcoin addresses in the transaction list or not. + + + + &Display addresses in transaction list + + + + Whether to show coin control features or not. + + + + &OK + + + + &Cancel + + + + default + + + + none + + + + Confirm options reset + + + + Client restart required to activate changes. + + + + Client will be shutdown, do you want to proceed? + + + + This change would require a client restart. + + + + The supplied proxy address is invalid. + + + + + OverviewPage + + Form + + + + The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. + + + + Wallet + + + + Available: + + + + Your current spendable balance + + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + + + + Immature: + + + + Mined balance that has not yet matured + + + + Total: + + + + Your current total balance + + + + <b>Recent transactions</b> + + + + out of sync + + + + + PaymentServer + + URI handling + + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start myriadcoin: click-to-pay handler + + + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + + + + Network request error + + + + + QObject + + Myriadcoin + + + + Error: Specified data directory "%1" does not exist. + + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + + + + Error: Invalid combination of -regtest and -testnet. + + + + Myriadcoin Core didn't yet exit safely... + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + + QRImageWidget + + &Save Image... + + + + &Copy Image + + + + Save QR Code + + + + PNG Image (*.png) + + + + + RPCConsole + + Client name + + + + N/A + + + + Client version + + + + &Information + + + + Debug window + + + + General + + + + Using OpenSSL version + + + + Startup time + + + + Network + + + + Name + + + + Number of connections + + + + Block chain + + + + Current number of blocks + + + + Estimated total blocks + + + + Last block time + + + + &Open + + + + &Console + + + + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + + Build date + + + + Debug log file + + + + Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the Myriadcoin RPC console. + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + Type <b>help</b> for an overview of available commands. + + + + %1 B + + + + %1 KB + + + + %1 MB + + + + %1 GB + + + + %1 m + + + + %1 h + + + + %1 h %2 m + + + + + ReceiveCoinsDialog + + &Amount: + + + + &Label: + + + + &Message: + + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + + + + Clear + + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + + + + Remove the selected entries from the list + + + + Remove + + + + Copy label + + + + Copy message + + + + Copy amount + + + + + ReceiveRequestDialog + + QR Code + + + + Copy &URI + + + + Copy &Address + + + + &Save Image... + + + + Request payment to %1 + + + + Payment information + + + + URI + + + + Address + پتہ + + + Amount + رقم + + + Label + چٹ + + + Message + + + + Resulting URI too long, try to reduce the text for label / message. + + + + Error encoding URI into QR Code. + + + + + RecentRequestsTableModel + + Date + تاریخ + + + Label + چٹ + + + Message + + + + Amount + رقم + + + (no label) + چٹ کے بغیر + + + (no message) + + + + (no amount) + + + + + SendCoinsDialog + + Send Coins + + + + Coin Control Features + + + + Inputs... + + + + automatically selected + + + + Insufficient funds! + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + + Send to multiple recipients at once + + + + Add &Recipient + + + + Clear all fields of the form. + + + + Clear &All + + + + Balance: + بیلنس: + + + Confirm the send action + + + + S&end + + + + Confirm send coins + + + + %1 to %2 + + + + Copy quantity + + + + Copy amount + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + + + + or + + + + The recipient address is not valid, please recheck. + + + + The amount to pay must be larger than 0. + + + + The amount exceeds your balance. + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + Duplicate address found, can only send to each address once per send operation. + + + + Transaction creation failed! + + + + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + + + + (no label) + چٹ کے بغیر + + + Warning: Unknown change address + + + + Are you sure you want to send? + + + + added as transaction fee + + + + Payment request expired + + + + Invalid payment address %1 + + + + + SendCoinsEntry + + A&mount: + + + + Pay &To: + + + + The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Enter a label for this address to add it to your address book + + + + &Label: + + + + Choose previously used address + + + + This is a normal payment. + + + + Alt+A + + + + Paste address from clipboard + + + + Alt+P + + + + Remove this entry + + + + Message: + + + + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. + + + + + SignVerifyMessageDialog + + Signatures - Sign / Verify a Message + + + + &Sign Message + + + + You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. + + + + The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Choose previously used address + + + + Alt+A + + + + Paste address from clipboard + + + + Alt+P + + + + Enter the message you want to sign here + + + + Signature + + + + Copy the current signature to the system clipboard + + + + Sign the message to prove you own this Myriadcoin address + + + + Sign &Message + + + + Reset all sign message fields + + + + Clear &All + + + + &Verify Message + + + + Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. + + + + The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Verify the message to ensure it was signed with the specified Myriadcoin address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Click "Sign Message" to generate signature + + + + The entered address is invalid. + + + + Please check the address and try again. + + + + The entered address does not refer to a key. + + + + Wallet unlock was cancelled. + + + + Private key for the entered address is not available. + + + + Message signing failed. + + + + Message signed. + + + + The signature could not be decoded. + + + + Please check the signature and try again. + + + + The signature did not match the message digest. + + + + Message verification failed. + + + + Message verified. + + + + + SplashScreen + + Myriadcoin Core + + + + The Myriadcoin Core developers + + + + [testnet] + + + + + TrafficGraphWidget + + KB/s + + + + + TransactionDesc + + Open until %1 + + + + conflicted + + + + %1/offline + + + + %1/unconfirmed + + + + %1 confirmations + + + + Status + + + + , broadcast through %n node(s) + + + + Date + تاریخ + + + Source + + + + Generated + + + + From + + + + To + + + + own address + + + + label + + + + Credit + + + + matures in %n more block(s) + + + + not accepted + + + + Debit + + + + Transaction fee + + + + Net amount + + + + Message + + + + Comment + + + + Transaction ID + + + + Merchant + + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + Debug information + + + + Transaction + + + + Inputs + + + + Amount + رقم + + + true + + + + false + + + + , has not been successfully broadcast yet + + + + Open for %n more block(s) + + + + unknown + + + + + TransactionDescDialog + + Transaction details + + + + This pane shows a detailed description of the transaction + + + + + TransactionTableModel + + Date + تاریخ + + + Type + ٹائپ + + + Address + پتہ + + + Amount + رقم + + + Immature (%1 confirmations, will be available after %2) + + + + Open for %n more block(s) + + + + Open until %1 + + + + Confirmed (%1 confirmations) + + + + This block was not received by any other nodes and will probably not be accepted! + + + + Generated but not accepted + + + + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + + Received with + + + + Received from + + + + Sent to + کو بھیجا + + + Payment to yourself + + + + Mined + + + + (n/a) + (N / A) + + + Transaction status. Hover over this field to show number of confirmations. + + + + Date and time that the transaction was received. + + + + Type of transaction. + + + + Destination address of transaction. + + + + Amount removed from or added to balance. + + + + + TransactionView + + All + تمام + + + Today + آج + + + This week + اس ہفتے + + + This month + اس مہینے + + + Last month + پچھلے مہینے + + + This year + اس سال + + + Range... + دیگر + + + Received with + + + + Sent to + کو بھیجا + + + To yourself + + + + Mined + + + + Other + + + + Enter address or label to search + + + + Min amount + + + + Copy address + + + + Copy label + + + + Copy amount + + + + Copy transaction ID + + + + Edit label + + + + Show transaction details + + + + Export Transaction History + + + + Exporting Failed + + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + + + + The transaction history was successfully saved to %1. + + + + Comma separated file (*.csv) + + + + Confirmed + + + + Date + تاریخ + + + Type + ٹائپ + + + Label + چٹ + + + Address + پتہ + + + Amount + رقم + + + ID + + + + Range: + + + + to + + + + + WalletFrame + + No wallet has been loaded. + + + + + WalletModel + + Send Coins + + + + + WalletView + + &Export + + + + Export the data in the current tab to a file + + + + Backup Wallet + + + + Wallet Data (*.dat) + + + + Backup Failed + + + + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. + + + + Backup Successful + + + + + bitcoin-core + + Usage: + + + + List commands + + + + Get help for a command + + + + Options: + + + + Specify configuration file (default: myriadcoin.conf) + + + + Specify pid file (default: myriadcoind.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 8333 or testnet: 18333) + + + + Maintain at most <n> connections to peers (default: 125) + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + Specify your own public address + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) + + + + Accept command line and JSON-RPC commands + + + + Myriadcoin Core RPC client version + + + + Run in the background as a daemon and accept commands + + + + Use the test network + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=myriadcoinrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + Bind to given address and always listen on it. Use [host]:port notation for IPv6 + + + + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) + + + + Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + + + + This is a pre-release test build - use at your own risk - do not use for mining or merchant applications + + + + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. + + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + Myriadcoin Core Daemon + + + + Block creation options: + + + + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + + Connect only to the specified node(s) + + + + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + + Corrupted block database detected + + + + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + Do not load the wallet and disable wallet RPC calls + + + + Do you want to rebuild the block database now? + + + + Error initializing block database + + + + Error initializing wallet database environment %s! + + + + Error loading block database + + + + Error opening block database + + + + Error: Disk space is low! + + + + Error: Wallet locked, unable to create transaction! + + + + Error: system error: + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + Failed to read block info + + + + Failed to read block + + + + Failed to sync block index + + + + Failed to write block index + + + + Failed to write block info + + + + Failed to write block + + + + Failed to write file info + + + + Failed to write to coin database + + + + Failed to write transaction index + + + + Failed to write undo data + + + + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + + Find peers using DNS lookup (default: 1 unless -connect) + + + + Force safe mode (default: 0) + + + + Generate coins (default: 0) + + + + How many blocks to check at startup (default: 288, 0 = all) + + + + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' + + + + Not enough file descriptors available. + + + + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + + Rebuild block chain index from current blk000??.dat files + + + + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + + Set the number of threads to service RPC calls (default: 4) + + + + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + + Verifying blocks... + + + + Verifying wallet... + + + + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + + + + Imports blocks from external blk000??.dat file + + + + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + + + + Information + + + + Invalid amount for -minrelaytxfee=<amount>: '%s' + + + + Invalid amount for -mintxfee=<amount>: '%s' + + + + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + + Maintain a full transaction index (default: 0) + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + Only accept block chain matching built-in checkpoints (default: 1) + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + Print block on startup, if found in block index + + + + Print block tree on startup (default: 0) + + + + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + + + + SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + Send command to Myriadcoin Core + + + + Send trace/debug info to console instead of debug.log file + + + + Set minimum block size in bytes (default: 0) + + + + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + Signing transaction failed + + + + Specify connection timeout in milliseconds (default: 5000) + + + + Start Myriadcoin Core Daemon + + + + System error: + + + + Transaction amount too small + + + + Transaction amounts must be positive + + + + Transaction too large + + + + Use UPnP to map the listening port (default: 0) + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + Username for JSON-RPC connections + + + + Warning + + + + Warning: This version is obsolete, upgrade required! + + + + Zapping all transactions from wallet... + + + + on startup + + + + version + + + + wallet.dat corrupt, salvage failed + + + + Password for JSON-RPC connections + + + + Allow JSON-RPC connections from specified IP address + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + Upgrade wallet to latest format + + + + Set key pool size to <n> (default: 100) + + + + Rescan the block chain for missing wallet transactions + + + + Use OpenSSL (https) for JSON-RPC connections + + + + Server certificate file (default: server.cert) + + + + Server private key (default: server.pem) + + + + This help message + یہ مدد کا پیغام + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + Loading addresses... + + + + Error loading wallet.dat: Wallet corrupted + + + + Error loading wallet.dat: Wallet requires newer version of Myriadcoin + + + + Wallet needed to be rewritten: restart Myriadcoin to complete + + + + Error loading wallet.dat + + + + Invalid -proxy address: '%s' + + + + Unknown network specified in -onlynet: '%s' + + + + Unknown -socks proxy version requested: %i + + + + Cannot resolve -bind address: '%s' + + + + Cannot resolve -externalip address: '%s' + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + Invalid amount + غلط رقم + + + Insufficient funds + ناکافی فنڈز + + + Loading block index... + + + + Add a node to connect to and attempt to keep the connection open + + + + Loading wallet... + + + + Cannot downgrade wallet + + + + Cannot write default address + + + + Rescanning... + + + + Done loading + + + + To use the %s option + + + + Error + نقص + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + \ No newline at end of file diff --git a/src/qt/locale/bitcoin_uz@Cyrl.ts b/src/qt/locale/bitcoin_uz@Cyrl.ts new file mode 100644 index 00000000..4a0fd4ed --- /dev/null +++ b/src/qt/locale/bitcoin_uz@Cyrl.ts @@ -0,0 +1,3368 @@ + + + AboutDialog + + About Myriadcoin Core + + + + <b>Myriadcoin Core</b> version + + + + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. + + + + Copyright + + + + The Myriadcoin Core developers + + + + (%1-bit) + + + + + AddressBookPage + + Double-click to edit address or label + + + + Create a new address + + + + &New + + + + Copy the currently selected address to the system clipboard + + + + &Copy + + + + C&lose + + + + &Copy Address + + + + Delete the currently selected address from the list + + + + Export the data in the current tab to a file + + + + &Export + + + + &Delete + + + + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + + Copy &Label + + + + &Edit + + + + Export Address List + + + + Comma separated file (*.csv) + + + + Exporting Failed + + + + There was an error trying to save the address list to %1. + + + + + AddressTableModel + + Label + + + + Address + + + + (no label) + + + + + AskPassphraseDialog + + Passphrase Dialog + + + + Enter passphrase + + + + New passphrase + + + + Repeat new passphrase + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + + + + Encrypt wallet + + + + This operation needs your wallet passphrase to unlock the wallet. + + + + Unlock wallet + + + + This operation needs your wallet passphrase to decrypt the wallet. + + + + Decrypt wallet + + + + Change passphrase + + + + Enter the old and new passphrase to the wallet. + + + + Confirm wallet encryption + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! + + + + Are you sure you wish to encrypt your wallet? + + + + 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. + + + + Warning: The Caps Lock key is on! + + + + Wallet encrypted + + + + Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. + + + + Wallet encryption failed + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + + + + The supplied passphrases do not match. + + + + Wallet unlock failed + + + + The passphrase entered for the wallet decryption was incorrect. + + + + Wallet decryption failed + + + + Wallet passphrase was successfully changed. + + + + + BitcoinGUI + + Sign &message... + + + + Synchronizing with network... + + + + &Overview + + + + Node + + + + Show general overview of wallet + + + + &Transactions + + + + Browse transaction history + + + + E&xit + + + + Quit application + + + + Show information about Myriadcoin + + + + About &Qt + + + + Show information about Qt + + + + &Options... + + + + &Encrypt Wallet... + + + + &Backup Wallet... + + + + &Change Passphrase... + + + + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + + Importing blocks from disk... + + + + Reindexing blocks on disk... + + + + Send coins to a Myriadcoin address + + + + Modify configuration options for Myriadcoin + + + + Backup wallet to another location + + + + Change the passphrase used for wallet encryption + + + + &Debug window + + + + Open debugging and diagnostic console + + + + &Verify message... + + + + Myriadcoin + + + + Wallet + + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your Myriadcoin addresses to prove you own them + + + + Verify messages to ensure they were signed with specified Myriadcoin addresses + + + + &File + + + + &Settings + + + + &Help + + + + Tabs toolbar + + + + [testnet] + + + + Myriadcoin Core + + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + + Myriadcoin client + + + + %n active connection(s) to Myriadcoin network + + + + No block source available... + + + + Processed %1 of %2 (estimated) blocks of transaction history. + + + + Processed %1 blocks of transaction history. + + + + %n hour(s) + + + + %n day(s) + + + + %n week(s) + + + + %1 and %2 + + + + %n year(s) + + + + %1 behind + + + + Last received block was generated %1 ago. + + + + Transactions after this will not yet be visible. + + + + Error + + + + Warning + + + + Information + + + + Up to date + + + + Catching up... + + + + Sent transaction + + + + Incoming transaction + + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + A fatal error occurred. Myriadcoin can no longer continue safely and will quit. + + + + + ClientModel + + Network Alert + + + + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + + + + Address + + + + Date + + + + Confirmations + + + + Confirmed + + + + Priority + + + + Copy address + + + + Copy label + + + + Copy amount + + + + Copy transaction ID + + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + + + + Dust + + + + yes + + + + no + + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + + + + change from %1 (%2) + + + + (change) + + + + + EditAddressDialog + + Edit Address + + + + &Label + + + + The label associated with this address list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + + + + &Address + + + + New receiving address + + + + New sending address + + + + Edit receiving address + + + + Edit sending address + + + + The entered address "%1" is already in the address book. + + + + The entered address "%1" is not a valid Myriadcoin address. + + + + Could not unlock wallet. + + + + New key generation failed. + + + + + FreespaceChecker + + A new data directory will be created. + + + + name + + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core + + + + version + + + + Usage: + + + + command-line options + + + + UI options + + + + Set language, for example "de_DE" (default: system locale) + + + + Start minimized + + + + Set SSL root certificates for payment request (default: -system-) + + + + Show splash screen on startup (default: 1) + + + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + + + + Error: Specified data directory "%1" can not be created. + + + + Error + + + + GB of free space available + + + + (of %1GB needed) + + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open + + + + + OptionsDialog + + Options + + + + &Main + + + + Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. + + + + Pay transaction &fee + + + + Automatically start Myriadcoin after logging in to the system. + + + + &Start Myriadcoin on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + + Reset all client options to default. + + + + &Reset Options + + + + &Network + + + + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. + + + + Map port using &UPnP + + + + Proxy &IP: + + + + &Port: + + + + Port of the proxy (e.g. 9050) + + + + SOCKS &Version: + + + + SOCKS version of the proxy (e.g. 5) + + + + &Window + + + + Show only a tray icon after minimizing the window. + + + + &Minimize to the tray instead of the taskbar + + + + Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. + + + + M&inimize on close + + + + &Display + + + + User Interface &language: + + + + The user interface language can be set here. This setting will take effect after restarting Myriadcoin. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show Myriadcoin addresses in the transaction list or not. + + + + &Display addresses in transaction list + + + + Whether to show coin control features or not. + + + + &OK + + + + &Cancel + + + + default + + + + none + + + + Confirm options reset + + + + Client restart required to activate changes. + + + + Client will be shutdown, do you want to proceed? + + + + This change would require a client restart. + + + + The supplied proxy address is invalid. + + + + + OverviewPage + + Form + + + + The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. + + + + Wallet + + + + Available: + + + + Your current spendable balance + + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + + + + Immature: + + + + Mined balance that has not yet matured + + + + Total: + + + + Your current total balance + + + + <b>Recent transactions</b> + + + + out of sync + + + + + PaymentServer + + URI handling + + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start myriadcoin: click-to-pay handler + + + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + + + + Network request error + + + + + QObject + + Myriadcoin + + + + Error: Specified data directory "%1" does not exist. + + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + + + + Error: Invalid combination of -regtest and -testnet. + + + + Myriadcoin Core didn't yet exit safely... + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + + QRImageWidget + + &Save Image... + + + + &Copy Image + + + + Save QR Code + + + + PNG Image (*.png) + + + + + RPCConsole + + Client name + + + + N/A + + + + Client version + + + + &Information + + + + Debug window + + + + General + + + + Using OpenSSL version + + + + Startup time + + + + Network + + + + Name + + + + Number of connections + + + + Block chain + + + + Current number of blocks + + + + Estimated total blocks + + + + Last block time + + + + &Open + + + + &Console + + + + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + + Build date + + + + Debug log file + + + + Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the Myriadcoin RPC console. + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + Type <b>help</b> for an overview of available commands. + + + + %1 B + + + + %1 KB + + + + %1 MB + + + + %1 GB + + + + %1 m + + + + %1 h + + + + %1 h %2 m + + + + + ReceiveCoinsDialog + + &Amount: + + + + &Label: + + + + &Message: + + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + + + + Clear + + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + + + + Remove the selected entries from the list + + + + Remove + + + + Copy label + + + + Copy message + + + + Copy amount + + + + + ReceiveRequestDialog + + QR Code + + + + Copy &URI + + + + Copy &Address + + + + &Save Image... + + + + Request payment to %1 + + + + Payment information + + + + URI + + + + Address + + + + Amount + + + + Label + + + + Message + + + + Resulting URI too long, try to reduce the text for label / message. + + + + Error encoding URI into QR Code. + + + + + RecentRequestsTableModel + + Date + + + + Label + + + + Message + + + + Amount + + + + (no label) + + + + (no message) + + + + (no amount) + + + + + SendCoinsDialog + + Send Coins + + + + Coin Control Features + + + + Inputs... + + + + automatically selected + + + + Insufficient funds! + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + + Send to multiple recipients at once + + + + Add &Recipient + + + + Clear all fields of the form. + + + + Clear &All + + + + Balance: + + + + Confirm the send action + + + + S&end + + + + Confirm send coins + + + + %1 to %2 + + + + Copy quantity + + + + Copy amount + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + + + + or + + + + The recipient address is not valid, please recheck. + + + + The amount to pay must be larger than 0. + + + + The amount exceeds your balance. + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + Duplicate address found, can only send to each address once per send operation. + + + + Transaction creation failed! + + + + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + + + + (no label) + + + + Warning: Unknown change address + + + + Are you sure you want to send? + + + + added as transaction fee + + + + Payment request expired + + + + Invalid payment address %1 + + + + + SendCoinsEntry + + A&mount: + + + + Pay &To: + + + + The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Enter a label for this address to add it to your address book + + + + &Label: + + + + Choose previously used address + + + + This is a normal payment. + + + + Alt+A + + + + Paste address from clipboard + + + + Alt+P + + + + Remove this entry + + + + Message: + + + + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. + + + + + SignVerifyMessageDialog + + Signatures - Sign / Verify a Message + + + + &Sign Message + + + + You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. + + + + The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Choose previously used address + + + + Alt+A + + + + Paste address from clipboard + + + + Alt+P + + + + Enter the message you want to sign here + + + + Signature + + + + Copy the current signature to the system clipboard + + + + Sign the message to prove you own this Myriadcoin address + + + + Sign &Message + + + + Reset all sign message fields + + + + Clear &All + + + + &Verify Message + + + + Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. + + + + The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Verify the message to ensure it was signed with the specified Myriadcoin address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Click "Sign Message" to generate signature + + + + The entered address is invalid. + + + + Please check the address and try again. + + + + The entered address does not refer to a key. + + + + Wallet unlock was cancelled. + + + + Private key for the entered address is not available. + + + + Message signing failed. + + + + Message signed. + + + + The signature could not be decoded. + + + + Please check the signature and try again. + + + + The signature did not match the message digest. + + + + Message verification failed. + + + + Message verified. + + + + + SplashScreen + + Myriadcoin Core + + + + The Myriadcoin Core developers + + + + [testnet] + + + + + TrafficGraphWidget + + KB/s + + + + + TransactionDesc + + Open until %1 + + + + conflicted + + + + %1/offline + + + + %1/unconfirmed + + + + %1 confirmations + + + + Status + + + + , broadcast through %n node(s) + + + + Date + + + + Source + + + + Generated + + + + From + + + + To + + + + own address + + + + label + + + + Credit + + + + matures in %n more block(s) + + + + not accepted + + + + Debit + + + + Transaction fee + + + + Net amount + + + + Message + + + + Comment + + + + Transaction ID + + + + Merchant + + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + Debug information + + + + Transaction + + + + Inputs + + + + Amount + + + + true + + + + false + + + + , has not been successfully broadcast yet + + + + Open for %n more block(s) + + + + unknown + + + + + TransactionDescDialog + + Transaction details + + + + This pane shows a detailed description of the transaction + + + + + TransactionTableModel + + Date + + + + Type + + + + Address + + + + Amount + + + + Immature (%1 confirmations, will be available after %2) + + + + Open for %n more block(s) + + + + Open until %1 + + + + Confirmed (%1 confirmations) + + + + This block was not received by any other nodes and will probably not be accepted! + + + + Generated but not accepted + + + + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + + Received with + + + + Received from + + + + Sent to + + + + Payment to yourself + + + + Mined + + + + (n/a) + + + + Transaction status. Hover over this field to show number of confirmations. + + + + Date and time that the transaction was received. + + + + Type of transaction. + + + + Destination address of transaction. + + + + Amount removed from or added to balance. + + + + + TransactionView + + All + + + + Today + + + + This week + + + + This month + + + + Last month + + + + This year + + + + Range... + + + + Received with + + + + Sent to + + + + To yourself + + + + Mined + + + + Other + + + + Enter address or label to search + + + + Min amount + + + + Copy address + + + + Copy label + + + + Copy amount + + + + Copy transaction ID + + + + Edit label + + + + Show transaction details + + + + Export Transaction History + + + + Exporting Failed + + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + + + + The transaction history was successfully saved to %1. + + + + Comma separated file (*.csv) + + + + Confirmed + + + + Date + + + + Type + + + + Label + + + + Address + + + + Amount + + + + ID + + + + Range: + + + + to + + + + + WalletFrame + + No wallet has been loaded. + + + + + WalletModel + + Send Coins + + + + + WalletView + + &Export + + + + Export the data in the current tab to a file + + + + Backup Wallet + + + + Wallet Data (*.dat) + + + + Backup Failed + + + + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. + + + + Backup Successful + + + + + bitcoin-core + + Usage: + + + + List commands + + + + Get help for a command + + + + Options: + + + + Specify configuration file (default: myriadcoin.conf) + + + + Specify pid file (default: myriadcoind.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 8333 or testnet: 18333) + + + + Maintain at most <n> connections to peers (default: 125) + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + Specify your own public address + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) + + + + Accept command line and JSON-RPC commands + + + + Myriadcoin Core RPC client version + + + + Run in the background as a daemon and accept commands + + + + Use the test network + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=myriadcoinrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + Bind to given address and always listen on it. Use [host]:port notation for IPv6 + + + + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) + + + + Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + + + + This is a pre-release test build - use at your own risk - do not use for mining or merchant applications + + + + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. + + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + Myriadcoin Core Daemon + + + + Block creation options: + + + + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + + Connect only to the specified node(s) + + + + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + + Corrupted block database detected + + + + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + Do not load the wallet and disable wallet RPC calls + + + + Do you want to rebuild the block database now? + + + + Error initializing block database + + + + Error initializing wallet database environment %s! + + + + Error loading block database + + + + Error opening block database + + + + Error: Disk space is low! + + + + Error: Wallet locked, unable to create transaction! + + + + Error: system error: + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + Failed to read block info + + + + Failed to read block + + + + Failed to sync block index + + + + Failed to write block index + + + + Failed to write block info + + + + Failed to write block + + + + Failed to write file info + + + + Failed to write to coin database + + + + Failed to write transaction index + + + + Failed to write undo data + + + + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + + Find peers using DNS lookup (default: 1 unless -connect) + + + + Force safe mode (default: 0) + + + + Generate coins (default: 0) + + + + How many blocks to check at startup (default: 288, 0 = all) + + + + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' + + + + Not enough file descriptors available. + + + + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + + Rebuild block chain index from current blk000??.dat files + + + + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + + Set the number of threads to service RPC calls (default: 4) + + + + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + + Verifying blocks... + + + + Verifying wallet... + + + + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + + + + Imports blocks from external blk000??.dat file + + + + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + + + + Information + + + + Invalid amount for -minrelaytxfee=<amount>: '%s' + + + + Invalid amount for -mintxfee=<amount>: '%s' + + + + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + + Maintain a full transaction index (default: 0) + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + Only accept block chain matching built-in checkpoints (default: 1) + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + Print block on startup, if found in block index + + + + Print block tree on startup (default: 0) + + + + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + + + + SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + Send command to Myriadcoin Core + + + + Send trace/debug info to console instead of debug.log file + + + + Set minimum block size in bytes (default: 0) + + + + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + Signing transaction failed + + + + Specify connection timeout in milliseconds (default: 5000) + + + + Start Myriadcoin Core Daemon + + + + System error: + + + + Transaction amount too small + + + + Transaction amounts must be positive + + + + Transaction too large + + + + Use UPnP to map the listening port (default: 0) + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + Username for JSON-RPC connections + + + + Warning + + + + Warning: This version is obsolete, upgrade required! + + + + Zapping all transactions from wallet... + + + + on startup + + + + version + + + + wallet.dat corrupt, salvage failed + + + + Password for JSON-RPC connections + + + + Allow JSON-RPC connections from specified IP address + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + Upgrade wallet to latest format + + + + Set key pool size to <n> (default: 100) + + + + Rescan the block chain for missing wallet transactions + + + + Use OpenSSL (https) for JSON-RPC connections + + + + Server certificate file (default: server.cert) + + + + Server private key (default: server.pem) + + + + This help message + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + Loading addresses... + + + + Error loading wallet.dat: Wallet corrupted + + + + Error loading wallet.dat: Wallet requires newer version of Myriadcoin + + + + Wallet needed to be rewritten: restart Myriadcoin to complete + + + + Error loading wallet.dat + + + + Invalid -proxy address: '%s' + + + + Unknown network specified in -onlynet: '%s' + + + + Unknown -socks proxy version requested: %i + + + + Cannot resolve -bind address: '%s' + + + + Cannot resolve -externalip address: '%s' + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + Invalid amount + + + + Insufficient funds + + + + Loading block index... + + + + Add a node to connect to and attempt to keep the connection open + + + + Loading wallet... + + + + Cannot downgrade wallet + + + + Cannot write default address + + + + Rescanning... + + + + Done loading + + + + To use the %s option + + + + Error + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + \ No newline at end of file diff --git a/src/qt/locale/bitcoin_vi.ts b/src/qt/locale/bitcoin_vi.ts new file mode 100644 index 00000000..f4e06b74 --- /dev/null +++ b/src/qt/locale/bitcoin_vi.ts @@ -0,0 +1,3368 @@ + + + AboutDialog + + About Myriadcoin Core + + + + <b>Myriadcoin Core</b> version + + + + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. + + + + Copyright + + + + The Myriadcoin Core developers + + + + (%1-bit) + + + + + AddressBookPage + + Double-click to edit address or label + Click đúp chuột để chỉnh sửa địa chỉ hoặc nhãn dữ liệu + + + Create a new address + Tạo một địa chỉ mới + + + &New + + + + Copy the currently selected address to the system clipboard + Sao chép các địa chỉ đã được chọn vào bộ nhớ tạm thời của hệ thống + + + &Copy + + + + C&lose + + + + &Copy Address + + + + Delete the currently selected address from the list + + + + Export the data in the current tab to a file + + + + &Export + + + + &Delete + &Xóa + + + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + + Copy &Label + + + + &Edit + + + + Export Address List + + + + Comma separated file (*.csv) + Tập tin tách biệt bởi dấu phẩy (*.csv) + + + Exporting Failed + + + + There was an error trying to save the address list to %1. + + + + + AddressTableModel + + Label + Nhãn dữ liệu + + + Address + Địa chỉ + + + (no label) + (chưa có nhãn) + + + + AskPassphraseDialog + + Passphrase Dialog + + + + Enter passphrase + + + + New passphrase + + + + Repeat new passphrase + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + + + + Encrypt wallet + + + + This operation needs your wallet passphrase to unlock the wallet. + + + + Unlock wallet + + + + This operation needs your wallet passphrase to decrypt the wallet. + + + + Decrypt wallet + + + + Change passphrase + + + + Enter the old and new passphrase to the wallet. + + + + Confirm wallet encryption + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! + + + + Are you sure you wish to encrypt your wallet? + + + + 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. + + + + Warning: The Caps Lock key is on! + + + + Wallet encrypted + + + + Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. + + + + Wallet encryption failed + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + + + + The supplied passphrases do not match. + + + + Wallet unlock failed + + + + The passphrase entered for the wallet decryption was incorrect. + + + + Wallet decryption failed + + + + Wallet passphrase was successfully changed. + + + + + BitcoinGUI + + Sign &message... + + + + Synchronizing with network... + + + + &Overview + + + + Node + + + + Show general overview of wallet + + + + &Transactions + + + + Browse transaction history + + + + E&xit + + + + Quit application + + + + Show information about Myriadcoin + + + + About &Qt + + + + Show information about Qt + + + + &Options... + + + + &Encrypt Wallet... + + + + &Backup Wallet... + + + + &Change Passphrase... + + + + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + + Importing blocks from disk... + + + + Reindexing blocks on disk... + + + + Send coins to a Myriadcoin address + + + + Modify configuration options for Myriadcoin + + + + Backup wallet to another location + + + + Change the passphrase used for wallet encryption + + + + &Debug window + + + + Open debugging and diagnostic console + + + + &Verify message... + + + + Myriadcoin + + + + Wallet + + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your Myriadcoin addresses to prove you own them + + + + Verify messages to ensure they were signed with specified Myriadcoin addresses + + + + &File + + + + &Settings + + + + &Help + + + + Tabs toolbar + + + + [testnet] + + + + Myriadcoin Core + + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + + Myriadcoin client + + + + %n active connection(s) to Myriadcoin network + + + + No block source available... + + + + Processed %1 of %2 (estimated) blocks of transaction history. + + + + Processed %1 blocks of transaction history. + + + + %n hour(s) + + + + %n day(s) + + + + %n week(s) + + + + %1 and %2 + + + + %n year(s) + + + + %1 behind + + + + Last received block was generated %1 ago. + + + + Transactions after this will not yet be visible. + + + + Error + + + + Warning + + + + Information + + + + Up to date + + + + Catching up... + + + + Sent transaction + + + + Incoming transaction + + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + A fatal error occurred. Myriadcoin can no longer continue safely and will quit. + + + + + ClientModel + + Network Alert + + + + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + Số lượng + + + Address + Địa chỉ + + + Date + + + + Confirmations + + + + Confirmed + + + + Priority + + + + Copy address + + + + Copy label + + + + Copy amount + + + + Copy transaction ID + + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + + + + Dust + + + + yes + + + + no + + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + (chưa có nhãn) + + + change from %1 (%2) + + + + (change) + + + + + EditAddressDialog + + Edit Address + + + + &Label + + + + The label associated with this address list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + + + + &Address + + + + New receiving address + + + + New sending address + + + + Edit receiving address + + + + Edit sending address + + + + The entered address "%1" is already in the address book. + + + + The entered address "%1" is not a valid Myriadcoin address. + + + + Could not unlock wallet. + + + + New key generation failed. + + + + + FreespaceChecker + + A new data directory will be created. + + + + name + + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core + + + + version + + + + Usage: + + + + command-line options + + + + UI options + + + + Set language, for example "de_DE" (default: system locale) + + + + Start minimized + + + + Set SSL root certificates for payment request (default: -system-) + + + + Show splash screen on startup (default: 1) + + + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + + + + Error: Specified data directory "%1" can not be created. + + + + Error + + + + GB of free space available + + + + (of %1GB needed) + + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open + + + + + OptionsDialog + + Options + + + + &Main + + + + Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. + + + + Pay transaction &fee + + + + Automatically start Myriadcoin after logging in to the system. + + + + &Start Myriadcoin on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + + Reset all client options to default. + + + + &Reset Options + + + + &Network + + + + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. + + + + Map port using &UPnP + + + + Proxy &IP: + + + + &Port: + + + + Port of the proxy (e.g. 9050) + + + + SOCKS &Version: + + + + SOCKS version of the proxy (e.g. 5) + + + + &Window + + + + Show only a tray icon after minimizing the window. + + + + &Minimize to the tray instead of the taskbar + + + + Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. + + + + M&inimize on close + + + + &Display + + + + User Interface &language: + + + + The user interface language can be set here. This setting will take effect after restarting Myriadcoin. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show Myriadcoin addresses in the transaction list or not. + + + + &Display addresses in transaction list + + + + Whether to show coin control features or not. + + + + &OK + + + + &Cancel + + + + default + + + + none + + + + Confirm options reset + + + + Client restart required to activate changes. + + + + Client will be shutdown, do you want to proceed? + + + + This change would require a client restart. + + + + The supplied proxy address is invalid. + + + + + OverviewPage + + Form + + + + The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. + + + + Wallet + + + + Available: + + + + Your current spendable balance + + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + + + + Immature: + + + + Mined balance that has not yet matured + + + + Total: + + + + Your current total balance + + + + <b>Recent transactions</b> + + + + out of sync + + + + + PaymentServer + + URI handling + + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start myriadcoin: click-to-pay handler + + + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + + + + Network request error + + + + + QObject + + Myriadcoin + + + + Error: Specified data directory "%1" does not exist. + + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + + + + Error: Invalid combination of -regtest and -testnet. + + + + Myriadcoin Core didn't yet exit safely... + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + + QRImageWidget + + &Save Image... + + + + &Copy Image + + + + Save QR Code + + + + PNG Image (*.png) + + + + + RPCConsole + + Client name + + + + N/A + + + + Client version + + + + &Information + + + + Debug window + + + + General + + + + Using OpenSSL version + + + + Startup time + + + + Network + + + + Name + + + + Number of connections + + + + Block chain + + + + Current number of blocks + + + + Estimated total blocks + + + + Last block time + + + + &Open + + + + &Console + + + + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + + Build date + + + + Debug log file + + + + Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the Myriadcoin RPC console. + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + Type <b>help</b> for an overview of available commands. + + + + %1 B + + + + %1 KB + + + + %1 MB + + + + %1 GB + + + + %1 m + + + + %1 h + + + + %1 h %2 m + + + + + ReceiveCoinsDialog + + &Amount: + + + + &Label: + + + + &Message: + + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + + + + Clear + + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + + + + Remove the selected entries from the list + + + + Remove + + + + Copy label + + + + Copy message + + + + Copy amount + + + + + ReceiveRequestDialog + + QR Code + + + + Copy &URI + + + + Copy &Address + + + + &Save Image... + + + + Request payment to %1 + + + + Payment information + + + + URI + + + + Address + Địa chỉ + + + Amount + Số lượng + + + Label + Nhãn dữ liệu + + + Message + + + + Resulting URI too long, try to reduce the text for label / message. + + + + Error encoding URI into QR Code. + + + + + RecentRequestsTableModel + + Date + + + + Label + Nhãn dữ liệu + + + Message + + + + Amount + Số lượng + + + (no label) + (chưa có nhãn) + + + (no message) + + + + (no amount) + + + + + SendCoinsDialog + + Send Coins + + + + Coin Control Features + + + + Inputs... + + + + automatically selected + + + + Insufficient funds! + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + + Send to multiple recipients at once + + + + Add &Recipient + + + + Clear all fields of the form. + + + + Clear &All + + + + Balance: + + + + Confirm the send action + + + + S&end + + + + Confirm send coins + + + + %1 to %2 + + + + Copy quantity + + + + Copy amount + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + + + + or + + + + The recipient address is not valid, please recheck. + + + + The amount to pay must be larger than 0. + + + + The amount exceeds your balance. + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + Duplicate address found, can only send to each address once per send operation. + + + + Transaction creation failed! + + + + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + + + + (no label) + (chưa có nhãn) + + + Warning: Unknown change address + + + + Are you sure you want to send? + + + + added as transaction fee + + + + Payment request expired + + + + Invalid payment address %1 + + + + + SendCoinsEntry + + A&mount: + + + + Pay &To: + + + + The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Enter a label for this address to add it to your address book + + + + &Label: + + + + Choose previously used address + + + + This is a normal payment. + + + + Alt+A + + + + Paste address from clipboard + + + + Alt+P + + + + Remove this entry + + + + Message: + + + + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. + + + + + SignVerifyMessageDialog + + Signatures - Sign / Verify a Message + + + + &Sign Message + + + + You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. + + + + The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Choose previously used address + + + + Alt+A + + + + Paste address from clipboard + + + + Alt+P + + + + Enter the message you want to sign here + + + + Signature + + + + Copy the current signature to the system clipboard + + + + Sign the message to prove you own this Myriadcoin address + + + + Sign &Message + + + + Reset all sign message fields + + + + Clear &All + + + + &Verify Message + + + + Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. + + + + The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Verify the message to ensure it was signed with the specified Myriadcoin address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Click "Sign Message" to generate signature + + + + The entered address is invalid. + + + + Please check the address and try again. + + + + The entered address does not refer to a key. + + + + Wallet unlock was cancelled. + + + + Private key for the entered address is not available. + + + + Message signing failed. + + + + Message signed. + + + + The signature could not be decoded. + + + + Please check the signature and try again. + + + + The signature did not match the message digest. + + + + Message verification failed. + + + + Message verified. + + + + + SplashScreen + + Myriadcoin Core + + + + The Myriadcoin Core developers + + + + [testnet] + + + + + TrafficGraphWidget + + KB/s + + + + + TransactionDesc + + Open until %1 + + + + conflicted + + + + %1/offline + + + + %1/unconfirmed + + + + %1 confirmations + + + + Status + + + + , broadcast through %n node(s) + + + + Date + + + + Source + + + + Generated + + + + From + + + + To + + + + own address + + + + label + + + + Credit + + + + matures in %n more block(s) + + + + not accepted + + + + Debit + + + + Transaction fee + + + + Net amount + + + + Message + + + + Comment + + + + Transaction ID + + + + Merchant + + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + Debug information + + + + Transaction + + + + Inputs + + + + Amount + Số lượng + + + true + + + + false + + + + , has not been successfully broadcast yet + + + + Open for %n more block(s) + + + + unknown + + + + + TransactionDescDialog + + Transaction details + + + + This pane shows a detailed description of the transaction + + + + + TransactionTableModel + + Date + + + + Type + + + + Address + Địa chỉ + + + Amount + Số lượng + + + Immature (%1 confirmations, will be available after %2) + + + + Open for %n more block(s) + + + + Open until %1 + + + + Confirmed (%1 confirmations) + + + + This block was not received by any other nodes and will probably not be accepted! + + + + Generated but not accepted + + + + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + + Received with + + + + Received from + + + + Sent to + + + + Payment to yourself + + + + Mined + + + + (n/a) + + + + Transaction status. Hover over this field to show number of confirmations. + + + + Date and time that the transaction was received. + + + + Type of transaction. + + + + Destination address of transaction. + + + + Amount removed from or added to balance. + + + + + TransactionView + + All + + + + Today + + + + This week + + + + This month + + + + Last month + + + + This year + + + + Range... + + + + Received with + + + + Sent to + + + + To yourself + + + + Mined + + + + Other + + + + Enter address or label to search + + + + Min amount + + + + Copy address + + + + Copy label + + + + Copy amount + + + + Copy transaction ID + + + + Edit label + + + + Show transaction details + + + + Export Transaction History + + + + Exporting Failed + + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + + + + The transaction history was successfully saved to %1. + + + + Comma separated file (*.csv) + Tập tin tách biệt bởi dấu phẩy (*.csv) + + + Confirmed + + + + Date + + + + Type + + + + Label + Nhãn dữ liệu + + + Address + Địa chỉ + + + Amount + Số lượng + + + ID + + + + Range: + + + + to + + + + + WalletFrame + + No wallet has been loaded. + + + + + WalletModel + + Send Coins + + + + + WalletView + + &Export + + + + Export the data in the current tab to a file + + + + Backup Wallet + + + + Wallet Data (*.dat) + + + + Backup Failed + + + + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. + + + + Backup Successful + + + + + bitcoin-core + + Usage: + + + + List commands + + + + Get help for a command + + + + Options: + + + + Specify configuration file (default: myriadcoin.conf) + + + + Specify pid file (default: myriadcoind.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 8333 or testnet: 18333) + + + + Maintain at most <n> connections to peers (default: 125) + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + Specify your own public address + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) + + + + Accept command line and JSON-RPC commands + + + + Myriadcoin Core RPC client version + + + + Run in the background as a daemon and accept commands + + + + Use the test network + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=myriadcoinrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + Bind to given address and always listen on it. Use [host]:port notation for IPv6 + + + + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) + + + + Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + + + + This is a pre-release test build - use at your own risk - do not use for mining or merchant applications + + + + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. + + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + Myriadcoin Core Daemon + + + + Block creation options: + + + + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + + Connect only to the specified node(s) + + + + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + + Corrupted block database detected + + + + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + Do not load the wallet and disable wallet RPC calls + + + + Do you want to rebuild the block database now? + + + + Error initializing block database + + + + Error initializing wallet database environment %s! + + + + Error loading block database + + + + Error opening block database + + + + Error: Disk space is low! + + + + Error: Wallet locked, unable to create transaction! + + + + Error: system error: + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + Failed to read block info + + + + Failed to read block + + + + Failed to sync block index + + + + Failed to write block index + + + + Failed to write block info + + + + Failed to write block + + + + Failed to write file info + + + + Failed to write to coin database + + + + Failed to write transaction index + + + + Failed to write undo data + + + + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + + Find peers using DNS lookup (default: 1 unless -connect) + + + + Force safe mode (default: 0) + + + + Generate coins (default: 0) + + + + How many blocks to check at startup (default: 288, 0 = all) + + + + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' + + + + Not enough file descriptors available. + + + + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + + Rebuild block chain index from current blk000??.dat files + + + + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + + Set the number of threads to service RPC calls (default: 4) + + + + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + + Verifying blocks... + + + + Verifying wallet... + + + + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + + + + Imports blocks from external blk000??.dat file + + + + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + + + + Information + + + + Invalid amount for -minrelaytxfee=<amount>: '%s' + + + + Invalid amount for -mintxfee=<amount>: '%s' + + + + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + + Maintain a full transaction index (default: 0) + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + Only accept block chain matching built-in checkpoints (default: 1) + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + Print block on startup, if found in block index + + + + Print block tree on startup (default: 0) + + + + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + + + + SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + Send command to Myriadcoin Core + + + + Send trace/debug info to console instead of debug.log file + + + + Set minimum block size in bytes (default: 0) + + + + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + Signing transaction failed + + + + Specify connection timeout in milliseconds (default: 5000) + + + + Start Myriadcoin Core Daemon + + + + System error: + + + + Transaction amount too small + + + + Transaction amounts must be positive + + + + Transaction too large + + + + Use UPnP to map the listening port (default: 0) + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + Username for JSON-RPC connections + + + + Warning + + + + Warning: This version is obsolete, upgrade required! + + + + Zapping all transactions from wallet... + + + + on startup + + + + version + + + + wallet.dat corrupt, salvage failed + + + + Password for JSON-RPC connections + + + + Allow JSON-RPC connections from specified IP address + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + Upgrade wallet to latest format + + + + Set key pool size to <n> (default: 100) + + + + Rescan the block chain for missing wallet transactions + + + + Use OpenSSL (https) for JSON-RPC connections + + + + Server certificate file (default: server.cert) + + + + Server private key (default: server.pem) + + + + This help message + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + Loading addresses... + + + + Error loading wallet.dat: Wallet corrupted + + + + Error loading wallet.dat: Wallet requires newer version of Myriadcoin + + + + Wallet needed to be rewritten: restart Myriadcoin to complete + + + + Error loading wallet.dat + + + + Invalid -proxy address: '%s' + + + + Unknown network specified in -onlynet: '%s' + + + + Unknown -socks proxy version requested: %i + + + + Cannot resolve -bind address: '%s' + + + + Cannot resolve -externalip address: '%s' + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + Invalid amount + + + + Insufficient funds + + + + Loading block index... + + + + Add a node to connect to and attempt to keep the connection open + + + + Loading wallet... + + + + Cannot downgrade wallet + + + + Cannot write default address + + + + Rescanning... + + + + Done loading + + + + To use the %s option + + + + Error + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + \ No newline at end of file diff --git a/src/qt/locale/bitcoin_vi_VN.ts b/src/qt/locale/bitcoin_vi_VN.ts new file mode 100644 index 00000000..0bbeda36 --- /dev/null +++ b/src/qt/locale/bitcoin_vi_VN.ts @@ -0,0 +1,3368 @@ + + + AboutDialog + + About Myriadcoin Core + + + + <b>Myriadcoin Core</b> version + + + + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. + + + + Copyright + + + + The Myriadcoin Core developers + + + + (%1-bit) + + + + + AddressBookPage + + Double-click to edit address or label + + + + Create a new address + Tạo một địa chỉ mới + + + &New + + + + Copy the currently selected address to the system clipboard + + + + &Copy + + + + C&lose + + + + &Copy Address + + + + Delete the currently selected address from the list + + + + Export the data in the current tab to a file + + + + &Export + + + + &Delete + + + + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + + Copy &Label + + + + &Edit + + + + Export Address List + + + + Comma separated file (*.csv) + + + + Exporting Failed + + + + There was an error trying to save the address list to %1. + + + + + AddressTableModel + + Label + + + + Address + + + + (no label) + + + + + AskPassphraseDialog + + Passphrase Dialog + + + + Enter passphrase + + + + New passphrase + + + + Repeat new passphrase + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + + + + Encrypt wallet + + + + This operation needs your wallet passphrase to unlock the wallet. + + + + Unlock wallet + + + + This operation needs your wallet passphrase to decrypt the wallet. + + + + Decrypt wallet + + + + Change passphrase + + + + Enter the old and new passphrase to the wallet. + + + + Confirm wallet encryption + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! + + + + Are you sure you wish to encrypt your wallet? + + + + 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. + + + + Warning: The Caps Lock key is on! + + + + Wallet encrypted + + + + Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. + + + + Wallet encryption failed + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + + + + The supplied passphrases do not match. + + + + Wallet unlock failed + + + + The passphrase entered for the wallet decryption was incorrect. + + + + Wallet decryption failed + + + + Wallet passphrase was successfully changed. + + + + + BitcoinGUI + + Sign &message... + + + + Synchronizing with network... + + + + &Overview + + + + Node + + + + Show general overview of wallet + + + + &Transactions + + + + Browse transaction history + + + + E&xit + + + + Quit application + + + + Show information about Myriadcoin + + + + About &Qt + + + + Show information about Qt + + + + &Options... + + + + &Encrypt Wallet... + + + + &Backup Wallet... + + + + &Change Passphrase... + + + + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + + Importing blocks from disk... + + + + Reindexing blocks on disk... + + + + Send coins to a Myriadcoin address + + + + Modify configuration options for Myriadcoin + + + + Backup wallet to another location + + + + Change the passphrase used for wallet encryption + + + + &Debug window + + + + Open debugging and diagnostic console + + + + &Verify message... + + + + Myriadcoin + + + + Wallet + + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your Myriadcoin addresses to prove you own them + + + + Verify messages to ensure they were signed with specified Myriadcoin addresses + + + + &File + + + + &Settings + + + + &Help + + + + Tabs toolbar + + + + [testnet] + + + + Myriadcoin Core + + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + + Myriadcoin client + + + + %n active connection(s) to Myriadcoin network + + + + No block source available... + + + + Processed %1 of %2 (estimated) blocks of transaction history. + + + + Processed %1 blocks of transaction history. + + + + %n hour(s) + + + + %n day(s) + + + + %n week(s) + + + + %1 and %2 + + + + %n year(s) + + + + %1 behind + + + + Last received block was generated %1 ago. + + + + Transactions after this will not yet be visible. + + + + Error + + + + Warning + + + + Information + + + + Up to date + + + + Catching up... + + + + Sent transaction + + + + Incoming transaction + + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + A fatal error occurred. Myriadcoin can no longer continue safely and will quit. + + + + + ClientModel + + Network Alert + + + + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + + + + Address + + + + Date + + + + Confirmations + + + + Confirmed + + + + Priority + + + + Copy address + + + + Copy label + + + + Copy amount + + + + Copy transaction ID + + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + + + + Dust + + + + yes + + + + no + + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + + + + change from %1 (%2) + + + + (change) + + + + + EditAddressDialog + + Edit Address + + + + &Label + + + + The label associated with this address list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + + + + &Address + + + + New receiving address + + + + New sending address + + + + Edit receiving address + + + + Edit sending address + + + + The entered address "%1" is already in the address book. + + + + The entered address "%1" is not a valid Myriadcoin address. + + + + Could not unlock wallet. + + + + New key generation failed. + + + + + FreespaceChecker + + A new data directory will be created. + + + + name + + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core + + + + version + + + + Usage: + + + + command-line options + + + + UI options + + + + Set language, for example "de_DE" (default: system locale) + + + + Start minimized + + + + Set SSL root certificates for payment request (default: -system-) + + + + Show splash screen on startup (default: 1) + + + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + + + + Error: Specified data directory "%1" can not be created. + + + + Error + + + + GB of free space available + + + + (of %1GB needed) + + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open + + + + + OptionsDialog + + Options + + + + &Main + + + + Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. + + + + Pay transaction &fee + + + + Automatically start Myriadcoin after logging in to the system. + + + + &Start Myriadcoin on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + + Reset all client options to default. + + + + &Reset Options + + + + &Network + + + + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. + + + + Map port using &UPnP + + + + Proxy &IP: + + + + &Port: + + + + Port of the proxy (e.g. 9050) + + + + SOCKS &Version: + + + + SOCKS version of the proxy (e.g. 5) + + + + &Window + + + + Show only a tray icon after minimizing the window. + + + + &Minimize to the tray instead of the taskbar + + + + Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. + + + + M&inimize on close + + + + &Display + + + + User Interface &language: + + + + The user interface language can be set here. This setting will take effect after restarting Myriadcoin. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show Myriadcoin addresses in the transaction list or not. + + + + &Display addresses in transaction list + + + + Whether to show coin control features or not. + + + + &OK + + + + &Cancel + + + + default + + + + none + + + + Confirm options reset + + + + Client restart required to activate changes. + + + + Client will be shutdown, do you want to proceed? + + + + This change would require a client restart. + + + + The supplied proxy address is invalid. + + + + + OverviewPage + + Form + + + + The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. + + + + Wallet + + + + Available: + + + + Your current spendable balance + + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + + + + Immature: + + + + Mined balance that has not yet matured + + + + Total: + + + + Your current total balance + + + + <b>Recent transactions</b> + + + + out of sync + + + + + PaymentServer + + URI handling + + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start myriadcoin: click-to-pay handler + + + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + + + + Network request error + + + + + QObject + + Myriadcoin + + + + Error: Specified data directory "%1" does not exist. + + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + + + + Error: Invalid combination of -regtest and -testnet. + + + + Myriadcoin Core didn't yet exit safely... + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + + QRImageWidget + + &Save Image... + + + + &Copy Image + + + + Save QR Code + + + + PNG Image (*.png) + + + + + RPCConsole + + Client name + + + + N/A + + + + Client version + + + + &Information + + + + Debug window + + + + General + + + + Using OpenSSL version + + + + Startup time + + + + Network + + + + Name + + + + Number of connections + + + + Block chain + + + + Current number of blocks + + + + Estimated total blocks + + + + Last block time + + + + &Open + + + + &Console + + + + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + + Build date + + + + Debug log file + + + + Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the Myriadcoin RPC console. + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + Type <b>help</b> for an overview of available commands. + + + + %1 B + + + + %1 KB + + + + %1 MB + + + + %1 GB + + + + %1 m + + + + %1 h + + + + %1 h %2 m + + + + + ReceiveCoinsDialog + + &Amount: + + + + &Label: + + + + &Message: + + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + + + + Clear + + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + + + + Remove the selected entries from the list + + + + Remove + + + + Copy label + + + + Copy message + + + + Copy amount + + + + + ReceiveRequestDialog + + QR Code + + + + Copy &URI + + + + Copy &Address + + + + &Save Image... + + + + Request payment to %1 + + + + Payment information + + + + URI + + + + Address + + + + Amount + + + + Label + + + + Message + + + + Resulting URI too long, try to reduce the text for label / message. + + + + Error encoding URI into QR Code. + + + + + RecentRequestsTableModel + + Date + + + + Label + + + + Message + + + + Amount + + + + (no label) + + + + (no message) + + + + (no amount) + + + + + SendCoinsDialog + + Send Coins + + + + Coin Control Features + + + + Inputs... + + + + automatically selected + + + + Insufficient funds! + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + + Send to multiple recipients at once + + + + Add &Recipient + + + + Clear all fields of the form. + + + + Clear &All + + + + Balance: + + + + Confirm the send action + + + + S&end + + + + Confirm send coins + + + + %1 to %2 + + + + Copy quantity + + + + Copy amount + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + + + + or + + + + The recipient address is not valid, please recheck. + + + + The amount to pay must be larger than 0. + + + + The amount exceeds your balance. + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + Duplicate address found, can only send to each address once per send operation. + + + + Transaction creation failed! + + + + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + + + + (no label) + + + + Warning: Unknown change address + + + + Are you sure you want to send? + + + + added as transaction fee + + + + Payment request expired + + + + Invalid payment address %1 + + + + + SendCoinsEntry + + A&mount: + + + + Pay &To: + + + + The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Enter a label for this address to add it to your address book + + + + &Label: + + + + Choose previously used address + + + + This is a normal payment. + + + + Alt+A + + + + Paste address from clipboard + + + + Alt+P + + + + Remove this entry + + + + Message: + + + + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. + + + + + SignVerifyMessageDialog + + Signatures - Sign / Verify a Message + + + + &Sign Message + + + + You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. + + + + The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Choose previously used address + + + + Alt+A + + + + Paste address from clipboard + + + + Alt+P + + + + Enter the message you want to sign here + + + + Signature + + + + Copy the current signature to the system clipboard + + + + Sign the message to prove you own this Myriadcoin address + + + + Sign &Message + + + + Reset all sign message fields + + + + Clear &All + + + + &Verify Message + + + + Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. + + + + The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Verify the message to ensure it was signed with the specified Myriadcoin address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Click "Sign Message" to generate signature + + + + The entered address is invalid. + + + + Please check the address and try again. + + + + The entered address does not refer to a key. + + + + Wallet unlock was cancelled. + + + + Private key for the entered address is not available. + + + + Message signing failed. + + + + Message signed. + + + + The signature could not be decoded. + + + + Please check the signature and try again. + + + + The signature did not match the message digest. + + + + Message verification failed. + + + + Message verified. + + + + + SplashScreen + + Myriadcoin Core + + + + The Myriadcoin Core developers + + + + [testnet] + + + + + TrafficGraphWidget + + KB/s + + + + + TransactionDesc + + Open until %1 + + + + conflicted + + + + %1/offline + + + + %1/unconfirmed + + + + %1 confirmations + + + + Status + + + + , broadcast through %n node(s) + + + + Date + + + + Source + + + + Generated + + + + From + + + + To + + + + own address + + + + label + + + + Credit + + + + matures in %n more block(s) + + + + not accepted + + + + Debit + + + + Transaction fee + + + + Net amount + + + + Message + + + + Comment + + + + Transaction ID + + + + Merchant + + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + Debug information + + + + Transaction + + + + Inputs + + + + Amount + + + + true + + + + false + + + + , has not been successfully broadcast yet + + + + Open for %n more block(s) + + + + unknown + + + + + TransactionDescDialog + + Transaction details + + + + This pane shows a detailed description of the transaction + + + + + TransactionTableModel + + Date + + + + Type + + + + Address + + + + Amount + + + + Immature (%1 confirmations, will be available after %2) + + + + Open for %n more block(s) + + + + Open until %1 + + + + Confirmed (%1 confirmations) + + + + This block was not received by any other nodes and will probably not be accepted! + + + + Generated but not accepted + + + + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + + Received with + + + + Received from + + + + Sent to + + + + Payment to yourself + + + + Mined + + + + (n/a) + + + + Transaction status. Hover over this field to show number of confirmations. + + + + Date and time that the transaction was received. + + + + Type of transaction. + + + + Destination address of transaction. + + + + Amount removed from or added to balance. + + + + + TransactionView + + All + + + + Today + + + + This week + + + + This month + + + + Last month + + + + This year + + + + Range... + + + + Received with + + + + Sent to + + + + To yourself + + + + Mined + + + + Other + + + + Enter address or label to search + + + + Min amount + + + + Copy address + + + + Copy label + + + + Copy amount + + + + Copy transaction ID + + + + Edit label + + + + Show transaction details + + + + Export Transaction History + + + + Exporting Failed + + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + + + + The transaction history was successfully saved to %1. + + + + Comma separated file (*.csv) + + + + Confirmed + + + + Date + + + + Type + + + + Label + + + + Address + + + + Amount + + + + ID + + + + Range: + + + + to + + + + + WalletFrame + + No wallet has been loaded. + + + + + WalletModel + + Send Coins + + + + + WalletView + + &Export + + + + Export the data in the current tab to a file + + + + Backup Wallet + + + + Wallet Data (*.dat) + + + + Backup Failed + + + + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. + + + + Backup Successful + + + + + bitcoin-core + + Usage: + + + + List commands + + + + Get help for a command + + + + Options: + + + + Specify configuration file (default: myriadcoin.conf) + + + + Specify pid file (default: myriadcoind.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 8333 or testnet: 18333) + + + + Maintain at most <n> connections to peers (default: 125) + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + Specify your own public address + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) + + + + Accept command line and JSON-RPC commands + + + + Myriadcoin Core RPC client version + + + + Run in the background as a daemon and accept commands + + + + Use the test network + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=myriadcoinrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + Bind to given address and always listen on it. Use [host]:port notation for IPv6 + + + + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) + + + + Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + + + + This is a pre-release test build - use at your own risk - do not use for mining or merchant applications + + + + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. + + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + Myriadcoin Core Daemon + + + + Block creation options: + + + + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + + Connect only to the specified node(s) + + + + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + + Corrupted block database detected + + + + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + Do not load the wallet and disable wallet RPC calls + + + + Do you want to rebuild the block database now? + + + + Error initializing block database + + + + Error initializing wallet database environment %s! + + + + Error loading block database + + + + Error opening block database + + + + Error: Disk space is low! + + + + Error: Wallet locked, unable to create transaction! + + + + Error: system error: + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + Failed to read block info + + + + Failed to read block + + + + Failed to sync block index + + + + Failed to write block index + + + + Failed to write block info + + + + Failed to write block + + + + Failed to write file info + + + + Failed to write to coin database + + + + Failed to write transaction index + + + + Failed to write undo data + + + + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + + Find peers using DNS lookup (default: 1 unless -connect) + + + + Force safe mode (default: 0) + + + + Generate coins (default: 0) + + + + How many blocks to check at startup (default: 288, 0 = all) + + + + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' + + + + Not enough file descriptors available. + + + + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + + Rebuild block chain index from current blk000??.dat files + + + + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + + Set the number of threads to service RPC calls (default: 4) + + + + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + + Verifying blocks... + + + + Verifying wallet... + + + + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + + + + Imports blocks from external blk000??.dat file + + + + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + + + + Information + + + + Invalid amount for -minrelaytxfee=<amount>: '%s' + + + + Invalid amount for -mintxfee=<amount>: '%s' + + + + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + + Maintain a full transaction index (default: 0) + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + Only accept block chain matching built-in checkpoints (default: 1) + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + Print block on startup, if found in block index + + + + Print block tree on startup (default: 0) + + + + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + + + + SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + Send command to Myriadcoin Core + + + + Send trace/debug info to console instead of debug.log file + + + + Set minimum block size in bytes (default: 0) + + + + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + Signing transaction failed + + + + Specify connection timeout in milliseconds (default: 5000) + + + + Start Myriadcoin Core Daemon + + + + System error: + + + + Transaction amount too small + + + + Transaction amounts must be positive + + + + Transaction too large + + + + Use UPnP to map the listening port (default: 0) + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + Username for JSON-RPC connections + + + + Warning + + + + Warning: This version is obsolete, upgrade required! + + + + Zapping all transactions from wallet... + + + + on startup + + + + version + + + + wallet.dat corrupt, salvage failed + + + + Password for JSON-RPC connections + + + + Allow JSON-RPC connections from specified IP address + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + Upgrade wallet to latest format + + + + Set key pool size to <n> (default: 100) + + + + Rescan the block chain for missing wallet transactions + + + + Use OpenSSL (https) for JSON-RPC connections + + + + Server certificate file (default: server.cert) + + + + Server private key (default: server.pem) + + + + This help message + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + Loading addresses... + + + + Error loading wallet.dat: Wallet corrupted + + + + Error loading wallet.dat: Wallet requires newer version of Myriadcoin + + + + Wallet needed to be rewritten: restart Myriadcoin to complete + + + + Error loading wallet.dat + + + + Invalid -proxy address: '%s' + + + + Unknown network specified in -onlynet: '%s' + + + + Unknown -socks proxy version requested: %i + + + + Cannot resolve -bind address: '%s' + + + + Cannot resolve -externalip address: '%s' + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + Invalid amount + + + + Insufficient funds + + + + Loading block index... + + + + Add a node to connect to and attempt to keep the connection open + + + + Loading wallet... + + + + Cannot downgrade wallet + + + + Cannot write default address + + + + Rescanning... + + + + Done loading + + + + To use the %s option + + + + Error + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + \ No newline at end of file diff --git a/src/qt/locale/bitcoin_zh_CN.ts b/src/qt/locale/bitcoin_zh_CN.ts index 6cff5884..a507fc5b 100644 --- a/src/qt/locale/bitcoin_zh_CN.ts +++ b/src/qt/locale/bitcoin_zh_CN.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - 关于多彩币 + About Myriadcoin Core + 关于比特币核心 - - <b>Myriadcoin</b> version - <b>多彩币</b>版本 + <b>Myriadcoin Core</b> version + <b>比特币核心</b> 版本 - This is experimental software. @@ -28,153 +24,128 @@ Distributed under the MIT/X11 software license, see the accompanying file COPYIN This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. - Copyright 版权 - - The Myriadcoin developers - Myriadcoin-qt 客户端开发团队 + The Myriadcoin Core developers + Myriadcoin Core 的开发者 + + + (%1-bit) + (%1 位) AddressBookPage - - Address Book - 通讯录 - - - Double-click to edit address or label - 双击以编辑地址或标签 + 双击编辑地址或标签 - Create a new address 创建新地址 - + &New + 新建(&N) + + Copy the currently selected address to the system clipboard - 复制当前选中地址到系统剪贴板 + 复制当前选中的地址到系统剪贴板 - - &New Address - &新建地址 + &Copy + 复制(&C) - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - 这是您用来收款的多彩币地址。为了标记不同的资金来源,建议为每个付款人保留不同的收款地址。 + C&lose + 关闭(&C) - &Copy Address - &复制地址 + 复制地址(&C) - - Show &QR Code - 显示二维码 - - - - Sign a message to prove you own a Myriadcoin address - 签名消息,证明这个地址属于您。 - - - - Sign &Message - 对消息签名 - - - Delete the currently selected address from the list 从列表中删除选中的地址 - Export the data in the current tab to a file 导出当前数据到文件 - &Export - &导出 + 导出(&E) - - Verify a message to ensure it was signed with a specified Myriadcoin address - 验证消息,确保消息是由指定的多彩币地址签名过的。 - - - - &Verify Message - &验证消息 - - - &Delete - &删除 + 删除(&D) + + + Choose the address to send coins to + 选择发款地址 + + + Choose the address to receive coins with + 选择收款地址 + + + C&hoose + 选择(&H) + + + Sending addresses + 正在发送地址 + + + Receiving addresses + 正在接收地址 - These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - 这是您用来付款的多彩币地址。在付款前,请总是核实付款金额和收款地址。 + 这是您用来付款的比特币地址。在付款前,请总是核实付款金额和收款地址。 + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + 这些都是您的比特币地址,可用于收款。建议对每笔交易都使用一个新的地址。 - Copy &Label - 复制 &标签 + 复制标签(&L) - &Edit - &编辑 + 编辑(&E) - - Send &Coins - 付款 + Export Address List + 导出地址列表 - - Export Address Book Data - 导出通讯录数据 - - - Comma separated file (*.csv) 逗号分隔文件 (*.csv) - - Error exporting - 导出错误 + Exporting Failed + 导出失败 - - Could not write to file %1. - 无法写入文件 %1。 + There was an error trying to save the address list to %1. + 地址列表保存至 %1 时发生错误。 AddressTableModel - Label 标签 - Address 地址 - (no label) (没有标签) @@ -182,140 +153,106 @@ This product includes software developed by the OpenSSL Project for use in the O AskPassphraseDialog - Passphrase Dialog 密码对话框 - Enter passphrase 输入密码 - New passphrase 新密码 - Repeat new passphrase 重复新密码 - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. 输入钱包的新密码。<br/>使用的密码请至少包含<b>10个以上随机字符</>,或者是<b>8个以上的单词</b>。 - Encrypt wallet 加密钱包 - This operation needs your wallet passphrase to unlock the wallet. - 该操作需要您首先使用密码解锁钱包。 + 此操作需要您首先使用密码解锁该钱包。 - Unlock wallet 解锁钱包 - This operation needs your wallet passphrase to decrypt the wallet. 该操作需要您首先使用密码解密钱包。 - Decrypt wallet 解密钱包 - Change passphrase - 修改密码 + 更改密码 - Enter the old and new passphrase to the wallet. - 请输入钱包的旧密码与新密码。 + 请输入该钱包的旧密码与新密码。 - Confirm wallet encryption 确认加密钱包 - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! - 警告:如果您加密了您的钱包,但是忘记了密码,你将会<b>丢失所有的多彩币</b>! + 警告:如果您加密了您的钱包,但是忘记了密码,你将会<b>丢失所有的比特币</b>! - Are you sure you wish to encrypt your wallet? 您确定需要为钱包加密吗? - 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. 重要提示:您以前备份的钱包文件应该替换成最新生成的加密钱包文件(重新备份)。从安全性上考虑,您以前备份的未加密的钱包文件,在您使用新的加密钱包后将无效,请重新备份。 - - Warning: The Caps Lock key is on! 警告:大写锁定键处于打开状态! - - Wallet encrypted 钱包已加密 - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. - 将关闭软件以完成加密过程。 请您谨记:钱包加密并不是万能的,电脑中毒,您的多彩币还是有可能丢失。 + 比特币客户端将关闭软件以完成加密过程。请您谨记:钱包加密并不是万能的,电脑中毒等原因仍可能导致您的比特币意外丢失。 - - - - Wallet encryption failed 钱包加密失败 - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - 由于一个本地错误,加密钱包操作已经失败。您的钱包没有被加密。 + 由于一个本地错误,加密钱包的操作已经失败。您的钱包没能被加密。 - - The supplied passphrases do not match. 密码不匹配。 - Wallet unlock failed 钱包解锁失败 - - - The passphrase entered for the wallet decryption was incorrect. 用于解密钱包的密码不正确。 - Wallet decryption failed 钱包解密失败。 - Wallet passphrase was successfully changed. 修改钱包密码成功。 @@ -323,319 +260,286 @@ This product includes software developed by the OpenSSL Project for use in the O BitcoinGUI - Sign &message... - 对&消息签名... + 消息签名(&M)... - Synchronizing with network... 正在与网络同步... - &Overview - &概况 + 概况(&O) + + + Node + 节点 - Show general overview of wallet 显示钱包概况 - &Transactions - &交易记录 + 交易记录(&T) - Browse transaction history 查看交易历史 - - Edit the list of stored addresses and labels - 修改存储的地址和标签列表 - - - - Show the list of addresses for receiving payments - 显示接收支付的地址列表 - - - E&xit - 退出 + 退出(&X) - Quit application 退出程序 - Show information about Myriadcoin - 显示多彩币的相关信息 + 显示比特币的相关信息 - About &Qt 关于 &Qt - Show information about Qt - 显示Qt相关信息 + 显示 Qt 相关信息 - &Options... - &选项... + 选项(&O)... - &Encrypt Wallet... - &加密钱包... + 加密钱包(&E)... - &Backup Wallet... - &备份钱包... + 备份钱包(&B)... - &Change Passphrase... - &修改密码... + 更改密码(&C)... + + + &Sending addresses... + &付款地址 + + + &Receiving addresses... + &收款地址 + + + Open &URI... + 打开 &URI... - Importing blocks from disk... 正在从磁盘导入数据块... - Reindexing blocks on disk... 正在为数据块建立索引... - Send coins to a Myriadcoin address - 向一个多彩币地址发送多彩币 + 向一个比特币地址发送比特币 - Modify configuration options for Myriadcoin 设置选项 - Backup wallet to another location - 备份钱包到其它文件夹 + 备份钱包到其他文件夹 - Change the passphrase used for wallet encryption - 修改钱包加密口令 + 更改钱包加密口令 - &Debug window - &调试窗口 + 调试窗口(&D) - Open debugging and diagnostic console - 在诊断控制台调试 + 打开调试和诊断控制台 - &Verify message... - &验证消息... + 验证消息(&V)... - - Myriadcoin - 多彩币 + 比特币 - Wallet 钱包 - &Send - &发送 + 发送(&S) - &Receive - &接收 + 接收(&R) - - &Addresses - &地址 - - - - &About Myriadcoin - &关于多彩币 - - - &Show / Hide - &显示 / 隐藏 + 显示 / 隐藏(&S) - Show or hide the main Window 显示或隐藏主窗口 - Encrypt the private keys that belong to your wallet 对钱包中的私钥加密 - Sign messages with your Myriadcoin addresses to prove you own them - 用多彩币地址关联的私钥为消息签名,以证明您拥有这个多彩币地址 + 用比特币地址关联的私钥为消息签名,以证明您拥有这个比特币地址 - Verify messages to ensure they were signed with specified Myriadcoin addresses - 校验消息,确保该消息是由指定的多彩币地址所有者签名的 + 校验消息,确保该消息是由指定的比特币地址所有者签名的 - &File - &文件 + 文件(&F) - &Settings - &设置 + 设置(&S) - &Help - &帮助 + 帮助(&H) - Tabs toolbar 分页工具栏 - - [testnet] - [testnet] + [测试网络] + + + Myriadcoin Core + 比特币核心 + + + Request payments (generates QR codes and myriadcoin: URIs) + 请求支付(生成二维码和 myriadcoin: URI) + + + &About Myriadcoin Core + 关于比特币核心(&A) + + + Show the list of used sending addresses and labels + 显示用过的发送地址和标签的列表 + + + Show the list of used receiving addresses and labels + 显示用过的接收地址和标签的列表 + + + Open a myriadcoin: URI or payment request + 打开一个比特币:URI 或支付请求 + + + &Command-line options + &命令行 选项 + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + 显示比特币核心 程序帮助信息,获取可用的命令行选项 - Myriadcoin client - 多彩币客户端 + 比特币客户端 - %n active connection(s) to Myriadcoin network - 到多彩币网络的连接共有%n条 + %n条到比特币网络的活动连接 - No block source available... - No block source available... + 沒有可用的区块来源... - Processed %1 of %2 (estimated) blocks of transaction history. %1 / %2 个交易历史的区块已下载 - Processed %1 blocks of transaction history. 已处理 %1 个交易历史数据块。 - %n hour(s) %n 小时前 - %n day(s) %n 天前 - %n week(s) %n 周前 - + %1 and %2 + %1 和 %2 + + + %n year(s) + %n 年 + + %1 behind 落后 %1 - Last received block was generated %1 ago. 最新收到的区块产生于 %1。 - Transactions after this will not yet be visible. 在此之后的交易尚未可见 - Error 错误 - Warning 警告 - Information 信息 - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - 该交易的字节数超标。您可以选择支付%1的交易费给处理您的交易的网络节点,有助于多彩币网络的运行。您愿意支付这笔交易费用吗? - - - Up to date - 最新状态 + 已是最新 - Catching up... 更新中... - - Confirm transaction fee - 确认交易费 - - - Sent transaction - 已发送交易 + 发送交易 - Incoming transaction 流入交易 - Date: %1 Amount: %2 Type: %3 @@ -648,29 +552,14 @@ Address: %4 - - - URI handling - URI 处理 - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - URI无法解析!原因可能是多彩币地址不正确,或者URI参数错误。 - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> 钱包已被<b>加密</b>,当前为<b>解锁</b>状态 - Wallet is <b>encrypted</b> and currently <b>locked</b> 钱包已被<b>加密</b>,当前为<b>锁定</b>状态 - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. 发生严重错误。 @@ -678,330 +567,648 @@ Address: %4 ClientModel - Network Alert 网络警报 + + CoinControlDialog + + Coin Control Address Selection + 选择交易源地址 + + + Quantity: + 总量: + + + Bytes: + 字节: + + + Amount: + 金额: + + + Priority: + 优先级: + + + Fee: + 费用: + + + Low Output: + 低输出 + + + After Fee: + 加上交易费用后: + + + Change: + 变更 : + + + (un)select all + (不)全选 + + + Tree mode + 树状模式 + + + List mode + 列表模式 + + + Amount + 金额 + + + Address + 地址 + + + Date + 日期 + + + Confirmations + 确认 + + + Confirmed + 已确认 + + + Priority + 优先级 + + + Copy address + 复制地址 + + + Copy label + 复制标签 + + + Copy amount + 复制金额 + + + Copy transaction ID + 复制交易编号 + + + Lock unspent + 锁定未花费 + + + Unlock unspent + 解锁未花费 + + + Copy quantity + 复制金额 + + + Copy fee + 复制交易费 + + + Copy after fee + 复制含交易费的金额 + + + Copy bytes + 复制字节 + + + Copy priority + 复制优先级 + + + Copy low output + 复制低输出 + + + Copy change + 复制零钱 + + + highest + 最高 + + + higher + 更高 + + + high + 高 + + + medium-high + 中高 + + + medium + 中等 + + + low-medium + 中低 + + + low + 低 + + + lower + 更低 + + + lowest + 最低 + + + (%1 locked) + (%1 锁定) + + + none + 无 + + + Dust + 尘埃交易 + + + yes + 是 + + + no + 否 + + + This label turns red, if the transaction size is greater than 1000 bytes. + 如果这笔交易大于1000字节,标签会变成红色。 + + + This means a fee of at least %1 per kB is required. + 这意味着将对交易收取 %1/千字节 的交易费。 + + + Can vary +/- 1 byte per input. + 每笔输入可能会有 正负1字节的偏差。 + + + Transactions with higher priority are more likely to get included into a block. + 交易的优先级越高,被矿工收入数据块的速度也越快。 + + + This label turns red, if the priority is smaller than "medium". + 如果优先级小于"中位数" ,标签将变成红色。 + + + This label turns red, if any recipient receives an amount smaller than %1. + 如果收款地址收到小于%1的比特币,标签将变成红色。 + + + This means a fee of at least %1 is required. + 这意味着至少需要 %1的交易费。 + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + 小于最小转发交易费的0.546倍的 转账金额将被视为 尘埃交易。 + + + This label turns red, if the change is smaller than %1. + 如果零钱小于 %1,标签将变成红色。 + + + (no label) + (没有标签) + + + change from %1 (%2) + 来自%1的零钱 (%2) + + + (change) + (零钱) + + EditAddressDialog - Edit Address 编辑地址 - &Label - &标签 + 标签(&L) - - The label associated with this address book entry - 与此地址条目关联的标签 + The label associated with this address list entry + 与此地址相关的标签项 + + + The address associated with this address list entry. This can only be modified for sending addresses. + 该地址已与地址列表中的条目关联,只能被发送地址修改。 - &Address - &地址 + 地址(&A) - - The address associated with this address book entry. This can only be modified for sending addresses. - 该地址与地址簿中的条目已关联,无法作为发送地址编辑。 - - - New receiving address - 新接收地址 + 新建接收地址 - New sending address - 新发送地址 + 新建发送地址 - Edit receiving address 编辑接收地址 - Edit sending address 编辑发送地址 - The entered address "%1" is already in the address book. - 输入的地址 "%1" 已经存在于地址簿。 + 输入的地址“%1”已经存在于地址簿中。 - The entered address "%1" is not a valid Myriadcoin address. - 您输入的 "%1" 不是合法的多彩币地址. + 您输入的“%1”不是有效的比特币地址。 - Could not unlock wallet. 无法解锁钱包 - New key generation failed. - 密钥创建失败. + 新的密钥生成失败。 - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt - Myriadcoin-Qt + A new data directory will be created. + 一个新的数据目录将被创建。 + + + name + 名称 + + + Directory already exists. Add %1 if you intend to create a new directory here. + 目录已存在。如果您打算在这里创建一个新目录,添加 %1。 + + + Path already exists, and is not a directory. + 路径已存在,并且不是一个目录。 + + + Cannot create data directory here. + 无法在此创建数据目录。 + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + 比特币核心程序 - 命令行选项 + + + Myriadcoin Core + 比特币核心 - version 版本 - Usage: 使用: - command-line options 命令行选项 - UI options UI选项 - Set language, for example "de_DE" (default: system locale) - 设置语言, 例如 "de_DE" (缺省: 系统语言) + 设置语言, 例如“zh-TW”(默认为系统语言) - Start minimized 启动时最小化 - + Set SSL root certificates for payment request (default: -system-) + 设置SSL根证书的付款请求(默认:-系统-) + + Show splash screen on startup (default: 1) 启动时显示版权页 (缺省: 1) + + Choose data directory on startup (default: 0) + 在启动时选择数据目录(默认:0) + + + + Intro + + Welcome + 欢迎 + + + Welcome to Myriadcoin Core. + 欢迎使用 比特币核心 程序。 + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + 由于这是第一次运行 比特币核心 程序,您可以选择数据存储目录。 + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + 比特币核心 程序会下载储存一份数据块链(blockchain)。至少需要 %1 GB的存储空间,随着时间推移会需要更多的存储空间。钱包文件也储存在该目录。 + + + Use the default data directory + 使用默认的数据目录 + + + Use a custom data directory: + 使用自定义的数据目录: + + + Myriadcoin + 比特币 + + + Error: Specified data directory "%1" can not be created. + 错误:指定的数据目录“%1”无法创建。 + + + Error + 错误 + + + GB of free space available + 可用空间(GB) + + + (of %1GB needed) + (需要 %1GB) + + + + OpenURIDialog + + Open URI + 打开 URI + + + Open payment request from URI or file + 打开来自URI或文件的付款请求 + + + URI: + URI: + + + Select payment request file + 选择付款请求文件 + + + Select payment request file to open + 选择需要打开的付款请求文件 + OptionsDialog - Options 选项 - &Main - &主要的 + 主要(&M) - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. - + 可选的每 kB 交易费,这有助于您的交易被更快的处理。大多数交易都是 1 kB。 - Pay transaction &fee - 支付交易 &费用 + 支付交易费用(&F) - Automatically start Myriadcoin after logging in to the system. - 登录系统后自动开启多彩币客户端 + 登录系统后自动开启比特币客户端 - &Start Myriadcoin on system login - 启动时&运行 + 系统启动时运行(&S) + + + Size of &database cache + 数据库缓存大小(&D) + + + MB + MB + + + Number of script &verification threads + 脚本&验证 进程数 + + + Connect to the Myriadcoin network through a SOCKS proxy. + 通过 SOCKS 代理连接到比特币网络。 + + + &Connect through SOCKS proxy (default proxy): + 通过 SO&CKS 代理连接 (默认代理): + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + 代理的 IP 地址 (例如 IPv4: 127.0.0.1 / IPv6: ::1) + + + 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 |. + 出现在交易的选项卡的上下文菜单项的第三方网址 (例如:区块链接查询) 。 %s的URL被替换为交易哈希。多个的URL需要竖线 | 分隔。 + + + Third party transaction URLs + 第三方交易网址 + + + Active command-line options that override above options: + 有效的命令行参数覆盖上述选项: - Reset all client options to default. 恢复客户端的缺省设置 - &Reset Options - 恢复缺省设置 + 恢复缺省设置(&R) - &Network - &网络 + 网络(&N) + + + (0 = auto, <0 = leave that many cores free) + (0 = 自动, <0 = 离开很多免费的核心) + + + W&allet + &钱包 + + + Expert + 专家 + + + Enable coin &control features + 启动货币 &控制功能 + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + 如果禁用未确认的零钱,则零钱至少需要1个确认才能使用。同时账户余额显示会受到影响。 + + + &Spend unconfirmed change + &选择未经确认的花费 - Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. - 自动在路由器中打开多彩币端口。只有当您的路由器开启 UPnP 选项时此功能才有效。 + 自动在路由器中打开比特币端口。只有当您的路由器开启了 UPnP 选项时此功能才有效。 - Map port using &UPnP 使用 &UPnP 映射端口 - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - 通过代理服务器连接多彩币网络(例如:通过Tor连接) - - - - &Connect through SOCKS proxy: - &通过Socks代理连接: - - - Proxy &IP: - 代理服务器&IP: + 代理服务器 &IP: - - IP address of the proxy (e.g. 127.0.0.1) - 代理服务器IP (如 127.0.0.1) - - - &Port: - &端口: + 端口(&P): - Port of the proxy (e.g. 9050) - 代理端口(例如 9050) + 代理端口(例如 9050) - SOCKS &Version: - Socks &版本 + Socks 版本(&V): - SOCKS version of the proxy (e.g. 5) - Socks代理版本 (例如 5) + Socks 代理版本(例如 5) - &Window - &窗口 + 窗口(&W) - Show only a tray icon after minimizing the window. 最小化窗口后仅显示托盘图标 - &Minimize to the tray instead of the taskbar - &最小化到托盘 + 最小化到托盘(&M) - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. 当窗口关闭时程序最小化而不是退出。当使用该选项时,程序只能通过在菜单中选择退出来关闭 - M&inimize on close - 单击关闭按钮最小化 + 单击关闭按钮最小化(&I) - &Display - &显示 + 显示(&D) - User Interface &language: - 用户界面&语言: + 用户界面语言(&L): - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. 在这里设置用户界面的语言。设置将在客户端重启后生效。 - &Unit to show amounts in: - &多彩币金额单位: + 比特币金额单位(&U): - Choose the default subdivision unit to show in the interface and when sending coins. - 选择多彩币单位。 + 选择比特币单位。 - Whether to show Myriadcoin addresses in the transaction list or not. - 是否需要在交易清单中显示多彩币地址。 + 是否需要在交易清单中显示比特币地址。 - &Display addresses in transaction list - 在交易清单中&显示多彩币地址 + 在交易清单中显示比特币地址(&D) + + + Whether to show coin control features or not. + 是否需要交易源地址控制功能。 - &OK - &确定 + 确定(&O) - &Cancel - &取消 + 取消(&C) - - &Apply - &应用 - - - default - 缺省 + 默认 + + + none + 无 - Confirm options reset 确认恢复缺省设置 - - Some settings may require a client restart to take effect. - 某些设置选项需要重启客户端才能生效 + Client restart required to activate changes. + 更改生效需要重启客户端。 - - Do you want to proceed? - 您希望继续吗? + Client will be shutdown, do you want to proceed? + 客户端即将关闭,确定继续吗? - - - Warning - 警告 + This change would require a client restart. + 此更改需要重启客户端。 - - - This setting will take effect after restarting Myriadcoin. - 需要重启客户端软件才能生效。 - - - The supplied proxy address is invalid. 提供的代理服务器地址无效。 @@ -1009,59 +1216,54 @@ Address: %4 OverviewPage - Form 表单 - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. - 现在显示的消息可能是过期的. 在连接上多彩币网络节点后,您的钱包将自动与网络同步,但是这个过程还没有完成. + 现在显示的消息可能是过期的. 在连接上比特币网络节点后,您的钱包将自动与网络同步,但是这个过程还没有完成。 - - Balance: - 余额: - - - - Unconfirmed: - 未确认: - - - Wallet 钱包 - + Available: + 可使用的余额: + + + Your current spendable balance + 您当前可使用的余额 + + + Pending: + 等待中的余额: + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + 尚未确认的交易总额,未计入当前余额 + + Immature: 未成熟的: - Mined balance that has not yet matured 尚未成熟的挖矿收入余额 - + Total: + 总额: + + + Your current total balance + 您当前的总余额 + + <b>Recent transactions</b> <b>最近交易记录</b> - - Your current balance - 您的当前余额 - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - 尚未确认的交易总额, 未计入当前余额 - - - - out of sync 数据同步中 @@ -1069,579 +1271,856 @@ Address: %4 PaymentServer - + URI handling + URI 处理 + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + URI无法解析!原因可能是比特币地址不正确,或者URI参数错误。 + + + Requested payment amount of %1 is too small (considered dust). + 请求支付的金额 %1 太小(就像尘埃)。 + + + Payment request error + 支付请求出错 + + Cannot start myriadcoin: click-to-pay handler - 暂时无法启动多彩币:点击支付功能 + 暂时无法启动比特币:点击支付功能 + + + Net manager warning + 网络管理器警告 + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + 您的活动代理不支持 SOCKS5,而通过代理进行支付请求时这是必须的。 + + + Payment request fetch URL is invalid: %1 + 付款请求URI链接非法: %1 + + + Payment request file handling + 付款请求文件处理 + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + 付款请求文件不能读取或无法识别!这可能是个不合格的付款请求文件。 + + + Unverified payment requests to custom payment scripts are unsupported. + 不支持到自定义付款脚本的未验证付款请求。 + + + Refund from %1 + 退款来自 %1 + + + Error communicating with %1: %2 + %1: %2 通讯出错 + + + Payment request can not be parsed or processed! + 支付请求不能被解析或处理! + + + Bad response from server %1 + 来自 %1 服务器的错误响应 + + + Payment acknowledged + 支付已到账 + + + Network request error + 网络请求出错 - QRCodeDialog + QObject - - QR Code Dialog - 二维码对话框 + Myriadcoin + 比特币 - - Request Payment - 请求付款 + Error: Specified data directory "%1" does not exist. + 错误:指定的数据目录“%1”不存在。 - - Amount: - 金额: + Error: Cannot parse configuration file: %1. Only use key=value syntax. + 错误: 无法解析配置文件: %1. 只有钥匙=重要的私匙. - - Label: - 标签: + Error: Invalid combination of -regtest and -testnet. + 错误:无效的 -regtest 与 -testnet 结合体。 - - Message: - 消息: + Myriadcoin Core didn't yet exit safely... + 比特币核心钱包没有安全退出.... - - &Save As... - &另存为 + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + 请输入比特币地址(例如: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + 保存图片(&S)... - - Error encoding URI into QR Code. - 将 URI 转换成二维码失败. + &Copy Image + 复制图片(&C) - - The entered amount is invalid, please check. - 输入的金额非法,请检查。 - - - - Resulting URI too long, try to reduce the text for label / message. - URI 太长, 请试着精简标签/消息的内容. - - - Save QR Code 保存二维码 - - PNG Images (*.png) - PNG图像文件(*.png) + PNG Image (*.png) + PNG图片(*.png) RPCConsole - Client name 客户端名称 - - - - - - - - - - N/A 不可用 - Client version 客户端版本 - &Information - &信息 + 信息(&I) + + + Debug window + 调试窗口 + + + General + 常规 - Using OpenSSL version - 使用OpenSSL版本 + 使用 OpenSSL 版本 - Startup time 启动时间 - Network 网络 - + Name + 姓名 + + Number of connections 连接数 - - On testnet - 当前为多彩币测试网络 - - - Block chain 数据链 - Current number of blocks 当前数据块数量 - Estimated total blocks 预计数据块数量 - Last block time 上一数据块时间 - &Open - &打开 + 打开(&O) - - Command-line options - 命令行选项 - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - 显示Myriadcoin命令行选项帮助信息 - - - - &Show - &显示 - - - &Console - &控制台 + 控制台(&C) + + + &Network Traffic + 网络流量(&N) + + + &Clear + 清除(&C) + + + Totals + 总数 + + + In: + 输入: + + + Out: + 输出: - Build date 创建时间 - - Myriadcoin - Debug window - 多彩币 - 调试窗口 - - - - Myriadcoin Core - 多彩币核心 - - - Debug log file 调试日志文件 - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. 打开当前目录中的调试日志文件。日志文件大的话可能要等上几秒钟。 - Clear console 清空控制台 - Welcome to the Myriadcoin RPC console. - 欢迎来到 RPC 控制台. + 欢迎来到 RPC 控制台。 - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - 使用上下方向键浏览历史, <b>Ctrl-L</b>清除屏幕. + 使用上下方向键浏览历史, <b>Ctrl-L</b>清除屏幕。 - Type <b>help</b> for an overview of available commands. - 使用 <b>help</b> 命令显示帮助信息. + 使用 <b>help</b> 命令显示帮助信息。 + + + %1 B + %1 字节 + + + %1 KB + %1 KB + + + %1 MB + %1 MB + + + %1 GB + %1 GB + + + %1 m + %1 分钟 + + + %1 h + %1 小时 + + + %1 h %2 m + %1 小时 %2 分钟 + + + + ReceiveCoinsDialog + + &Amount: + 总额(&A): + + + &Label: + 标签(&L): + + + &Message: + 消息(&M): + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + 重复使用以前用过的接收地址。重用地址有安全和隐私方面的隐患。除非是为重复生成同一项支付请求,否则请不要这样做。 + + + R&euse an existing receiving address (not recommended) + 重用现有的接收地址(不推荐) + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + 可在付款请求上备注一条信息,在打开付款请求时可以看到。注意:该消息不是通过比特币网络传送。 + + + An optional label to associate with the new receiving address. + 可为新建的收款地址添加一个标签。 + + + Use this form to request payments. All fields are <b>optional</b>. + 使用此表单要求付款。所有字段都是<b>可选</b>。 + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + 可选的请求金额。留空或填零为不要求具体金额。 + + + Clear all fields of the form. + 清空此表单的所有字段。 + + + Clear + 清除 + + + Requested payments history + 请求付款的历史 + + + &Request payment + 请求付款(&R) + + + Show the selected request (does the same as double clicking an entry) + 显示选中的请求 (双击也可以显示) + + + Show + 显示 + + + Remove the selected entries from the list + 从列表中移除选中的条目 + + + Remove + 移除 + + + Copy label + 复制标签 + + + Copy message + 复制消息 + + + Copy amount + 复制金额 + + + + ReceiveRequestDialog + + QR Code + 二维码 + + + Copy &URI + 复制 URI(&U) + + + Copy &Address + 复制地址(&A) + + + &Save Image... + 保存图片(&S)... + + + Request payment to %1 + 请求付款到 %1 + + + Payment information + 付款信息 + + + URI + URI + + + Address + 地址 + + + Amount + 金额 + + + Label + 标签 + + + Message + 消息 + + + Resulting URI too long, try to reduce the text for label / message. + URI 太长,请试着精简标签或消息文本。 + + + Error encoding URI into QR Code. + 将 URI 转为二维码失败。 + + + + RecentRequestsTableModel + + Date + 日期 + + + Label + 标签 + + + Message + 消息 + + + Amount + 金额 + + + (no label) + (没有标签) + + + (no message) + (无消息) + + + (no amount) + (无金额) SendCoinsDialog - - - - - - - - Send Coins 发送货币 - + Coin Control Features + 交易源地址控制功能 + + + Inputs... + 输入... + + + automatically selected + 自动选择 + + + Insufficient funds! + 存款不足! + + + Quantity: + 总量: + + + Bytes: + 字节: + + + Amount: + 金额: + + + Priority: + 优先级: + + + Fee: + 费用: + + + Low Output: + 低输出 + + + After Fee: + 加上交易费用后: + + + Change: + 变更 : + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + 如果激活该选项,但是零钱地址用光或者非法,将会新生成零钱地址,转入零钱。 + + + Custom change address + 自定义零钱地址 + + Send to multiple recipients at once 一次发送给多个接收者 - Add &Recipient - 添加收款人 + 添加收款人(&R) - - Remove all transaction fields - 移除所有交易项 + Clear all fields of the form. + 清除此表单的所有字段。 - Clear &All - 清除 &所有 + 清除所有(&A) - Balance: 余额: - - 123.456 BTC - 123.456 BTC - - - Confirm the send action 确认并发送货币 - S&end - 发送 + 发送(&E) - - <b>%1</b> to %2 (%3) - <b>%1</b> 到 %2 (%3) - - - Confirm send coins 确认发送货币 - - Are you sure you want to send %1? - 确定您要发送 %1? + %1 to %2 + %1 到 %2 - - and - 和 + Copy quantity + 复制金额 + + + Copy amount + 复制金额 + + + Copy fee + 复制交易费 + + + Copy after fee + 复制含交易费的金额 + + + Copy bytes + 复制字节 + + + Copy priority + 复制优先级 + + + Copy low output + 复制低输出 + + + Copy change + 复制零钱 + + + Total Amount %1 (= %2) + 总额 %1 (= %2) + + + or + 或 - The recipient address is not valid, please recheck. 收款人地址不合法,请检查。 - The amount to pay must be larger than 0. - 支付金额必须大于0. + 支付金额必须大于0。 - The amount exceeds your balance. 金额超出您的账上余额。 - The total exceeds your balance when the %1 transaction fee is included. 计入 %1 交易费后的金额超出您的账上余额。 - Duplicate address found, can only send to each address once per send operation. - 发现重复的地址, 每次只能对同一地址发送一次. + 发现重复的地址, 每次只能对同一地址发送一次。 - - Error: Transaction creation failed! - 错误:创建交易失败! + Transaction creation failed! + 交易创建失败! - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - 错误: 交易被拒绝. 如果您使用的是备份钱包,可能存在两个钱包不同步的情况,另一个钱包中的多彩币已经被使用,但本地的这个钱包尚没有记录。 + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + 错误:该交易被拒绝!发生这种错误的原因可能是:钱包中的比特币已经被用掉,有可能您复制了wallet.dat钱包文件,然后用复制的钱包文件支付了比特币,但是这个钱包文件中没有记录。 + + + Warning: Invalid Myriadcoin address + 警告:无效的比特币地址 + + + (no label) + (没有标签) + + + Warning: Unknown change address + 警告:未知的更改地址 + + + Are you sure you want to send? + 您确定要发出吗? + + + added as transaction fee + 已添加交易费 + + + Payment request expired + 支付请求已过期 + + + Invalid payment address %1 + 无效的付款地址 %1 SendCoinsEntry - - Form - 表单 - - - A&mount: - 金额 + 金额(&M) - Pay &To: - 付款&给: + 付给(&T): - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) 付款给这个地址 (例如 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book 为这个地址输入一个标签,以便将它添加到您的地址簿 - &Label: - &标签: + 标签(&L): - - Choose address from address book - 从地址簿选择地址 + Choose previously used address + 选择以前用过的地址 + + + This is a normal payment. + 这是笔正常的支付。 - Alt+A Alt+A - Paste address from clipboard 从剪贴板粘贴地址 - Alt+P Alt+P - - Remove this recipient - 移除此接收者 + Remove this entry + 移除此项 - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - 请输入多彩币地址 (例如: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + 消息: + + + This is a verified payment request. + 这是个有效的支付请求。 + + + Enter a label for this address to add it to the list of used addresses + 请为此地址输入一个标签以将它加入用过的地址列表 + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + myriadcoin:URI 附带的备注信息,将会和交易一起存储,备查。 注意:该消息不会通过比特币网络传输。 + + + This is an unverified payment request. + 这是个非有效的支付请求。 + + + Pay To: + 支付给: + + + Memo: + 便条: + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + 比特币核心正在关机... + + + Do not shut down the computer until this window disappears. + 在此窗口消失前不要关闭计算机。 SignVerifyMessageDialog - Signatures - Sign / Verify a Message 签名 - 为消息签名/验证签名消息 - &Sign Message - &签名消息 + 签名消息(&S) - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. 您可以用你的地址对消息进行签名,以证明您是该地址的所有人。注意不要对模棱两可的消息签名,以免遭受钓鱼式攻击。请确保消息内容准确的表达了您的真实意愿。 - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - 用于签名消息的地址(例如: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + 用于签名消息的地址(例如: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book - 从地址簿选择地址 + Choose previously used address + 选择以前用过的地址 - - Alt+A Alt+A - Paste address from clipboard 从剪贴板粘贴地址 - Alt+P Alt+P - Enter the message you want to sign here 请输入您要发送的签名消息 - Signature 签名 - Copy the current signature to the system clipboard 复制当前签名至剪切板 - Sign the message to prove you own this Myriadcoin address 签名消息,证明这个地址属于您。 - Sign &Message - 消息签名 + 消息签名(&M) - Reset all sign message fields 清空所有签名消息栏 - - Clear &All - 清除 &所有 + 清除所有(&A) - &Verify Message - &验证消息 + 验证消息(&V) - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. 在下面输入签名地址,消息(请确保换行符、空格符、制表符等等一个不漏)和签名以验证消息。请确保签名信息准确,提防中间人攻击。 - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) 用于签名消息的地址(例如: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address - 验证消息,确保消息是由指定的多彩币地址签名过的。 + 验证消息,确保消息是由指定的比特币地址签名过的。 - Verify &Message - 验证消息签名 + 验证消息签名(&M) - Reset all verify message fields 清空所有验证消息栏 - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - 请输入多彩币地址 (例如: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + 请输入比特币地址 (例如: 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature 单击“签名消息“产生签名。 - - Enter Myriadcoin signature - 输入多彩币签名 - - - - The entered address is invalid. 输入的地址非法。 - - - - Please check the address and try again. 请检查地址后重试。 - - The entered address does not refer to a key. 输入的地址没有关联的公私钥对。 - Wallet unlock was cancelled. 钱包解锁动作取消。 - Private key for the entered address is not available. 找不到输入地址关联的私钥。 - Message signing failed. 消息签名失败。 - Message signed. 消息已签名。 - The signature could not be decoded. 签名无法解码。 - - Please check the signature and try again. 请检查签名后重试。 - The signature did not match the message digest. 签名与消息摘要不匹配。 - Message verification failed. 消息验证失败。 - Message verified. 消息验证成功。 @@ -1649,186 +2128,160 @@ Address: %4 SplashScreen - - The Myriadcoin developers - Myriadcoin-qt 客户端开发团队 + Myriadcoin Core + 比特币核心 + + + The Myriadcoin Core developers + Myriadcoin Core 的开发者 - [testnet] [testnet] + + TrafficGraphWidget + + KB/s + KB/s + + TransactionDesc - Open until %1 至 %1 个数据块时开启 - + conflicted + 发现冲突 + + %1/offline %1 / 离线 - %1/unconfirmed %1/未确认 - %1 confirmations - %1 确认项 + %1 已确认 - Status 状态 - , broadcast through %n node(s) 通过 %n 个节点广播 - Date 日期 - Source 源 - Generated 生成 - - From 来自 - - - To 到 - - own address 自己的地址 - label 标签 - - - - - Credit 收入 - matures in %n more block(s) 将在 %n 个数据块后成熟 - not accepted 未被接受 - - - - Debit 支出 - Transaction fee 交易费 - Net amount 净额 - Message 消息 - Comment 备注 - Transaction ID 交易ID - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - 新挖出的多彩币必须等确120个确认才能使用。您生产出的数据块,将被广播到全网并添加到数据块链。如果入链失败,状态将变为“未被接受”,意味着您的数据块竞争失败,挖出的多彩币将不能使用。当某个节点先于你几秒生产出新的数据块,这种情况会偶尔发生。 + Merchant + 商店 + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + 生成的比特币在可以使用前必须有 %1 个成熟的区块。当您生成了此区块后,它将被广播到网络中以加入区块链。如果它未成功进入区块链,其状态将变更为“不接受”并且不可使用。这可能偶尔会发生,如果另一个节点比你早几秒钟成功生成一个区块。 - Debug information 调试信息 - Transaction 交易 - Inputs 输入 - Amount 金额 - true 正确 - false 错误 - , has not been successfully broadcast yet - , 未被成功广播 + ,未被成功广播 - Open for %n more block(s) Open for %n more block - unknown 未知 @@ -1836,12 +2289,10 @@ Address: %4 TransactionDescDialog - Transaction details - 交易明细 + 交易细节 - This pane shows a detailed description of the transaction 当前面板显示了交易的详细信息 @@ -1849,117 +2300,102 @@ Address: %4 TransactionTableModel - Date 日期 - Type 类型 - Address 地址 - Amount 数量 + + Immature (%1 confirmations, will be available after %2) + 未成熟 (%1 个确认,将在 %2 个后可用) + - Open for %n more block(s) Open for %n more block - Open until %1 至 %1 个数据块时开启 - - Offline (%1 confirmations) - 离线 (%1 个确认项) - - - - Unconfirmed (%1 of %2 confirmations) - 未确认 (%1 / %2 条确认信息) - - - Confirmed (%1 confirmations) 已确认 (%1 条确认信息) - - - Mined balance will be available when it matures in %n more block(s) - 挖矿收入余额将在 %n 个数据块后可用 - - This block was not received by any other nodes and will probably not be accepted! - 此数据块未被其他节点接收,并可能不被接受! + 此数据块未被任何其他节点接收,可能不被接受! - Generated but not accepted 已生成但未被接受 - + Offline + 掉线 + + + Unconfirmed + 未确认的 + + + Confirming (%1 of %2 recommended confirmations) + 确认中 (推荐 %2个确认,已经有 %1个确认) + + + Conflicted + 冲突的 + + Received with 接收于 - Received from 收款来自 - Sent to - 发送到 + 发送给 - Payment to yourself 付款给自己 - Mined 挖矿所得 - (n/a) - (n/a) + (不可用) - Transaction status. Hover over this field to show number of confirmations. - 交易状态。 鼠标移到此区域上可显示确认消息项的数目。 + 交易状态。 鼠标移到此区域可显示确认项数量。 - Date and time that the transaction was received. - 接收多彩币的时间 + 接收到交易的时间 - Type of transaction. 交易类别。 - Destination address of transaction. 交易目的地址。 - Amount removed from or added to balance. 从余额添加或移除的金额。 @@ -1967,348 +2403,288 @@ Address: %4 TransactionView - - All 全部 - Today 今天 - This week 本周 - This month 本月 - Last month 上月 - This year 今年 - Range... 范围... - Received with 接收于 - Sent to - 发送到 + 发送给 - To yourself 到自己 - Mined 挖矿所得 - Other 其他 - Enter address or label to search 输入地址或标签进行搜索 - Min amount 最小金额 - Copy address 复制地址 - Copy label 复制标签 - Copy amount 复制金额 - Copy transaction ID 复制交易编号 - Edit label 编辑标签 - Show transaction details 显示交易详情 - - Export Transaction Data - 导出交易数据 + Export Transaction History + 导出交易历史 + + + Exporting Failed + 导出失败 + + + There was an error trying to save the transaction history to %1. + 导出交易历史到 %1 时发生错误。 + + + Exporting Successful + 导出成功 + + + The transaction history was successfully saved to %1. + 交易历史已成功保存到 %1。 - Comma separated file (*.csv) - 逗号分隔文件(*.csv) + 逗号分隔文件 (*.csv) - Confirmed 已确认 - Date 日期 - Type 类别 - Label 标签 - Address 地址 - Amount 金额 - ID ID - - Error exporting - 导出错误 - - - - Could not write to file %1. - 无法写入文件 %1。 - - - Range: 范围: - to 到 + + WalletFrame + + No wallet has been loaded. + 没有载入钱包。 + + WalletModel - Send Coins - 发送多彩币 + 发送比特币 WalletView - &Export - + 导出(&E) - Export the data in the current tab to a file 导出当前数据到文件 - Backup Wallet 备份钱包 - Wallet Data (*.dat) 钱包文件(*.dat) - Backup Failed 备份失败 - - There was an error trying to save the wallet data to the new location. - 备份钱包到其它文件夹失败. + There was an error trying to save the wallet data to %1. + 尝试保存钱包数据至 %1 时发生错误。 + + + The wallet data was successfully saved to %1. + 钱包数据成功保存至 %1 。 - Backup Successful 备份成功 - - - The wallet data was successfully saved to the new location. - 钱包数据成功存储到新位置 - bitcoin-core - - Myriadcoin version - 多彩币版本 - - - Usage: 使用: - - Send command to -server or myriadcoind - 发送命令到服务器或者 myriadcoind - - - - List commands 列出命令 - Get help for a command 获得某条命令的帮助 - Options: 选项: - Specify configuration file (default: myriadcoin.conf) 指定配置文件 (默认为 myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) 指定 pid 文件 (默认为 myriadcoind.pid) - Specify data directory 指定数据目录 - - Set database cache size in megabytes (default: 25) - 设置数据库缓冲区大小 (缺省: 25MB) - - - Listen for connections on <port> (default: 8333 or testnet: 18333) - 监听端口连接 <port> (缺省: 8333 or testnet: 18333) + 监听端口连接 <port>(缺省: 8333 或测试网络: 18333) - Maintain at most <n> connections to peers (default: 125) - 最大连接数 <n> (缺省: 125) + 最大连接数 <n> (缺省: 125) - Connect to a node to retrieve peer addresses, and disconnect - 连接一个节点并获取对端地址, 然后断开连接 + 连接一个节点并获取对端地址,然后断开连接 - Specify your own public address 指定您的公共地址 - Threshold for disconnecting misbehaving peers (default: 100) - Threshold for disconnecting misbehaving peers (缺省: 100) + 断开行为不端对端阀值(缺省: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - Number of seconds to keep misbehaving peers from reconnecting (缺省: 86400) + 重新连接异常节点的秒数(缺省: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s 设置RPC监听端口%u时发生错误, IPv4:%s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) JSON-RPC连接监听端口<port> (缺省:8332 testnet:18332) - Accept command line and JSON-RPC commands 接受命令行和 JSON-RPC 命令 - + Myriadcoin Core RPC client version + 比特币核心钱包RPC客户端版本 + + Run in the background as a daemon and accept commands 在后台运行并接受命令 - Use the test network 使用测试网络 - Accept connections from outside (default: 1 if no -proxy or -connect) 接受来自外部的连接 (缺省: 如果不带 -proxy or -connect 参数设置为1) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2333,622 +2709,691 @@ rpcpassword=%s - + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + 可接受的密码(默认:TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s 在IPv6模式下设置RPC监听端口 %u 失败,返回到IPv4模式: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 绑定指定的IP地址开始监听。IPv6地址请使用[host]:port 格式 - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. - 无法给数据目录 %s上锁。本软件可能已经在运行。 + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + 自由交易不断的速率限制为<n>*1000 字节每分钟(默认值:15) + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + 进入回归测试模式,它采用一种特殊的可立即解决的区块链模拟情况。这是为了回归测试工具和应用的开发所设。 + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + 进入回归测试模式,它采用一种特殊的可立即解决的区块链模拟情况。 + + + Error: Listening for incoming connections failed (listen returned error %d) + 错误: 监听接收连接失败 (监听错误 %d) - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - 错误:该交易被拒绝!发生这种错误的原因可能是:钱包中的多彩币已经被用掉,有可能您复制了wallet.dat钱包文件,然后用复制的钱包文件支付了多彩币,但是这个钱包文件中没有记录。 + 错误:该交易被拒绝!发生这种错误的原因可能是:钱包中的比特币已经被用掉,有可能您复制了wallet.dat钱包文件,然后用复制的钱包文件支付了比特币,但是这个钱包文件中没有记录。 - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! 错误:因为该交易的数量、复杂度或者动用了刚收到不久的资金,您需要支付不少于%s的交易费用。 - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - 当收到相关通知时执行命令(命令行中的 %s 的替换为消息) - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) 当最佳区块变化时执行命令 (命令行中的 %s 会被替换成区块哈希值) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + 比这手续费更小的被认为零手续费 (交易产生) (默认: + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + 从缓冲池清理磁盘数据库活动日志每<n>兆字节 (默认值: 100) + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + 如何有效的验证checkblocks区块(0-4, 默认值: 3) + + + In this mode -genproclimit controls how many blocks are generated immediately. + 在-genproclimit这种模式下控制产出多少区块 + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + 设置脚本验证的程序 (%u 到 %d, 0 = 自动, <0 = 保留自由的核心, 默认值: %d) + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + 设置处理器生成的限制 (-1 = 无限, 默认值: -1) - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications 这是测试用的预发布版本 - 请谨慎使用 - 不要用来挖矿,或者在正式商用环境下使用 - + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + 无法 %s的绑定到电脑上,比特币核心钱包可能已经在运行。 + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + 连接至 Tor隐藏服务器时 使用不同的SOCKS5代理 (缺省: -proxy) + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. 警告:-paytxfee 交易费设置得太高了!每笔交易都将支付交易费。 - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - 警告:显示的交易可能不正确!您需要升级客户端软件,或者网络上的其他节点需要升级。 - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. - 警告:请检查电脑的日期时间设置是否正确!时间错误可能会导致多彩币客户端运行异常。 + 警告:请检查电脑的日期时间设置是否正确!时间错误可能会导致比特币客户端运行异常。 + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + 警告:网络似乎并不完全同意!有些矿工似乎遇到了问题。 + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + 警告:我们的同行似乎不完全同意!您可能需要升级,或者其他节点可能需要升级。 - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. 警告:钱包文件wallet.dat读取失败!最重要的公钥、私钥数据都没有问题,但是交易记录或地址簿数据不正确,或者存在数据丢失。 - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. 警告:钱包文件wallet.dat损坏! 原始的钱包文件已经备份到%s目录下并重命名为{timestamp}.bak 。如果您的账户余额或者交易记录不正确,请使用您的钱包备份文件恢复。 - + (default: 1) + (默认值: 1) + + + (default: wallet.dat) + (默认: wallet.dat) + + + <category> can be: + <category> 可能是: + + Attempt to recover private keys from a corrupt wallet.dat 尝试从损坏的钱包文件wallet.dat中恢复私钥 - + Myriadcoin Core Daemon + 比特币核心 守护程序 + + Block creation options: 数据块创建选项: - + Clear list of wallet transactions (diagnostic tool; implies -rescan) + 清除钱包中的交易记录 (诊断用,意味着需要重新扫描 -rescan) + + Connect only to the specified node(s) 仅连接到指定节点 - + Connect through SOCKS proxy + 通过Socks代理连接: + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + 连接到 JSON-RPC 于 <port>(默认: 8332,或测试网络: 18332) + + + Connection options: + 连接选项: + + Corrupted block database detected 检测发现数据块数据库损坏。请使用 -reindex参数重启客户端。 - + Debugging/Testing options: + 调试/测试选项: + + + Disable safemode, override a real safe mode event (default: 0) + 禁止使用安全模式,重新写入一个真正的安全模式日志(默认值: 0) + + Discover own IP address (default: 1 when listening and no -externalip) 发现自己的IP地址(缺省:不带 -externalip 参数监听时设置为1) - + Do not load the wallet and disable wallet RPC calls + 不要加载钱包和禁用钱包的 RPC 调用 + + Do you want to rebuild the block database now? 你想现在就重建块数据库吗? - Error initializing block database 初始化数据块数据库出错 - Error initializing wallet database environment %s! Error initializing wallet database environment %s! - Error loading block database 导入数据块数据库出错 - Error opening block database 导入数据块数据库出错 - Error: Disk space is low! 错误:磁盘剩余空间低! - Error: Wallet locked, unable to create transaction! 错误:钱包被锁定,无法创建交易! - Error: system error: 错误:系统出错。 - Failed to listen on any port. Use -listen=0 if you want this. 监听端口失败。请使用 -listen=0 参数。 - Failed to read block info 无法读取数据块信息 - Failed to read block 读取数据块失败 - Failed to sync block index 无法同步数据块索引 - Failed to write block index 无法写入数据块索引 - Failed to write block info 无法写入数据块信息 - Failed to write block 无法写数据块 - Failed to write file info 无法写入文件信息 - Failed to write to coin database 无法写入coin数据库 - Failed to write transaction index 无法写入交易索引 - Failed to write undo data 无法写入回滚信息 - + Fee per kB to add to transactions you send + 为付款交易支付比特币(每kb) + + + Fees smaller than this are considered zero fee (for relaying) (default: + 比这手续费更小的被认为零手续费 (中继) (默认值: + + Find peers using DNS lookup (default: 1 unless -connect) 通过DNS查找节点(缺省:1 除非使用 -connect 选项) - - Generate coins (default: 0) - + Force safe mode (default: 0) + 强制安全模式(默认值: 0) + + + Generate coins (default: 0) + 生成比特币(默认为 0) - How many blocks to check at startup (default: 288, 0 = all) 启动时检测多少个数据块(缺省:288,0=所有) - - How thorough the block verification is (0-4, default: 3) - How thorough the block verification is (0-4, default: 3) + If <category> is not supplied, output all debugging information. + 如果<category>未提供,将输出所有调试信息。 + + + Importing... + 导入中... + + + Incorrect or no genesis block found. Wrong datadir for network? + 不正确或没有找到起源区块。网络错误? + + + Invalid -onion address: '%s' + 无效的 -onion 地址:“%s” - Not enough file descriptors available. - + 没有足够的文件描述符可用。 + + + Prepend debug output with timestamp (default: 1) + 调试信息输出时,前面加上时间戳 (缺省: 1) + + + RPC client options: + RPC 客户端选项: - Rebuild block chain index from current blk000??.dat files 重新为当前的blk000??.dat文件建立索引 - + Select SOCKS version for -proxy (4 or 5, default: 5) + 用 -proxy 选择 SOCKS 版本(4 或 5,默认为 5) + + + Set database cache size in megabytes (%d to %d, default: %d) + 设置以MB为单位的数据库缓存大小(%d 到 %d, 默认值: %d) + + + Set maximum block size in bytes (default: %d) + 设置最大区块大小 (默认: %d,单位字节) + + Set the number of threads to service RPC calls (default: 4) 设置使用调用服务 RPC 的线程数量(默认:4) - + Specify wallet file (within data directory) + 指定钱包文件(数据目录内) + + + Spend unconfirmed change when sending transactions (default: 1) + 付款时允许使用未确认的零钱 (缺省: 1) + + + This is intended for regression testing tools and app development. + 这是用于回归测试和应用开发目的。 + + + Usage (deprecated, use myriadcoin-cli): + 用法(不推荐,请使用 myriadcoin-cli): + + Verifying blocks... 正在验证数据库的完整性... - Verifying wallet... 正在检测钱包的完整性... - + Wait for RPC server to start + 等待 RPC 服务器 + + + Wallet %s resides outside data directory %s + 钱包 %s 在外部的数据目录 %s + + + Wallet options: + 钱包选项: + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + 警告:已废弃的 -debugnet 参数已忽略,请用 -debug=net + + + You need to rebuild the database using -reindex to change -txindex + 您需要将 -reindex 改为 -txindex 以重建数据库 + + Imports blocks from external blk000??.dat file 从blk000??.dat文件导入数据块 - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) - + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + 无法获取数据目录的 %s. 比特币核心钱包可能已经在运行. + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + 当收到相关提醒或者我们看到一个长分叉时执行命令(%s 将替换为消息) + + + Output debugging information (default: 0, supplying <category> is optional) + 输出调试信息(默认为0,提供 <category> 是可选的) + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + 设置 高优先级/低交易费 交易的最大字节 (缺省: %d) - Information 信息 - - Invalid -tor address: '%s' - 非法的 -tor 地址:'%s' - - - Invalid amount for -minrelaytxfee=<amount>: '%s' - + -minrelaytxfee=<amount>: '%s' 无效的金额 - Invalid amount for -mintxfee=<amount>: '%s' - + -mintxfee=<amount>: '%s' 无效的金额 + + + Limit size of signature cache to <n> entries (default: 50000) + 签名缓冲大小限制每<n> 条目 (默认值: 50000) + + + Log transaction priority and fee per kB when mining blocks (default: 0) + 开采区块时,日志优先级和手续费每KB (默认值: 0) - Maintain a full transaction index (default: 0) 维护一份完整的交易索引(缺省:0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) 每个连接的最大接收缓存,<n>*1000 字节(缺省:5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) 每个连接的最大发送缓存,<n>*1000 字节(缺省:1000) - Only accept block chain matching built-in checkpoints (default: 1) 仅接受符合客户端检查点设置的数据块文件 - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) 仅连接至指定网络的节点<net>(IPv4, IPv6 或者 Tor) - - Output extra debugging information. Implies all other -debug* options - 输出额外的调试信息。打开所有 -debug* 开关 + Print block on startup, if found in block index + 如果在搜索区块中找到,请启动打印区块 - - Output extra network debugging information - 输出额外的网络调试信息 + Print block tree on startup (default: 0) + 启动时打印区块树 (默认值: 0) - - Prepend debug output with timestamp - 为调试输出信息添加时间戳 + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + RPC SSL选项:(见有关比特币设置用于SSL说明的维基百科) + + + RPC server options: + RPC 服务器选项: + + + Randomly drop 1 of every <n> network messages + 随机每1个丢失测试<n>网络信息 + + + Randomly fuzz 1 of every <n> network messages + 随机每1个模拟测试<n>网络信息 + + + Run a thread to flush wallet periodically (default: 1) + 运行一个程序,定时清理钱包 (默认值:1) - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) - SSL选项:(参见Myriadcoin Wiki关于SSL设置栏目) + SSL选项:(参见Bitcoin Wiki关于SSL设置栏目) - - Select the version of socks proxy to use (4-5, default: 5) - 请选择Socks代理服务器版本 (4 或 5, 缺省: 5) + Send command to Myriadcoin Core + 发送指令到比特币核心钱包 - Send trace/debug info to console instead of debug.log file - 跟踪/调试信息输出到控制台,不输出到debug.log文件 + 跟踪/调试信息输出到控制台,不输出到 debug.log 文件 - - Send trace/debug info to debugger - 跟踪/调试信息输出到 调试器debugger - - - - Set maximum block size in bytes (default: 250000) - 设置最大数据块大小(缺省:250000) - - - Set minimum block size in bytes (default: 0) 设置最小数据块大小(缺省:0) - + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + 设置DB_PRIVATE钱包标志DB环境 (默认值: 1) + + + Show all debugging options (usage: --help -help-debug) + 显示所有调试选项 (用法: --帮助 -帮助调试) + + + Show benchmark information (default: 0) + 显示标准信息 (默认值: 0) + + Shrink debug.log file on client startup (default: 1 when no -debug) 客户端启动时压缩debug.log文件(缺省:no-debug模式时为1) - Signing transaction failed - + 签署交易失败 - Specify connection timeout in milliseconds (default: 5000) 设置连接超时时间(缺省:5000毫秒) - + Start Myriadcoin Core Daemon + 开启比特币核心钱包守护进程 + + System error: 系统错误: - Transaction amount too small - + 交易量太小 - Transaction amounts must be positive - + 交易金额必须是积极的 - Transaction too large - + 交易太大 - Use UPnP to map the listening port (default: 0) - 使用UPnp映射监听端口(缺省: 0) + 使用UPnP映射监听端口 (缺省: 0) - Use UPnP to map the listening port (default: 1 when listening) 使用UPnp映射监听端口(缺省: 监听状态设为1) - - Use proxy to reach tor hidden services (default: same as -proxy) - 使用代理服务器访问隐藏服务(缺省:同 -proxy) - - - Username for JSON-RPC connections - JSON-RPC连接用户名 - + JSON-RPC 连接用户名 - Warning 警告 - Warning: This version is obsolete, upgrade required! 警告:该软件版本已过时,请升级! - - You need to rebuild the databases using -reindex to change -txindex - You need to rebuild the databases using -reindex to change -txindex + Zapping all transactions from wallet... + Zapping all transactions from wallet... + + + on startup + 启动中 + + + version + 版本 - wallet.dat corrupt, salvage failed 钱包文件wallet.dat损坏,抢救备份失败 - Password for JSON-RPC connections - JSON-RPC连接密码 + JSON-RPC 连接密码 - Allow JSON-RPC connections from specified IP address - 允许从指定IP接受到的JSON-RPC连接 - + 允许从指定IP接受到的 JSON-RPC 连接 - Send commands to node running on <ip> (default: 127.0.0.1) - 向IP地址为 <ip> 的节点发送指令 (缺省: 127.0.0.1) - + 向IP地址为 <ip> 的节点发送指令 (缺省: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) 当最佳数据块变化时执行命令 (命令行中的 %s 会被替换成数据块哈希值) - Upgrade wallet to latest format 将钱包升级到最新的格式 - Set key pool size to <n> (default: 100) 设置密钥池大小为 <n> (缺省: 100) - Rescan the block chain for missing wallet transactions - 重新扫描数据链以查找遗漏的交易 - + 重新扫描区块链以查找遗漏的钱包交易 - Use OpenSSL (https) for JSON-RPC connections - 为 JSON-RPC 连接使用 OpenSSL (https)连接 + 为 JSON-RPC 连接使用 OpenSSL (https) 连接 - Server certificate file (default: server.cert) 服务器证书 (默认为 server.cert) - Server private key (default: server.pem) 服务器私钥 (默认为 server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - 可接受的加密器 (默认为 TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - This help message - 该帮助信息 + 本帮助信息 - Unable to bind to %s on this computer (bind returned error %d, %s) 无法绑定本机端口 %s (返回错误消息 %d, %s) - - Connect through socks proxy - 通过 socks 代理连接 - - - Allow DNS lookups for -addnode, -seednode and -connect - 使用 -addnode, -seednode 和 -connect选项时允许DNS查找 + 使用 -addnode, -seednode 和 -connect 选项时允许查询DNS - Loading addresses... - 正在加载地址... + 正在加载地址簿... - Error loading wallet.dat: Wallet corrupted - wallet.dat钱包文件加载错误:钱包损坏 + wallet.dat 钱包文件加载出错:钱包损坏 - Error loading wallet.dat: Wallet requires newer version of Myriadcoin - wallet.dat钱包文件加载错误:请升级到最新Myriadcoin客户端 + wallet.dat 钱包文件加载错误:请升级到最新版Bitcoin客户端 - Wallet needed to be rewritten: restart Myriadcoin to complete - 钱包文件需要重写:请退出并重新启动Myriadcoin客户端 + 钱包文件需要被重写:请退出并重新启动Bitcoin客户端 - Error loading wallet.dat - wallet.dat钱包文件加载错误 + wallet.dat 钱包文件加载出错 - Invalid -proxy address: '%s' - 非法的代理地址: '%s' + 无效的代理地址:%s - Unknown network specified in -onlynet: '%s' - 被指定的是未知网络 -onlynet: '%s' + -onlynet 指定的是未知网络:%s - Unknown -socks proxy version requested: %i 被指定的是未知socks代理版本: %i - Cannot resolve -bind address: '%s' 无法解析 -bind 端口地址: '%s' - Cannot resolve -externalip address: '%s' 无法解析 -externalip 地址: '%s' - Invalid amount for -paytxfee=<amount>: '%s' 非法金额 -paytxfee=<amount>: '%s' - Invalid amount - 金额不对 + 无效金额 - Insufficient funds 金额不足 - Loading block index... - 加载数据块索引... + 正在加载数据块索引... - Add a node to connect to and attempt to keep the connection open 添加节点并与其保持连接 - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - 无法在本机绑定 %s 端口 . 多彩币客户端软件可能已经在运行. - - - - Fee per KB to add to transactions you send - 每发送1KB交易所需的费用 - - - Loading wallet... 正在加载钱包... - Cannot downgrade wallet - 无法降级钱包格式 + 无法降级钱包 - Cannot write default address - 无法写入缺省地址 + 无法写入默认地址 - Rescanning... 正在重新扫描... - Done loading 加载完成 - To use the %s option 使用 %s 选项 - Error 错误 - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. diff --git a/src/qt/locale/bitcoin_zh_HK.ts b/src/qt/locale/bitcoin_zh_HK.ts new file mode 100644 index 00000000..6fc62ceb --- /dev/null +++ b/src/qt/locale/bitcoin_zh_HK.ts @@ -0,0 +1,3368 @@ + + + AboutDialog + + About Myriadcoin Core + + + + <b>Myriadcoin Core</b> version + + + + +This is experimental software. + +Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php. + +This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. + + + + Copyright + + + + The Myriadcoin Core developers + + + + (%1-bit) + + + + + AddressBookPage + + Double-click to edit address or label + + + + Create a new address + + + + &New + + + + Copy the currently selected address to the system clipboard + + + + &Copy + + + + C&lose + + + + &Copy Address + + + + Delete the currently selected address from the list + + + + Export the data in the current tab to a file + + + + &Export + + + + &Delete + + + + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + + These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + + Copy &Label + + + + &Edit + + + + Export Address List + + + + Comma separated file (*.csv) + + + + Exporting Failed + + + + There was an error trying to save the address list to %1. + + + + + AddressTableModel + + Label + + + + Address + + + + (no label) + + + + + AskPassphraseDialog + + Passphrase Dialog + + + + Enter passphrase + + + + New passphrase + + + + Repeat new passphrase + + + + Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. + + + + Encrypt wallet + + + + This operation needs your wallet passphrase to unlock the wallet. + + + + Unlock wallet + + + + This operation needs your wallet passphrase to decrypt the wallet. + + + + Decrypt wallet + + + + Change passphrase + + + + Enter the old and new passphrase to the wallet. + + + + Confirm wallet encryption + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! + + + + Are you sure you wish to encrypt your wallet? + + + + 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. + + + + Warning: The Caps Lock key is on! + + + + Wallet encrypted + + + + Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. + + + + Wallet encryption failed + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + + + + The supplied passphrases do not match. + + + + Wallet unlock failed + + + + The passphrase entered for the wallet decryption was incorrect. + + + + Wallet decryption failed + + + + Wallet passphrase was successfully changed. + + + + + BitcoinGUI + + Sign &message... + + + + Synchronizing with network... + + + + &Overview + + + + Node + + + + Show general overview of wallet + + + + &Transactions + + + + Browse transaction history + + + + E&xit + + + + Quit application + + + + Show information about Myriadcoin + + + + About &Qt + + + + Show information about Qt + + + + &Options... + + + + &Encrypt Wallet... + + + + &Backup Wallet... + + + + &Change Passphrase... + + + + &Sending addresses... + + + + &Receiving addresses... + + + + Open &URI... + + + + Importing blocks from disk... + + + + Reindexing blocks on disk... + + + + Send coins to a Myriadcoin address + + + + Modify configuration options for Myriadcoin + + + + Backup wallet to another location + + + + Change the passphrase used for wallet encryption + + + + &Debug window + + + + Open debugging and diagnostic console + + + + &Verify message... + + + + Myriadcoin + + + + Wallet + + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your Myriadcoin addresses to prove you own them + + + + Verify messages to ensure they were signed with specified Myriadcoin addresses + + + + &File + + + + &Settings + + + + &Help + + + + Tabs toolbar + + + + [testnet] + + + + Myriadcoin Core + + + + Request payments (generates QR codes and myriadcoin: URIs) + + + + &About Myriadcoin Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a myriadcoin: URI or payment request + + + + &Command-line options + + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + + + + Myriadcoin client + + + + %n active connection(s) to Myriadcoin network + + + + No block source available... + + + + Processed %1 of %2 (estimated) blocks of transaction history. + + + + Processed %1 blocks of transaction history. + + + + %n hour(s) + + + + %n day(s) + + + + %n week(s) + + + + %1 and %2 + + + + %n year(s) + + + + %1 behind + + + + Last received block was generated %1 ago. + + + + Transactions after this will not yet be visible. + + + + Error + + + + Warning + + + + Information + + + + Up to date + + + + Catching up... + + + + Sent transaction + + + + Incoming transaction + + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + A fatal error occurred. Myriadcoin can no longer continue safely and will quit. + + + + + ClientModel + + Network Alert + + + + + CoinControlDialog + + Coin Control Address Selection + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + (un)select all + + + + Tree mode + + + + List mode + + + + Amount + + + + Address + + + + Date + + + + Confirmations + + + + Confirmed + + + + Priority + + + + Copy address + + + + Copy label + + + + Copy amount + + + + Copy transaction ID + + + + Lock unspent + + + + Unlock unspent + + + + Copy quantity + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + highest + + + + higher + + + + high + + + + medium-high + + + + medium + + + + low-medium + + + + low + + + + lower + + + + lowest + + + + (%1 locked) + + + + none + + + + Dust + + + + yes + + + + no + + + + This label turns red, if the transaction size is greater than 1000 bytes. + + + + This means a fee of at least %1 per kB is required. + + + + Can vary +/- 1 byte per input. + + + + Transactions with higher priority are more likely to get included into a block. + + + + This label turns red, if the priority is smaller than "medium". + + + + This label turns red, if any recipient receives an amount smaller than %1. + + + + This means a fee of at least %1 is required. + + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + + + + This label turns red, if the change is smaller than %1. + + + + (no label) + + + + change from %1 (%2) + + + + (change) + + + + + EditAddressDialog + + Edit Address + + + + &Label + + + + The label associated with this address list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + + + + &Address + + + + New receiving address + + + + New sending address + + + + Edit receiving address + + + + Edit sending address + + + + The entered address "%1" is already in the address book. + + + + The entered address "%1" is not a valid Myriadcoin address. + + + + Could not unlock wallet. + + + + New key generation failed. + + + + + FreespaceChecker + + A new data directory will be created. + + + + name + + + + Directory already exists. Add %1 if you intend to create a new directory here. + + + + Path already exists, and is not a directory. + + + + Cannot create data directory here. + + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + + + + Myriadcoin Core + + + + version + + + + Usage: + + + + command-line options + + + + UI options + + + + Set language, for example "de_DE" (default: system locale) + + + + Start minimized + + + + Set SSL root certificates for payment request (default: -system-) + + + + Show splash screen on startup (default: 1) + + + + Choose data directory on startup (default: 0) + + + + + Intro + + Welcome + + + + Welcome to Myriadcoin Core. + + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + + + + Use the default data directory + + + + Use a custom data directory: + + + + Myriadcoin + + + + Error: Specified data directory "%1" can not be created. + + + + Error + + + + GB of free space available + + + + (of %1GB needed) + + + + + OpenURIDialog + + Open URI + + + + Open payment request from URI or file + + + + URI: + + + + Select payment request file + + + + Select payment request file to open + + + + + OptionsDialog + + Options + + + + &Main + + + + Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. + + + + Pay transaction &fee + + + + Automatically start Myriadcoin after logging in to the system. + + + + &Start Myriadcoin on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the Myriadcoin network through a SOCKS proxy. + + + + &Connect through SOCKS proxy (default proxy): + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + 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 |. + + + + Third party transaction URLs + + + + Active command-line options that override above options: + + + + Reset all client options to default. + + + + &Reset Options + + + + &Network + + + + (0 = auto, <0 = leave that many cores free) + + + + W&allet + + + + Expert + + + + Enable coin &control features + + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + + + + &Spend unconfirmed change + + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. + + + + Map port using &UPnP + + + + Proxy &IP: + + + + &Port: + + + + Port of the proxy (e.g. 9050) + + + + SOCKS &Version: + + + + SOCKS version of the proxy (e.g. 5) + + + + &Window + + + + Show only a tray icon after minimizing the window. + + + + &Minimize to the tray instead of the taskbar + + + + Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. + + + + M&inimize on close + + + + &Display + + + + User Interface &language: + + + + The user interface language can be set here. This setting will take effect after restarting Myriadcoin. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show Myriadcoin addresses in the transaction list or not. + + + + &Display addresses in transaction list + + + + Whether to show coin control features or not. + + + + &OK + + + + &Cancel + + + + default + + + + none + + + + Confirm options reset + + + + Client restart required to activate changes. + + + + Client will be shutdown, do you want to proceed? + + + + This change would require a client restart. + + + + The supplied proxy address is invalid. + + + + + OverviewPage + + Form + + + + The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. + + + + Wallet + + + + Available: + + + + Your current spendable balance + + + + Pending: + + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + + + + Immature: + + + + Mined balance that has not yet matured + + + + Total: + + + + Your current total balance + + + + <b>Recent transactions</b> + + + + out of sync + + + + + PaymentServer + + URI handling + + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start myriadcoin: click-to-pay handler + + + + Net manager warning + + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + + + + Payment request fetch URL is invalid: %1 + + + + Payment request file handling + + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + + + + Unverified payment requests to custom payment scripts are unsupported. + + + + Refund from %1 + + + + Error communicating with %1: %2 + + + + Payment request can not be parsed or processed! + + + + Bad response from server %1 + + + + Payment acknowledged + + + + Network request error + + + + + QObject + + Myriadcoin + + + + Error: Specified data directory "%1" does not exist. + + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + + + + Error: Invalid combination of -regtest and -testnet. + + + + Myriadcoin Core didn't yet exit safely... + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + + QRImageWidget + + &Save Image... + + + + &Copy Image + + + + Save QR Code + + + + PNG Image (*.png) + + + + + RPCConsole + + Client name + + + + N/A + + + + Client version + + + + &Information + + + + Debug window + + + + General + + + + Using OpenSSL version + + + + Startup time + + + + Network + + + + Name + + + + Number of connections + + + + Block chain + + + + Current number of blocks + + + + Estimated total blocks + + + + Last block time + + + + &Open + + + + &Console + + + + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + + Build date + + + + Debug log file + + + + Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the Myriadcoin RPC console. + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + + + + Type <b>help</b> for an overview of available commands. + + + + %1 B + + + + %1 KB + + + + %1 MB + + + + %1 GB + + + + %1 m + + + + %1 h + + + + %1 h %2 m + + + + + ReceiveCoinsDialog + + &Amount: + + + + &Label: + + + + &Message: + + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + + + + R&euse an existing receiving address (not recommended) + + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + + + + An optional label to associate with the new receiving address. + + + + Use this form to request payments. All fields are <b>optional</b>. + + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + + + + Clear all fields of the form. + + + + Clear + + + + Requested payments history + + + + &Request payment + + + + Show the selected request (does the same as double clicking an entry) + + + + Show + + + + Remove the selected entries from the list + + + + Remove + + + + Copy label + + + + Copy message + + + + Copy amount + + + + + ReceiveRequestDialog + + QR Code + + + + Copy &URI + + + + Copy &Address + + + + &Save Image... + + + + Request payment to %1 + + + + Payment information + + + + URI + + + + Address + + + + Amount + + + + Label + + + + Message + + + + Resulting URI too long, try to reduce the text for label / message. + + + + Error encoding URI into QR Code. + + + + + RecentRequestsTableModel + + Date + + + + Label + + + + Message + + + + Amount + + + + (no label) + + + + (no message) + + + + (no amount) + + + + + SendCoinsDialog + + Send Coins + + + + Coin Control Features + + + + Inputs... + + + + automatically selected + + + + Insufficient funds! + + + + Quantity: + + + + Bytes: + + + + Amount: + + + + Priority: + + + + Fee: + + + + Low Output: + + + + After Fee: + + + + Change: + + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + + + + Custom change address + + + + Send to multiple recipients at once + + + + Add &Recipient + + + + Clear all fields of the form. + + + + Clear &All + + + + Balance: + + + + Confirm the send action + + + + S&end + + + + Confirm send coins + + + + %1 to %2 + + + + Copy quantity + + + + Copy amount + + + + Copy fee + + + + Copy after fee + + + + Copy bytes + + + + Copy priority + + + + Copy low output + + + + Copy change + + + + Total Amount %1 (= %2) + + + + or + + + + The recipient address is not valid, please recheck. + + + + The amount to pay must be larger than 0. + + + + The amount exceeds your balance. + + + + The total exceeds your balance when the %1 transaction fee is included. + + + + Duplicate address found, can only send to each address once per send operation. + + + + Transaction creation failed! + + + + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Warning: Invalid Myriadcoin address + + + + (no label) + + + + Warning: Unknown change address + + + + Are you sure you want to send? + + + + added as transaction fee + + + + Payment request expired + + + + Invalid payment address %1 + + + + + SendCoinsEntry + + A&mount: + + + + Pay &To: + + + + The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Enter a label for this address to add it to your address book + + + + &Label: + + + + Choose previously used address + + + + This is a normal payment. + + + + Alt+A + + + + Paste address from clipboard + + + + Alt+P + + + + Remove this entry + + + + Message: + + + + This is a verified payment request. + + + + Enter a label for this address to add it to the list of used addresses + + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + + + + Do not shut down the computer until this window disappears. + + + + + SignVerifyMessageDialog + + Signatures - Sign / Verify a Message + + + + &Sign Message + + + + You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. + + + + The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Choose previously used address + + + + Alt+A + + + + Paste address from clipboard + + + + Alt+P + + + + Enter the message you want to sign here + + + + Signature + + + + Copy the current signature to the system clipboard + + + + Sign the message to prove you own this Myriadcoin address + + + + Sign &Message + + + + Reset all sign message fields + + + + Clear &All + + + + &Verify Message + + + + Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. + + + + The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Verify the message to ensure it was signed with the specified Myriadcoin address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + Click "Sign Message" to generate signature + + + + The entered address is invalid. + + + + Please check the address and try again. + + + + The entered address does not refer to a key. + + + + Wallet unlock was cancelled. + + + + Private key for the entered address is not available. + + + + Message signing failed. + + + + Message signed. + + + + The signature could not be decoded. + + + + Please check the signature and try again. + + + + The signature did not match the message digest. + + + + Message verification failed. + + + + Message verified. + + + + + SplashScreen + + Myriadcoin Core + + + + The Myriadcoin Core developers + + + + [testnet] + + + + + TrafficGraphWidget + + KB/s + + + + + TransactionDesc + + Open until %1 + + + + conflicted + + + + %1/offline + + + + %1/unconfirmed + + + + %1 confirmations + + + + Status + + + + , broadcast through %n node(s) + + + + Date + + + + Source + + + + Generated + + + + From + + + + To + + + + own address + + + + label + + + + Credit + + + + matures in %n more block(s) + + + + not accepted + + + + Debit + + + + Transaction fee + + + + Net amount + + + + Message + + + + Comment + + + + Transaction ID + + + + Merchant + + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + + + + Debug information + + + + Transaction + + + + Inputs + + + + Amount + + + + true + + + + false + + + + , has not been successfully broadcast yet + + + + Open for %n more block(s) + + + + unknown + + + + + TransactionDescDialog + + Transaction details + + + + This pane shows a detailed description of the transaction + + + + + TransactionTableModel + + Date + + + + Type + + + + Address + + + + Amount + + + + Immature (%1 confirmations, will be available after %2) + + + + Open for %n more block(s) + + + + Open until %1 + + + + Confirmed (%1 confirmations) + + + + This block was not received by any other nodes and will probably not be accepted! + + + + Generated but not accepted + + + + Offline + + + + Unconfirmed + + + + Confirming (%1 of %2 recommended confirmations) + + + + Conflicted + + + + Received with + + + + Received from + + + + Sent to + + + + Payment to yourself + + + + Mined + + + + (n/a) + + + + Transaction status. Hover over this field to show number of confirmations. + + + + Date and time that the transaction was received. + + + + Type of transaction. + + + + Destination address of transaction. + + + + Amount removed from or added to balance. + + + + + TransactionView + + All + + + + Today + + + + This week + + + + This month + + + + Last month + + + + This year + + + + Range... + + + + Received with + + + + Sent to + + + + To yourself + + + + Mined + + + + Other + + + + Enter address or label to search + + + + Min amount + + + + Copy address + + + + Copy label + + + + Copy amount + + + + Copy transaction ID + + + + Edit label + + + + Show transaction details + + + + Export Transaction History + + + + Exporting Failed + + + + There was an error trying to save the transaction history to %1. + + + + Exporting Successful + + + + The transaction history was successfully saved to %1. + + + + Comma separated file (*.csv) + + + + Confirmed + + + + Date + + + + Type + + + + Label + + + + Address + + + + Amount + + + + ID + + + + Range: + + + + to + + + + + WalletFrame + + No wallet has been loaded. + + + + + WalletModel + + Send Coins + + + + + WalletView + + &Export + + + + Export the data in the current tab to a file + + + + Backup Wallet + + + + Wallet Data (*.dat) + + + + Backup Failed + + + + There was an error trying to save the wallet data to %1. + + + + The wallet data was successfully saved to %1. + + + + Backup Successful + + + + + bitcoin-core + + Usage: + + + + List commands + + + + Get help for a command + + + + Options: + + + + Specify configuration file (default: myriadcoin.conf) + + + + Specify pid file (default: myriadcoind.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 8333 or testnet: 18333) + + + + Maintain at most <n> connections to peers (default: 125) + + + + Connect to a node to retrieve peer addresses, and disconnect + + + + Specify your own public address + + + + Threshold for disconnecting misbehaving peers (default: 100) + + + + Number of seconds to keep misbehaving peers from reconnecting (default: 86400) + + + + An error occurred while setting up the RPC port %u for listening on IPv4: %s + + + + Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) + + + + Accept command line and JSON-RPC commands + + + + Myriadcoin Core RPC client version + + + + Run in the background as a daemon and accept commands + + + + Use the test network + + + + Accept connections from outside (default: 1 if no -proxy or -connect) + + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=myriadcoinrpc +rpcpassword=%s +(you do not need to remember this password) +The username and password MUST NOT be the same. +If the file does not exist, create it with owner-readable-only file permissions. +It is also recommended to set alertnotify so you are notified of problems; +for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com + + + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + + + + An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s + + + + Bind to given address and always listen on it. Use [host]:port notation for IPv6 + + + + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + + + + Error: Listening for incoming connections failed (listen returned error %d) + + + + Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + + + + Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! + + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + + + + Fees smaller than this are considered zero fee (for transaction creation) (default: + + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + + + + In this mode -genproclimit controls how many blocks are generated immediately. + + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + + + + This is a pre-release test build - use at your own risk - do not use for mining or merchant applications + + + + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + + + + Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. + + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. + + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + + + + Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. + + + + (default: 1) + + + + (default: wallet.dat) + + + + <category> can be: + + + + Attempt to recover private keys from a corrupt wallet.dat + + + + Myriadcoin Core Daemon + + + + Block creation options: + + + + Clear list of wallet transactions (diagnostic tool; implies -rescan) + + + + Connect only to the specified node(s) + + + + Connect through SOCKS proxy + + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + + + + Connection options: + + + + Corrupted block database detected + + + + Debugging/Testing options: + + + + Disable safemode, override a real safe mode event (default: 0) + + + + Discover own IP address (default: 1 when listening and no -externalip) + + + + Do not load the wallet and disable wallet RPC calls + + + + Do you want to rebuild the block database now? + + + + Error initializing block database + + + + Error initializing wallet database environment %s! + + + + Error loading block database + + + + Error opening block database + + + + Error: Disk space is low! + + + + Error: Wallet locked, unable to create transaction! + + + + Error: system error: + + + + Failed to listen on any port. Use -listen=0 if you want this. + + + + Failed to read block info + + + + Failed to read block + + + + Failed to sync block index + + + + Failed to write block index + + + + Failed to write block info + + + + Failed to write block + + + + Failed to write file info + + + + Failed to write to coin database + + + + Failed to write transaction index + + + + Failed to write undo data + + + + Fee per kB to add to transactions you send + + + + Fees smaller than this are considered zero fee (for relaying) (default: + + + + Find peers using DNS lookup (default: 1 unless -connect) + + + + Force safe mode (default: 0) + + + + Generate coins (default: 0) + + + + How many blocks to check at startup (default: 288, 0 = all) + + + + If <category> is not supplied, output all debugging information. + + + + Importing... + + + + Incorrect or no genesis block found. Wrong datadir for network? + + + + Invalid -onion address: '%s' + + + + Not enough file descriptors available. + + + + Prepend debug output with timestamp (default: 1) + + + + RPC client options: + + + + Rebuild block chain index from current blk000??.dat files + + + + Select SOCKS version for -proxy (4 or 5, default: 5) + + + + Set database cache size in megabytes (%d to %d, default: %d) + + + + Set maximum block size in bytes (default: %d) + + + + Set the number of threads to service RPC calls (default: 4) + + + + Specify wallet file (within data directory) + + + + Spend unconfirmed change when sending transactions (default: 1) + + + + This is intended for regression testing tools and app development. + + + + Usage (deprecated, use myriadcoin-cli): + + + + Verifying blocks... + + + + Verifying wallet... + + + + Wait for RPC server to start + + + + Wallet %s resides outside data directory %s + + + + Wallet options: + + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + + + + You need to rebuild the database using -reindex to change -txindex + + + + Imports blocks from external blk000??.dat file + + + + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + + + + Output debugging information (default: 0, supplying <category> is optional) + + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + + + + Information + + + + Invalid amount for -minrelaytxfee=<amount>: '%s' + + + + Invalid amount for -mintxfee=<amount>: '%s' + + + + Limit size of signature cache to <n> entries (default: 50000) + + + + Log transaction priority and fee per kB when mining blocks (default: 0) + + + + Maintain a full transaction index (default: 0) + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + Only accept block chain matching built-in checkpoints (default: 1) + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + + + + Print block on startup, if found in block index + + + + Print block tree on startup (default: 0) + + + + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + RPC server options: + + + + Randomly drop 1 of every <n> network messages + + + + Randomly fuzz 1 of every <n> network messages + + + + Run a thread to flush wallet periodically (default: 1) + + + + SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + + + + Send command to Myriadcoin Core + + + + Send trace/debug info to console instead of debug.log file + + + + Set minimum block size in bytes (default: 0) + + + + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + + + + Show all debugging options (usage: --help -help-debug) + + + + Show benchmark information (default: 0) + + + + Shrink debug.log file on client startup (default: 1 when no -debug) + + + + Signing transaction failed + + + + Specify connection timeout in milliseconds (default: 5000) + + + + Start Myriadcoin Core Daemon + + + + System error: + + + + Transaction amount too small + + + + Transaction amounts must be positive + + + + Transaction too large + + + + Use UPnP to map the listening port (default: 0) + + + + Use UPnP to map the listening port (default: 1 when listening) + + + + Username for JSON-RPC connections + + + + Warning + + + + Warning: This version is obsolete, upgrade required! + + + + Zapping all transactions from wallet... + + + + on startup + + + + version + + + + wallet.dat corrupt, salvage failed + + + + Password for JSON-RPC connections + + + + Allow JSON-RPC connections from specified IP address + + + + Send commands to node running on <ip> (default: 127.0.0.1) + + + + Execute command when the best block changes (%s in cmd is replaced by block hash) + + + + Upgrade wallet to latest format + + + + Set key pool size to <n> (default: 100) + + + + Rescan the block chain for missing wallet transactions + + + + Use OpenSSL (https) for JSON-RPC connections + + + + Server certificate file (default: server.cert) + + + + Server private key (default: server.pem) + + + + This help message + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + Allow DNS lookups for -addnode, -seednode and -connect + + + + Loading addresses... + + + + Error loading wallet.dat: Wallet corrupted + + + + Error loading wallet.dat: Wallet requires newer version of Myriadcoin + + + + Wallet needed to be rewritten: restart Myriadcoin to complete + + + + Error loading wallet.dat + + + + Invalid -proxy address: '%s' + + + + Unknown network specified in -onlynet: '%s' + + + + Unknown -socks proxy version requested: %i + + + + Cannot resolve -bind address: '%s' + + + + Cannot resolve -externalip address: '%s' + + + + Invalid amount for -paytxfee=<amount>: '%s' + + + + Invalid amount + + + + Insufficient funds + + + + Loading block index... + + + + Add a node to connect to and attempt to keep the connection open + + + + Loading wallet... + + + + Cannot downgrade wallet + + + + Cannot write default address + + + + Rescanning... + + + + Done loading + + + + To use the %s option + + + + Error + + + + You must set rpcpassword=<password> in the configuration file: +%s +If the file does not exist, create it with owner-readable-only file permissions. + + + + \ No newline at end of file diff --git a/src/qt/locale/bitcoin_zh_TW.ts b/src/qt/locale/bitcoin_zh_TW.ts index e825d0c0..a39bc21a 100644 --- a/src/qt/locale/bitcoin_zh_TW.ts +++ b/src/qt/locale/bitcoin_zh_TW.ts @@ -1,19 +1,15 @@ - -UTF-8 + AboutDialog - - About Myriadcoin - 關於位元幣 + About Myriadcoin Core + 關於位元幣核心 - - <b>Myriadcoin</b> version - <b>位元幣</b>版本 + <b>Myriadcoin Core</b> version + <b>位元幣核心</b> 版本 - This is experimental software. @@ -21,621 +17,531 @@ Distributed under the MIT/X11 software license, see the accompanying file COPYIN This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. -這是一套實驗性的軟體. +位元幣,原名是 Bitcoin, 又叫做比特幣。 -此軟體是依據 MIT/X11 軟體授權條款散布, 詳情請見附帶的 COPYING 檔案, 或是以下網站: http://www.opensource.org/licenses/mit-license.php. +這是一套實驗性的軟體。 -此產品也包含了由 OpenSSL Project 所開發的 OpenSSL Toolkit (http://www.openssl.org/) 軟體, 由 Eric Young (eay@cryptsoft.com) 撰寫的加解密軟體, 以及由 Thomas Bernard 所撰寫的 UPnP 軟體. +這套軟體是依據 MIT/X11 軟體授權條款散布,詳情請見附帶的 COPYING 檔案,或是以下網站: http://www.opensource.org/licenses/mit-license.php. + +此產品也包含了由 OpenSSL Project 所開發的 OpenSSL Toolkit (http://www.openssl.org/) 軟體,和由 Eric Young (eay@cryptsoft.com) 撰寫的加解密軟體,以及由 Thomas Bernard 所撰寫的 UPnP 軟體。 - Copyright 版權 - - The Myriadcoin developers - 位元幣開發人員 + The Myriadcoin Core developers + 位元幣核心開發人員 + + + (%1-bit) + (%1 位元) AddressBookPage - - Address Book - 位址簿 - - - Double-click to edit address or label - 點兩下來修改位址或標記 + 按兩下來編輯位址或標記 - Create a new address - 產生新位址 + 製造新的位址 + + + &New + 新增 - Copy the currently selected address to the system clipboard - 複製目前選取的位址到系統剪貼簿 + 複製目前選擇的位址到系統剪貼簿 - - &New Address - 新增位址 + &Copy + 複製 - - These are your Myriadcoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - 這些是你用來收款的位元幣位址. 你可以提供不同的位址給不同的付款人, 來追蹤是誰支付給你. + C&lose + 關閉 - &Copy Address 複製位址 - - Show &QR Code - 顯示 &QR 條碼 - - - - Sign a message to prove you own a Myriadcoin address - 簽署訊息是用來證明位元幣位址是你的 - - - - Sign &Message - 訊息簽署 - - - Delete the currently selected address from the list - 從列表中刪除目前選取的位址 + 把目前選擇的位址從列表中刪掉 - Export the data in the current tab to a file - 將目前分頁的資料匯出存成檔案 + 把目前分頁的資料匯出存成檔案 - &Export 匯出 - - Verify a message to ensure it was signed with a specified Myriadcoin address - 驗證訊息是用來確認訊息是用指定的位元幣位址簽署的 - - - - &Verify Message - 訊息驗證 - - - &Delete - 刪除 + 刪掉 + + + Choose the address to send coins to + 選擇要付錢過去的位址 + + + Choose the address to receive coins with + 選擇要收錢進來的位址 + + + C&hoose + 選取 + + + Sending addresses + 付款位址 + + + Receiving addresses + 收款位址 - These are your Myriadcoin addresses for sending payments. Always check the amount and the receiving address before sending coins. - 這是你用來付款的位元幣位址. 在付錢之前, 務必要檢查金額和收款位址是否正確. + 這些是你要付款過去的位元幣位址。在付錢之前,務必要檢查金額和收款位址是否正確。 + + + These are your Myriadcoin addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + 這些是你用來收款的位元幣位址。建議在每次交易時,都使用一個新的收款位址。 - Copy &Label 複製標記 - &Edit 編輯 - - Send &Coins - 付錢 + Export Address List + 匯出位址清單 - - Export Address Book Data - 匯出位址簿資料 - - - Comma separated file (*.csv) - 逗號區隔資料檔 (*.csv) + 逗號分隔資料檔(*.csv) - - Error exporting + Exporting Failed 匯出失敗 - - Could not write to file %1. - 無法寫入檔案 %1. + There was an error trying to save the address list to %1. + 儲存位址列表到 %1 時發生錯誤。 AddressTableModel - Label 標記 - Address 位址 - (no label) - (沒有標記) + (無標記) AskPassphraseDialog - Passphrase Dialog 密碼對話視窗 - Enter passphrase - 輸入密碼 + 請輸入密碼 - New passphrase - 新的密碼 + 新密碼 - Repeat new passphrase 重複新密碼 - Enter the new passphrase to the wallet.<br/>Please use a passphrase of <b>10 or more random characters</b>, or <b>eight or more words</b>. - 輸入錢包的新密碼.<br/>請用<b>10個以上的字元</b>, 或是<b>8個以上的單字</b>. + 請輸入錢包的新密碼。<br/>建議用<b>10 個以上的任意字元</b>,或是<b>8 個以上的單字</b>。 - Encrypt wallet - 錢包加密 + 加密錢包 - This operation needs your wallet passphrase to unlock the wallet. - 這個動作需要用你的錢包密碼來解鎖 + 這個動作需要你的錢包密碼來解鎖錢包。 - Unlock wallet - 錢包解鎖 + 解鎖錢包 - This operation needs your wallet passphrase to decrypt the wallet. - 這個動作需要用你的錢包密碼來解密 + 這個動作需要你的錢包密碼來把錢包解密。 - Decrypt wallet - 錢包解密 + 解密錢包 - Change passphrase - 變更密碼 + 改變密碼 - Enter the old and new passphrase to the wallet. - 輸入錢包的新舊密碼. + 請輸入錢包的舊密碼及新密碼。 - Confirm wallet encryption - 錢包加密確認 + 確認錢包加密 - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR MYRIADCOINS</b>! - 警告: 如果將錢包加密後忘記密碼, 你會<b>失去其中所有的位元幣</b>! + 警告: 如果把錢包加密後又忘記密碼,你就會從此<b>失去其中所有的位元幣了</b>! - Are you sure you wish to encrypt your wallet? - 你確定要將錢包加密嗎? + 你確定要把錢包加密嗎? - 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. - 重要: 請改用新產生有加密的錢包檔, 來取代之前錢包檔的備份. 為了安全性的理由, 當你開始使用新的有加密的錢包時, 舊錢包的備份就不能再使用了. + 重要: 請改用新產生有加密的錢包檔,來取代舊錢包檔的備份。為了安全性的理由,當你開始使用新的有加密的錢包後,舊錢包檔的備份就不能再使用了。 - - Warning: The Caps Lock key is on! - 警告: 大寫字母鎖定作用中! + 警告: 大寫字母鎖定作用中! - - Wallet encrypted 錢包已加密 - Myriadcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your myriadcoins from being stolen by malware infecting your computer. - 位元幣現在要關閉以完成加密程序. 請記住, 加密錢包無法完全防止入侵電腦的惡意程式偷取你的位元幣. + 位元幣軟體現在要關閉,好完成加密程序。請注意,加密錢包不能完全防止入侵你的電腦的惡意程式偷取位元幣。 - - - - Wallet encryption failed 錢包加密失敗 - Wallet encryption failed due to an internal error. Your wallet was not encrypted. - 錢包加密因程式內部錯誤而失敗. 你的錢包還是沒有加密. + 因為內部錯誤導致錢包加密失敗。你的錢包還是沒加密。 - - The supplied passphrases do not match. - 提供的密碼不符. + 提供的密碼不一樣。 - Wallet unlock failed 錢包解鎖失敗 - - - The passphrase entered for the wallet decryption was incorrect. - 用來解密錢包的密碼輸入錯誤. + 輸入要用來解密錢包的密碼不對。 - Wallet decryption failed 錢包解密失敗 - Wallet passphrase was successfully changed. - 錢包密碼變更成功. + 錢包密碼改成功了。 BitcoinGUI - Sign &message... - 訊息簽署... + 簽署訊息... - Synchronizing with network... - 網路同步中... + 正在跟網路進行同步... - &Overview 總覽 - + Node + 節點 + + Show general overview of wallet 顯示錢包一般總覽 - &Transactions 交易 - Browse transaction history 瀏覽交易紀錄 - - Edit the list of stored addresses and labels - 編輯位址與標記的儲存列表 - - - - Show the list of addresses for receiving payments - 顯示收款位址的列表 - - - E&xit 結束 - Quit application 結束應用程式 - Show information about Myriadcoin - 顯示位元幣相關資訊 + 顯示位元幣軟體相關資訊 - About &Qt 關於 &Qt - Show information about Qt - 顯示有關於 Qt 的資訊 + 顯示 Qt 相關資訊 - &Options... 選項... - &Encrypt Wallet... - 錢包加密... + 加密錢包... - &Backup Wallet... - 錢包備份... + 備份錢包... - &Change Passphrase... - 密碼變更... + 改變密碼... + + + &Sending addresses... + 付款位址... + + + &Receiving addresses... + 收款位址... + + + Open &URI... + 開啓 URI... - Importing blocks from disk... - 從磁碟匯入區塊中... + 正在從磁碟匯入區塊資料... - Reindexing blocks on disk... - 重建磁碟區塊索引中... + 正在為磁碟裡的區塊重建索引... - Send coins to a Myriadcoin address - 付錢到位元幣位址 + 付錢給一個位元幣位址 - Modify configuration options for Myriadcoin - 修改位元幣的設定選項 + 修改位元幣軟體的設定選項 - Backup wallet to another location - 將錢包備份到其它地方 + 把錢包備份到其它地方 - Change the passphrase used for wallet encryption - 變更錢包加密用的密碼 + 改變錢包加密用的密碼 - &Debug window 除錯視窗 - Open debugging and diagnostic console - 開啓除錯與診斷主控台 + 開啓除錯和診斷主控台 - &Verify message... 驗證訊息... - - Myriadcoin 位元幣 - Wallet 錢包 - &Send - 付出 + 付款 - &Receive - 收受 + 收款 - - &Addresses - 位址 - - - - &About Myriadcoin - 關於位元幣 - - - &Show / Hide 顯示或隱藏 - Show or hide the main Window 顯示或隱藏主視窗 - Encrypt the private keys that belong to your wallet - 將屬於你的錢包的密鑰加密 + 把錢包中的密鑰加密 - Sign messages with your Myriadcoin addresses to prove you own them - 用位元幣位址簽署訊息來證明那是你的 + 用位元幣位址簽署訊息來證明位址是你的 - Verify messages to ensure they were signed with specified Myriadcoin addresses - 驗證訊息來確認是用指定的位元幣位址簽署的 + 驗證訊息是用來確定訊息是用指定的位元幣位址簽署的 - &File 檔案 - &Settings 設定 - &Help - 求助 + 說明 - Tabs toolbar 分頁工具列 - - [testnet] [testnet] - + Myriadcoin Core + 位元幣核心 + + + Request payments (generates QR codes and myriadcoin: URIs) + 要求付款(產生 QR Code 和位元幣付款協議的 URI) + + + &About Myriadcoin Core + 關於位元幣核心 + + + Show the list of used sending addresses and labels + 顯示已使用過的付款位址和標記的清單 + + + Show the list of used receiving addresses and labels + 顯示已使用過的收款位址和標記的清單 + + + Open a myriadcoin: URI or payment request + 開啓 myriadcoin 協議的 URI 或付款要求 + + + &Command-line options + 命令列選項 + + + Show the Myriadcoin Core help message to get a list with possible Myriadcoin command-line options + 顯示位元幣核心的說明訊息,來取得可用命令列選項的列表 + + Myriadcoin client 位元幣客戶端軟體 - %n active connection(s) to Myriadcoin network - 與位元幣網路有 %n 個連線在使用中 + %n 個運作中的位元幣網路連線 - No block source available... - 目前沒有區塊來源... + 沒有可用的區塊來源... - Processed %1 of %2 (estimated) blocks of transaction history. - 已處理了估計全部 %2 個中的 %1 個區塊的交易紀錄. + 已處理了估計全部 %2 個區塊中的 %1 個的交易紀錄。 - Processed %1 blocks of transaction history. - 已處理了 %1 個區塊的交易紀錄. + 已處理了 %1 個區塊的交易紀錄。 - %n hour(s) %n 個小時 - %n day(s) %n 天 - %n week(s) %n 個星期 - + %1 and %2 + %1又 %2 + + + %n year(s) + %n 年 + + %1 behind 落後 %1 - Last received block was generated %1 ago. - 最近收到的區塊是在 %1 之前生產出來. + 最近收到的區塊是在 %1 以前生出來的。 - Transactions after this will not yet be visible. - 會看不見在這之後的交易. + 暫時會看不到在這之後的交易。 - Error 錯誤 - Warning 警告 - Information 資訊 - - This transaction is over the size limit. You can still send it for a fee of %1, which goes to the nodes that process your transaction and helps to support the network. Do you want to pay the fee? - 這筆交易的資料大小超過限制了. 你還是可以付出 %1 的費用來傳送, 這筆費用會付給處理你的交易的節點, 並幫助維持整個網路. 你願意支付這項費用嗎? - - - Up to date 最新狀態 - Catching up... - 進度追趕中... + 正在趕進度... - - Confirm transaction fee - 確認交易手續費 - - - Sent transaction 付款交易 - Incoming transaction 收款交易 - Date: %1 Amount: %2 Type: %3 @@ -643,1191 +549,1740 @@ Address: %4 日期: %1 金額: %2 -類別: %3 -位址: %4 +種類: %3 +位址: %4 + - - - URI handling - URI 處理 - - - - - URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. - 無法解析 URI! 也許位元幣位址無效或 URI 參數有誤. - - - Wallet is <b>encrypted</b> and currently <b>unlocked</b> - 錢包<b>已加密</b>並且正<b>解鎖中</b> + 錢包<b>已加密</b>並且<b>解鎖中</b> - Wallet is <b>encrypted</b> and currently <b>locked</b> - 錢包<b>已加密</b>並且正<b>上鎖中</b> + 錢包<b>已加密</b>並且<b>上鎖中</b> - A fatal error occurred. Myriadcoin can no longer continue safely and will quit. - 發生了致命的錯誤. 位元幣程式無法再繼續安全執行, 只好結束. + 發生了致命的錯誤。位元幣軟體沒辦法再繼續安全執行,只好結束。 ClientModel - Network Alert 網路警報 + + CoinControlDialog + + Coin Control Address Selection + 錢幣控制的位址選擇 + + + Quantity: + 數目: + + + Bytes: + 位元組數: + + + Amount: + 金額: + + + Priority: + 優先度: + + + Fee: + 手續費: + + + Low Output: + 低輸出: + + + After Fee: + 計費後金額: + + + Change: + 找零金額: + + + (un)select all + 全選或全不選 + + + Tree mode + 樹狀模式 + + + List mode + 列表模式 + + + Amount + 金額 + + + Address + 位址 + + + Date + 日期 + + + Confirmations + 確認次數 + + + Confirmed + 已確認 + + + Priority + 優先度 + + + Copy address + 複製位址 + + + Copy label + 複製標記 + + + Copy amount + 複製金額 + + + Copy transaction ID + 複製交易識別碼 + + + Lock unspent + 鎖定不用 + + + Unlock unspent + 解鎖可用 + + + Copy quantity + 複製數目 + + + Copy fee + 複製手續費 + + + Copy after fee + 複製計費後金額 + + + Copy bytes + 複製位元組數 + + + Copy priority + 複製優先度 + + + Copy low output + 複製低輸出 + + + Copy change + 複製找零金額 + + + highest + 最高 + + + higher + 很高 + + + high + 高 + + + medium-high + 中高 + + + medium + 中等 + + + low-medium + 中低 + + + low + 低 + + + lower + 很低 + + + lowest + 最低 + + + (%1 locked) + (鎖定 %1 枚) + + + none + 無 + + + Dust + 零散錢 + + + yes + 是 + + + no + 否 + + + This label turns red, if the transaction size is greater than 1000 bytes. + 當交易大小大於 1000 位元組時,文字會變紅色。 + + + This means a fee of at least %1 per kB is required. + 表示每一千位元組(kB)需要至少 %1 的手續費。 + + + Can vary +/- 1 byte per input. + 每組輸入可能會誤差多或少 1 個位元組。 + + + Transactions with higher priority are more likely to get included into a block. + 優先度較高的交易比較有可能被接受放進區塊中。 + + + This label turns red, if the priority is smaller than "medium". + 當優先度低於「中等」時,文字會變紅色。 + + + This label turns red, if any recipient receives an amount smaller than %1. + 當任何一個收款金額小於 %1 時,文字會變紅色。 + + + This means a fee of at least %1 is required. + 表示至少需要 %1 的交易手續費。 + + + Amounts below 0.546 times the minimum relay fee are shown as dust. + 當金額低於最低轉發手續費乘以 0.546 時,會顯示成零散錢。 + + + This label turns red, if the change is smaller than %1. + 當找零金額小於 %1 時,文字會變紅色。 + + + (no label) + (無標記) + + + change from %1 (%2) + 找零前是 %1 (%2) + + + (change) + (找零) + + EditAddressDialog - Edit Address 編輯位址 - &Label 標記 - - The label associated with this address book entry - 與這個位址簿項目關聯的標記 + The label associated with this address list entry + 跟這個位址簿項目關聯的標記 + + + The address associated with this address list entry. This can only be modified for sending addresses. + 跟這個位址簿項目關聯的位址。只有付款位址能被修改。 - &Address 位址 - - The address associated with this address book entry. This can only be modified for sending addresses. - 與這個位址簿項目關聯的位址. 付款位址才能被更改. - - - New receiving address - 新收款位址 + 造新的收款位址 - New sending address - 新增付款位址 + 造新的付款位址 - Edit receiving address 編輯收款位址 - Edit sending address 編輯付款位址 - The entered address "%1" is already in the address book. - 輸入的位址"%1"已存在於位址簿中. + 輸入的位址 %1 在位址簿中已經有了。 - The entered address "%1" is not a valid Myriadcoin address. - 輸入的位址 "%1" 並不是有效的位元幣位址. + 輸入的位址 %1 並不是有效的位元幣位址。 - Could not unlock wallet. - 無法將錢包解鎖. + 沒辦法把錢包解鎖。 - New key generation failed. - 新密鑰產生失敗. + 產生新的密鑰失敗了。 - GUIUtil::HelpMessageBox + FreespaceChecker - - - Myriadcoin-Qt - 位元幣-Qt + A new data directory will be created. + 就要造出新的資料目錄。 + + + name + 名稱 + + + Directory already exists. Add %1 if you intend to create a new directory here. + 已經有這個目錄了。如果你要在裡面造出新的目錄的話,請加上 %1. + + + Path already exists, and is not a directory. + 已經有指定的路徑了,並且不是一個目錄。 + + + Cannot create data directory here. + 沒辦法在這裡造出資料目錄。 + + + + HelpMessageDialog + + Myriadcoin Core - Command-line options + 位元幣核心 - 命令列選項 + + + Myriadcoin Core + 位元幣核心 - version 版本 - Usage: 用法: - command-line options 命令列選項 - UI options 使用界面選項 - Set language, for example "de_DE" (default: system locale) - 設定語言, 比如說 "de_DE" (預設: 系統語系) + 設定語言,比如說 de_DE (預設值: 系統語系) - Start minimized - 啓動時最小化 - + 啓動時縮到最小 + + + Set SSL root certificates for payment request (default: -system-) + 設定付款請求時所使用的 SSL 根憑證 (預設值: 系統憑證庫) - Show splash screen on startup (default: 1) - 顯示啓動畫面 (預設: 1) + 顯示啓動畫面(預設值: 1) + + + Choose data directory on startup (default: 0) + 啓動時選擇資料目錄(預設值: 0) + + + + Intro + + Welcome + 歡迎 + + + Welcome to Myriadcoin Core. + 歡迎使用位元幣核心 + + + As this is the first time the program is launched, you can choose where Myriadcoin Core will store its data. + 因為這是程式第一次啓動,你可以選擇位元幣核心儲存資料的地方。 + + + Myriadcoin Core will download and store a copy of the Myriadcoin block chain. At least %1GB of data will be stored in this directory, and it will grow over time. The wallet will also be stored in this directory. + 位元幣核心會下載並儲存一份位元幣區塊鏈的拷貝。至少有 %1GB 的資料會儲存到這個目錄中,並且還會持續增長。另外錢包資料也會儲存在這個目錄。 + + + Use the default data directory + 使用預設的資料目錄 + + + Use a custom data directory: + 使用自定的資料目錄: + + + Myriadcoin + 位元幣 + + + Error: Specified data directory "%1" can not be created. + 錯誤: 沒辦法造出指定的資料目錄 %1 。 + + + Error + 錯誤 + + + GB of free space available + GB 可用空間 + + + (of %1GB needed) + (需要 %1GB) + + + + OpenURIDialog + + Open URI + 開啓 URI + + + Open payment request from URI or file + 從 URI 或檔案開啟付款要求 + + + URI: + URI: + + + Select payment request file + 選擇付款要求資料檔 + + + Select payment request file to open + 選擇要開啟的付款要求資料檔 OptionsDialog - Options 選項 - &Main 主要 - Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. - 非必要的交易手續費, 以 kB 為計費單位, 且有助於縮短你的交易處理時間. 大部份交易資料的大小是 1 kB. + 每一千位元組(kB)要付的交易手續費,如果有付可以加速網路處理你的交易。大部份交易資料的大小是 1 kB. - Pay transaction &fee 付交易手續費 - Automatically start Myriadcoin after logging in to the system. - 在登入系統後自動啓動位元幣. + 在登入系統後自動啓動位元幣軟體。 - &Start Myriadcoin on system login 系統登入時啟動位元幣 - + Size of &database cache + 資料庫快取大小 + + + MB + MB (百萬位元組) + + + Number of script &verification threads + 指令碼驗證執行緒數目 + + + Connect to the Myriadcoin network through a SOCKS proxy. + 透過 SOCKS 代理伺服器來連線到位元幣網路。 + + + &Connect through SOCKS proxy (default proxy): + 透過 SOCKS 代理伺服器連線(預設代理伺服器): + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + 代理伺服器的網際網路位址(像是 IPv4 的 127.0.0.1 或 IPv6 的 ::1) + + + 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 |. + 在交易頁籤的情境選單出現的第三方(比如說區塊探索網站)網址連結。網址中的 %s 會被取代為交易的雜湊值。可以用直線符號 | 來分隔多個連結。 + + + Third party transaction URLs + 交易的第三方網址連結 + + + Active command-line options that override above options: + 從命令列取代掉以上設定的選項有: + + Reset all client options to default. - 回復所有客戶端軟體選項成預設值. + 重設所有客戶端軟體選項成預設值。 - &Reset Options - 選項回復 + 重設選項 - &Network 網路 - - Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. - 自動在路由器上開啟 Myriadcoin 的客戶端通訊埠. 只有在你的路由器支援 UPnP 且開啟時才有作用. + (0 = auto, <0 = leave that many cores free) + (0 表示程式自動決定,小於 0 表示保留處理器核心不用的數目) + + + W&allet + 錢包 + + + Expert + 專家 + + + Enable coin &control features + 開啟錢幣控制功能 + + + If you disable the spending of unconfirmed change, the change from a transaction cannot be used until that transaction has at least one confirmation. This also affects how your balance is computed. + 如果你關掉「可以花還沒確認的零錢」,那麼交易中找零的零錢就必須要等交易至少有一次確認後,才能夠使用。這也會影響餘額的計算方式。 + + + &Spend unconfirmed change + 可以花還沒確認的零錢 + + + Automatically open the Myriadcoin client port on the router. This only works when your router supports UPnP and it is enabled. + 自動在路由器上開放位元幣的客戶端通訊埠。只有在你的路由器支援且開啓「通用即插即用」協定(UPnP)時才有作用。 - Map port using &UPnP 用 &UPnP 設定通訊埠對應 - - Connect to the Myriadcoin network through a SOCKS proxy (e.g. when connecting through Tor). - 透過 SOCKS 代理伺服器連線至位元幣網路 (比如說要透過 Tor 連線). - - - - &Connect through SOCKS proxy: - 透過 SOCKS 代理伺服器連線: - - - Proxy &IP: - 代理伺服器位址: + 代理位址: - - IP address of the proxy (e.g. 127.0.0.1) - 代理伺服器的網際網路位址 (比如說 127.0.0.1) - - - &Port: - 通訊埠: + 埠號: - Port of the proxy (e.g. 9050) - 代理伺服器的通訊埠 (比如說 9050) + 代理伺服器的通訊埠(像是 9050) - SOCKS &Version: - SOCKS 協定版本: + SOCKS 版本: - SOCKS version of the proxy (e.g. 5) - 代理伺服器的 SOCKS 協定版本 (比如說 5) + 代理伺服器的 SOCKS 協定版本(像是 5) - &Window 視窗 - Show only a tray icon after minimizing the window. - 最小化視窗後只在通知區域顯示圖示 + 視窗縮到最小後只在通知區域顯示圖示。 - &Minimize to the tray instead of the taskbar - 最小化至通知區域而非工作列 + 縮到最小到通知區域而不是工作列 - Minimize instead of exit the application when the window is closed. When this option is enabled, the application will be closed only after selecting Quit in the menu. - 當視窗關閉時將其最小化, 而非結束應用程式. 當勾選這個選項時, 應用程式只能用選單中的結束來停止執行. + 當視窗關閉時,把應用程式縮到最小,而不是結束。當勾選這個選項時,只能夠用選單中的結束來關掉應用程式。 - M&inimize on close - 關閉時最小化 + 關閉時縮到最小 - &Display 顯示 - User Interface &language: - 使用界面語言 + 使用界面語言: - The user interface language can be set here. This setting will take effect after restarting Myriadcoin. - 可以在這裡設定使用者介面的語言. 這個設定在位元幣程式重啓後才會生效. + 可以在這裡設定使用者介面的語言。這個設定在重啓位元幣軟體後才會生效。 - &Unit to show amounts in: 金額顯示單位: - Choose the default subdivision unit to show in the interface and when sending coins. - 選擇操作界面與付錢時預設顯示的細分單位. + 選擇操作界面和付款時,預設顯示金額的細分單位。 - Whether to show Myriadcoin addresses in the transaction list or not. - 是否要在交易列表中顯示位元幣位址. + 是否要在交易列表中顯示位元幣位址。 - &Display addresses in transaction list 在交易列表顯示位址 - + Whether to show coin control features or not. + 是否要顯示錢幣控制功能。 + + &OK 好 - &Cancel 取消 - - &Apply - 套用 - - - default - 預設 + 預設值 + + + none + 無 - Confirm options reset - 確認回復選項 + 確認重設選項 - - Some settings may require a client restart to take effect. - 有些設定可能需要重新啓動客戶端軟體才會生效. + Client restart required to activate changes. + 需要重新啟動客戶端軟體來讓改變生效。 - - Do you want to proceed? - 你想要就做下去嗎? + Client will be shutdown, do you want to proceed? + 客戶端軟體就要關掉了,繼續做下去嗎? - - - Warning - 警告 + This change would require a client restart. + 這項改變需要重新啟動客戶端軟體。 - - - This setting will take effect after restarting Myriadcoin. - 這個設定會在位元幣程式重啓後生效. - - - The supplied proxy address is invalid. - 提供的代理伺服器位址無效 + 提供的代理伺服器位址無效。 OverviewPage - Form 表單 - - The displayed information may be out of date. Your wallet automatically synchronizes with the Myriadcoin network after a connection is established, but this process has not completed yet. - 顯示的資訊可能是過期的. 與位元幣網路的連線建立後, 你的錢包會自動和網路同步, 但這個步驟還沒完成. + 顯示的資訊可能是過期的。跟位元幣網路的連線建立後,你的錢包會自動和網路同步,但是這個步驟還沒完成。 - - Balance: - 餘額: - - - - Unconfirmed: - 未確認額: - - - Wallet 錢包 - + Available: + 可用金額: + + + Your current spendable balance + 目前可用餘額 + + + Pending: + 未定金額: + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + 還沒被確認的交易的總金額,可用餘額不包含這些金額 + + Immature: - 未熟成 + 未成熟金額: - Mined balance that has not yet matured - 尚未熟成的開採金額 + 還沒成熟的開採金額 + + + Total: + 總金額: + + + Your current total balance + 目前全部餘額 - <b>Recent transactions</b> <b>最近交易</b> - - Your current balance - 目前餘額 - - - - Total of transactions that have yet to be confirmed, and do not yet count toward the current balance - 尚未確認之交易的總額, 不包含在目前餘額中 - - - - out of sync - 沒同步 + 還沒同步 PaymentServer - + URI handling + URI 處理 + + + URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters. + 沒辦法解析 URI 位址!可能是因為位元幣位址無效,或是 URI 參數格式錯誤。 + + + Requested payment amount of %1 is too small (considered dust). + 要求付款的金額 %1 太少(會被網路認為是沒必要的零散錢)。 + + + Payment request error + 要求付款時發生錯誤 + + Cannot start myriadcoin: click-to-pay handler - 無法啟動 myriadcoin 隨按隨付處理器 + 沒辦法啟動 myriadcoin 協議的按就付處理器 + + + Net manager warning + 網路管理員警告 + + + Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy. + 目前使用中的代理伺服器不支援 SOCKS5 通訊協定,因此不能透過它來要求付款。 + + + Payment request fetch URL is invalid: %1 + 取得付款要求的 URL 無效: %1 + + + Payment request file handling + 處理付款要求檔案 + + + Payment request file can not be read or processed! This can be caused by an invalid payment request file. + 沒辦法讀或處理付款要求檔案!可能是無效的檔案造成的。 + + + Unverified payment requests to custom payment scripts are unsupported. + 不支援含有自訂付款指令碼,且沒驗證過的付款要求。 + + + Refund from %1 + 來自 %1 的退款 + + + Error communicating with %1: %2 + 跟 %1 通訊時發生錯誤: %2 + + + Payment request can not be parsed or processed! + 沒辦法解析或處理付款要求! + + + Bad response from server %1 + 伺服器 %1 的回應有誤 + + + Payment acknowledged + 已確認付款 + + + Network request error + 發出要求時發生網路錯誤 - QRCodeDialog + QObject - - QR Code Dialog - QR 條碼對話視窗 + Myriadcoin + 位元幣 - - Request Payment - 付款單 + Error: Specified data directory "%1" does not exist. + 錯誤: 沒有指定的資料目錄 %1 。 - - Amount: - 金額: + Error: Cannot parse configuration file: %1. Only use key=value syntax. + 錯誤: 沒辦法解析設定檔: %1。請只用「名稱=設定值」這種語法。 - - Label: - 標記: + Error: Invalid combination of -regtest and -testnet. + 錯誤: -regtest 和 -testnet 的使用組合無效。 - - Message: - 訊息: + Myriadcoin Core didn't yet exit safely... + 位元幣核心還沒有安全地結束... - - &Save As... - 儲存為... + Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + 請輸入位元幣位址(像是 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + + + + QRImageWidget + + &Save Image... + 儲存圖片... - - Error encoding URI into QR Code. - 將 URI 編碼成 QR 條碼失敗 + &Copy Image + 複製圖片 - - The entered amount is invalid, please check. - 輸入的金額無效, 請檢查看看. - - - - Resulting URI too long, try to reduce the text for label / message. - 造出的網址太長了,請把標籤或訊息的文字縮短再試看看. - - - Save QR Code - 儲存 QR 條碼 + 儲存 QR Code - - PNG Images (*.png) - PNG 圖檔 (*.png) + PNG Image (*.png) + PNG 圖檔(*.png) RPCConsole - Client name 客戶端軟體名稱 - - - - - - - - - - N/A - 無 + 未知 - Client version 客戶端軟體版本 - &Information 資訊 - - Using OpenSSL version - 使用 OpenSSL 版本 + Debug window + 除錯視窗 + + + General + 普通 + + + Using OpenSSL version + 使用的 OpenSSL 版本 - Startup time 啓動時間 - Network 網路 - + Name + 名稱 + + Number of connections 連線數 - - On testnet - 位於測試網路 - - - Block chain - 區塊鎖鏈 + 區塊鏈 - Current number of blocks 目前區塊數 - Estimated total blocks 估計總區塊數 - Last block time 最近區塊時間 - &Open 開啓 - - Command-line options - 命令列選項 - - - - Show the Myriadcoin-Qt help message to get a list with possible Myriadcoin command-line options. - 顯示位元幣-Qt的求助訊息, 來取得可用的命令列選項列表. - - - - &Show - 顯示 - - - &Console 主控台 - + &Network Traffic + 網路流量 + + + &Clear + 清掉 + + + Totals + 總計 + + + In: + 輸入: + + + Out: + 輸出: + + Build date 建置日期 - - Myriadcoin - Debug window - 位元幣 - 除錯視窗 - - - - Myriadcoin Core - 位元幣核心 - - - Debug log file 除錯紀錄檔 - Open the Myriadcoin debug log file from the current data directory. This can take a few seconds for large log files. - 從目前的資料目錄下開啓位元幣的除錯紀錄檔. 當紀錄檔很大時可能要花好幾秒的時間. + 從目前的資料目錄下開啓位元幣軟體的除錯紀錄檔。當紀錄檔很大時,可能會花好幾秒的時間。 - Clear console 清主控台 - Welcome to the Myriadcoin RPC console. - 歡迎使用位元幣 RPC 主控台. + 歡迎使用位元幣 RPC 主控台。 - Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. - 請用上下游標鍵來瀏覽歷史指令, 且可用 <b>Ctrl-L</b> 來清理畫面. + 請用上下游標鍵來瀏覽先前指令的紀錄,並用 <b>Ctrl-L</b> 來清畫面。 - Type <b>help</b> for an overview of available commands. - 請打 <b>help</b> 來看可用指令的簡介. + 請打 <b>help</b> 來看可用指令的簡介。 + + + %1 B + %1 B (位元組) + + + %1 KB + %1 KB (千位元組) + + + %1 MB + %1 MB (百萬位元組) + + + %1 GB + %1 GB (十億位元組) + + + %1 m + %1 分鐘 + + + %1 h + %1 小時 + + + %1 h %2 m + %1 小時 %2 分 + + + + ReceiveCoinsDialog + + &Amount: + 金額: + + + &Label: + 標記: + + + &Message: + 訊息: + + + Reuse one of the previously used receiving addresses. Reusing addresses has security and privacy issues. Do not use this unless re-generating a payment request made before. + 重複使用先前使用過的收款位址。重複使用位址會有安全和隱私方面的問題。除非是要重新產生先前的付款要求,不然請不要使用。 + + + R&euse an existing receiving address (not recommended) + 重複使用現有的收款位址(不建議) + + + An optional message to attach to the payment request, which will be displayed when the request is opened. Note: The message will not be sent with the payment over the Myriadcoin network. + 附加在付款要求中的訊息,可以不填,打開要求內容時會顯示。注意: 這個訊息不會隨著付款送到位元幣網路上。 + + + An optional label to associate with the new receiving address. + 跟新收款位址關聯的標記,可以不填。 + + + Use this form to request payments. All fields are <b>optional</b>. + 請用這份表單來要求付款。所有欄位都<b>可以不填</b>。 + + + An optional amount to request. Leave this empty or zero to not request a specific amount. + 要求付款的金額,可以不填。不確定金額時可以留白或是填零。 + + + Clear all fields of the form. + 把表單中的所有欄位清空。 + + + Clear + 清空 + + + Requested payments history + 先前要求付款的記錄 + + + &Request payment + 要求付款 + + + Show the selected request (does the same as double clicking an entry) + 顯示選擇的要求內容(效果跟按它兩下一樣) + + + Show + 顯示 + + + Remove the selected entries from the list + 從列表中刪掉選擇的項目 + + + Remove + 刪掉 + + + Copy label + 複製標記 + + + Copy message + 複製訊息 + + + Copy amount + 複製金額 + + + + ReceiveRequestDialog + + QR Code + QR Code + + + Copy &URI + 複製 URI + + + Copy &Address + 複製位址 + + + &Save Image... + 儲存圖片... + + + Request payment to %1 + 付款給 %1 的要求 + + + Payment information + 付款資訊 + + + URI + URI + + + Address + 位址 + + + Amount + 金額 + + + Label + 標記 + + + Message + 訊息 + + + Resulting URI too long, try to reduce the text for label / message. + 產生的 URI 過長,請試著縮短標記或訊息的文字內容。 + + + Error encoding URI into QR Code. + 把 URI 編碼成 QR Code 時發生錯誤。 + + + + RecentRequestsTableModel + + Date + 日期 + + + Label + 標記 + + + Message + 訊息 + + + Amount + 金額 + + + (no label) + (無標記) + + + (no message) + (無訊息) + + + (no amount) + (無金額) SendCoinsDialog - - - - - - - - Send Coins - 付錢 + 付款 + + + Coin Control Features + 錢幣控制功能 + + + Inputs... + 輸入... + + + automatically selected + 自動選擇 + + + Insufficient funds! + 累計金額不足! + + + Quantity: + 數目: + + + Bytes: + 位元組數: + + + Amount: + 金額: + + + Priority: + 優先度: + + + Fee: + 手續費: + + + Low Output: + 低輸出: + + + After Fee: + 計費後金額: + + + Change: + 找零金額: + + + If this is activated, but the change address is empty or invalid, change will be sent to a newly generated address. + 如果這項有打開,但是找零位址是空的或無效,那麼找零的錢會送到一個新產生的位址去。 + + + Custom change address + 自定找零位址 - Send to multiple recipients at once - 一次付給多個人 + 一次付給多個收款人 - Add &Recipient - 加收款人 + 增加收款人 - - Remove all transaction fields - 移除所有交易欄位 + Clear all fields of the form. + 把表單中的所有欄位清空。 - Clear &All 全部清掉 - Balance: 餘額: - - 123.456 BTC - 123.456 BTC - - - Confirm the send action 確認付款動作 - S&end - 付出 + 付款 - - <b>%1</b> to %2 (%3) - <b>%1</b> 給 %2 (%3) - - - Confirm send coins - 確認要付錢 + 確認付款金額 - - Are you sure you want to send %1? - 確定要付出 %1 嗎? + %1 to %2 + %1 給 %2 - - and - 和 + Copy quantity + 複製數目 + + + Copy amount + 複製金額 + + + Copy fee + 複製手續費 + + + Copy after fee + 複製計費後金額 + + + Copy bytes + 複製位元組數 + + + Copy priority + 複製優先度 + + + Copy low output + 複製低輸出 + + + Copy change + 複製找零金額 + + + Total Amount %1 (= %2) + 總金額 %1 (= %2) + + + or + 或 - The recipient address is not valid, please recheck. - 無效的收款位址, 請再檢查看看. + 收款位址無效,請再檢查看看。 - The amount to pay must be larger than 0. - 付款金額必須大於 0. + 付款金額必須大於零。 - The amount exceeds your balance. - 金額超過餘額了. + 金額超過餘額了。 - The total exceeds your balance when the %1 transaction fee is included. - 包含 %1 的交易手續費後, 總金額超過你的餘額了. + 包含 %1 的交易手續費後,總金額超過你的餘額了。 - Duplicate address found, can only send to each address once per send operation. - 發現有重複的位址. 每個付款動作中, 只能付給個別的位址一次. + 發現有重複的位址。每個付款動作中,只能付給個別的位址一次。 - - Error: Transaction creation failed! - 錯誤: 交易產生失敗! + Transaction creation failed! + 製造交易失敗了! - - Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - 錯誤: 交易被拒絕. 有時候會發生這種錯誤, 是因為你錢包中的一些錢已經被花掉了. 比如說你複製了錢包檔 wallet.dat, 然後用複製的錢包花掉了錢, 你現在所用的原來的錢包中卻沒有該筆交易紀錄. + The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. + 交易被拒絕了!有時候會發生這種錯誤,是因為你錢包中的一些錢已經被花掉了。比如說你複製了錢包檔 wallet.dat, 然後用複製的錢包花掉了錢,你現在所用的原來的錢包中,卻沒有那筆錢已經花掉的紀錄。 + + + Warning: Invalid Myriadcoin address + 警告: 位元幣位址無效 + + + (no label) + (無標記) + + + Warning: Unknown change address + 警告: 不明的找零位址 + + + Are you sure you want to send? + 你確定要付錢出去嗎? + + + added as transaction fee + 加做交易手續費 + + + Payment request expired + 付款的要求已經過期 + + + Invalid payment address %1 + 無效的付款位址 %1 SendCoinsEntry - - Form - 表單 - - - A&mount: 金額: - Pay &To: 付給: - The address to send the payment to (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - 付款的目標位址 (比如說 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + 付款的目標位址(像是 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - Enter a label for this address to add it to your address book - 輸入一個標記給這個位址, 並加到位址簿中 + 請輸入這個位址的標記來把它加進位址簿中 - &Label: 標記: - - Choose address from address book - 從位址簿中選一個位址 + Choose previously used address + 選擇先前使用過的位址 + + + This is a normal payment. + 這是一筆正常的付款。 - Alt+A Alt+A - Paste address from clipboard - 從剪貼簿貼上位址 + 貼上剪貼簿裡的位址 - Alt+P Alt+P - - Remove this recipient - 去掉這個收款人 + Remove this entry + 刪掉這個項目 - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - 輸入位元幣位址 (比如說 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + Message: + 訊息: + + + This is a verified payment request. + 這是個已驗證的付款要求。 + + + Enter a label for this address to add it to the list of used addresses + 請輸入這個位址的標記,來把它加進去已使用過位址的清單。 + + + A message that was attached to the myriadcoin: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Myriadcoin network. + 附加在位元幣付款協議 URI 中的訊息,會和交易內容一起存起來,給你自己做參考。注意: 這個訊息不會送到位元幣網路上。 + + + This is an unverified payment request. + 這是個沒驗證過的付款要求。 + + + Pay To: + 付給: + + + Memo: + 備註: + + + + ShutdownWindow + + Myriadcoin Core is shutting down... + 位元幣核心正在關閉中... + + + Do not shut down the computer until this window disappears. + 在這個視窗不見以前,請不要關掉電腦。 SignVerifyMessageDialog - Signatures - Sign / Verify a Message 簽章 - 簽署或驗證訊息 - &Sign Message - 訊息簽署 + 簽署訊息 - You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. - 你可以用自己的位址來簽署訊息, 以證明你對它的所有權. 但是請小心, 不要簽署語意含糊不清的內容, 因為釣魚式詐騙可能會用騙你簽署的手法來冒充是你. 只有在語句中的細節你都同意時才簽署. + 你可以用自己的位址簽署訊息,來證明你對位址的所有權。但是請小心,不要簽署語意含糊不清的內容,因為釣魚式詐騙可能會用騙你簽署的手法來冒充是你。只有在語句中的細節你都同意時才簽署。 - The address to sign the message with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - 用來簽署訊息的位址 (比如說 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + 用來簽署訊息的位址(像是 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - - - Choose an address from the address book - 從位址簿選一個位址 + Choose previously used address + 選擇先前使用過的位址 - - Alt+A Alt+A - Paste address from clipboard - 從剪貼簿貼上位址 + 貼上剪貼簿裡的位址 - Alt+P Alt+P - Enter the message you want to sign here - 在這裡輸入你想簽署的訊息 + 請在這裡輸入你想簽署的訊息 - Signature 簽章 - Copy the current signature to the system clipboard 複製目前的簽章到系統剪貼簿 - Sign the message to prove you own this Myriadcoin address - 簽署訊息是用來證明這個位元幣位址是你的 + 簽署這個訊息來證明這個位元幣位址是你的 - Sign &Message - 訊息簽署 + 簽署訊息 - Reset all sign message fields - 重置所有訊息簽署欄位 + 重設所有訊息簽署欄位 - - Clear &All 全部清掉 - &Verify Message - 訊息驗證 + 驗證訊息 - Enter the signing address, message (ensure you copy line breaks, spaces, tabs, etc. exactly) and signature below to verify the message. Be careful not to read more into the signature than what is in the signed message itself, to avoid being tricked by a man-in-the-middle attack. - 請在下面輸入簽署的位址, 訊息(請確認完整複製了所包含的換行, 空格, 跳位符號等等), 與簽章, 以驗證該訊息. 請小心, 除了訊息內容外, 不要對簽章本身過度解讀, 以避免被用"中間人攻擊法"詐騙. + 請在下面輸入簽署的位址,訊息(請確定完整複製了所包含的換行,空格,跳位符號等等),以及簽章,來驗證這個訊息。請小心,除了訊息內容以外,不要對簽章本身過度解讀,以避免被用「中間人攻擊法」詐騙。 - The address the message was signed with (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - 簽署該訊息的位址 (比如說 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + 簽署這個訊息的位址(像是 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Verify the message to ensure it was signed with the specified Myriadcoin address - 驗證訊息是用來確認訊息是用指定的位元幣位址簽署的 + 驗證這個訊息來確定是用指定的位元幣位址簽署的 - Verify &Message - 訊息驗證 + 驗證訊息 - Reset all verify message fields - 重置所有訊息驗證欄位 + 重設所有訊息驗證欄位 - - Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - 輸入位元幣位址 (比如說 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) + 請輸入位元幣位址(像是 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L) - Click "Sign Message" to generate signature - 按"訊息簽署"來產生簽章 + 請按一下「簽署訊息」來產生簽章 - - Enter Myriadcoin signature - 輸入位元幣簽章 - - - - The entered address is invalid. - 輸入的位址無效. + 輸入的位址無效。 - - - - Please check the address and try again. - 請檢查位址是否正確後再試一次. + 請檢查位址是否正確後再試一次。 - - The entered address does not refer to a key. - 輸入的位址沒有指到任何密鑰. + 輸入的位址沒有對應到你的任何密鑰。 - Wallet unlock was cancelled. - 錢包解鎖已取消. + 錢包解鎖已取消。 - Private key for the entered address is not available. - 沒有所輸入位址的密鑰. + 沒有對應輸入位址的密鑰。 - Message signing failed. - 訊息簽署失敗. + 訊息簽署失敗。 - Message signed. - 訊息已簽署. + 訊息簽署好了。 - The signature could not be decoded. - 無法將這個簽章解碼. + 沒辦法把這個簽章解碼。 - - Please check the signature and try again. - 請檢查簽章是否正確後再試一次. + 請檢查簽章是否正確後再試一次。 - The signature did not match the message digest. - 這個簽章與訊息的數位摘要不符. + 這個簽章跟訊息的數位摘要不符。 - Message verification failed. - 訊息驗證失敗. + 訊息驗證失敗。 - Message verified. - 訊息已驗證. + 訊息驗證沒錯。 SplashScreen - - The Myriadcoin developers - 位元幣開發人員 + Myriadcoin Core + 位元幣核心 + + + The Myriadcoin Core developers + 位元幣核心開發人員 - [testnet] [testnet] + + TrafficGraphWidget + + KB/s + KB/s + + TransactionDesc - Open until %1 - 在 %1 前未定 + 到 %1 前可修改 + + + conflicted + 有衝突 - %1/offline - %1/離線中 + %1 次/離線中 - %1/unconfirmed - %1/未確認 + %1 次/未確認 - %1 confirmations - 經確認 %1 次 + 確認 %1 次 - Status 狀態 - , broadcast through %n node(s) - , 已公告至 %n 個節點 + ,已公告給 %n 個節點 - Date 日期 - Source 來源 - Generated - 生產出 + 生產出來 - - From - 來處 + 來源 - - - To 目的 - - own address 自己的位址 - label - 標籤 + 標記 - - - - - Credit 入帳 - matures in %n more block(s) - 將在 %n 個區塊產出後熟成 + 再等 %n 個區塊生出來後成熟 - not accepted 不被接受 - - - - Debit 出帳 - Transaction fee 交易手續費 - Net amount 淨額 - Message 訊息 - Comment 附註 - Transaction ID 交易識別碼 - - Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. - 生產出來的錢要再等 120 個區塊熟成之後, 才能夠花用. 當你產出區塊時, 它會被公布到網路上, 以被串連至區塊鎖鏈. 如果串連失敗了, 它的狀態就會變成"不被接受", 且不能被花用. 當你產出區塊的幾秒鐘內, 也有其他節點產出區塊的話, 有時候就會發生這種情形. + Merchant + 商家 + + + Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to "not accepted" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours. + 生產出來的錢要再等 %1 個區塊生出來後才成熟可以用。當區塊生產出來時會公布到網路上,來被加進區塊鏈。如果加失敗了,狀態就會變成「不被接受」,而且不能夠花。如果在你生產出區塊的幾秒鐘內,也有其他節點生產出來的話,就有可能會發生這種情形。 - Debug information 除錯資訊 - Transaction 交易 - Inputs 輸入 - Amount 金額 - true 是 - false 否 - , has not been successfully broadcast yet - , 尚未成功公告出去 + ,還沒成功公告出去 - Open for %n more block(s) - 在接下來 %n 個區塊產出前未定 + 到下 %n 個區塊生出來前可修改 - unknown 未知 @@ -1835,477 +2290,393 @@ Address: %4 TransactionDescDialog - Transaction details 交易明細 - This pane shows a detailed description of the transaction - 此版面顯示交易的詳細說明 + 這個版面顯示這次交易的詳細說明 TransactionTableModel - Date 日期 - Type 種類 - Address 位址 - Amount 金額 + + Immature (%1 confirmations, will be available after %2) + 未成熟(確認 %1 次,會在 %2 次後可用) + - Open for %n more block(s) - 在接下來 %n 個區塊產出前未定 + 到下 %n 個區塊生出來前可修改 - Open until %1 - 在 %1 前未定 + 到 %1 前可修改 - - Offline (%1 confirmations) - 離線中 (經確認 %1 次) - - - - Unconfirmed (%1 of %2 confirmations) - 未確認 (經確認 %1 次, 應確認 %2 次) - - - Confirmed (%1 confirmations) - 已確認 (經確認 %1 次) - - - - Mined balance will be available when it matures in %n more block(s) - 開採金額將可在 %n 個區塊熟成後可用 + 已確認(%1 次) - This block was not received by any other nodes and will probably not be accepted! - 沒有其他節點收到這個區塊, 也許它不被接受! + 沒有其他節點收到這個區塊,也許它不會被接受! - Generated but not accepted - 生產出但不被接受 + 生產出來但是不被接受 + + + Offline + 離線中 + + + Unconfirmed + 未確認 + + + Confirming (%1 of %2 recommended confirmations) + 確認中(已經 %1 次,建議至少 %2 次) + + + Conflicted + 有衝突 - Received with - 收受於 + 收款在 - Received from - 收受自 + 收款自 - Sent to - 付出至 + 付款給 - Payment to yourself 付給自己 - Mined 開採所得 - (n/a) (不適用) - Transaction status. Hover over this field to show number of confirmations. - 交易狀態. 移動游標至欄位上方來顯示確認次數. + 交易狀態。把游標停在欄位上會顯示確認次數。 - Date and time that the transaction was received. - 收到交易的日期與時間. + 收到交易的日期和時間。 - Type of transaction. - 交易的種類. + 交易的種類。 - Destination address of transaction. - 交易的目標位址. + 交易的目的地位址。 - Amount removed from or added to balance. - 減去或加入至餘額的金額 + 要減掉或加進餘額的金額。 TransactionView - - All 全部 - Today 今天 - This week - 這週 + 這星期 - This month 這個月 - Last month 上個月 - This year 今年 - Range... 指定範圍... - Received with - 收受於 + 收款 - Sent to - 付出至 + 付款 - To yourself 給自己 - Mined 開採所得 - Other - 其他 + 其它 - Enter address or label to search - 輸入位址或標記來搜尋 + 請輸入要搜尋的位址或標記 - Min amount 最小金額 - Copy address 複製位址 - Copy label 複製標記 - Copy amount 複製金額 - Copy transaction ID 複製交易識別碼 - Edit label 編輯標記 - Show transaction details 顯示交易明細 - - Export Transaction Data - 匯出交易資料 + Export Transaction History + 匯出交易記錄 + + + Exporting Failed + 匯出失敗 + + + There was an error trying to save the transaction history to %1. + 儲存交易記錄到 %1 時發生錯誤。 + + + Exporting Successful + 匯出成功 + + + The transaction history was successfully saved to %1. + 交易記錄已經成功儲存到 %1 了。 - Comma separated file (*.csv) - 逗號分隔資料檔 (*.csv) + 逗點分隔資料檔(*.csv) - Confirmed 已確認 - Date 日期 - Type 種類 - Label 標記 - Address 位址 - Amount 金額 - ID 識別碼 - - Error exporting - 匯出失敗 - - - - Could not write to file %1. - 無法寫入至 %1 檔案. - - - Range: 範圍: - to - 至 + 到 + + + + WalletFrame + + No wallet has been loaded. + 沒有載入錢包。 WalletModel - Send Coins - 付錢 + 付款 WalletView - &Export 匯出 - Export the data in the current tab to a file - 將目前分頁的資料匯出存成檔案 + 把目前分頁的資料匯出存成檔案 - Backup Wallet - 錢包備份 + 備份錢包 - Wallet Data (*.dat) - 錢包資料檔 (*.dat) + 錢包資料檔(*.dat) - Backup Failed 備份失敗 - - There was an error trying to save the wallet data to the new location. - 儲存錢包資料到新的地方失敗 + There was an error trying to save the wallet data to %1. + 儲存錢包資料到 %1 時發生錯誤。 + + + The wallet data was successfully saved to %1. + 錢包的資料已經成功儲存到 %1 了。 - Backup Successful 備份成功 - - - The wallet data was successfully saved to the new location. - 錢包的資料已經成功儲存到新的地方了. - bitcoin-core - - Myriadcoin version - 位元幣版本 - - - Usage: 用法: - - Send command to -server or myriadcoind - 送指令給 -server 或 myriadcoind - - - - List commands - 列出指令 - + 列出指令 - Get help for a command - 取得指令說明 - + 取得指令說明 - Options: - 選項: - + 選項: - Specify configuration file (default: myriadcoin.conf) - 指定設定檔 (預設: myriadcoin.conf) - + 指定設定檔(預設值: myriadcoin.conf) - Specify pid file (default: myriadcoind.pid) - 指定行程識別碼檔案 (預設: myriadcoind.pid) - + 指定行程識別碼(PID)檔(預設值: myriadcoind.pid) - Specify data directory - 指定資料目錄 - + 指定資料目錄 - - Set database cache size in megabytes (default: 25) - 設定資料庫快取大小為多少百萬位元組(MB, 預設: 25) - - - Listen for connections on <port> (default: 8333 or testnet: 18333) - 在通訊埠 <port> 聽候連線 (預設: 8333, 或若為測試網路: 18333) + 在通訊埠 <port> 聽候連線(預設值: 8333, 或若是測試網路: 18333) - Maintain at most <n> connections to peers (default: 125) - 維持與節點連線數的上限為 <n> 個 (預設: 125) + 維持連線節點數的上限為 <n> 個(預設值: 125) - Connect to a node to retrieve peer addresses, and disconnect - 連線到某個節點以取得其它節點的位址, 然後斷線 + 連線到某個節點來取得其它節點的位址,然後斷線 - Specify your own public address - 指定自己公開的位址 + 指定自己的公開位址 - Threshold for disconnecting misbehaving peers (default: 100) - 與亂搞的節點斷線的臨界值 (預設: 100) + 把異常節點斷線的臨界值(預設值: 100) - Number of seconds to keep misbehaving peers from reconnecting (default: 86400) - 避免與亂搞的節點連線的秒數 (預設: 86400) + 拒絕跟異常節點連線的秒數(預設值: 86400) - An error occurred while setting up the RPC port %u for listening on IPv4: %s - 在 IPv4 網路上以通訊埠 %u 聽取 RPC 連線時發生錯誤: %s + 設定在 IPv4 網路上以通訊埠 %u 聽取 RPC 連線時發生錯誤: %s - Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) - 在通訊埠 <port> 聽候 JSON-RPC 連線 (預設: 8332, 或若為測試網路: 18332) + 在通訊埠 <port> 聽候 JSON-RPC 連線(預設值: 8332, 或若是測試網路: 18332) - Accept command line and JSON-RPC commands - 接受命令列與 JSON-RPC 指令 + 接受指令列和 JSON-RPC 指令 - + Myriadcoin Core RPC client version + 位元幣核心 RPC 客戶端軟體版本 + + Run in the background as a daemon and accept commands - 以背景程式執行並接受指令 + 用護靈模式在背後執行並接受指令 - Use the test network - 使用測試網路 - + 使用測試網路 - Accept connections from outside (default: 1 if no -proxy or -connect) - 是否接受外來連線 (預設: 當沒有 -proxy 或 -connect 時預設為 1) + 是否接受外來連線(預設值: 當沒有 -proxy 或 -connect 時為 1) - %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: @@ -2323,633 +2694,699 @@ for example: alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@f rpcuser=myriadcoinrpc rpcpassword=%s (你不用記住這個密碼) -使用者名稱(rpcuser)和密碼(rpcpassword)不可以相同! -如果設定檔還不存在, 請在新增時, 設定檔案權限為"只有主人才能讀取". -也建議你設定警示通知, 發生問題時你才會被通知到; -比如說設定為: -alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com - +使用者名稱(rpcuser)和密碼(rpcpassword)不可以相同! +如果還沒有這個設定檔,請在造出來的時候,設定檔案權限成「只有主人才能讀取」。 +也建議你設定警示通知,發生問題時你才會被通知到; +比如說設定成: +alertnotify=echo %%s | mail -s "Myriadcoin Alert" admin@foo.com + + + Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) + 可接受的加密演算法 (預設值: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) - An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s - 設定在 IPv6 網路的通訊埠 %u 上聽候 RPC 連線失敗, 退而改用 IPv4 網路: %s + 設定在 IPv6 網路上以通訊埠 %u 聽候 RPC 連線失敗,退而改用 IPv4 網路: %s - Bind to given address and always listen on it. Use [host]:port notation for IPv6 - 和指定的位址繫結, 並總是在該位址聽候連線. IPv6 請用 "[主機]:通訊埠" 這種格式 + 和指定的位址繫結,並總是在指定位址聽候連線。IPv6 請用 [主機]:通訊埠 這種格式 - - Cannot obtain a lock on data directory %s. Myriadcoin is probably already running. - 無法鎖定資料目錄 %s. 也許位元幣已經在執行了. + Continuously rate-limit free transactions to <n>*1000 bytes per minute (default:15) + 對沒付手續費的交易持續限制一分鐘內最多只能有 <n> 千位元組 (預設值: 15) + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development. + 進入回歸測試模式,使用可以立即解出區塊的特殊區塊鏈。目的是用來做回歸測試,以及配合應用程式的開發。 + + + Enter regression test mode, which uses a special chain in which blocks can be solved instantly. + 進入回歸測試模式,使用可以立即解出區塊的特殊區塊鏈。 + + + Error: Listening for incoming connections failed (listen returned error %d) + 錯誤: 聽候外來連線失敗(回傳錯誤 %d) - Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here. - 錯誤: 交易被拒絕了! 有時候會發生這種錯誤, 是因為你錢包中的一些錢已經被花掉了. 比如說你複製了錢包檔 wallet.dat, 然後用複製的錢包花掉了錢, 你現在所用的原來的錢包中卻沒有該筆交易紀錄. + 錯誤: 交易被拒絕了!有時候會發生這種錯誤,是因為你錢包中的一些錢已經被花掉了。比如說你複製了錢包檔 wallet.dat, 然後用複製的錢包花掉了錢,你現在所用的原來的錢包中,卻沒有那筆錢已經花掉的紀錄。 - Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds! - 錯誤: 這筆交易需要至少 %s 的手續費! 因為它的金額太大, 或複雜度太高, 或是使用了最近才剛收到的款項. + 錯誤: 這筆交易需要至少 %s 的手續費!因為它的金額太大,或複雜度太高,或是使用了最近才剛收到的款項。 - - Execute command when a relevant alert is received (%s in cmd is replaced by message) - 當收到相關警示時所要執行的指令 (指令中的 %s 會被取代為警示訊息) - - - Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) - 當錢包有交易改變時所要執行的指令 (指令中的 %s 會被取代為交易識別碼) + 當錢包有交易改變時要執行的指令(指令中的 %s 會被取代成交易識別碼) - - Set maximum size of high-priority/low-fee transactions in bytes (default: 27000) - 設定高優先權或低手續費的交易資料大小上限為多少位元組 (預設: 27000) + Fees smaller than this are considered zero fee (for transaction creation) (default: + 手續費低於這個時會被認為是沒付手續費(產生交易用)(預設值: + + + Flush database activity from memory pool to disk log every <n> megabytes (default: 100) + 每當累積到 <n> 百萬位元組(MB)時,才將資料庫的變動從記憶體暫存池中寫進磁碟紀錄檔 (預設值: 100) + + + How thorough the block verification of -checkblocks is (0-4, default: 3) + 使用 -checkblocks 檢查區塊的仔細程度 (0 到 4,預設值: 3) + + + In this mode -genproclimit controls how many blocks are generated immediately. + 在這個運作模式下,-genproclimit 選項控制立刻產生出的區塊數目。 + + + Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d) + 設定指令碼驗證的執行緒數目 (%u 到 %d,0 表示程式自動決定,小於 0 表示保留處理器核心不用的數目,預設值: 0) + + + Set the processor limit for when generation is on (-1 = unlimited, default: -1) + 當生產位元幣打開時,設定處理器使用數目限制 (-1 表示不限制,預設值: -1) - This is a pre-release test build - use at your own risk - do not use for mining or merchant applications - 這是尚未發表的測試版本 - 使用請自負風險 - 請不要用於開採或商業應用 + 這是個還沒發表的測試版本 - 使用請自負風險 - 請不要用來開採或商業應用 + + + Unable to bind to %s on this computer. Myriadcoin Core is probably already running. + 沒辦法繫結在這台電腦上的 %s 。位元幣核心可能已經在執行了。 + + + Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) + 使用另外的 SOCK5 代理伺服器,來透過 Tor 隱藏服務跟節點聯繫(預設值: 同 -proxy) - Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction. - 警告: -paytxfee 設定了很高的金額! 這可是你交易付款所要付的手續費. + 警告: -paytxfee 設定了很高的金額!這可是你交易付款所要付的手續費。 - - Warning: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade. - 警告: 顯示的交易可能不正確! 你可能需要升級, 或者需要等其它的節點升級. - - - Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly. - 警告: 請檢查電腦時間與日期是否正確! 位元幣無法在時鐘不準的情況下正常運作. + 警告: 請檢查電腦日期和時間是否正確!位元幣軟體沒辦法在時鐘不準的情況下正常運作。 + + + Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. + 警告: 位元幣網路對於區塊鏈結的決定目前有分歧!看來有些礦工會有問題。 + + + Warning: We do not appear to fully agree with our peers! You may need to upgrade, or other nodes may need to upgrade. + 警告: 我們和某些連線的節點對於區塊鏈結的決定不同!你可能需要升級,或是需要等其它的節點升級。 - Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. - 警告: 讀取錢包檔 wallet.dat 失敗了! 所有的密鑰都正確讀取了, 但是交易資料或位址簿資料可能會缺少或不正確. + 警告: 讀取錢包檔 wallet.dat 時發生錯誤!所有的密鑰都正確讀取了,但是交易資料或位址簿資料可能會缺少或不正確。 - Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect you should restore from a backup. - 警告: 錢包檔 wallet.dat 壞掉, 但資料被拯救回來了! 原來的 wallet.dat 會改儲存在 %s, 檔名為 wallet.{timestamp}.bak. 如果餘額或交易資料有誤, 你應該要用備份資料復原回來. + 警告: 錢包檔 wallet.dat 壞掉,但資料被拯救回來了!原來的 wallet.dat 會改儲存在 %s, 檔名是 wallet.{timestamp}.bak. 如果餘額或交易資料有誤,你應該要用備份資料復原回來。 + + + (default: 1) + (預設值: 1) + + + (default: wallet.dat) + (預設值: wallet.dat) + + + <category> can be: + <category> 可以是: - Attempt to recover private keys from a corrupt wallet.dat 嘗試從壞掉的錢包檔 wallet.dat 復原密鑰 - + Myriadcoin Core Daemon + 位元幣核心護靈 + + Block creation options: - 區塊產生選項: + 區塊製造選項: + + + Clear list of wallet transactions (diagnostic tool; implies -rescan) + 清掉錢包裡交易的列表(診斷用的工具; 也會做 -rescan) - Connect only to the specified node(s) - 只連線至指定節點(可多個) + 只連線到指定節點(可多個) + + + Connect through SOCKS proxy + 透過 SOCKS 代理伺服器來連線 + + + Connect to JSON-RPC on <port> (default: 8332 or testnet: 18332) + 連線到埠號 <port> 上的 JSON-RPC 伺服器(預設值: 8332,或若是測試網路: 18332) + + + Connection options: + 連線選項: - Corrupted block database detected 發現區塊資料庫壞掉了 - + Debugging/Testing options: + 除錯與測試選項 + + + Disable safemode, override a real safe mode event (default: 0) + 不進入安全模式,用在真的發生需要進入安全模式的事件時,強制不進入 (預設值: 0) + + Discover own IP address (default: 1 when listening and no -externalip) - 找出自己的網際網路位址 (預設: 當有聽候連線且沒有 -externalip 時為 1) + 找出自己的網際網路位址(預設值: 當有聽候連線且沒有 -externalip 時為 1) + + + Do not load the wallet and disable wallet RPC calls + 不要載入錢包,並且拿掉錢包相關的 RPC 功能呼叫。 - Do you want to rebuild the block database now? - 你要現在重建區塊資料庫嗎? + 你想要現在重建區塊資料庫嗎? - Error initializing block database - 初始化區塊資料庫失敗 + 初始化區塊資料庫時發生錯誤 - Error initializing wallet database environment %s! - 錢包資料庫環境 %s 初始化錯誤! + 初始化錢包資料庫環境 %s 時發生錯誤! - Error loading block database - 載入區塊資料庫失敗 + 載入區塊資料庫時發生錯誤 - Error opening block database - 打開區塊資料庫檔案失敗 + 打開區塊資料庫時發生錯誤 - Error: Disk space is low! - 錯誤: 磁碟空間很少! + 錯誤: 磁碟空間很少! - Error: Wallet locked, unable to create transaction! - 錯誤: 錢包被上鎖了, 無法產生新的交易! + 錯誤: 錢包被上鎖了,沒辦法製造新的交易! - Error: system error: 錯誤: 系統錯誤: - Failed to listen on any port. Use -listen=0 if you want this. - 在任意的通訊埠聽候失敗. 如果你想的話可以用 -listen=0. + 在任意的通訊埠聽候失敗。如果你希望這樣的話,可以設定 -listen=0. - Failed to read block info 讀取區塊資訊失敗 - Failed to read block 讀取區塊失敗 - Failed to sync block index 同步區塊索引失敗 - Failed to write block index - 寫入區塊索引失敗 + 把區塊索引寫進去失敗了 - Failed to write block info - 寫入區塊資訊失敗 + 把區塊資訊寫進去失敗了 - Failed to write block - 寫入區塊失敗 + 把區塊資料寫進去失敗了 - Failed to write file info - 寫入檔案資訊失敗 + 把檔案資訊寫進去失敗了 - Failed to write to coin database - 寫入位元幣資料庫失敗 + 寫進錢幣資料庫失敗了 - Failed to write transaction index - 寫入交易索引失敗 + 把交易索引寫進去失敗了 - Failed to write undo data - 寫入回復資料失敗 + 把回復資料寫進去失敗了 + + + Fee per kB to add to transactions you send + 交易時每一千位元組(kB)加付的交易手續費 + + + Fees smaller than this are considered zero fee (for relaying) (default: + 手續費比這個低時會被認為是沒付手續費(轉發用)(預設值: - Find peers using DNS lookup (default: 1 unless -connect) - 是否允許在找節點時使用域名查詢 (預設: 當沒用 -connect 時為 1) + 是否允許在找節點時使用域名查詢(預設值: 當沒用 -connect 時為 1) + + + Force safe mode (default: 0) + 強制進入安全模式 (預設值: 0) - Generate coins (default: 0) - 生產位元幣 (預設值: 0) + 生產位元幣(預設值: 0) - How many blocks to check at startup (default: 288, 0 = all) - 啓動時檢查的區塊數 (預設: 288, 指定 0 表示全部) + 啓動時檢查的區塊數(預設值: 288, 指定 0 表示全部) - - How thorough the block verification is (0-4, default: 3) - 區塊檢查的仔細程度 (0 至 4, 預設: 3) + If <category> is not supplied, output all debugging information. + 如果沒有提供 <category> 就會輸出所有的除錯資訊。 + + + Importing... + 正在匯入中... + + + Incorrect or no genesis block found. Wrong datadir for network? + 創世區塊不正確或找不到。資料目錄錯了嗎? + + + Invalid -onion address: '%s' + 無效的 -onion 位址: '%s' - Not enough file descriptors available. - 檔案描述器不足. + 檔案描述元不足。 + + + Prepend debug output with timestamp (default: 1) + 在除錯輸出內容前附加時間(預設值: 1) + + + RPC client options: + RPC 客戶端選項: - Rebuild block chain index from current blk000??.dat files - 從目前的區塊檔 blk000??.dat 重建鎖鏈索引 + 從目前的區塊檔 blk000??.dat 重建區塊鏈的索引 + + + Select SOCKS version for -proxy (4 or 5, default: 5) + 選擇 -proxy 指定代理伺服器的 SOCKS 協定版本(4 或 5, 預設值: 5) + + + Set database cache size in megabytes (%d to %d, default: %d) + 設定資料庫快取大小是多少百萬位元組(MB,範圍: %d 到 %d,預設值: %d) + + + Set maximum block size in bytes (default: %d) + 設定區塊大小上限成多少位元組(預設值: %d) - Set the number of threads to service RPC calls (default: 4) - 設定處理 RPC 服務請求的執行緒數目 (預設為 4) + 設定處理 RPC 服務請求的執行緒數目(預設值: 4) + + + Specify wallet file (within data directory) + 指定錢包檔(會在資料目錄中) + + + Spend unconfirmed change when sending transactions (default: 1) + 傳送交易時可以花還沒確認的零錢(預設值: 1) + + + This is intended for regression testing tools and app development. + 這是設計用來給回歸測試工具和應用程式開發用的。 + + + Usage (deprecated, use myriadcoin-cli): + 用法(已過時,請改用 myriadcoin-cli): - Verifying blocks... - 驗證區塊資料中... + 正在驗證區塊資料... - Verifying wallet... - 驗證錢包資料中... + 正在驗證錢包資料... + + + Wait for RPC server to start + 等待 RPC 伺服器啟動 + + + Wallet %s resides outside data directory %s + 錢包檔 %s 沒有在資料目錄 %s 裡面 + + + Wallet options: + 錢包選項: + + + Warning: Deprecated argument -debugnet ignored, use -debug=net + 警告: 參數 -debugnet 因為已經淘汰掉了而被忽略,請改用 -debug=net + + + You need to rebuild the database using -reindex to change -txindex + 改變 -txindex 參數後,必須要用 -reindex 參數來重建資料庫 - Imports blocks from external blk000??.dat file 從其它來源的 blk000??.dat 檔匯入區塊 - - Set the number of script verification threads (up to 16, 0 = auto, <0 = leave that many cores free, default: 0) - 設定指令碼驗證的執行緒數目 (最多為 16, 若為 0 表示程式自動決定, 小於 0 表示保留不用的處理器核心數目, 預設為 0) + Cannot obtain a lock on data directory %s. Myriadcoin Core is probably already running. + 沒辦法鎖定資料目錄 %s。位元幣核心可能已經在執行了。 + + + Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) + 當收到相關警示,或發現相當長的分支時,所要執行的指令(指令中的 %s 會被取代成警示訊息) + + + Output debugging information (default: 0, supplying <category> is optional) + 輸出除錯資訊(預設值: 0, 可以不指定 <category>) + + + Set maximum size of high-priority/low-fee transactions in bytes (default: %d) + 設定高優先度或低手續費的交易資料大小上限成多少位元組(預設值: %d) - Information 資訊 - - Invalid -tor address: '%s' - 無效的 -tor 位址: '%s' - - - Invalid amount for -minrelaytxfee=<amount>: '%s' - 設定 -minrelaytxfee=<金額> 的金額無效: '%s' + 設定最低轉發手續費 -minrelaytxfee=<金額> 的金額無效: '%s' - Invalid amount for -mintxfee=<amount>: '%s' - 設定 -mintxfee=<amount> 的金額無效: '%s' + 設定 -mintxfee=<金額> 的金額無效: '%s' + + + Limit size of signature cache to <n> entries (default: 50000) + 限制簽章快取大小為 <n> 筆 (預設值: 50000) + + + Log transaction priority and fee per kB when mining blocks (default: 0) + 開採區塊的時候紀錄交易的優先度以及每千位元組(kB)的手續費 (預設值: 0) - Maintain a full transaction index (default: 0) - 維護全部交易的索引 (預設為 0) + 維護全部交易的索引(預設值: 0) - Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) - 每個連線的接收緩衝區大小上限為 <n>*1000 個位元組 (預設: 5000) + 每個連線的接收緩衝區大小上限為 <n>*1000 個位元組(預設值: 5000) - Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) - 每個連線的傳送緩衝區大小上限為 <n>*1000 位元組 (預設: 1000) + 每個連線的傳送緩衝區大小上限為 <n>*1000 位元組(預設值: 1000) - Only accept block chain matching built-in checkpoints (default: 1) - 只接受與內建的檢查段點吻合的區塊鎖鏈 (預設: 1) + 只接受跟內建的檢查段點吻合的區塊鏈(預設值: 1) - Only connect to nodes in network <net> (IPv4, IPv6 or Tor) - 只和 <net> 網路上的節點連線 (IPv4, IPv6, 或 Tor) + 只和 <net> 網路上的節點連線(IPv4, IPv6, 或 Tor) - - Output extra debugging information. Implies all other -debug* options - 輸出額外的除錯資訊. 包含了其它所有的 -debug* 選項 + Print block on startup, if found in block index + 啟動時輸出指定的區塊內容,如果有在區塊索引中找到的話 - - Output extra network debugging information - 輸出額外的網路除錯資訊 + Print block tree on startup (default: 0) + 啟動時輸出區塊樹 (預設值: 0) - - Prepend debug output with timestamp - 在除錯輸出內容前附加時間 + RPC SSL options: (see the Myriadcoin Wiki for SSL setup instructions) + RPC SSL 選項: (SSL 設定程序請見 Myriadcoin Wiki) + + + RPC server options: + RPC 伺服器選項: + + + Randomly drop 1 of every <n> network messages + 隨機丟掉 <n> 分之一的網路訊息 + + + Randomly fuzz 1 of every <n> network messages + 隨機亂動 <n> 分之一的網路訊息裡的資料 + + + Run a thread to flush wallet periodically (default: 1) + 啟用定期將變動寫入錢包檔的執行緒 (預設值: 1) - SSL options: (see the Myriadcoin Wiki for SSL setup instructions) SSL 選項: (SSL 設定程序請見 Myriadcoin Wiki) - - Select the version of socks proxy to use (4-5, default: 5) - 選擇 SOCKS 代理伺服器的協定版本(4 或 5, 預設: 5) + Send command to Myriadcoin Core + 傳送指令給位元幣核心 - Send trace/debug info to console instead of debug.log file - 在終端機顯示追蹤或除錯資訊, 而非寫到 debug.log 檔 + 在終端機顯示追蹤或除錯資訊,而不是寫到檔案 debug.log 中 - - Send trace/debug info to debugger - 輸出追蹤或除錯資訊給除錯器 - - - - Set maximum block size in bytes (default: 250000) - 設定區塊大小上限為多少位元組 (預設: 250000) - - - Set minimum block size in bytes (default: 0) - 設定區塊大小下限為多少位元組 (預設: 0) + 設定區塊大小下限成多少位元組(預設值: 0) + + + Sets the DB_PRIVATE flag in the wallet db environment (default: 1) + 在錢包資料庫環境變數設定 DB_PRIVATE 旗標 (預設值: 1) + + + Show all debugging options (usage: --help -help-debug) + 顯示所有的除錯選項 (用法: --help --help-debug) + + + Show benchmark information (default: 0) + 顯示效能評比資訊 (預設值: 0) - Shrink debug.log file on client startup (default: 1 when no -debug) - 客戶端軟體啓動時將 debug.log 檔縮小 (預設: 當沒有 -debug 時為 1) + 客戶端軟體啓動時把 debug.log 檔縮小(預設值: 當沒有 -debug 時為 1) - Signing transaction failed 簽署交易失敗 - Specify connection timeout in milliseconds (default: 5000) - 指定連線在幾毫秒後逾時 (預設: 5000) + 指定連線在幾毫秒後逾時(預設值: 5000) + + + Start Myriadcoin Core Daemon + 啟動位元幣核心護靈 - System error: 系統錯誤: - Transaction amount too small 交易金額太小 - Transaction amounts must be positive 交易金額必須是正的 - Transaction too large 交易位元量太大 - Use UPnP to map the listening port (default: 0) - 是否使用通用即插即用(UPnP)協定來設定聽候連線的通訊埠 (預設: 0) + 是否要使用「通用即插即用」協定(UPnP),來設定聽候連線的通訊埠的對應(預設值: 0) - Use UPnP to map the listening port (default: 1 when listening) - 是否使用通用即插即用(UPnP)協定來設定聽候連線的通訊埠 (預設: 當有聽候連線為 1) + 是否要使用「通用即插即用」協定(UPnP),來設定聽候連線的通訊埠的對應(預設值: 當有聽候連線時為 1) - - Use proxy to reach tor hidden services (default: same as -proxy) - 透過代理伺服器來使用 Tor 隱藏服務 (預設: 同 -proxy) - - - Username for JSON-RPC connections JSON-RPC 連線使用者名稱 - Warning 警告 - Warning: This version is obsolete, upgrade required! - 警告: 這個版本已經被淘汰掉了, 必須要升級! + 警告: 這個版本已經被淘汰了,必須要升級! - - You need to rebuild the databases using -reindex to change -txindex - 改變 -txindex 參數後, 必須要用 -reindex 參數來重建資料庫 + Zapping all transactions from wallet... + 正在砍掉錢包中的所有交易... + + + on startup + 當啟動時 + + + version + 版本 - wallet.dat corrupt, salvage failed - 錢包檔 weallet.dat 壞掉了, 拯救失敗 + 錢包檔 weallet.dat 壞掉了,拯救失敗 - Password for JSON-RPC connections JSON-RPC 連線密碼 - Allow JSON-RPC connections from specified IP address - 只允許從指定網路位址來的 JSON-RPC 連線 + 允許指定的來源 IP 位址進行 JSON-RPC 連線 - Send commands to node running on <ip> (default: 127.0.0.1) - 送指令給在 <ip> 的節點 (預設: 127.0.0.1) - + 傳送指令給在 <ip> 的節點(預設值: 127.0.0.1) - Execute command when the best block changes (%s in cmd is replaced by block hash) - 當最新區塊改變時所要執行的指令 (指令中的 %s 會被取代為區塊的雜湊值) + 當最新區塊改變時要執行的指令(指令中的 %s 會被取代成區塊雜湊值) - Upgrade wallet to latest format - 將錢包升級成最新的格式 + 把錢包檔案升級成最新的格式 - Set key pool size to <n> (default: 100) - 設定密鑰池大小為 <n> (預設: 100) - + 設定密鑰池大小成 <n> (預設值: 100) - Rescan the block chain for missing wallet transactions - 重新掃描區塊鎖鏈, 以尋找錢包所遺漏的交易. + 重新掃描區塊鏈,來尋找錢包可能漏掉的交易。 - Use OpenSSL (https) for JSON-RPC connections - 於 JSON-RPC 連線使用 OpenSSL (https) - + 在 JSON-RPC 連線使用 OpenSSL (https) - Server certificate file (default: server.cert) - 伺服器憑證檔 (預設: server.cert) - + 伺服器憑證檔(預設值: server.cert) - Server private key (default: server.pem) - 伺服器密鑰檔 (預設: server.pem) - + 伺服器私鑰檔(預設值: server.pem) - - Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - 可以接受的加密法 (預設: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH) - - - - This help message - 此協助訊息 - + 這些說明訊息 - Unable to bind to %s on this computer (bind returned error %d, %s) - 無法和這台電腦上的 %s 繫結 (繫結回傳錯誤 %d, %s) + 沒辦法和這台電腦上的 %s 繫結(回傳錯誤 %d, %s) - - Connect through socks proxy - 透過 SOCKS 代理伺服器連線 - - - Allow DNS lookups for -addnode, -seednode and -connect 允許對 -addnode, -seednode, -connect 的參數使用域名查詢 - Loading addresses... - 載入位址中... + 正在載入位址資料... - Error loading wallet.dat: Wallet corrupted - 載入檔案 wallet.dat 失敗: 錢包壞掉了 + 載入檔案 wallet.dat 時發生錯誤: 錢包損毀了 - Error loading wallet.dat: Wallet requires newer version of Myriadcoin - 載入檔案 wallet.dat 失敗: 此錢包需要新版的 Myriadcoin + 載入 wallet.dat 檔案時發生錯誤: 這個錢包需要新版的位元幣軟體 - Wallet needed to be rewritten: restart Myriadcoin to complete - 錢包需要重寫: 請重啟位元幣來完成 + 錢包需要重寫: 請重新啓動位元幣軟體來完成 - Error loading wallet.dat - 載入檔案 wallet.dat 失敗 + 載入錢包檔 wallet.dat 時發生錯誤 - Invalid -proxy address: '%s' 無效的 -proxy 位址: '%s' - Unknown network specified in -onlynet: '%s' 在 -onlynet 指定了不明的網路別: '%s' - Unknown -socks proxy version requested: %i 在 -socks 指定了不明的代理協定版本: %i - Cannot resolve -bind address: '%s' - 無法解析 -bind 位址: '%s' + 沒辦法解析 -bind 位址: '%s' - Cannot resolve -externalip address: '%s' - 無法解析 -externalip 位址: '%s' + 沒辦法解析 -externalip 位址: '%s' - Invalid amount for -paytxfee=<amount>: '%s' 設定 -paytxfee=<金額> 的金額無效: '%s' - Invalid amount 無效的金額 - Insufficient funds 累積金額不足 - Loading block index... - 載入區塊索引中... + 正在載入區塊索引... - Add a node to connect to and attempt to keep the connection open - 加入一個要連線的節線, 並試著保持對它的連線暢通 + 增加一個要連線的節線,並試著保持對它的連線暢通 - - Unable to bind to %s on this computer. Myriadcoin is probably already running. - 無法和這台電腦上的 %s 繫結. 也許位元幣已經在執行了. - - - - Fee per KB to add to transactions you send - 交易付款時每 KB 的交易手續費 - - - Loading wallet... - 載入錢包中... + 正在載入錢包資料... - Cannot downgrade wallet - 無法將錢包格式降級 + 沒辦法把錢包格式降級 - Cannot write default address - 無法寫入預設位址 + 沒辦法把預設位址寫進去 - Rescanning... - 重新掃描中... + 正在重新掃描... - Done loading 載入完成 - To use the %s option 為了要使用 %s 選項 - Error 錯誤 - You must set rpcpassword=<password> in the configuration file: %s If the file does not exist, create it with owner-readable-only file permissions. - 你必須在下列設定檔中設定 RPC 密碼(rpcpassword=<password>): + 你必須在以下設定檔中設定 RPC 密碼(rpcpassword=<password>): %s -如果這個檔案還不存在, 請在新增時, 設定檔案權限為"只有主人才能讀取". +如果還沒有這個檔案,請在造出來的時候,設定檔案權限成只有主人才能讀取。 \ No newline at end of file diff --git a/src/qt/macdockiconhandler.h b/src/qt/macdockiconhandler.h index 765b0047..b21a61cb 100644 --- a/src/qt/macdockiconhandler.h +++ b/src/qt/macdockiconhandler.h @@ -1,12 +1,16 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef MACDOCKICONHANDLER_H #define MACDOCKICONHANDLER_H -#include #include +#include QT_BEGIN_NAMESPACE -class QMenu; class QIcon; +class QMenu; class QWidget; QT_END_NAMESPACE diff --git a/src/qt/macdockiconhandler.mm b/src/qt/macdockiconhandler.mm index 8f826941..74fb64ac 100644 --- a/src/qt/macdockiconhandler.mm +++ b/src/qt/macdockiconhandler.mm @@ -1,13 +1,21 @@ +// Copyright (c) 2011-2013 The Bitcoin Core developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #include "macdockiconhandler.h" -#include -#include -#include #include +#include +#include +#include #undef slots #include +#if QT_VERSION < 0x050000 +extern void qt_mac_set_dock_menu(QMenu *); +#endif + @interface DockIconClickEventHandler : NSObject { MacDockIconHandler* dockIconHandler; @@ -52,7 +60,11 @@ MacDockIconHandler::MacDockIconHandler() : QObject() this->m_dummyWidget = new QWidget(); this->m_dockMenu = new QMenu(this->m_dummyWidget); this->setMainWindow(NULL); - +#if QT_VERSION < 0x050000 + qt_mac_set_dock_menu(this->m_dockMenu); +#elif QT_VERSION >= 0x050200 + this->m_dockMenu->setAsDockMenu(); +#endif [pool release]; } diff --git a/src/qt/macnotificationhandler.h b/src/qt/macnotificationhandler.h index cd8064c6..bc335ede 100644 --- a/src/qt/macnotificationhandler.h +++ b/src/qt/macnotificationhandler.h @@ -1,5 +1,10 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef MACNOTIFICATIONHANDLER_H #define MACNOTIFICATIONHANDLER_H + #include /** Macintosh-specific notification handler (supports UserNotificationCenter and Growl). diff --git a/src/qt/macnotificationhandler.mm b/src/qt/macnotificationhandler.mm index 8bb9b887..8a4c94cc 100644 --- a/src/qt/macnotificationhandler.mm +++ b/src/qt/macnotificationhandler.mm @@ -1,3 +1,7 @@ +// Copyright (c) 2011-2013 The Bitcoin Core developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #include "macnotificationhandler.h" #undef slots diff --git a/src/qt/monitoreddatamapper.cpp b/src/qt/monitoreddatamapper.cpp index 4c201834..5931c538 100644 --- a/src/qt/monitoreddatamapper.cpp +++ b/src/qt/monitoreddatamapper.cpp @@ -1,8 +1,12 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #include "monitoreddatamapper.h" -#include #include #include +#include MonitoredDataMapper::MonitoredDataMapper(QObject *parent) : QDataWidgetMapper(parent) diff --git a/src/qt/monitoreddatamapper.h b/src/qt/monitoreddatamapper.h index de55c86f..b3237d3e 100644 --- a/src/qt/monitoreddatamapper.h +++ b/src/qt/monitoreddatamapper.h @@ -1,3 +1,7 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef MONITOREDDATAMAPPER_H #define MONITOREDDATAMAPPER_H diff --git a/src/qt/notificator.cpp b/src/qt/notificator.cpp index 7cfaef60..38a029db 100644 --- a/src/qt/notificator.cpp +++ b/src/qt/notificator.cpp @@ -1,30 +1,37 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #include "notificator.h" -#include -#include -#include #include -#include #include -#include -#include -#include +#include #include - +#include +#include +#include +#include +#include +#include #ifdef USE_DBUS -#include #include +#include #endif - +// Include ApplicationServices.h after QtDbus to avoid redefinition of check(). +// This affects at least OSX 10.6. See /usr/include/AssertMacros.h for details. +// Note: This could also be worked around using: +// #define __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES 0 #ifdef Q_OS_MAC #include #include "macnotificationhandler.h" #endif + // https://wiki.ubuntu.com/NotificationDevelopmentGuidelines recommends at least 128 const int FREEDESKTOP_NOTIFICATION_ICON_SIZE = 128; -Notificator::Notificator(const QString &programName, QSystemTrayIcon *trayicon, QWidget *parent): +Notificator::Notificator(const QString &programName, QSystemTrayIcon *trayicon, QWidget *parent) : QObject(parent), parent(parent), programName(programName), @@ -40,7 +47,7 @@ Notificator::Notificator(const QString &programName, QSystemTrayIcon *trayicon, } #ifdef USE_DBUS interface = new QDBusInterface("org.freedesktop.Notifications", - "/org/freedesktop/Notifications", "org.freedesktop.Notifications"); + "/org/freedesktop/Notifications", "org.freedesktop.Notifications"); if(interface->isValid()) { mode = Freedesktop; diff --git a/src/qt/notificator.h b/src/qt/notificator.h index d1fe37fe..abab9869 100644 --- a/src/qt/notificator.h +++ b/src/qt/notificator.h @@ -1,11 +1,20 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef NOTIFICATOR_H #define NOTIFICATOR_H -#include +#if defined(HAVE_CONFIG_H) +#include "bitcoin-config.h" +#endif + #include +#include QT_BEGIN_NAMESPACE class QSystemTrayIcon; + #ifdef USE_DBUS class QDBusInterface; #endif @@ -20,7 +29,7 @@ public: /** Create a new notificator. @note Ownership of trayIcon is not transferred to this object. */ - Notificator(const QString &programName=QString(), QSystemTrayIcon *trayIcon=0, QWidget *parent=0); + Notificator(const QString &programName, QSystemTrayIcon *trayIcon, QWidget *parent); ~Notificator(); // Message class diff --git a/src/qt/openuridialog.cpp b/src/qt/openuridialog.cpp new file mode 100644 index 00000000..52f7f8ce --- /dev/null +++ b/src/qt/openuridialog.cpp @@ -0,0 +1,52 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "openuridialog.h" +#include "ui_openuridialog.h" + +#include "guiutil.h" +#include "walletmodel.h" + +#include + +OpenURIDialog::OpenURIDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::OpenURIDialog) +{ + ui->setupUi(this); +#if QT_VERSION >= 0x040700 + ui->uriEdit->setPlaceholderText("myriadcoin:"); +#endif +} + +OpenURIDialog::~OpenURIDialog() +{ + delete ui; +} + +QString OpenURIDialog::getURI() +{ + return ui->uriEdit->text(); +} + +void OpenURIDialog::accept() +{ + SendCoinsRecipient rcp; + if(GUIUtil::parseBitcoinURI(getURI(), &rcp)) + { + /* Only accept value URIs */ + QDialog::accept(); + } else { + ui->uriEdit->setValid(false); + } +} + +void OpenURIDialog::on_selectFileButton_clicked() +{ + QString filename = GUIUtil::getOpenFileName(this, tr("Select payment request file to open"), "", "", NULL); + if(filename.isEmpty()) + return; + QUrl fileUri = QUrl::fromLocalFile(filename); + ui->uriEdit->setText("myriadcoin:?r=" + QUrl::toPercentEncoding(fileUri.toString())); +} diff --git a/src/qt/openuridialog.h b/src/qt/openuridialog.h new file mode 100644 index 00000000..28da7d6d --- /dev/null +++ b/src/qt/openuridialog.h @@ -0,0 +1,34 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef OPENURIDIALOG_H +#define OPENURIDIALOG_H + +#include + +namespace Ui { +class OpenURIDialog; +} + +class OpenURIDialog : public QDialog +{ + Q_OBJECT + +public: + explicit OpenURIDialog(QWidget *parent); + ~OpenURIDialog(); + + QString getURI(); + +protected slots: + void accept(); + +private slots: + void on_selectFileButton_clicked(); + +private: + Ui::OpenURIDialog *ui; +}; + +#endif // OPENURIDIALOG_H diff --git a/src/qt/optionsdialog.cpp b/src/qt/optionsdialog.cpp index fa004c24..96464d2c 100644 --- a/src/qt/optionsdialog.cpp +++ b/src/qt/optionsdialog.cpp @@ -1,26 +1,44 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#if defined(HAVE_CONFIG_H) +#include "bitcoin-config.h" +#endif + #include "optionsdialog.h" #include "ui_optionsdialog.h" #include "bitcoinunits.h" +#include "guiutil.h" #include "monitoreddatamapper.h" -#include "netbase.h" #include "optionsmodel.h" +#include "main.h" // for CTransaction::nMinTxFee and MAX_SCRIPTCHECK_THREADS +#include "netbase.h" +#include "txdb.h" // for -dbcache defaults + #include #include #include #include +#include OptionsDialog::OptionsDialog(QWidget *parent) : QDialog(parent), ui(new Ui::OptionsDialog), model(0), mapper(0), - fRestartWarningDisplayed_Proxy(false), - fRestartWarningDisplayed_Lang(false), fProxyIpValid(true) { ui->setupUi(this); + GUIUtil::restoreWindowGeometry("nOptionsDialogWindow", this->size(), this); + + /* Main elements init */ + ui->databaseCache->setMinimum(nMinDbCache); + ui->databaseCache->setMaximum(nMaxDbCache); + ui->threadsScriptVerif->setMinimum(-(int)boost::thread::hardware_concurrency()); + ui->threadsScriptVerif->setMaximum(MAX_SCRIPTCHECK_THREADS); /* Network elements init */ #ifndef USE_UPNP @@ -31,6 +49,7 @@ OptionsDialog::OptionsDialog(QWidget *parent) : ui->proxyPort->setEnabled(false); ui->proxyPort->setValidator(new QIntValidator(1, 65535, this)); + /** SOCKS version is only selectable for default proxy and is always 5 for IPv6 and Tor */ ui->socksVersion->setEnabled(false); ui->socksVersion->addItem("5", 5); ui->socksVersion->addItem("4", 4); @@ -39,7 +58,6 @@ OptionsDialog::OptionsDialog(QWidget *parent) : connect(ui->connectSocks, SIGNAL(toggled(bool)), ui->proxyIp, SLOT(setEnabled(bool))); connect(ui->connectSocks, SIGNAL(toggled(bool)), ui->proxyPort, SLOT(setEnabled(bool))); connect(ui->connectSocks, SIGNAL(toggled(bool)), ui->socksVersion, SLOT(setEnabled(bool))); - connect(ui->connectSocks, SIGNAL(clicked(bool)), this, SLOT(showRestartWarning_Proxy())); ui->proxyIp->installEventFilter(this); @@ -78,24 +96,25 @@ OptionsDialog::OptionsDialog(QWidget *parent) : #endif } } +#if QT_VERSION >= 0x040700 + ui->thirdPartyTxUrls->setPlaceholderText("https://example.com/tx/%s"); +#endif ui->unit->setModel(new BitcoinUnits(this)); + ui->transactionFee->setSingleStep(CTransaction::nMinTxFee); /* Widget-to-option mapper */ mapper = new MonitoredDataMapper(this); mapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit); mapper->setOrientation(Qt::Vertical); - /* enable apply button when data modified */ - connect(mapper, SIGNAL(viewModified()), this, SLOT(enableApplyButton())); - /* disable apply button when new data loaded */ - connect(mapper, SIGNAL(currentIndexChanged(int)), this, SLOT(disableApplyButton())); /* setup/change UI elements when proxy IP is invalid/valid */ - connect(this, SIGNAL(proxyIpValid(QValidatedLineEdit *, bool)), this, SLOT(handleProxyIpValid(QValidatedLineEdit *, bool))); + connect(this, SIGNAL(proxyIpChecks(QValidatedLineEdit *, int)), this, SLOT(doProxyIpChecks(QValidatedLineEdit *, int))); } OptionsDialog::~OptionsDialog() { + GUIUtil::saveWindowGeometry("nOptionsDialogWindow", this); delete ui; } @@ -105,6 +124,15 @@ void OptionsDialog::setModel(OptionsModel *model) if(model) { + /* check if client restart is needed and show persistent message */ + if (model->isRestartRequired()) + showRestartWarning(true); + + QString strLabel = model->getOverriddenByCommandLine(); + if (strLabel.isEmpty()) + strLabel = tr("none"); + ui->overriddenByCommandLineLabel->setText(strLabel); + connect(model, SIGNAL(displayUnitChanged(int)), this, SLOT(updateDisplayUnit())); mapper->setModel(model); @@ -115,18 +143,31 @@ void OptionsDialog::setModel(OptionsModel *model) /* update the display unit, to not use the default ("BTC") */ updateDisplayUnit(); - /* warn only when language selection changes by user action (placed here so init via mapper doesn't trigger this) */ - connect(ui->lang, SIGNAL(valueChanged()), this, SLOT(showRestartWarning_Lang())); + /* warn when one of the following settings changes by user action (placed here so init via mapper doesn't trigger them) */ - /* disable apply button after settings are loaded as there is nothing to save */ - disableApplyButton(); + /* Main */ + connect(ui->databaseCache, SIGNAL(valueChanged(int)), this, SLOT(showRestartWarning())); + connect(ui->threadsScriptVerif, SIGNAL(valueChanged(int)), this, SLOT(showRestartWarning())); + /* Wallet */ + connect(ui->spendZeroConfChange, SIGNAL(clicked(bool)), this, SLOT(showRestartWarning())); + /* Network */ + connect(ui->connectSocks, SIGNAL(clicked(bool)), this, SLOT(showRestartWarning())); + /* Display */ + connect(ui->lang, SIGNAL(valueChanged()), this, SLOT(showRestartWarning())); + connect(ui->thirdPartyTxUrls, SIGNAL(textChanged(const QString &)), this, SLOT(showRestartWarning())); } void OptionsDialog::setMapper() { /* Main */ - mapper->addMapping(ui->transactionFee, OptionsModel::Fee); mapper->addMapping(ui->bitcoinAtStartup, OptionsModel::StartAtStartup); + mapper->addMapping(ui->threadsScriptVerif, OptionsModel::ThreadsScriptVerif); + mapper->addMapping(ui->databaseCache, OptionsModel::DatabaseCache); + + /* Wallet */ + mapper->addMapping(ui->transactionFee, OptionsModel::Fee); + mapper->addMapping(ui->spendZeroConfChange, OptionsModel::SpendZeroConfChange); + mapper->addMapping(ui->coinControlFeatures, OptionsModel::CoinControlFeatures); /* Network */ mapper->addMapping(ui->mapPortUpnp, OptionsModel::MapPortUPnP); @@ -146,33 +187,23 @@ void OptionsDialog::setMapper() mapper->addMapping(ui->lang, OptionsModel::Language); mapper->addMapping(ui->unit, OptionsModel::DisplayUnit); mapper->addMapping(ui->displayAddresses, OptionsModel::DisplayAddresses); + mapper->addMapping(ui->thirdPartyTxUrls, OptionsModel::ThirdPartyTxUrls); } -void OptionsDialog::enableApplyButton() +void OptionsDialog::enableOkButton() { - ui->applyButton->setEnabled(true); -} - -void OptionsDialog::disableApplyButton() -{ - ui->applyButton->setEnabled(false); -} - -void OptionsDialog::enableSaveButtons() -{ - /* prevent enabling of the save buttons when data modified, if there is an invalid proxy address present */ + /* prevent enabling of the OK button when data modified, if there is an invalid proxy address present */ if(fProxyIpValid) - setSaveButtonState(true); + setOkButtonState(true); } -void OptionsDialog::disableSaveButtons() +void OptionsDialog::disableOkButton() { - setSaveButtonState(false); + setOkButtonState(false); } -void OptionsDialog::setSaveButtonState(bool fState) +void OptionsDialog::setOkButtonState(bool fState) { - ui->applyButton->setEnabled(fState); ui->okButton->setEnabled(fState); } @@ -182,24 +213,15 @@ void OptionsDialog::on_resetButton_clicked() { // confirmation dialog QMessageBox::StandardButton btnRetVal = QMessageBox::question(this, tr("Confirm options reset"), - tr("Some settings may require a client restart to take effect.") + "

" + tr("Do you want to proceed?"), + tr("Client restart required to activate changes.") + "

" + tr("Client will be shutdown, do you want to proceed?"), QMessageBox::Yes | QMessageBox::Cancel, QMessageBox::Cancel); if(btnRetVal == QMessageBox::Cancel) return; - disableApplyButton(); - - /* disable restart warning messages display */ - fRestartWarningDisplayed_Lang = fRestartWarningDisplayed_Proxy = true; - - /* reset all options and save the default values (QSettings) */ + /* reset all options and close GUI */ model->Reset(); - mapper->toFirst(); - mapper->submit(); - - /* re-enable restart warning messages display */ - fRestartWarningDisplayed_Lang = fRestartWarningDisplayed_Proxy = false; + QApplication::quit(); } } @@ -214,28 +236,26 @@ void OptionsDialog::on_cancelButton_clicked() reject(); } -void OptionsDialog::on_applyButton_clicked() +void OptionsDialog::showRestartWarning(bool fPersistent) { - mapper->submit(); - disableApplyButton(); -} + ui->statusLabel->setStyleSheet("QLabel { color: red; }"); -void OptionsDialog::showRestartWarning_Proxy() -{ - if(!fRestartWarningDisplayed_Proxy) + if(fPersistent) { - QMessageBox::warning(this, tr("Warning"), tr("This setting will take effect after restarting Myriadcoin."), QMessageBox::Ok); - fRestartWarningDisplayed_Proxy = true; + ui->statusLabel->setText(tr("Client restart required to activate changes.")); + } + else + { + ui->statusLabel->setText(tr("This change would require a client restart.")); + // clear non-persistent status label after 10 seconds + // Todo: should perhaps be a class attribute, if we extend the use of statusLabel + QTimer::singleShot(10000, this, SLOT(clearStatusLabel())); } } -void OptionsDialog::showRestartWarning_Lang() +void OptionsDialog::clearStatusLabel() { - if(!fRestartWarningDisplayed_Lang) - { - QMessageBox::warning(this, tr("Warning"), tr("This setting will take effect after restarting Myriadcoin."), QMessageBox::Ok); - fRestartWarningDisplayed_Lang = true; - } + ui->statusLabel->clear(); } void OptionsDialog::updateDisplayUnit() @@ -247,22 +267,25 @@ void OptionsDialog::updateDisplayUnit() } } -void OptionsDialog::handleProxyIpValid(QValidatedLineEdit *object, bool fState) +void OptionsDialog::doProxyIpChecks(QValidatedLineEdit *pUiProxyIp, int nProxyPort) { - // this is used in a check before re-enabling the save buttons - fProxyIpValid = fState; + Q_UNUSED(nProxyPort); - if(fProxyIpValid) + const std::string strAddrProxy = pUiProxyIp->text().toStdString(); + CService addrProxy; + + /* Check for a valid IPv4 / IPv6 address */ + if (!(fProxyIpValid = LookupNumeric(strAddrProxy.c_str(), addrProxy))) { - enableSaveButtons(); - ui->statusLabel->clear(); + disableOkButton(); + pUiProxyIp->setValid(false); + ui->statusLabel->setStyleSheet("QLabel { color: red; }"); + ui->statusLabel->setText(tr("The supplied proxy address is invalid.")); } else { - disableSaveButtons(); - object->setValid(fProxyIpValid); - ui->statusLabel->setStyleSheet("QLabel { color: red; }"); - ui->statusLabel->setText(tr("The supplied proxy address is invalid.")); + enableOkButton(); + ui->statusLabel->clear(); } } @@ -272,9 +295,7 @@ bool OptionsDialog::eventFilter(QObject *object, QEvent *event) { if(object == ui->proxyIp) { - CService addr; - /* Check proxyIp for a valid IPv4/IPv6 address and emit the proxyIpValid signal */ - emit proxyIpValid(ui->proxyIp, LookupNumeric(ui->proxyIp->text().toStdString().c_str(), addr)); + emit proxyIpChecks(ui->proxyIp, ui->proxyPort->text().toInt()); } } return QDialog::eventFilter(object, event); diff --git a/src/qt/optionsdialog.h b/src/qt/optionsdialog.h index d64ed0b5..6b620696 100644 --- a/src/qt/optionsdialog.h +++ b/src/qt/optionsdialog.h @@ -1,14 +1,19 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef OPTIONSDIALOG_H #define OPTIONSDIALOG_H #include +class MonitoredDataMapper; +class OptionsModel; +class QValidatedLineEdit; + namespace Ui { class OptionsDialog; } -class OptionsModel; -class MonitoredDataMapper; -class QValidatedLineEdit; /** Preferences dialog. */ class OptionsDialog : public QDialog @@ -16,7 +21,7 @@ class OptionsDialog : public QDialog Q_OBJECT public: - explicit OptionsDialog(QWidget *parent = 0); + explicit OptionsDialog(QWidget *parent); ~OptionsDialog(); void setModel(OptionsModel *model); @@ -26,35 +31,28 @@ protected: bool eventFilter(QObject *object, QEvent *event); private slots: - /* enable only apply button */ - void enableApplyButton(); - /* disable only apply button */ - void disableApplyButton(); - /* enable apply button and OK button */ - void enableSaveButtons(); - /* disable apply button and OK button */ - void disableSaveButtons(); - /* set apply button and OK button state (enabled / disabled) */ - void setSaveButtonState(bool fState); + /* enable OK button */ + void enableOkButton(); + /* disable OK button */ + void disableOkButton(); + /* set OK button state (enabled / disabled) */ + void setOkButtonState(bool fState); void on_resetButton_clicked(); void on_okButton_clicked(); void on_cancelButton_clicked(); - void on_applyButton_clicked(); - void showRestartWarning_Proxy(); - void showRestartWarning_Lang(); + void showRestartWarning(bool fPersistent = false); + void clearStatusLabel(); void updateDisplayUnit(); - void handleProxyIpValid(QValidatedLineEdit *object, bool fState); + void doProxyIpChecks(QValidatedLineEdit *pUiProxyIp, int nProxyPort); signals: - void proxyIpValid(QValidatedLineEdit *object, bool fValid); + void proxyIpChecks(QValidatedLineEdit *pUiProxyIp, int nProxyPort); private: Ui::OptionsDialog *ui; OptionsModel *model; MonitoredDataMapper *mapper; - bool fRestartWarningDisplayed_Proxy; - bool fRestartWarningDisplayed_Lang; bool fProxyIpValid; }; diff --git a/src/qt/optionsmodel.cpp b/src/qt/optionsmodel.cpp index 7ebe5b47..e87a1d97 100644 --- a/src/qt/optionsmodel.cpp +++ b/src/qt/optionsmodel.cpp @@ -1,11 +1,28 @@ +// Copyright (c) 2011-2014 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#if defined(HAVE_CONFIG_H) +#include "bitcoin-config.h" +#endif + #include "optionsmodel.h" #include "bitcoinunits.h" -#include "init.h" -#include "walletdb.h" #include "guiutil.h" +#include "init.h" +#include "main.h" +#include "net.h" +#include "txdb.h" // for -dbcache defaults +#ifdef ENABLE_WALLET +#include "wallet.h" +#include "walletdb.h" +#endif + +#include #include +#include OptionsModel::OptionsModel(QObject *parent) : QAbstractListModel(parent) @@ -13,137 +30,130 @@ OptionsModel::OptionsModel(QObject *parent) : Init(); } -bool static ApplyProxySettings() +void OptionsModel::addOverriddenOption(const std::string &option) { - QSettings settings; - CService addrProxy(settings.value("addrProxy", "127.0.0.1:9050").toString().toStdString()); - int nSocksVersion(settings.value("nSocksVersion", 5).toInt()); - if (!settings.value("fUseProxy", false).toBool()) { - addrProxy = CService(); - nSocksVersion = 0; - return false; - } - if (nSocksVersion && !addrProxy.IsValid()) - return false; - if (!IsLimited(NET_IPV4)) - SetProxy(NET_IPV4, addrProxy, nSocksVersion); - if (nSocksVersion > 4) { -#ifdef USE_IPV6 - if (!IsLimited(NET_IPV6)) - SetProxy(NET_IPV6, addrProxy, nSocksVersion); -#endif - SetNameProxy(addrProxy, nSocksVersion); - } - return true; + strOverriddenByCommandLine += QString::fromStdString(option) + "=" + QString::fromStdString(mapArgs[option]) + " "; } +// Writes all missing QSettings with their default values void OptionsModel::Init() { QSettings settings; - // These are Qt-only settings: - nDisplayUnit = settings.value("nDisplayUnit", BitcoinUnits::BTC).toInt(); - bDisplayAddresses = settings.value("bDisplayAddresses", false).toBool(); - fMinimizeToTray = settings.value("fMinimizeToTray", false).toBool(); - fMinimizeOnClose = settings.value("fMinimizeOnClose", false).toBool(); - nTransactionFee = settings.value("nTransactionFee").toLongLong(); - language = settings.value("language", "").toString(); + // Ensure restart flag is unset on client startup + setRestartRequired(false); - // These are shared with core Bitcoin; we want - // command-line options to override the GUI settings: - if (settings.contains("fUseUPnP")) - SoftSetBoolArg("-upnp", settings.value("fUseUPnP").toBool()); - if (settings.contains("addrProxy") && settings.value("fUseProxy").toBool()) - SoftSetArg("-proxy", settings.value("addrProxy").toString().toStdString()); - if (settings.contains("nSocksVersion") && settings.value("fUseProxy").toBool()) - SoftSetArg("-socks", settings.value("nSocksVersion").toString().toStdString()); - if (!language.isEmpty()) - SoftSetArg("-lang", language.toStdString()); + // These are Qt-only settings: + + // Window + if (!settings.contains("fMinimizeToTray")) + settings.setValue("fMinimizeToTray", false); + fMinimizeToTray = settings.value("fMinimizeToTray").toBool(); + + if (!settings.contains("fMinimizeOnClose")) + settings.setValue("fMinimizeOnClose", false); + fMinimizeOnClose = settings.value("fMinimizeOnClose").toBool(); + + // Display + if (!settings.contains("nDisplayUnit")) + settings.setValue("nDisplayUnit", BitcoinUnits::BTC); + nDisplayUnit = settings.value("nDisplayUnit").toInt(); + + if (!settings.contains("bDisplayAddresses")) + settings.setValue("bDisplayAddresses", false); + bDisplayAddresses = settings.value("bDisplayAddresses", false).toBool(); + + if (!settings.contains("strThirdPartyTxUrls")) + settings.setValue("strThirdPartyTxUrls", ""); + strThirdPartyTxUrls = settings.value("strThirdPartyTxUrls", "").toString(); + + if (!settings.contains("fCoinControlFeatures")) + settings.setValue("fCoinControlFeatures", false); + fCoinControlFeatures = settings.value("fCoinControlFeatures", false).toBool(); + + // These are shared with the core or have a command-line parameter + // and we want command-line parameters to overwrite the GUI settings. + // + // If setting doesn't exist create it with defaults. + // + // If SoftSetArg() or SoftSetBoolArg() return false we were overridden + // by command-line and show this in the UI. + + // Main + if (!settings.contains("nDatabaseCache")) + settings.setValue("nDatabaseCache", (qint64)nDefaultDbCache); + if (!SoftSetArg("-dbcache", settings.value("nDatabaseCache").toString().toStdString())) + addOverriddenOption("-dbcache"); + + if (!settings.contains("nThreadsScriptVerif")) + settings.setValue("nThreadsScriptVerif", DEFAULT_SCRIPTCHECK_THREADS); + if (!SoftSetArg("-par", settings.value("nThreadsScriptVerif").toString().toStdString())) + addOverriddenOption("-par"); + + // Wallet +#ifdef ENABLE_WALLET + if (!settings.contains("nTransactionFee")) + settings.setValue("nTransactionFee", (qint64)DEFAULT_TRANSACTION_FEE); + nTransactionFee = settings.value("nTransactionFee").toLongLong(); // if -paytxfee is set, this will be overridden later in init.cpp + if (mapArgs.count("-paytxfee")) + addOverriddenOption("-paytxfee"); + + if (!settings.contains("bSpendZeroConfChange")) + settings.setValue("bSpendZeroConfChange", true); + if (!SoftSetBoolArg("-spendzeroconfchange", settings.value("bSpendZeroConfChange").toBool())) + addOverriddenOption("-spendzeroconfchange"); +#endif + + // Network + if (!settings.contains("fUseUPnP")) +#ifdef USE_UPNP + settings.setValue("fUseUPnP", true); +#else + settings.setValue("fUseUPnP", false); +#endif + if (!SoftSetBoolArg("-upnp", settings.value("fUseUPnP").toBool())) + addOverriddenOption("-upnp"); + + if (!settings.contains("fUseProxy")) + settings.setValue("fUseProxy", false); + if (!settings.contains("addrProxy")) + settings.setValue("addrProxy", "127.0.0.1:9050"); + // Only try to set -proxy, if user has enabled fUseProxy + if (settings.value("fUseProxy").toBool() && !SoftSetArg("-proxy", settings.value("addrProxy").toString().toStdString())) + addOverriddenOption("-proxy"); + if (!settings.contains("nSocksVersion")) + settings.setValue("nSocksVersion", 5); + // Only try to set -socks, if user has enabled fUseProxy + if (settings.value("fUseProxy").toBool() && !SoftSetArg("-socks", settings.value("nSocksVersion").toString().toStdString())) + addOverriddenOption("-socks"); + + // Display + if (!settings.contains("language")) + settings.setValue("language", ""); + if (!SoftSetArg("-lang", settings.value("language").toString().toStdString())) + addOverriddenOption("-lang"); + + language = settings.value("language").toString(); } void OptionsModel::Reset() { QSettings settings; - // Remove all entries in this QSettings object + // Remove all entries from our QSettings object settings.clear(); // default setting for OptionsModel::StartAtStartup - disabled if (GUIUtil::GetStartOnSystemStartup()) GUIUtil::SetStartOnSystemStartup(false); - - // Re-Init to get default values - Init(); - - // Ensure Upgrade() is not running again by setting the bImportFinished flag - settings.setValue("bImportFinished", true); } -bool OptionsModel::Upgrade() -{ - QSettings settings; - - if (settings.contains("bImportFinished")) - return false; // Already upgraded - - settings.setValue("bImportFinished", true); - - // Move settings from old wallet.dat (if any): - CWalletDB walletdb(strWalletFile); - - QList intOptions; - intOptions << "nDisplayUnit" << "nTransactionFee"; - foreach(QString key, intOptions) - { - int value = 0; - if (walletdb.ReadSetting(key.toStdString(), value)) - { - settings.setValue(key, value); - walletdb.EraseSetting(key.toStdString()); - } - } - QList boolOptions; - boolOptions << "bDisplayAddresses" << "fMinimizeToTray" << "fMinimizeOnClose" << "fUseProxy" << "fUseUPnP"; - foreach(QString key, boolOptions) - { - bool value = false; - if (walletdb.ReadSetting(key.toStdString(), value)) - { - settings.setValue(key, value); - walletdb.EraseSetting(key.toStdString()); - } - } - try - { - CAddress addrProxyAddress; - if (walletdb.ReadSetting("addrProxy", addrProxyAddress)) - { - settings.setValue("addrProxy", addrProxyAddress.ToStringIPPort().c_str()); - walletdb.EraseSetting("addrProxy"); - } - } - catch (std::ios_base::failure &e) - { - // 0.6.0rc1 saved this as a CService, which causes failure when parsing as a CAddress - CService addrProxy; - if (walletdb.ReadSetting("addrProxy", addrProxy)) - { - settings.setValue("addrProxy", addrProxy.ToStringIPPort().c_str()); - walletdb.EraseSetting("addrProxy"); - } - } - ApplyProxySettings(); - Init(); - - return true; -} - - int OptionsModel::rowCount(const QModelIndex & parent) const { return OptionIDRowCount; } +// read QSettings values and return them QVariant OptionsModel::data(const QModelIndex & index, int role) const { if(role == Qt::EditRole) @@ -152,50 +162,61 @@ QVariant OptionsModel::data(const QModelIndex & index, int role) const switch(index.row()) { case StartAtStartup: - return QVariant(GUIUtil::GetStartOnSystemStartup()); + return GUIUtil::GetStartOnSystemStartup(); case MinimizeToTray: - return QVariant(fMinimizeToTray); + return fMinimizeToTray; case MapPortUPnP: #ifdef USE_UPNP - return settings.value("fUseUPnP", GetBoolArg("-upnp", true)); + return settings.value("fUseUPnP"); #else - return QVariant(false); + return false; #endif case MinimizeOnClose: - return QVariant(fMinimizeOnClose); - case ProxyUse: { - proxyType proxy; - return QVariant(GetProxy(NET_IPV4, proxy)); - } + return fMinimizeOnClose; + + // default proxy + case ProxyUse: + return settings.value("fUseProxy", false); case ProxyIP: { - proxyType proxy; - if (GetProxy(NET_IPV4, proxy)) - return QVariant(QString::fromStdString(proxy.first.ToStringIP())); - else - return QVariant(QString::fromStdString("127.0.0.1")); + // contains IP at index 0 and port at index 1 + QStringList strlIpPort = settings.value("addrProxy").toString().split(":", QString::SkipEmptyParts); + return strlIpPort.at(0); } case ProxyPort: { - proxyType proxy; - if (GetProxy(NET_IPV4, proxy)) - return QVariant(proxy.first.GetPort()); - else - return QVariant(9050); - } - case ProxySocksVersion: { - proxyType proxy; - if (GetProxy(NET_IPV4, proxy)) - return QVariant(proxy.second); - else - return QVariant(5); + // contains IP at index 0 and port at index 1 + QStringList strlIpPort = settings.value("addrProxy").toString().split(":", QString::SkipEmptyParts); + return strlIpPort.at(1); } + case ProxySocksVersion: + return settings.value("nSocksVersion", 5); + +#ifdef ENABLE_WALLET case Fee: - return QVariant(nTransactionFee); + // Attention: Init() is called before nTransactionFee is set in AppInit2()! + // To ensure we can change the fee on-the-fly update our QSetting when + // opening OptionsDialog, which queries Fee via the mapper. + if (nTransactionFee != settings.value("nTransactionFee").toLongLong()) + settings.setValue("nTransactionFee", (qint64)nTransactionFee); + // Todo: Consider to revert back to use just nTransactionFee here, if we don't want + // -paytxfee to update our QSettings! + return settings.value("nTransactionFee"); + case SpendZeroConfChange: + return settings.value("bSpendZeroConfChange"); +#endif case DisplayUnit: - return QVariant(nDisplayUnit); + return nDisplayUnit; case DisplayAddresses: - return QVariant(bDisplayAddresses); + return bDisplayAddresses; + case ThirdPartyTxUrls: + return strThirdPartyTxUrls; case Language: - return settings.value("language", ""); + return settings.value("language"); + case CoinControlFeatures: + return fCoinControlFeatures; + case DatabaseCache: + return settings.value("nDatabaseCache"); + case ThreadsScriptVerif: + return settings.value("nThreadsScriptVerif"); default: return QVariant(); } @@ -203,6 +224,7 @@ QVariant OptionsModel::data(const QModelIndex & index, int role) const return QVariant(); } +// write QSettings values bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, int role) { bool successful = true; /* set to false on parse error */ @@ -218,7 +240,7 @@ bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, in fMinimizeToTray = value.toBool(); settings.setValue("fMinimizeToTray", fMinimizeToTray); break; - case MapPortUPnP: + case MapPortUPnP: // core option - can be changed on-the-fly settings.setValue("fUseUPnP", value.toBool()); MapPort(value.toBool()); break; @@ -226,45 +248,59 @@ bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, in fMinimizeOnClose = value.toBool(); settings.setValue("fMinimizeOnClose", fMinimizeOnClose); break; + + // default proxy case ProxyUse: - settings.setValue("fUseProxy", value.toBool()); - successful = ApplyProxySettings(); + if (settings.value("fUseProxy") != value) { + settings.setValue("fUseProxy", value.toBool()); + setRestartRequired(true); + } break; case ProxyIP: { - proxyType proxy; - proxy.first = CService("127.0.0.1", 9050); - GetProxy(NET_IPV4, proxy); - - CNetAddr addr(value.toString().toStdString()); - proxy.first.SetIP(addr); - settings.setValue("addrProxy", proxy.first.ToStringIPPort().c_str()); - successful = ApplyProxySettings(); + // contains current IP at index 0 and current port at index 1 + QStringList strlIpPort = settings.value("addrProxy").toString().split(":", QString::SkipEmptyParts); + // if that key doesn't exist or has a changed IP + if (!settings.contains("addrProxy") || strlIpPort.at(0) != value.toString()) { + // construct new value from new IP and current port + QString strNewValue = value.toString() + ":" + strlIpPort.at(1); + settings.setValue("addrProxy", strNewValue); + setRestartRequired(true); + } } break; case ProxyPort: { - proxyType proxy; - proxy.first = CService("127.0.0.1", 9050); - GetProxy(NET_IPV4, proxy); - - proxy.first.SetPort(value.toInt()); - settings.setValue("addrProxy", proxy.first.ToStringIPPort().c_str()); - successful = ApplyProxySettings(); + // contains current IP at index 0 and current port at index 1 + QStringList strlIpPort = settings.value("addrProxy").toString().split(":", QString::SkipEmptyParts); + // if that key doesn't exist or has a changed port + if (!settings.contains("addrProxy") || strlIpPort.at(1) != value.toString()) { + // construct new value from current IP and new port + QString strNewValue = strlIpPort.at(0) + ":" + value.toString(); + settings.setValue("addrProxy", strNewValue); + setRestartRequired(true); + } } break; case ProxySocksVersion: { - proxyType proxy; - proxy.second = 5; - GetProxy(NET_IPV4, proxy); - - proxy.second = value.toInt(); - settings.setValue("nSocksVersion", proxy.second); - successful = ApplyProxySettings(); + if (settings.value("nSocksVersion") != value) { + settings.setValue("nSocksVersion", value.toInt()); + setRestartRequired(true); + } } break; - case Fee: +#ifdef ENABLE_WALLET + case Fee: // core option - can be changed on-the-fly + // Todo: Add is valid check and warn via message, if not nTransactionFee = value.toLongLong(); - settings.setValue("nTransactionFee", nTransactionFee); + settings.setValue("nTransactionFee", (qint64)nTransactionFee); + emit transactionFeeChanged(nTransactionFee); break; + case SpendZeroConfChange: + if (settings.value("bSpendZeroConfChange") != value) { + settings.setValue("bSpendZeroConfChange", value); + setRestartRequired(true); + } + break; +#endif case DisplayUnit: nDisplayUnit = value.toInt(); settings.setValue("nDisplayUnit", nDisplayUnit); @@ -274,8 +310,35 @@ bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, in bDisplayAddresses = value.toBool(); settings.setValue("bDisplayAddresses", bDisplayAddresses); break; + case ThirdPartyTxUrls: + if (strThirdPartyTxUrls != value.toString()) { + strThirdPartyTxUrls = value.toString(); + settings.setValue("strThirdPartyTxUrls", strThirdPartyTxUrls); + setRestartRequired(true); + } + break; case Language: - settings.setValue("language", value); + if (settings.value("language") != value) { + settings.setValue("language", value); + setRestartRequired(true); + } + break; + case CoinControlFeatures: + fCoinControlFeatures = value.toBool(); + settings.setValue("fCoinControlFeatures", fCoinControlFeatures); + emit coinControlFeaturesChanged(fCoinControlFeatures); + break; + case DatabaseCache: + if (settings.value("nDatabaseCache") != value) { + settings.setValue("nDatabaseCache", value); + setRestartRequired(true); + } + break; + case ThreadsScriptVerif: + if (settings.value("nThreadsScriptVerif") != value) { + settings.setValue("nThreadsScriptVerif", value); + setRestartRequired(true); + } break; default: break; @@ -286,7 +349,36 @@ bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, in return successful; } -qint64 OptionsModel::getTransactionFee() +bool OptionsModel::getProxySettings(QNetworkProxy& proxy) const { - return nTransactionFee; + // Directly query current base proxy, because + // GUI settings can be overridden with -proxy. + proxyType curProxy; + if (GetProxy(NET_IPV4, curProxy)) { + if (curProxy.second == 5) { + proxy.setType(QNetworkProxy::Socks5Proxy); + proxy.setHostName(QString::fromStdString(curProxy.first.ToStringIP())); + proxy.setPort(curProxy.first.GetPort()); + + return true; + } + else + return false; + } + else + proxy.setType(QNetworkProxy::NoProxy); + + return true; +} + +void OptionsModel::setRestartRequired(bool fRequired) +{ + QSettings settings; + return settings.setValue("fRestartRequired", fRequired); +} + +bool OptionsModel::isRestartRequired() +{ + QSettings settings; + return settings.value("fRestartRequired", false).toBool(); } diff --git a/src/qt/optionsmodel.h b/src/qt/optionsmodel.h index d25d898d..f05e3e92 100644 --- a/src/qt/optionsmodel.h +++ b/src/qt/optionsmodel.h @@ -1,8 +1,16 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef OPTIONSMODEL_H #define OPTIONSMODEL_H #include +QT_BEGIN_NAMESPACE +class QNetworkProxy; +QT_END_NAMESPACE + /** Interface from Qt to configuration data structure for Bitcoin client. To Qt, the options are presented as a list with the different options laid out vertically. @@ -17,48 +25,66 @@ public: explicit OptionsModel(QObject *parent = 0); enum OptionID { - StartAtStartup, // bool - MinimizeToTray, // bool - MapPortUPnP, // bool - MinimizeOnClose, // bool - ProxyUse, // bool - ProxyIP, // QString - ProxyPort, // int - ProxySocksVersion, // int - Fee, // qint64 - DisplayUnit, // BitcoinUnits::Unit - DisplayAddresses, // bool - Language, // QString + StartAtStartup, // bool + MinimizeToTray, // bool + MapPortUPnP, // bool + MinimizeOnClose, // bool + ProxyUse, // bool + ProxyIP, // QString + ProxyPort, // int + ProxySocksVersion, // int + Fee, // qint64 + DisplayUnit, // BitcoinUnits::Unit + DisplayAddresses, // bool + ThirdPartyTxUrls, // QString + Language, // QString + CoinControlFeatures, // bool + ThreadsScriptVerif, // int + DatabaseCache, // int + SpendZeroConfChange, // bool OptionIDRowCount, }; void Init(); void Reset(); - /* Migrate settings from wallet.dat after app initialization */ - bool Upgrade(); /* returns true if settings upgraded */ - int rowCount(const QModelIndex & parent = QModelIndex()) const; QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const; bool setData(const QModelIndex & index, const QVariant & value, int role = Qt::EditRole); /* Explicit getters */ - qint64 getTransactionFee(); bool getMinimizeToTray() { return fMinimizeToTray; } bool getMinimizeOnClose() { return fMinimizeOnClose; } int getDisplayUnit() { return nDisplayUnit; } bool getDisplayAddresses() { return bDisplayAddresses; } - QString getLanguage() { return language; } + QString getThirdPartyTxUrls() { return strThirdPartyTxUrls; } + bool getProxySettings(QNetworkProxy& proxy) const; + bool getCoinControlFeatures() { return fCoinControlFeatures; } + const QString& getOverriddenByCommandLine() { return strOverriddenByCommandLine; } + + /* Restart flag helper */ + void setRestartRequired(bool fRequired); + bool isRestartRequired(); private: - int nDisplayUnit; - bool bDisplayAddresses; + /* Qt-only settings */ bool fMinimizeToTray; bool fMinimizeOnClose; QString language; + int nDisplayUnit; + bool bDisplayAddresses; + QString strThirdPartyTxUrls; + bool fCoinControlFeatures; + /* settings that were overriden by command-line */ + QString strOverriddenByCommandLine; + + /// Add option to list of GUI options overridden through command line/config file + void addOverriddenOption(const std::string &option); signals: void displayUnitChanged(int unit); + void transactionFeeChanged(qint64); + void coinControlFeaturesChanged(bool); }; #endif // OPTIONSMODEL_H diff --git a/src/qt/overviewpage.cpp b/src/qt/overviewpage.cpp index ddd88913..1a9d1de5 100644 --- a/src/qt/overviewpage.cpp +++ b/src/qt/overviewpage.cpp @@ -1,14 +1,18 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #include "overviewpage.h" #include "ui_overviewpage.h" -#include "clientmodel.h" -#include "walletmodel.h" #include "bitcoinunits.h" -#include "optionsmodel.h" -#include "transactiontablemodel.h" -#include "transactionfilterproxy.h" -#include "guiutil.h" +#include "clientmodel.h" #include "guiconstants.h" +#include "guiutil.h" +#include "optionsmodel.h" +#include "transactionfilterproxy.h" +#include "transactiontablemodel.h" +#include "walletmodel.h" #include #include @@ -171,6 +175,7 @@ void OverviewPage::setWalletModel(WalletModel *model) filter->setLimit(NUM_ITEMS); filter->setDynamicSortFilter(true); filter->setSortRole(Qt::EditRole); + filter->setShowInactive(false); filter->sort(TransactionTableModel::Status, Qt::DescendingOrder); ui->listTransactions->setModel(filter); diff --git a/src/qt/overviewpage.h b/src/qt/overviewpage.h index 59ba3c66..2507a3fb 100644 --- a/src/qt/overviewpage.h +++ b/src/qt/overviewpage.h @@ -1,15 +1,20 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef OVERVIEWPAGE_H #define OVERVIEWPAGE_H #include +class ClientModel; +class TransactionFilterProxy; +class TxViewDelegate; +class WalletModel; + namespace Ui { class OverviewPage; } -class ClientModel; -class WalletModel; -class TxViewDelegate; -class TransactionFilterProxy; QT_BEGIN_NAMESPACE class QModelIndex; diff --git a/src/qt/paymentrequestplus.cpp b/src/qt/paymentrequestplus.cpp new file mode 100644 index 00000000..e369734a --- /dev/null +++ b/src/qt/paymentrequestplus.cpp @@ -0,0 +1,208 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +// +// Wraps dumb protocol buffer paymentRequest +// with some extra methods +// + +#include "paymentrequestplus.h" + +#include + +#include +#include +#include +#include +#include + + +class SSLVerifyError : public std::runtime_error +{ +public: + SSLVerifyError(std::string err) : std::runtime_error(err) { } +}; + +bool PaymentRequestPlus::parse(const QByteArray& data) +{ + bool parseOK = paymentRequest.ParseFromArray(data.data(), data.size()); + if (!parseOK) { + qDebug() << "PaymentRequestPlus::parse : Error parsing payment request"; + return false; + } + if (paymentRequest.payment_details_version() > 1) { + qDebug() << "PaymentRequestPlus::parse : Received up-version payment details, version=" << paymentRequest.payment_details_version(); + return false; + } + + parseOK = details.ParseFromString(paymentRequest.serialized_payment_details()); + if (!parseOK) + { + qDebug() << "PaymentRequestPlus::parse : Error parsing payment details"; + paymentRequest.Clear(); + return false; + } + return true; +} + +bool PaymentRequestPlus::SerializeToString(string* output) const +{ + return paymentRequest.SerializeToString(output); +} + +bool PaymentRequestPlus::IsInitialized() const +{ + return paymentRequest.IsInitialized(); +} + +QString PaymentRequestPlus::getPKIType() const +{ + if (!IsInitialized()) return QString("none"); + return QString::fromStdString(paymentRequest.pki_type()); +} + +bool PaymentRequestPlus::getMerchant(X509_STORE* certStore, QString& merchant) const +{ + merchant.clear(); + + if (!IsInitialized()) + return false; + + // One day we'll support more PKI types, but just + // x509 for now: + const EVP_MD* digestAlgorithm = NULL; + if (paymentRequest.pki_type() == "x509+sha256") { + digestAlgorithm = EVP_sha256(); + } + else if (paymentRequest.pki_type() == "x509+sha1") { + digestAlgorithm = EVP_sha1(); + } + else if (paymentRequest.pki_type() == "none") { + qDebug() << "PaymentRequestPlus::getMerchant : Payment request: pki_type == none"; + return false; + } + else { + qDebug() << "PaymentRequestPlus::getMerchant : Payment request: unknown pki_type " << QString::fromStdString(paymentRequest.pki_type()); + return false; + } + + payments::X509Certificates certChain; + if (!certChain.ParseFromString(paymentRequest.pki_data())) { + qDebug() << "PaymentRequestPlus::getMerchant : Payment request: error parsing pki_data"; + return false; + } + + std::vector certs; + const QDateTime currentTime = QDateTime::currentDateTime(); + for (int i = 0; i < certChain.certificate_size(); i++) { + QByteArray certData(certChain.certificate(i).data(), certChain.certificate(i).size()); + QSslCertificate qCert(certData, QSsl::Der); + if (currentTime < qCert.effectiveDate() || currentTime > qCert.expiryDate()) { + qDebug() << "PaymentRequestPlus::getMerchant : Payment request: certificate expired or not yet active: " << qCert; + return false; + } +#if QT_VERSION >= 0x050000 + if (qCert.isBlacklisted()) { + qDebug() << "PaymentRequestPlus::getMerchant : Payment request: certificate blacklisted: " << qCert; + return false; + } +#endif + const unsigned char *data = (const unsigned char *)certChain.certificate(i).data(); + X509 *cert = d2i_X509(NULL, &data, certChain.certificate(i).size()); + if (cert) + certs.push_back(cert); + } + if (certs.empty()) { + qDebug() << "PaymentRequestPlus::getMerchant : Payment request: empty certificate chain"; + return false; + } + + // The first cert is the signing cert, the rest are untrusted certs that chain + // to a valid root authority. OpenSSL needs them separately. + STACK_OF(X509) *chain = sk_X509_new_null(); + for (int i = certs.size()-1; i > 0; i--) { + sk_X509_push(chain, certs[i]); + } + X509 *signing_cert = certs[0]; + + // Now create a "store context", which is a single use object for checking, + // load the signing cert into it and verify. + X509_STORE_CTX *store_ctx = X509_STORE_CTX_new(); + if (!store_ctx) { + qDebug() << "PaymentRequestPlus::getMerchant : Payment request: error creating X509_STORE_CTX"; + return false; + } + + char *website = NULL; + bool fResult = true; + try + { + if (!X509_STORE_CTX_init(store_ctx, certStore, signing_cert, chain)) + { + int error = X509_STORE_CTX_get_error(store_ctx); + throw SSLVerifyError(X509_verify_cert_error_string(error)); + } + + // Now do the verification! + int result = X509_verify_cert(store_ctx); + if (result != 1) { + int error = X509_STORE_CTX_get_error(store_ctx); + throw SSLVerifyError(X509_verify_cert_error_string(error)); + } + X509_NAME *certname = X509_get_subject_name(signing_cert); + + // Valid cert; check signature: + payments::PaymentRequest rcopy(paymentRequest); // Copy + rcopy.set_signature(std::string("")); + std::string data_to_verify; // Everything but the signature + rcopy.SerializeToString(&data_to_verify); + + EVP_MD_CTX ctx; + EVP_PKEY *pubkey = X509_get_pubkey(signing_cert); + EVP_MD_CTX_init(&ctx); + if (!EVP_VerifyInit_ex(&ctx, digestAlgorithm, NULL) || + !EVP_VerifyUpdate(&ctx, data_to_verify.data(), data_to_verify.size()) || + !EVP_VerifyFinal(&ctx, (const unsigned char*)paymentRequest.signature().data(), paymentRequest.signature().size(), pubkey)) { + + throw SSLVerifyError("Bad signature, invalid PaymentRequest."); + } + + // OpenSSL API for getting human printable strings from certs is baroque. + int textlen = X509_NAME_get_text_by_NID(certname, NID_commonName, NULL, 0); + website = new char[textlen + 1]; + if (X509_NAME_get_text_by_NID(certname, NID_commonName, website, textlen + 1) == textlen && textlen > 0) { + merchant = website; + } + else { + throw SSLVerifyError("Bad certificate, missing common name."); + } + // TODO: detect EV certificates and set merchant = business name instead of unfriendly NID_commonName ? + } + catch (SSLVerifyError& err) + { + fResult = false; + qDebug() << "PaymentRequestPlus::getMerchant : SSL error: " << err.what(); + } + + if (website) + delete[] website; + X509_STORE_CTX_free(store_ctx); + for (unsigned int i = 0; i < certs.size(); i++) + X509_free(certs[i]); + + return fResult; +} + +QList > PaymentRequestPlus::getPayTo() const +{ + QList > result; + for (int i = 0; i < details.outputs_size(); i++) + { + const unsigned char* scriptStr = (const unsigned char*)details.outputs(i).script().data(); + CScript s(scriptStr, scriptStr+details.outputs(i).script().size()); + + result.append(make_pair(s, details.outputs(i).amount())); + } + return result; +} diff --git a/src/qt/paymentrequestplus.h b/src/qt/paymentrequestplus.h new file mode 100644 index 00000000..8c126b1f --- /dev/null +++ b/src/qt/paymentrequestplus.h @@ -0,0 +1,46 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef PAYMENTREQUESTPLUS_H +#define PAYMENTREQUESTPLUS_H + +#include "paymentrequest.pb.h" + +#include "base58.h" + +#include +#include +#include + +// +// Wraps dumb protocol buffer paymentRequest +// with extra methods +// + +class PaymentRequestPlus +{ +public: + PaymentRequestPlus() { } + + bool parse(const QByteArray& data); + bool SerializeToString(string* output) const; + + bool IsInitialized() const; + QString getPKIType() const; + // Returns true if merchant's identity is authenticated, and + // returns human-readable merchant identity in merchant + bool getMerchant(X509_STORE* certStore, QString& merchant) const; + + // Returns list of outputs, amount + QList > getPayTo() const; + + const payments::PaymentDetails& getDetails() const { return details; } + +private: + payments::PaymentRequest paymentRequest; + payments::PaymentDetails details; +}; + +#endif // PAYMENTREQUESTPLUS_H + diff --git a/src/qt/paymentserver.cpp b/src/qt/paymentserver.cpp index c70d0c6b..203d9141 100644 --- a/src/qt/paymentserver.cpp +++ b/src/qt/paymentserver.cpp @@ -1,31 +1,66 @@ -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2011-2013 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include - #include "paymentserver.h" +#include "bitcoinunits.h" #include "guiconstants.h" -#include "ui_interface.h" -#include "util.h" +#include "guiutil.h" +#include "optionsmodel.h" +#include "base58.h" +#include "ui_interface.h" +#include "wallet.h" + +#include + +#include +#include +#include #include #include +#include #include +#include #include #include +#include #include #include +#include +#include +#include +#include +#include +#include +#include #include +#include + #if QT_VERSION < 0x050000 #include +#else +#include #endif using namespace boost; const int BITCOIN_IPC_CONNECT_TIMEOUT = 1000; // milliseconds const QString BITCOIN_IPC_PREFIX("myriadcoin:"); +const char* BITCOIN_REQUEST_MIMETYPE = "application/myriadcoin-paymentrequest"; +const char* BITCOIN_PAYMENTACK_MIMETYPE = "application/myriadcoin-paymentack"; +const char* BITCOIN_PAYMENTACK_CONTENTTYPE = "application/myriadcoin-payment"; + +X509_STORE* PaymentServer::certStore = NULL; +void PaymentServer::freeCertStore() +{ + if (PaymentServer::certStore != NULL) + { + X509_STORE_free(PaymentServer::certStore); + PaymentServer::certStore = NULL; + } +} // // Create a name that is unique for: @@ -39,18 +74,156 @@ static QString ipcServerName() // Append a simple hash of the datadir // Note that GetDataDir(true) returns a different path // for -testnet versus main net - QString ddir(GetDataDir(true).string().c_str()); + QString ddir(QString::fromStdString(GetDataDir(true).string())); name.append(QString::number(qHash(ddir))); return name; } // -// This stores payment requests received before +// We store payment URIs and requests received before // the main GUI window is up and ready to ask the user // to send payment. + +static QList savedPaymentRequests; + +static void ReportInvalidCertificate(const QSslCertificate& cert) +{ + qDebug() << "ReportInvalidCertificate : Payment server found an invalid certificate: " << cert.subjectInfo(QSslCertificate::CommonName); +} + // -static QStringList savedPaymentRequests; +// Load OpenSSL's list of root certificate authorities +// +void PaymentServer::LoadRootCAs(X509_STORE* _store) +{ + if (PaymentServer::certStore == NULL) + atexit(PaymentServer::freeCertStore); + else + freeCertStore(); + + // Unit tests mostly use this, to pass in fake root CAs: + if (_store) + { + PaymentServer::certStore = _store; + return; + } + + // Normal execution, use either -rootcertificates or system certs: + PaymentServer::certStore = X509_STORE_new(); + + // Note: use "-system-" default here so that users can pass -rootcertificates="" + // and get 'I don't like X.509 certificates, don't trust anybody' behavior: + QString certFile = QString::fromStdString(GetArg("-rootcertificates", "-system-")); + + if (certFile.isEmpty()) + return; // Empty store + + QList certList; + + if (certFile != "-system-") + { + certList = QSslCertificate::fromPath(certFile); + // Use those certificates when fetching payment requests, too: + QSslSocket::setDefaultCaCertificates(certList); + } + else + certList = QSslSocket::systemCaCertificates (); + + int nRootCerts = 0; + const QDateTime currentTime = QDateTime::currentDateTime(); + foreach (const QSslCertificate& cert, certList) + { + if (currentTime < cert.effectiveDate() || currentTime > cert.expiryDate()) { + ReportInvalidCertificate(cert); + continue; + } +#if QT_VERSION >= 0x050000 + if (cert.isBlacklisted()) { + ReportInvalidCertificate(cert); + continue; + } +#endif + QByteArray certData = cert.toDer(); + const unsigned char *data = (const unsigned char *)certData.data(); + + X509* x509 = d2i_X509(0, &data, certData.size()); + if (x509 && X509_STORE_add_cert(PaymentServer::certStore, x509)) + { + // Note: X509_STORE_free will free the X509* objects when + // the PaymentServer is destroyed + ++nRootCerts; + } + else + { + ReportInvalidCertificate(cert); + continue; + } + } + qDebug() << "PaymentServer::LoadRootCAs : Loaded " << nRootCerts << " root certificates"; + + // Project for another day: + // Fetch certificate revocation lists, and add them to certStore. + // Issues to consider: + // performance (start a thread to fetch in background?) + // privacy (fetch through tor/proxy so IP address isn't revealed) + // would it be easier to just use a compiled-in blacklist? + // or use Qt's blacklist? + // "certificate stapling" with server-side caching is more efficient +} + +// +// Sending to the server is done synchronously, at startup. +// If the server isn't already running, startup continues, +// and the items in savedPaymentRequest will be handled +// when uiReady() is called. +// +bool PaymentServer::ipcParseCommandLine(int argc, char* argv[]) +{ + for (int i = 1; i < argc; i++) + { + QString arg(argv[i]); + if (arg.startsWith("-")) + continue; + + if (arg.startsWith(BITCOIN_IPC_PREFIX, Qt::CaseInsensitive)) // bitcoin: URI + { + savedPaymentRequests.append(arg); + + SendCoinsRecipient r; + if (GUIUtil::parseBitcoinURI(arg, &r)) + { + CBitcoinAddress address(r.address.toStdString()); + + SelectParams(CChainParams::MAIN); + if (!address.IsValid()) + { + SelectParams(CChainParams::TESTNET); + } + } + } + else if (QFile::exists(arg)) // Filename + { + savedPaymentRequests.append(arg); + + PaymentRequestPlus request; + if (readPaymentRequest(arg, request)) + { + if (request.getDetails().network() == "main") + SelectParams(CChainParams::MAIN); + else + SelectParams(CChainParams::TESTNET); + } + } + else + { + // Printing to debug.log is about the best we can do here, the + // GUI hasn't started yet so we can't pop up a message box. + qDebug() << "PaymentServer::ipcSendCommandLine : Payment request file does not exist: " << arg; + } + } + return true; +} // // Sending to the server is done synchronously, at startup. @@ -61,26 +234,20 @@ static QStringList savedPaymentRequests; bool PaymentServer::ipcSendCommandLine() { bool fResult = false; - - const QStringList& args = qApp->arguments(); - for (int i = 1; i < args.size(); i++) - { - if (!args[i].startsWith(BITCOIN_IPC_PREFIX, Qt::CaseInsensitive)) - continue; - savedPaymentRequests.append(args[i]); - } - - foreach (const QString& arg, savedPaymentRequests) + foreach (const QString& r, savedPaymentRequests) { QLocalSocket* socket = new QLocalSocket(); socket->connectToServer(ipcServerName(), QIODevice::WriteOnly); if (!socket->waitForConnected(BITCOIN_IPC_CONNECT_TIMEOUT)) + { + delete socket; return false; + } QByteArray block; QDataStream out(&block, QIODevice::WriteOnly); out.setVersion(QDataStream::Qt_4_0); - out << arg; + out << r; out.device()->seek(0); socket->write(block); socket->flush(); @@ -90,53 +257,185 @@ bool PaymentServer::ipcSendCommandLine() delete socket; fResult = true; } + return fResult; } -PaymentServer::PaymentServer(QApplication* parent) : QObject(parent), saveURIs(true) +PaymentServer::PaymentServer(QObject* parent, bool startLocalServer) : + QObject(parent), + saveURIs(true), + uriServer(0), + netManager(0), + optionsModel(0) { - // Install global event filter to catch QFileOpenEvents on the mac (sent when you click bitcoin: links) - parent->installEventFilter(this); + // Verify that the version of the library that we linked against is + // compatible with the version of the headers we compiled against. + GOOGLE_PROTOBUF_VERIFY_VERSION; + + // Install global event filter to catch QFileOpenEvents + // on Mac: sent when you click bitcoin: links + // other OSes: helpful when dealing with payment request files (in the future) + if (parent) + parent->installEventFilter(this); QString name = ipcServerName(); // Clean up old socket leftover from a crash: QLocalServer::removeServer(name); - uriServer = new QLocalServer(this); - - if (!uriServer->listen(name)) - qDebug() << tr("Cannot start myriadcoin: click-to-pay handler"); - else - connect(uriServer, SIGNAL(newConnection()), this, SLOT(handleURIConnection())); -} - -bool PaymentServer::eventFilter(QObject *object, QEvent *event) -{ - // clicking on bitcoin: URLs creates FileOpen events on the Mac: - if (event->type() == QEvent::FileOpen) + if (startLocalServer) { - QFileOpenEvent* fileEvent = static_cast(event); - if (!fileEvent->url().isEmpty()) - { - if (saveURIs) // Before main window is ready: - savedPaymentRequests.append(fileEvent->url().toString()); - else - emit receivedURI(fileEvent->url().toString()); - return true; + uriServer = new QLocalServer(this); + + if (!uriServer->listen(name)) { + // constructor is called early in init, so don't use "emit message()" here + QMessageBox::critical(0, tr("Payment request error"), + tr("Cannot start myriadcoin: click-to-pay handler")); + } + else { + connect(uriServer, SIGNAL(newConnection()), this, SLOT(handleURIConnection())); + connect(this, SIGNAL(receivedPaymentACK(QString)), this, SLOT(handlePaymentACK(QString))); } } - return false; +} + +PaymentServer::~PaymentServer() +{ + google::protobuf::ShutdownProtobufLibrary(); +} + +// +// OSX-specific way of handling bitcoin: URIs and +// PaymentRequest mime types +// +bool PaymentServer::eventFilter(QObject *object, QEvent *event) +{ + // clicking on bitcoin: URIs creates FileOpen events on the Mac + if (event->type() == QEvent::FileOpen) + { + QFileOpenEvent *fileEvent = static_cast(event); + if (!fileEvent->file().isEmpty()) + handleURIOrFile(fileEvent->file()); + else if (!fileEvent->url().isEmpty()) + handleURIOrFile(fileEvent->url().toString()); + + return true; + } + + return QObject::eventFilter(object, event); +} + +void PaymentServer::initNetManager() +{ + if (!optionsModel) + return; + if (netManager != NULL) + delete netManager; + + // netManager is used to fetch paymentrequests given in bitcoin: URIs + netManager = new QNetworkAccessManager(this); + + QNetworkProxy proxy; + + // Query active proxy (fails if no SOCKS5 proxy) + if (optionsModel->getProxySettings(proxy)) { + if (proxy.type() == QNetworkProxy::Socks5Proxy) { + netManager->setProxy(proxy); + + qDebug() << "PaymentServer::initNetManager : Using SOCKS5 proxy" << proxy.hostName() << ":" << proxy.port(); + } + else + qDebug() << "PaymentServer::initNetManager : No active proxy server found."; + } + else + emit message(tr("Net manager warning"), + tr("Your active proxy doesn't support SOCKS5, which is required for payment requests via proxy."), + CClientUIInterface::MSG_WARNING); + + connect(netManager, SIGNAL(finished(QNetworkReply*)), + this, SLOT(netRequestFinished(QNetworkReply*))); + connect(netManager, SIGNAL(sslErrors(QNetworkReply*, const QList &)), + this, SLOT(reportSslErrors(QNetworkReply*, const QList &))); } void PaymentServer::uiReady() { + initNetManager(); + saveURIs = false; foreach (const QString& s, savedPaymentRequests) - emit receivedURI(s); + { + handleURIOrFile(s); + } savedPaymentRequests.clear(); } +void PaymentServer::handleURIOrFile(const QString& s) +{ + if (saveURIs) + { + savedPaymentRequests.append(s); + return; + } + + if (s.startsWith(BITCOIN_IPC_PREFIX, Qt::CaseInsensitive)) // bitcoin: URI + { +#if QT_VERSION < 0x050000 + QUrl uri(s); +#else + QUrlQuery uri((QUrl(s))); +#endif + if (uri.hasQueryItem("r")) // payment request URI + { + QByteArray temp; + temp.append(uri.queryItemValue("r")); + QString decoded = QUrl::fromPercentEncoding(temp); + QUrl fetchUrl(decoded, QUrl::StrictMode); + + if (fetchUrl.isValid()) + { + qDebug() << "PaymentServer::handleURIOrFile : fetchRequest(" << fetchUrl << ")"; + fetchRequest(fetchUrl); + } + else + { + qDebug() << "PaymentServer::handleURIOrFile : Invalid URL: " << fetchUrl; + emit message(tr("URI handling"), + tr("Payment request fetch URL is invalid: %1").arg(fetchUrl.toString()), + CClientUIInterface::ICON_WARNING); + } + + return; + } + else // normal URI + { + SendCoinsRecipient recipient; + if (GUIUtil::parseBitcoinURI(s, &recipient)) + emit receivedPaymentRequest(recipient); + else + emit message(tr("URI handling"), + tr("URI can not be parsed! This can be caused by an invalid Myriadcoin address or malformed URI parameters."), + CClientUIInterface::ICON_WARNING); + + return; + } + } + + if (QFile::exists(s)) // payment request file + { + PaymentRequestPlus request; + SendCoinsRecipient recipient; + if (readPaymentRequest(s, request) && processPaymentRequest(request, recipient)) + emit receivedPaymentRequest(recipient); + else + emit message(tr("Payment request file handling"), + tr("Payment request file can not be read or processed! This can be caused by an invalid payment request file."), + CClientUIInterface::ICON_WARNING); + + return; + } +} + void PaymentServer::handleURIConnection() { QLocalSocket *clientConnection = uriServer->nextPendingConnection(); @@ -152,11 +451,226 @@ void PaymentServer::handleURIConnection() if (clientConnection->bytesAvailable() < (int)sizeof(quint16)) { return; } - QString message; - in >> message; + QString msg; + in >> msg; - if (saveURIs) - savedPaymentRequests.append(message); - else - emit receivedURI(message); + handleURIOrFile(msg); +} + +bool PaymentServer::readPaymentRequest(const QString& filename, PaymentRequestPlus& request) +{ + QFile f(filename); + if (!f.open(QIODevice::ReadOnly)) + { + qDebug() << "PaymentServer::readPaymentRequest : Failed to open " << filename; + return false; + } + + if (f.size() > MAX_PAYMENT_REQUEST_SIZE) + { + qDebug() << "PaymentServer::readPaymentRequest : " << filename << " too large"; + return false; + } + + QByteArray data = f.readAll(); + + return request.parse(data); +} + +bool PaymentServer::processPaymentRequest(PaymentRequestPlus& request, SendCoinsRecipient& recipient) +{ + if (!optionsModel) + return false; + + recipient.paymentRequest = request; + recipient.message = GUIUtil::HtmlEscape(request.getDetails().memo()); + + request.getMerchant(PaymentServer::certStore, recipient.authenticatedMerchant); + + QList > sendingTos = request.getPayTo(); + QStringList addresses; + + foreach(const PAIRTYPE(CScript, qint64)& sendingTo, sendingTos) { + // Extract and check destination addresses + CTxDestination dest; + if (ExtractDestination(sendingTo.first, dest)) { + // Append destination address + addresses.append(QString::fromStdString(CBitcoinAddress(dest).ToString())); + } + else if (!recipient.authenticatedMerchant.isEmpty()){ + // Insecure payments to custom bitcoin addresses are not supported + // (there is no good way to tell the user where they are paying in a way + // they'd have a chance of understanding). + emit message(tr("Payment request error"), + tr("Unverified payment requests to custom payment scripts are unsupported."), + CClientUIInterface::MSG_ERROR); + return false; + } + + // Extract and check amounts + CTxOut txOut(sendingTo.second, sendingTo.first); + if (txOut.IsDust(CTransaction::nMinRelayTxFee)) { + QString msg = tr("Requested payment amount of %1 is too small (considered dust).") + .arg(BitcoinUnits::formatWithUnit(optionsModel->getDisplayUnit(), sendingTo.second)); + + qDebug() << "PaymentServer::processPaymentRequest : " << msg; + emit message(tr("Payment request error"), msg, CClientUIInterface::MSG_ERROR); + return false; + } + + recipient.amount += sendingTo.second; + } + // Store addresses and format them to fit nicely into the GUI + recipient.address = addresses.join("
"); + + if (!recipient.authenticatedMerchant.isEmpty()) { + qDebug() << "PaymentServer::processPaymentRequest : Secure payment request from " << recipient.authenticatedMerchant; + } + else { + qDebug() << "PaymentServer::processPaymentRequest : Insecure payment request to " << addresses.join(", "); + } + + return true; +} + +void PaymentServer::fetchRequest(const QUrl& url) +{ + QNetworkRequest netRequest; + netRequest.setAttribute(QNetworkRequest::User, "PaymentRequest"); + netRequest.setUrl(url); + netRequest.setRawHeader("User-Agent", CLIENT_NAME.c_str()); + netRequest.setRawHeader("Accept", BITCOIN_REQUEST_MIMETYPE); + netManager->get(netRequest); +} + +void PaymentServer::fetchPaymentACK(CWallet* wallet, SendCoinsRecipient recipient, QByteArray transaction) +{ + const payments::PaymentDetails& details = recipient.paymentRequest.getDetails(); + if (!details.has_payment_url()) + return; + + QNetworkRequest netRequest; + netRequest.setAttribute(QNetworkRequest::User, "PaymentACK"); + netRequest.setUrl(QString::fromStdString(details.payment_url())); + netRequest.setHeader(QNetworkRequest::ContentTypeHeader, BITCOIN_PAYMENTACK_CONTENTTYPE); + netRequest.setRawHeader("User-Agent", CLIENT_NAME.c_str()); + netRequest.setRawHeader("Accept", BITCOIN_PAYMENTACK_MIMETYPE); + + payments::Payment payment; + payment.set_merchant_data(details.merchant_data()); + payment.add_transactions(transaction.data(), transaction.size()); + + // Create a new refund address, or re-use: + QString account = tr("Refund from %1").arg(recipient.authenticatedMerchant); + std::string strAccount = account.toStdString(); + set refundAddresses = wallet->GetAccountAddresses(strAccount); + if (!refundAddresses.empty()) { + CScript s; s.SetDestination(*refundAddresses.begin()); + payments::Output* refund_to = payment.add_refund_to(); + refund_to->set_script(&s[0], s.size()); + } + else { + CPubKey newKey; + if (wallet->GetKeyFromPool(newKey)) { + LOCK(wallet->cs_wallet); // SetAddressBook + CKeyID keyID = newKey.GetID(); + wallet->SetAddressBook(keyID, strAccount, "refund"); + + CScript s; s.SetDestination(keyID); + payments::Output* refund_to = payment.add_refund_to(); + refund_to->set_script(&s[0], s.size()); + } + else { + // This should never happen, because sending coins should have just unlocked the wallet + // and refilled the keypool + qDebug() << "PaymentServer::fetchPaymentACK : Error getting refund key, refund_to not set"; + } + } + + int length = payment.ByteSize(); + netRequest.setHeader(QNetworkRequest::ContentLengthHeader, length); + QByteArray serData(length, '\0'); + if (payment.SerializeToArray(serData.data(), length)) { + netManager->post(netRequest, serData); + } + else { + // This should never happen, either: + qDebug() << "PaymentServer::fetchPaymentACK : Error serializing payment message"; + } +} + +void PaymentServer::netRequestFinished(QNetworkReply* reply) +{ + reply->deleteLater(); + if (reply->error() != QNetworkReply::NoError) + { + QString msg = tr("Error communicating with %1: %2") + .arg(reply->request().url().toString()) + .arg(reply->errorString()); + + qDebug() << "PaymentServer::netRequestFinished : " << msg; + emit message(tr("Payment request error"), msg, CClientUIInterface::MSG_ERROR); + return; + } + + QByteArray data = reply->readAll(); + + QString requestType = reply->request().attribute(QNetworkRequest::User).toString(); + if (requestType == "PaymentRequest") + { + PaymentRequestPlus request; + SendCoinsRecipient recipient; + if (request.parse(data) && processPaymentRequest(request, recipient)) + { + emit receivedPaymentRequest(recipient); + } + else + { + qDebug() << "PaymentServer::netRequestFinished : Error processing payment request"; + emit message(tr("Payment request error"), + tr("Payment request can not be parsed or processed!"), + CClientUIInterface::MSG_ERROR); + } + + return; + } + else if (requestType == "PaymentACK") + { + payments::PaymentACK paymentACK; + if (!paymentACK.ParseFromArray(data.data(), data.size())) + { + QString msg = tr("Bad response from server %1") + .arg(reply->request().url().toString()); + + qDebug() << "PaymentServer::netRequestFinished : " << msg; + emit message(tr("Payment request error"), msg, CClientUIInterface::MSG_ERROR); + } + else + { + emit receivedPaymentACK(GUIUtil::HtmlEscape(paymentACK.memo())); + } + } +} + +void PaymentServer::reportSslErrors(QNetworkReply* reply, const QList &errs) +{ + Q_UNUSED(reply); + + QString errString; + foreach (const QSslError& err, errs) { + qDebug() << "PaymentServer::reportSslErrors : " << err; + errString += err.errorString() + "\n"; + } + emit message(tr("Network request error"), errString, CClientUIInterface::MSG_ERROR); +} + +void PaymentServer::setOptionsModel(OptionsModel *optionsModel) +{ + this->optionsModel = optionsModel; +} + +void PaymentServer::handlePaymentACK(const QString& paymentACKMsg) +{ + // currently we don't futher process or store the paymentACK message + emit message(tr("Payment acknowledged"), paymentACKMsg, CClientUIInterface::ICON_INFORMATION | CClientUIInterface::MODAL); } diff --git a/src/qt/paymentserver.h b/src/qt/paymentserver.h index dd889037..d84d09c5 100644 --- a/src/qt/paymentserver.h +++ b/src/qt/paymentserver.h @@ -1,9 +1,11 @@ +// Copyright (c) 2011-2014 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef PAYMENTSERVER_H #define PAYMENTSERVER_H - -// // This class handles payment requests from clicking on -// myriadcoin: URIs +// bitcoin: URIs // // This is somewhat tricky, because we have to deal with // the situation where the user clicks on a link during @@ -17,7 +19,7 @@ // received at or during startup in a list. // // When startup is finished and the main window is -// show, a signal is sent to slot uiReady(), which +// shown, a signal is sent to slot uiReady(), which // emits a receivedURL() signal for any payment // requests that happened during startup. // @@ -28,40 +30,109 @@ // and, if a server is running in another process, // sends them to the server. // + +#include "paymentrequestplus.h" +#include "walletmodel.h" + #include #include +class OptionsModel; + +QT_BEGIN_NAMESPACE class QApplication; +class QByteArray; class QLocalServer; +class QNetworkAccessManager; +class QNetworkReply; +class QSslError; +class QUrl; +QT_END_NAMESPACE + +class CWallet; class PaymentServer : public QObject { Q_OBJECT -private: - bool saveURIs; - QLocalServer* uriServer; - public: + // Parse URIs on command line + // Returns false on error + static bool ipcParseCommandLine(int argc, char *argv[]); + // Returns true if there were URIs on the command line // which were successfully sent to an already-running // process. + // Note: if a payment request is given, SelectParams(MAIN/TESTNET) + // will be called so we startup in the right mode. static bool ipcSendCommandLine(); - PaymentServer(QApplication* parent); + // parent should be QApplication object + PaymentServer(QObject* parent, bool startLocalServer = true); + ~PaymentServer(); - bool eventFilter(QObject *object, QEvent *event); + // Load root certificate authorities. Pass NULL (default) + // to read from the file specified in the -rootcertificates setting, + // or, if that's not set, to use the system default root certificates. + // If you pass in a store, you should not X509_STORE_free it: it will be + // freed either at exit or when another set of CAs are loaded. + static void LoadRootCAs(X509_STORE* store = NULL); + + // Return certificate store + static X509_STORE* getCertStore() { return certStore; } + + // OptionsModel is used for getting proxy settings and display unit + void setOptionsModel(OptionsModel *optionsModel); signals: - void receivedURI(QString); + // Fired when a valid payment request is received + void receivedPaymentRequest(SendCoinsRecipient); + + // Fired when a valid PaymentACK is received + void receivedPaymentACK(const QString &paymentACKMsg); + + // Fired when a message should be reported to the user + void message(const QString &title, const QString &message, unsigned int style); public slots: // Signal this when the main window's UI is ready // to display payment requests to the user void uiReady(); + // Submit Payment message to a merchant, get back PaymentACK: + void fetchPaymentACK(CWallet* wallet, SendCoinsRecipient recipient, QByteArray transaction); + + // Handle an incoming URI, URI with local file scheme or file + void handleURIOrFile(const QString& s); + private slots: void handleURIConnection(); + void netRequestFinished(QNetworkReply*); + void reportSslErrors(QNetworkReply*, const QList &); + void handlePaymentACK(const QString& paymentACKMsg); + +protected: + // Constructor registers this on the parent QApplication to + // receive QEvent::FileOpen and QEvent:Drop events + bool eventFilter(QObject *object, QEvent *event); + +private: + static bool readPaymentRequest(const QString& filename, PaymentRequestPlus& request); + bool processPaymentRequest(PaymentRequestPlus& request, SendCoinsRecipient& recipient); + void fetchRequest(const QUrl& url); + + // Setup networking + void initNetManager(); + + bool saveURIs; // true during startup + QLocalServer* uriServer; + + static X509_STORE* certStore; // Trusted root certificates + static void freeCertStore(); + + QNetworkAccessManager* netManager; // Used to fetch payment requests + + OptionsModel *optionsModel; }; #endif // PAYMENTSERVER_H diff --git a/src/qt/qrcodedialog.cpp b/src/qt/qrcodedialog.cpp deleted file mode 100644 index 8106ef5e..00000000 --- a/src/qt/qrcodedialog.cpp +++ /dev/null @@ -1,173 +0,0 @@ -#include "qrcodedialog.h" -#include "ui_qrcodedialog.h" - -#include "bitcoinunits.h" -#include "guiconstants.h" -#include "guiutil.h" -#include "optionsmodel.h" - -#include -#if QT_VERSION < 0x050000 -#include -#endif - -#include - -QRCodeDialog::QRCodeDialog(const QString &addr, const QString &label, bool enableReq, QWidget *parent) : - QDialog(parent), - ui(new Ui::QRCodeDialog), - model(0), - address(addr) -{ - ui->setupUi(this); - - setWindowTitle(QString("%1").arg(address)); - - ui->chkReqPayment->setVisible(enableReq); - ui->lblAmount->setVisible(enableReq); - ui->lnReqAmount->setVisible(enableReq); - - ui->lnLabel->setText(label); - - ui->btnSaveAs->setEnabled(false); - - genCode(); -} - -QRCodeDialog::~QRCodeDialog() -{ - delete ui; -} - -void QRCodeDialog::setModel(OptionsModel *model) -{ - this->model = model; - - if (model) - connect(model, SIGNAL(displayUnitChanged(int)), this, SLOT(updateDisplayUnit())); - - // update the display unit, to not use the default ("BTC") - updateDisplayUnit(); -} - -void QRCodeDialog::genCode() -{ - QString uri = getURI(); - - if (uri != "") - { - ui->lblQRCode->setText(""); - - QRcode *code = QRcode_encodeString(uri.toUtf8().constData(), 0, QR_ECLEVEL_L, QR_MODE_8, 1); - if (!code) - { - ui->lblQRCode->setText(tr("Error encoding URI into QR Code.")); - return; - } - myImage = QImage(code->width + 8, code->width + 8, QImage::Format_RGB32); - myImage.fill(0xffffff); - unsigned char *p = code->data; - for (int y = 0; y < code->width; y++) - { - for (int x = 0; x < code->width; x++) - { - myImage.setPixel(x + 4, y + 4, ((*p & 1) ? 0x0 : 0xffffff)); - p++; - } - } - QRcode_free(code); - - ui->lblQRCode->setPixmap(QPixmap::fromImage(myImage).scaled(300, 300)); - - ui->outUri->setPlainText(uri); - } -} - -QString QRCodeDialog::getURI() -{ - QString ret = QString("myriadcoin:%1").arg(address); - int paramCount = 0; - - ui->outUri->clear(); - - if (ui->chkReqPayment->isChecked()) - { - if (ui->lnReqAmount->validate()) - { - // even if we allow a non BTC unit input in lnReqAmount, we generate the URI with BTC as unit (as defined in BIP21) - ret += QString("?amount=%1").arg(BitcoinUnits::format(BitcoinUnits::BTC, ui->lnReqAmount->value())); - paramCount++; - } - else - { - ui->btnSaveAs->setEnabled(false); - ui->lblQRCode->setText(tr("The entered amount is invalid, please check.")); - return QString(""); - } - } - - if (!ui->lnLabel->text().isEmpty()) - { - QString lbl(QUrl::toPercentEncoding(ui->lnLabel->text())); - ret += QString("%1label=%2").arg(paramCount == 0 ? "?" : "&").arg(lbl); - paramCount++; - } - - if (!ui->lnMessage->text().isEmpty()) - { - QString msg(QUrl::toPercentEncoding(ui->lnMessage->text())); - ret += QString("%1message=%2").arg(paramCount == 0 ? "?" : "&").arg(msg); - paramCount++; - } - - // limit URI length to prevent a DoS against the QR-Code dialog - if (ret.length() > MAX_URI_LENGTH) - { - ui->btnSaveAs->setEnabled(false); - ui->lblQRCode->setText(tr("Resulting URI too long, try to reduce the text for label / message.")); - return QString(""); - } - - ui->btnSaveAs->setEnabled(true); - return ret; -} - -void QRCodeDialog::on_lnReqAmount_textChanged() -{ - genCode(); -} - -void QRCodeDialog::on_lnLabel_textChanged() -{ - genCode(); -} - -void QRCodeDialog::on_lnMessage_textChanged() -{ - genCode(); -} - -void QRCodeDialog::on_btnSaveAs_clicked() -{ - QString fn = GUIUtil::getSaveFileName(this, tr("Save QR Code"), QString(), tr("PNG Images (*.png)")); - if (!fn.isEmpty()) - myImage.scaled(EXPORT_IMAGE_SIZE, EXPORT_IMAGE_SIZE).save(fn); -} - -void QRCodeDialog::on_chkReqPayment_toggled(bool fChecked) -{ - if (!fChecked) - // if chkReqPayment is not active, don't display lnReqAmount as invalid - ui->lnReqAmount->setValid(true); - - genCode(); -} - -void QRCodeDialog::updateDisplayUnit() -{ - if (model) - { - // Update lnReqAmount with the current unit - ui->lnReqAmount->setDisplayUnit(model->getDisplayUnit()); - } -} diff --git a/src/qt/qrcodedialog.h b/src/qt/qrcodedialog.h deleted file mode 100644 index c55c34bc..00000000 --- a/src/qt/qrcodedialog.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef QRCODEDIALOG_H -#define QRCODEDIALOG_H - -#include -#include - -namespace Ui { - class QRCodeDialog; -} -class OptionsModel; - -class QRCodeDialog : public QDialog -{ - Q_OBJECT - -public: - explicit QRCodeDialog(const QString &addr, const QString &label, bool enableReq, QWidget *parent = 0); - ~QRCodeDialog(); - - void setModel(OptionsModel *model); - -private slots: - void on_lnReqAmount_textChanged(); - void on_lnLabel_textChanged(); - void on_lnMessage_textChanged(); - void on_btnSaveAs_clicked(); - void on_chkReqPayment_toggled(bool fChecked); - - void updateDisplayUnit(); - -private: - Ui::QRCodeDialog *ui; - OptionsModel *model; - QString address; - QImage myImage; - - void genCode(); - QString getURI(); -}; - -#endif // QRCODEDIALOG_H diff --git a/src/qt/qvalidatedlineedit.cpp b/src/qt/qvalidatedlineedit.cpp index 8ca230c9..c2567835 100644 --- a/src/qt/qvalidatedlineedit.cpp +++ b/src/qt/qvalidatedlineedit.cpp @@ -1,9 +1,16 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #include "qvalidatedlineedit.h" +#include "bitcoinaddressvalidator.h" #include "guiconstants.h" QValidatedLineEdit::QValidatedLineEdit(QWidget *parent) : - QLineEdit(parent), valid(true) + QLineEdit(parent), + valid(true), + checkValidator(0) { connect(this, SIGNAL(textChanged(QString)), this, SLOT(markValid())); } @@ -30,11 +37,20 @@ void QValidatedLineEdit::focusInEvent(QFocusEvent *evt) { // Clear invalid flag on focus setValid(true); + QLineEdit::focusInEvent(evt); } +void QValidatedLineEdit::focusOutEvent(QFocusEvent *evt) +{ + checkValidity(); + + QLineEdit::focusOutEvent(evt); +} + void QValidatedLineEdit::markValid() { + // As long as a user is typing ensure we display state as valid setValid(true); } @@ -43,3 +59,49 @@ void QValidatedLineEdit::clear() setValid(true); QLineEdit::clear(); } + +void QValidatedLineEdit::setEnabled(bool enabled) +{ + if (!enabled) + { + // A disabled QValidatedLineEdit should be marked valid + setValid(true); + } + else + { + // Recheck validity when QValidatedLineEdit gets enabled + checkValidity(); + } + + QLineEdit::setEnabled(enabled); +} + +void QValidatedLineEdit::checkValidity() +{ + if (text().isEmpty()) + { + setValid(true); + } + else if (hasAcceptableInput()) + { + setValid(true); + + // Check contents on focus out + if (checkValidator) + { + QString address = text(); + int pos = 0; + if (checkValidator->validate(address, pos) == QValidator::Acceptable) + setValid(true); + else + setValid(false); + } + } + else + setValid(false); +} + +void QValidatedLineEdit::setCheckValidator(const QValidator *v) +{ + checkValidator = v; +} diff --git a/src/qt/qvalidatedlineedit.h b/src/qt/qvalidatedlineedit.h index ec74633c..c2a4817e 100644 --- a/src/qt/qvalidatedlineedit.h +++ b/src/qt/qvalidatedlineedit.h @@ -1,3 +1,7 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef QVALIDATEDLINEEDIT_H #define QVALIDATEDLINEEDIT_H @@ -11,20 +15,25 @@ class QValidatedLineEdit : public QLineEdit Q_OBJECT public: - explicit QValidatedLineEdit(QWidget *parent = 0); + explicit QValidatedLineEdit(QWidget *parent); void clear(); + void setCheckValidator(const QValidator *v); protected: void focusInEvent(QFocusEvent *evt); + void focusOutEvent(QFocusEvent *evt); private: bool valid; + const QValidator *checkValidator; public slots: void setValid(bool valid); + void setEnabled(bool enabled); private slots: void markValid(); + void checkValidity(); }; #endif // QVALIDATEDLINEEDIT_H diff --git a/src/qt/qvaluecombobox.cpp b/src/qt/qvaluecombobox.cpp index d7ce3d01..ad083f63 100644 --- a/src/qt/qvaluecombobox.cpp +++ b/src/qt/qvaluecombobox.cpp @@ -1,3 +1,7 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #include "qvaluecombobox.h" QValueComboBox::QValueComboBox(QWidget *parent) : diff --git a/src/qt/qvaluecombobox.h b/src/qt/qvaluecombobox.h index 64a7da9d..5f218291 100644 --- a/src/qt/qvaluecombobox.h +++ b/src/qt/qvaluecombobox.h @@ -1,3 +1,7 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef QVALUECOMBOBOX_H #define QVALUECOMBOBOX_H diff --git a/src/qt/receivecoinsdialog.cpp b/src/qt/receivecoinsdialog.cpp new file mode 100644 index 00000000..f2c76c83 --- /dev/null +++ b/src/qt/receivecoinsdialog.cpp @@ -0,0 +1,264 @@ +// Copyright (c) 2011-2014 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "receivecoinsdialog.h" +#include "ui_receivecoinsdialog.h" + +#include "addressbookpage.h" +#include "addresstablemodel.h" +#include "bitcoinunits.h" +#include "guiutil.h" +#include "optionsmodel.h" +#include "receiverequestdialog.h" +#include "recentrequeststablemodel.h" +#include "walletmodel.h" + +#include +#include +#include +#include +#include +#include + +ReceiveCoinsDialog::ReceiveCoinsDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::ReceiveCoinsDialog), + model(0) +{ + ui->setupUi(this); + +#ifdef Q_OS_MAC // Icons on push buttons are very uncommon on Mac + ui->clearButton->setIcon(QIcon()); + ui->receiveButton->setIcon(QIcon()); + ui->showRequestButton->setIcon(QIcon()); + ui->removeRequestButton->setIcon(QIcon()); +#endif + + // context menu actions + QAction *copyLabelAction = new QAction(tr("Copy label"), this); + QAction *copyMessageAction = new QAction(tr("Copy message"), this); + QAction *copyAmountAction = new QAction(tr("Copy amount"), this); + + // context menu + contextMenu = new QMenu(); + contextMenu->addAction(copyLabelAction); + contextMenu->addAction(copyMessageAction); + contextMenu->addAction(copyAmountAction); + + // context menu signals + connect(ui->recentRequestsView, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(showMenu(QPoint))); + connect(copyLabelAction, SIGNAL(triggered()), this, SLOT(copyLabel())); + connect(copyMessageAction, SIGNAL(triggered()), this, SLOT(copyMessage())); + connect(copyAmountAction, SIGNAL(triggered()), this, SLOT(copyAmount())); + + connect(ui->clearButton, SIGNAL(clicked()), this, SLOT(clear())); +} + +void ReceiveCoinsDialog::setModel(WalletModel *model) +{ + this->model = model; + + if(model && model->getOptionsModel()) + { + model->getRecentRequestsTableModel()->sort(RecentRequestsTableModel::Date, Qt::DescendingOrder); + connect(model->getOptionsModel(), SIGNAL(displayUnitChanged(int)), this, SLOT(updateDisplayUnit())); + updateDisplayUnit(); + + QTableView* tableView = ui->recentRequestsView; + + tableView->verticalHeader()->hide(); + tableView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + tableView->setModel(model->getRecentRequestsTableModel()); + tableView->setAlternatingRowColors(true); + tableView->setSelectionBehavior(QAbstractItemView::SelectRows); + tableView->setSelectionMode(QAbstractItemView::ContiguousSelection); + tableView->setColumnWidth(RecentRequestsTableModel::Date, DATE_COLUMN_WIDTH); + tableView->setColumnWidth(RecentRequestsTableModel::Label, LABEL_COLUMN_WIDTH); + + connect(tableView->selectionModel(), + SIGNAL(selectionChanged(QItemSelection, QItemSelection)), this, + SLOT(recentRequestsView_selectionChanged(QItemSelection, QItemSelection))); + // Last 2 columns are set by the columnResizingFixer, when the table geometry is ready. + columnResizingFixer = new GUIUtil::TableViewLastColumnResizingFixer(tableView, AMOUNT_MINIMUM_COLUMN_WIDTH, DATE_COLUMN_WIDTH); + } +} + +ReceiveCoinsDialog::~ReceiveCoinsDialog() +{ + delete ui; +} + +void ReceiveCoinsDialog::clear() +{ + ui->reqAmount->clear(); + ui->reqLabel->setText(""); + ui->reqMessage->setText(""); + ui->reuseAddress->setChecked(false); + updateDisplayUnit(); +} + +void ReceiveCoinsDialog::reject() +{ + clear(); +} + +void ReceiveCoinsDialog::accept() +{ + clear(); +} + +void ReceiveCoinsDialog::updateDisplayUnit() +{ + if(model && model->getOptionsModel()) + { + ui->reqAmount->setDisplayUnit(model->getOptionsModel()->getDisplayUnit()); + } +} + +void ReceiveCoinsDialog::on_receiveButton_clicked() +{ + if(!model || !model->getOptionsModel() || !model->getAddressTableModel() || !model->getRecentRequestsTableModel()) + return; + + QString address; + QString label = ui->reqLabel->text(); + if(ui->reuseAddress->isChecked()) + { + /* Choose existing receiving address */ + AddressBookPage dlg(AddressBookPage::ForSelection, AddressBookPage::ReceivingTab, this); + dlg.setModel(model->getAddressTableModel()); + if(dlg.exec()) + { + address = dlg.getReturnValue(); + if(label.isEmpty()) /* If no label provided, use the previously used label */ + { + label = model->getAddressTableModel()->labelForAddress(address); + } + } else { + return; + } + } else { + /* Generate new receiving address */ + address = model->getAddressTableModel()->addRow(AddressTableModel::Receive, label, ""); + } + SendCoinsRecipient info(address, label, + ui->reqAmount->value(), ui->reqMessage->text()); + ReceiveRequestDialog *dialog = new ReceiveRequestDialog(this); + dialog->setAttribute(Qt::WA_DeleteOnClose); + dialog->setModel(model->getOptionsModel()); + dialog->setInfo(info); + dialog->show(); + clear(); + + /* Store request for later reference */ + model->getRecentRequestsTableModel()->addNewRequest(info); +} + +void ReceiveCoinsDialog::on_recentRequestsView_doubleClicked(const QModelIndex &index) +{ + const RecentRequestsTableModel *submodel = model->getRecentRequestsTableModel(); + ReceiveRequestDialog *dialog = new ReceiveRequestDialog(this); + dialog->setModel(model->getOptionsModel()); + dialog->setInfo(submodel->entry(index.row()).recipient); + dialog->setAttribute(Qt::WA_DeleteOnClose); + dialog->show(); +} + +void ReceiveCoinsDialog::recentRequestsView_selectionChanged(const QItemSelection &selected, const QItemSelection &deselected) +{ + // Enable Show/Remove buttons only if anything is selected. + bool enable = !ui->recentRequestsView->selectionModel()->selectedRows().isEmpty(); + ui->showRequestButton->setEnabled(enable); + ui->removeRequestButton->setEnabled(enable); +} + +void ReceiveCoinsDialog::on_showRequestButton_clicked() +{ + if(!model || !model->getRecentRequestsTableModel() || !ui->recentRequestsView->selectionModel()) + return; + QModelIndexList selection = ui->recentRequestsView->selectionModel()->selectedRows(); + + foreach (QModelIndex index, selection) + { + on_recentRequestsView_doubleClicked(index); + } +} + +void ReceiveCoinsDialog::on_removeRequestButton_clicked() +{ + if(!model || !model->getRecentRequestsTableModel() || !ui->recentRequestsView->selectionModel()) + return; + QModelIndexList selection = ui->recentRequestsView->selectionModel()->selectedRows(); + if(selection.empty()) + return; + // correct for selection mode ContiguousSelection + QModelIndex firstIndex = selection.at(0); + model->getRecentRequestsTableModel()->removeRows(firstIndex.row(), selection.length(), firstIndex.parent()); +} + +// We override the virtual resizeEvent of the QWidget to adjust tables column +// sizes as the tables width is proportional to the dialogs width. +void ReceiveCoinsDialog::resizeEvent(QResizeEvent *event) +{ + QWidget::resizeEvent(event); + columnResizingFixer->stretchColumnWidth(RecentRequestsTableModel::Message); +} + +void ReceiveCoinsDialog::keyPressEvent(QKeyEvent *event) +{ + if (event->key() == Qt::Key_Return) + { + // press return -> submit form + if (ui->reqLabel->hasFocus() || ui->reqAmount->hasFocus() || ui->reqMessage->hasFocus()) + { + event->ignore(); + on_receiveButton_clicked(); + return; + } + } + + this->QDialog::keyPressEvent(event); +} + +// copy column of selected row to clipboard +void ReceiveCoinsDialog::copyColumnToClipboard(int column) +{ + if(!model || !model->getRecentRequestsTableModel() || !ui->recentRequestsView->selectionModel()) + return; + QModelIndexList selection = ui->recentRequestsView->selectionModel()->selectedRows(); + if(selection.empty()) + return; + // correct for selection mode ContiguousSelection + QModelIndex firstIndex = selection.at(0); + GUIUtil::setClipboard(model->getRecentRequestsTableModel()->data(firstIndex.child(firstIndex.row(), column), Qt::EditRole).toString()); +} + +// context menu +void ReceiveCoinsDialog::showMenu(const QPoint &point) +{ + if(!model || !model->getRecentRequestsTableModel() || !ui->recentRequestsView->selectionModel()) + return; + QModelIndexList selection = ui->recentRequestsView->selectionModel()->selectedRows(); + if(selection.empty()) + return; + contextMenu->exec(QCursor::pos()); +} + +// context menu action: copy label +void ReceiveCoinsDialog::copyLabel() +{ + copyColumnToClipboard(RecentRequestsTableModel::Label); +} + +// context menu action: copy message +void ReceiveCoinsDialog::copyMessage() +{ + copyColumnToClipboard(RecentRequestsTableModel::Message); +} + +// context menu action: copy amount +void ReceiveCoinsDialog::copyAmount() +{ + copyColumnToClipboard(RecentRequestsTableModel::Amount); +} diff --git a/src/qt/receivecoinsdialog.h b/src/qt/receivecoinsdialog.h new file mode 100644 index 00000000..663cb157 --- /dev/null +++ b/src/qt/receivecoinsdialog.h @@ -0,0 +1,75 @@ +// Copyright (c) 2011-2014 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef RECEIVECOINSDIALOG_H +#define RECEIVECOINSDIALOG_H + +#include +#include +#include +#include +#include +#include +#include + +#include "guiutil.h" + +namespace Ui { + class ReceiveCoinsDialog; +} +class OptionsModel; +class WalletModel; + +QT_BEGIN_NAMESPACE +class QModelIndex; +QT_END_NAMESPACE + +/** Dialog for requesting payment of bitcoins */ +class ReceiveCoinsDialog : public QDialog +{ + Q_OBJECT + +public: + enum ColumnWidths { + DATE_COLUMN_WIDTH = 130, + LABEL_COLUMN_WIDTH = 120, + AMOUNT_MINIMUM_COLUMN_WIDTH = 160, + MINIMUM_COLUMN_WIDTH = 130 + }; + + explicit ReceiveCoinsDialog(QWidget *parent = 0); + ~ReceiveCoinsDialog(); + + void setModel(WalletModel *model); + +public slots: + void clear(); + void reject(); + void accept(); + +protected: + virtual void keyPressEvent(QKeyEvent *event); + +private: + Ui::ReceiveCoinsDialog *ui; + GUIUtil::TableViewLastColumnResizingFixer *columnResizingFixer; + WalletModel *model; + QMenu *contextMenu; + void copyColumnToClipboard(int column); + virtual void resizeEvent(QResizeEvent *event); + +private slots: + void on_receiveButton_clicked(); + void on_showRequestButton_clicked(); + void on_removeRequestButton_clicked(); + void on_recentRequestsView_doubleClicked(const QModelIndex &index); + void recentRequestsView_selectionChanged(const QItemSelection &selected, const QItemSelection &deselected); + void updateDisplayUnit(); + void showMenu(const QPoint &point); + void copyLabel(); + void copyMessage(); + void copyAmount(); +}; + +#endif // RECEIVECOINSDIALOG_H diff --git a/src/qt/receiverequestdialog.cpp b/src/qt/receiverequestdialog.cpp new file mode 100644 index 00000000..062638f2 --- /dev/null +++ b/src/qt/receiverequestdialog.cpp @@ -0,0 +1,197 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "receiverequestdialog.h" +#include "ui_receiverequestdialog.h" + +#include "bitcoinunits.h" +#include "guiconstants.h" +#include "guiutil.h" +#include "optionsmodel.h" +#include "walletmodel.h" + +#include +#include +#include +#include +#include +#include +#if QT_VERSION < 0x050000 +#include +#endif + +#if defined(HAVE_CONFIG_H) +#include "bitcoin-config.h" /* for USE_QRCODE */ +#endif + +#ifdef USE_QRCODE +#include +#endif + +QRImageWidget::QRImageWidget(QWidget *parent): + QLabel(parent), contextMenu(0) +{ + contextMenu = new QMenu(); + QAction *saveImageAction = new QAction(tr("&Save Image..."), this); + connect(saveImageAction, SIGNAL(triggered()), this, SLOT(saveImage())); + contextMenu->addAction(saveImageAction); + QAction *copyImageAction = new QAction(tr("&Copy Image"), this); + connect(copyImageAction, SIGNAL(triggered()), this, SLOT(copyImage())); + contextMenu->addAction(copyImageAction); +} + +QImage QRImageWidget::exportImage() +{ + if(!pixmap()) + return QImage(); + return pixmap()->toImage().scaled(EXPORT_IMAGE_SIZE, EXPORT_IMAGE_SIZE); +} + +void QRImageWidget::mousePressEvent(QMouseEvent *event) +{ + if(event->button() == Qt::LeftButton && pixmap()) + { + event->accept(); + QMimeData *mimeData = new QMimeData; + mimeData->setImageData(exportImage()); + + QDrag *drag = new QDrag(this); + drag->setMimeData(mimeData); + drag->exec(); + } else { + QLabel::mousePressEvent(event); + } +} + +void QRImageWidget::saveImage() +{ + if(!pixmap()) + return; + QString fn = GUIUtil::getSaveFileName(this, tr("Save QR Code"), QString(), tr("PNG Image (*.png)"), NULL); + if (!fn.isEmpty()) + { + exportImage().save(fn); + } +} + +void QRImageWidget::copyImage() +{ + if(!pixmap()) + return; + QApplication::clipboard()->setImage(exportImage()); +} + +void QRImageWidget::contextMenuEvent(QContextMenuEvent *event) +{ + if(!pixmap()) + return; + contextMenu->exec(event->globalPos()); +} + +ReceiveRequestDialog::ReceiveRequestDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::ReceiveRequestDialog), + model(0) +{ + ui->setupUi(this); + +#ifndef USE_QRCODE + ui->btnSaveAs->setVisible(false); + ui->lblQRCode->setVisible(false); +#endif + + connect(ui->btnSaveAs, SIGNAL(clicked()), ui->lblQRCode, SLOT(saveImage())); +} + +ReceiveRequestDialog::~ReceiveRequestDialog() +{ + delete ui; +} + +void ReceiveRequestDialog::setModel(OptionsModel *model) +{ + this->model = model; + + if (model) + connect(model, SIGNAL(displayUnitChanged(int)), this, SLOT(update())); + + // update the display unit if necessary + update(); +} + +void ReceiveRequestDialog::setInfo(const SendCoinsRecipient &info) +{ + this->info = info; + update(); +} + +void ReceiveRequestDialog::update() +{ + if(!model) + return; + QString target = info.label; + if(target.isEmpty()) + target = info.address; + setWindowTitle(tr("Request payment to %1").arg(target)); + + QString uri = GUIUtil::formatBitcoinURI(info); + ui->btnSaveAs->setEnabled(false); + QString html; + html += ""; + html += ""+tr("Payment information")+"
"; + html += ""+tr("URI")+": "; + html += "" + GUIUtil::HtmlEscape(uri) + "
"; + html += ""+tr("Address")+": " + GUIUtil::HtmlEscape(info.address) + "
"; + if(info.amount) + html += ""+tr("Amount")+": " + BitcoinUnits::formatWithUnit(model->getDisplayUnit(), info.amount) + "
"; + if(!info.label.isEmpty()) + html += ""+tr("Label")+": " + GUIUtil::HtmlEscape(info.label) + "
"; + if(!info.message.isEmpty()) + html += ""+tr("Message")+": " + GUIUtil::HtmlEscape(info.message) + "
"; + ui->outUri->setText(html); + +#ifdef USE_QRCODE + ui->lblQRCode->setText(""); + if(!uri.isEmpty()) + { + // limit URI length + if (uri.length() > MAX_URI_LENGTH) + { + ui->lblQRCode->setText(tr("Resulting URI too long, try to reduce the text for label / message.")); + } else { + QRcode *code = QRcode_encodeString(uri.toUtf8().constData(), 0, QR_ECLEVEL_L, QR_MODE_8, 1); + if (!code) + { + ui->lblQRCode->setText(tr("Error encoding URI into QR Code.")); + return; + } + QImage myImage = QImage(code->width + 8, code->width + 8, QImage::Format_RGB32); + myImage.fill(0xffffff); + unsigned char *p = code->data; + for (int y = 0; y < code->width; y++) + { + for (int x = 0; x < code->width; x++) + { + myImage.setPixel(x + 4, y + 4, ((*p & 1) ? 0x0 : 0xffffff)); + p++; + } + } + QRcode_free(code); + + ui->lblQRCode->setPixmap(QPixmap::fromImage(myImage).scaled(300, 300)); + ui->btnSaveAs->setEnabled(true); + } + } +#endif +} + +void ReceiveRequestDialog::on_btnCopyURI_clicked() +{ + GUIUtil::setClipboard(GUIUtil::formatBitcoinURI(info)); +} + +void ReceiveRequestDialog::on_btnCopyAddress_clicked() +{ + GUIUtil::setClipboard(info.address); +} diff --git a/src/qt/receiverequestdialog.h b/src/qt/receiverequestdialog.h new file mode 100644 index 00000000..5614ac63 --- /dev/null +++ b/src/qt/receiverequestdialog.h @@ -0,0 +1,68 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef QRCODEDIALOG_H +#define QRCODEDIALOG_H + +#include "walletmodel.h" + +#include +#include +#include + +namespace Ui { + class ReceiveRequestDialog; +} +class OptionsModel; +QT_BEGIN_NAMESPACE +class QMenu; +QT_END_NAMESPACE + +/* Label widget for QR code. This image can be dragged, dropped, copied and saved + * to disk. + */ +class QRImageWidget : public QLabel +{ + Q_OBJECT + +public: + explicit QRImageWidget(QWidget *parent = 0); + QImage exportImage(); + +public slots: + void saveImage(); + void copyImage(); + +protected: + virtual void mousePressEvent(QMouseEvent *event); + virtual void contextMenuEvent(QContextMenuEvent *event); + +private: + QMenu *contextMenu; +}; + +class ReceiveRequestDialog : public QDialog +{ + Q_OBJECT + +public: + explicit ReceiveRequestDialog(QWidget *parent = 0); + ~ReceiveRequestDialog(); + + void setModel(OptionsModel *model); + void setInfo(const SendCoinsRecipient &info); + +private slots: + void on_btnCopyURI_clicked(); + void on_btnCopyAddress_clicked(); + + void update(); + +private: + Ui::ReceiveRequestDialog *ui; + OptionsModel *model; + SendCoinsRecipient info; +}; + +#endif // QRCODEDIALOG_H diff --git a/src/qt/recentrequeststablemodel.cpp b/src/qt/recentrequeststablemodel.cpp new file mode 100644 index 00000000..844d6251 --- /dev/null +++ b/src/qt/recentrequeststablemodel.cpp @@ -0,0 +1,208 @@ +// Copyright (c) 2011-2014 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "recentrequeststablemodel.h" + +#include "bitcoinunits.h" +#include "guiutil.h" +#include "optionsmodel.h" + +RecentRequestsTableModel::RecentRequestsTableModel(CWallet *wallet, WalletModel *parent) : + walletModel(parent) +{ + Q_UNUSED(wallet); + nReceiveRequestsMaxId = 0; + + // Load entries from wallet + std::vector vReceiveRequests; + parent->loadReceiveRequests(vReceiveRequests); + BOOST_FOREACH(const std::string& request, vReceiveRequests) + addNewRequest(request); + + /* These columns must match the indices in the ColumnIndex enumeration */ + columns << tr("Date") << tr("Label") << tr("Message") << tr("Amount"); +} + +RecentRequestsTableModel::~RecentRequestsTableModel() +{ + /* Intentionally left empty */ +} + +int RecentRequestsTableModel::rowCount(const QModelIndex &parent) const +{ + Q_UNUSED(parent); + + return list.length(); +} + +int RecentRequestsTableModel::columnCount(const QModelIndex &parent) const +{ + Q_UNUSED(parent); + + return columns.length(); +} + +QVariant RecentRequestsTableModel::data(const QModelIndex &index, int role) const +{ + if(!index.isValid() || index.row() >= list.length()) + return QVariant(); + + const RecentRequestEntry *rec = &list[index.row()]; + + if(role == Qt::DisplayRole || role == Qt::EditRole) + { + switch(index.column()) + { + case Date: + return GUIUtil::dateTimeStr(rec->date); + case Label: + if(rec->recipient.label.isEmpty() && role == Qt::DisplayRole) + { + return tr("(no label)"); + } + else + { + return rec->recipient.label; + } + case Message: + if(rec->recipient.message.isEmpty() && role == Qt::DisplayRole) + { + return tr("(no message)"); + } + else + { + return rec->recipient.message; + } + case Amount: + if (rec->recipient.amount == 0 && role == Qt::DisplayRole) + return tr("(no amount)"); + else + return BitcoinUnits::format(walletModel->getOptionsModel()->getDisplayUnit(), rec->recipient.amount); + } + } + return QVariant(); +} + +bool RecentRequestsTableModel::setData(const QModelIndex &index, const QVariant &value, int role) +{ + return true; +} + +QVariant RecentRequestsTableModel::headerData(int section, Qt::Orientation orientation, int role) const +{ + if(orientation == Qt::Horizontal) + { + if(role == Qt::DisplayRole && section < columns.size()) + { + return columns[section]; + } + } + return QVariant(); +} + +QModelIndex RecentRequestsTableModel::index(int row, int column, const QModelIndex &parent) const +{ + Q_UNUSED(parent); + + return createIndex(row, column); +} + +bool RecentRequestsTableModel::removeRows(int row, int count, const QModelIndex &parent) +{ + Q_UNUSED(parent); + + if(count > 0 && row >= 0 && (row+count) <= list.size()) + { + const RecentRequestEntry *rec; + for (int i = 0; i < count; ++i) + { + rec = &list[row+i]; + if (!walletModel->saveReceiveRequest(rec->recipient.address.toStdString(), rec->id, "")) + return false; + } + + beginRemoveRows(parent, row, row + count - 1); + list.erase(list.begin() + row, list.begin() + row + count); + endRemoveRows(); + return true; + } else { + return false; + } +} + +Qt::ItemFlags RecentRequestsTableModel::flags(const QModelIndex &index) const +{ + return Qt::ItemIsSelectable | Qt::ItemIsEnabled; +} + +// called when adding a request from the GUI +void RecentRequestsTableModel::addNewRequest(const SendCoinsRecipient &recipient) +{ + RecentRequestEntry newEntry; + newEntry.id = ++nReceiveRequestsMaxId; + newEntry.date = QDateTime::currentDateTime(); + newEntry.recipient = recipient; + + CDataStream ss(SER_DISK, CLIENT_VERSION); + ss << newEntry; + + if (!walletModel->saveReceiveRequest(recipient.address.toStdString(), newEntry.id, ss.str())) + return; + + addNewRequest(newEntry); +} + +// called from ctor when loading from wallet +void RecentRequestsTableModel::addNewRequest(const std::string &recipient) +{ + std::vector data(recipient.begin(), recipient.end()); + CDataStream ss(data, SER_DISK, CLIENT_VERSION); + + RecentRequestEntry entry; + ss >> entry; + + if (entry.id == 0) // should not happen + return; + + if (entry.id > nReceiveRequestsMaxId) + nReceiveRequestsMaxId = entry.id; + + addNewRequest(entry); +} + +// actually add to table in GUI +void RecentRequestsTableModel::addNewRequest(RecentRequestEntry &recipient) +{ + beginInsertRows(QModelIndex(), 0, 0); + list.prepend(recipient); + endInsertRows(); +} + +void RecentRequestsTableModel::sort(int column, Qt::SortOrder order) +{ + qSort(list.begin(), list.end(), RecentRequestEntryLessThan(column, order)); + emit dataChanged(index(0, 0, QModelIndex()), index(list.size() - 1, NUMBER_OF_COLUMNS - 1, QModelIndex())); +} + +bool RecentRequestEntryLessThan::operator()(RecentRequestEntry &left, RecentRequestEntry &right) const +{ + RecentRequestEntry *pLeft = &left; + RecentRequestEntry *pRight = &right; + if (order == Qt::DescendingOrder) + std::swap(pLeft, pRight); + + switch(column) + { + case RecentRequestsTableModel::Date: + return pLeft->date.toTime_t() < pRight->date.toTime_t(); + case RecentRequestsTableModel::Label: + return pLeft->recipient.label < pRight->recipient.label; + case RecentRequestsTableModel::Message: + return pLeft->recipient.message < pRight->recipient.message; + case RecentRequestsTableModel::Amount: + return pLeft->recipient.amount < pRight->recipient.amount; + default: + return pLeft->id < pRight->id; + } +} diff --git a/src/qt/recentrequeststablemodel.h b/src/qt/recentrequeststablemodel.h new file mode 100644 index 00000000..d4cc5078 --- /dev/null +++ b/src/qt/recentrequeststablemodel.h @@ -0,0 +1,102 @@ +// Copyright (c) 2011-2014 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef RECENTREQUESTSTABLEMODEL_H +#define RECENTREQUESTSTABLEMODEL_H + +#include "walletmodel.h" + +#include +#include +#include + +class CWallet; + +class RecentRequestEntry +{ +public: + RecentRequestEntry() : nVersion(RecentRequestEntry::CURRENT_VERSION), id(0) { } + + static const int CURRENT_VERSION = 1; + int nVersion; + int64_t id; + QDateTime date; + SendCoinsRecipient recipient; + + IMPLEMENT_SERIALIZE + ( + RecentRequestEntry* pthis = const_cast(this); + + unsigned int nDate = date.toTime_t(); + + READWRITE(pthis->nVersion); + nVersion = pthis->nVersion; + READWRITE(id); + READWRITE(nDate); + READWRITE(recipient); + + if (fRead) + pthis->date = QDateTime::fromTime_t(nDate); + ) +}; + +class RecentRequestEntryLessThan +{ +public: + RecentRequestEntryLessThan(int nColumn, Qt::SortOrder fOrder): + column(nColumn), order(fOrder) {} + bool operator()(RecentRequestEntry &left, RecentRequestEntry &right) const; + +private: + int column; + Qt::SortOrder order; +}; + +/** Model for list of recently generated payment requests / bitcoin: URIs. + * Part of wallet model. + */ +class RecentRequestsTableModel: public QAbstractTableModel +{ + Q_OBJECT + +public: + explicit RecentRequestsTableModel(CWallet *wallet, WalletModel *parent); + ~RecentRequestsTableModel(); + + enum ColumnIndex { + Date = 0, + Label = 1, + Message = 2, + Amount = 3, + NUMBER_OF_COLUMNS + }; + + /** @name Methods overridden from QAbstractTableModel + @{*/ + int rowCount(const QModelIndex &parent) const; + int columnCount(const QModelIndex &parent) const; + QVariant data(const QModelIndex &index, int role) const; + bool setData(const QModelIndex &index, const QVariant &value, int role); + QVariant headerData(int section, Qt::Orientation orientation, int role) const; + QModelIndex index(int row, int column, const QModelIndex &parent) const; + bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()); + Qt::ItemFlags flags(const QModelIndex &index) const; + /*@}*/ + + const RecentRequestEntry &entry(int row) const { return list[row]; } + void addNewRequest(const SendCoinsRecipient &recipient); + void addNewRequest(const std::string &recipient); + void addNewRequest(RecentRequestEntry &recipient); + +public slots: + void sort(int column, Qt::SortOrder order = Qt::AscendingOrder); + +private: + WalletModel *walletModel; + QStringList columns; + QList list; + int64_t nReceiveRequestsMaxId; +}; + +#endif diff --git a/src/qt/res/bitcoin-qt.rc b/src/qt/res/bitcoin-qt.rc deleted file mode 100644 index 9480eac7..00000000 --- a/src/qt/res/bitcoin-qt.rc +++ /dev/null @@ -1,39 +0,0 @@ -IDI_ICON1 ICON DISCARDABLE "icons/bitcoin.ico" -IDI_ICON2 ICON DISCARDABLE "icons/bitcoin_testnet.ico" - -#include // 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 -#define COPYRIGHT_STR "2009-" STRINGIZE(COPYRIGHT_YEAR) " The Bitcoin developers, 2014 The Myriadcoin developers" - -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", "Myriadcoin" - VALUE "FileDescription", "Myriadcoin-Qt (OSS GUI client for Bitcoin)" - VALUE "FileVersion", VER_FILEVERSION_STR - VALUE "InternalName", "myriadcoin-qt" - VALUE "LegalCopyright", COPYRIGHT_STR - VALUE "LegalTrademarks1", "Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php." - VALUE "OriginalFilename", "myriadcoin-qt.exe" - VALUE "ProductName", "Myriadcoin-Qt" - VALUE "ProductVersion", VER_PRODUCTVERSION_STR - END - END - - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x0, 1252 // language neutral - multilingual (decimal) - END -END diff --git a/src/qt/res/icons/add.png b/src/qt/res/icons/add.png index f98e2a8c..ea53fc34 100644 Binary files a/src/qt/res/icons/add.png and b/src/qt/res/icons/add.png differ diff --git a/src/qt/res/icons/address-book.png b/src/qt/res/icons/address-book.png index d41dbe65..33a2d917 100644 Binary files a/src/qt/res/icons/address-book.png and b/src/qt/res/icons/address-book.png differ diff --git a/src/qt/res/icons/bitcoin.icns b/src/qt/res/icons/bitcoin.icns index 54c9b8cc..54d02d34 100644 Binary files a/src/qt/res/icons/bitcoin.icns and b/src/qt/res/icons/bitcoin.icns differ diff --git a/src/qt/res/icons/bitcoin.ico b/src/qt/res/icons/bitcoin.ico old mode 100644 new mode 100755 diff --git a/src/qt/res/icons/bitcoin_testnet.ico b/src/qt/res/icons/bitcoin_testnet.ico old mode 100644 new mode 100755 diff --git a/src/qt/res/icons/clock1.png b/src/qt/res/icons/clock1.png index 448e47f9..9f0aa5db 100644 Binary files a/src/qt/res/icons/clock1.png and b/src/qt/res/icons/clock1.png differ diff --git a/src/qt/res/icons/clock2.png b/src/qt/res/icons/clock2.png index c1a6e99f..bad00ccc 100644 Binary files a/src/qt/res/icons/clock2.png and b/src/qt/res/icons/clock2.png differ diff --git a/src/qt/res/icons/clock3.png b/src/qt/res/icons/clock3.png index e429a402..7314d530 100644 Binary files a/src/qt/res/icons/clock3.png and b/src/qt/res/icons/clock3.png differ diff --git a/src/qt/res/icons/clock4.png b/src/qt/res/icons/clock4.png index ba036f47..07f5bfab 100644 Binary files a/src/qt/res/icons/clock4.png and b/src/qt/res/icons/clock4.png differ diff --git a/src/qt/res/icons/clock5.png b/src/qt/res/icons/clock5.png index 411d7a78..27e9630e 100644 Binary files a/src/qt/res/icons/clock5.png and b/src/qt/res/icons/clock5.png differ diff --git a/src/qt/res/icons/configure.png b/src/qt/res/icons/configure.png index 95bd319c..a1bd70aa 100644 Binary files a/src/qt/res/icons/configure.png and b/src/qt/res/icons/configure.png differ diff --git a/src/qt/res/icons/connect0_16.png b/src/qt/res/icons/connect0_16.png index 66f3ae4f..a397e7e6 100644 Binary files a/src/qt/res/icons/connect0_16.png and b/src/qt/res/icons/connect0_16.png differ diff --git a/src/qt/res/icons/connect1_16.png b/src/qt/res/icons/connect1_16.png index 76000bee..199fb44c 100644 Binary files a/src/qt/res/icons/connect1_16.png and b/src/qt/res/icons/connect1_16.png differ diff --git a/src/qt/res/icons/connect2_16.png b/src/qt/res/icons/connect2_16.png index 6d9a3728..2a85ba50 100644 Binary files a/src/qt/res/icons/connect2_16.png and b/src/qt/res/icons/connect2_16.png differ diff --git a/src/qt/res/icons/connect3_16.png b/src/qt/res/icons/connect3_16.png index a2117007..d4b35ecc 100644 Binary files a/src/qt/res/icons/connect3_16.png and b/src/qt/res/icons/connect3_16.png differ diff --git a/src/qt/res/icons/connect4_16.png b/src/qt/res/icons/connect4_16.png index c1232f56..0376443b 100644 Binary files a/src/qt/res/icons/connect4_16.png and b/src/qt/res/icons/connect4_16.png differ diff --git a/src/qt/res/icons/debugwindow.png b/src/qt/res/icons/debugwindow.png index 1712adf0..767d0bb9 100644 Binary files a/src/qt/res/icons/debugwindow.png and b/src/qt/res/icons/debugwindow.png differ diff --git a/src/qt/res/icons/edit.png b/src/qt/res/icons/edit.png index 1d691451..49e2ee3f 100644 Binary files a/src/qt/res/icons/edit.png and b/src/qt/res/icons/edit.png differ diff --git a/src/qt/res/icons/editcopy.png b/src/qt/res/icons/editcopy.png index f882aa2a..7807c59a 100644 Binary files a/src/qt/res/icons/editcopy.png and b/src/qt/res/icons/editcopy.png differ diff --git a/src/qt/res/icons/editpaste.png b/src/qt/res/icons/editpaste.png index a192060b..e217e308 100644 Binary files a/src/qt/res/icons/editpaste.png and b/src/qt/res/icons/editpaste.png differ diff --git a/src/qt/res/icons/export.png b/src/qt/res/icons/export.png index 1df9c239..5c1f5190 100644 Binary files a/src/qt/res/icons/export.png and b/src/qt/res/icons/export.png differ diff --git a/src/qt/res/icons/filesave.png b/src/qt/res/icons/filesave.png index ae13a151..02e78b93 100644 Binary files a/src/qt/res/icons/filesave.png and b/src/qt/res/icons/filesave.png differ diff --git a/src/qt/res/icons/history.png b/src/qt/res/icons/history.png index 10ac0e15..ac955c72 100644 Binary files a/src/qt/res/icons/history.png and b/src/qt/res/icons/history.png differ diff --git a/src/qt/res/icons/key.png b/src/qt/res/icons/key.png index ece0164f..2638b4f2 100644 Binary files a/src/qt/res/icons/key.png and b/src/qt/res/icons/key.png differ diff --git a/src/qt/res/icons/lock_closed.png b/src/qt/res/icons/lock_closed.png index c566510c..6de207db 100644 Binary files a/src/qt/res/icons/lock_closed.png and b/src/qt/res/icons/lock_closed.png differ diff --git a/src/qt/res/icons/lock_open.png b/src/qt/res/icons/lock_open.png index c98ca866..23ce3243 100644 Binary files a/src/qt/res/icons/lock_open.png and b/src/qt/res/icons/lock_open.png differ diff --git a/src/qt/res/icons/notsynced.png b/src/qt/res/icons/notsynced.png deleted file mode 100644 index c9e71184..00000000 Binary files a/src/qt/res/icons/notsynced.png and /dev/null differ diff --git a/src/qt/res/icons/overview.png b/src/qt/res/icons/overview.png index ee2511f0..a274f0c4 100644 Binary files a/src/qt/res/icons/overview.png and b/src/qt/res/icons/overview.png differ diff --git a/src/qt/res/icons/quit.png b/src/qt/res/icons/quit.png index 0dde6f39..bd73baee 100644 Binary files a/src/qt/res/icons/quit.png and b/src/qt/res/icons/quit.png differ diff --git a/src/qt/res/icons/receive.png b/src/qt/res/icons/receive.png index 53ad1d15..8ed337ca 100644 Binary files a/src/qt/res/icons/receive.png and b/src/qt/res/icons/receive.png differ diff --git a/src/qt/res/icons/remove.png b/src/qt/res/icons/remove.png index a44b6d13..224d2c20 100644 Binary files a/src/qt/res/icons/remove.png and b/src/qt/res/icons/remove.png differ diff --git a/src/qt/res/icons/send.png b/src/qt/res/icons/send.png index ceb91ea6..43c3d792 100644 Binary files a/src/qt/res/icons/send.png and b/src/qt/res/icons/send.png differ diff --git a/src/qt/res/icons/synced.png b/src/qt/res/icons/synced.png index 4d7e0e88..9fad3847 100644 Binary files a/src/qt/res/icons/synced.png and b/src/qt/res/icons/synced.png differ diff --git a/src/qt/res/icons/transaction0.png b/src/qt/res/icons/transaction0.png index 4578666e..cfe1a1c8 100644 Binary files a/src/qt/res/icons/transaction0.png and b/src/qt/res/icons/transaction0.png differ diff --git a/src/qt/res/icons/transaction2.png b/src/qt/res/icons/transaction2.png index 01bb558a..8a804b05 100644 Binary files a/src/qt/res/icons/transaction2.png and b/src/qt/res/icons/transaction2.png differ diff --git a/src/qt/res/icons/transaction_conflicted.png b/src/qt/res/icons/transaction_conflicted.png new file mode 100644 index 00000000..51fff649 Binary files /dev/null and b/src/qt/res/icons/transaction_conflicted.png differ diff --git a/src/qt/res/icons/tx_inout.png b/src/qt/res/icons/tx_inout.png index 5f092f97..f1a7f7bb 100644 Binary files a/src/qt/res/icons/tx_inout.png and b/src/qt/res/icons/tx_inout.png differ diff --git a/src/qt/res/icons/tx_input.png b/src/qt/res/icons/tx_input.png index 0f5fea3a..a2d324ee 100644 Binary files a/src/qt/res/icons/tx_input.png and b/src/qt/res/icons/tx_input.png differ diff --git a/src/qt/res/icons/tx_mined.png b/src/qt/res/icons/tx_mined.png index 613f30fe..a7acc6cf 100644 Binary files a/src/qt/res/icons/tx_mined.png and b/src/qt/res/icons/tx_mined.png differ diff --git a/src/qt/res/icons/tx_output.png b/src/qt/res/icons/tx_output.png index 9ae39fb3..a7c5ebf5 100644 Binary files a/src/qt/res/icons/tx_output.png and b/src/qt/res/icons/tx_output.png differ diff --git a/src/qt/res/movies/update_spinner.mng b/src/qt/res/movies/update_spinner.mng deleted file mode 100644 index 7df3baac..00000000 Binary files a/src/qt/res/movies/update_spinner.mng and /dev/null differ diff --git a/src/qt/rpcconsole.cpp b/src/qt/rpcconsole.cpp index 7ae96e3e..28bcf2c8 100644 --- a/src/qt/rpcconsole.cpp +++ b/src/qt/rpcconsole.cpp @@ -1,19 +1,26 @@ +// Copyright (c) 2011-2014 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #include "rpcconsole.h" #include "ui_rpcconsole.h" #include "clientmodel.h" -#include "bitcoinrpc.h" #include "guiutil.h" -#include -#include +#include "rpcserver.h" +#include "rpcclient.h" + +#include "json/json_spirit_value.h" +#include #include +#include +#include +#include + #if QT_VERSION < 0x050000 #include #endif -#include - -#include // TODO: add a scrollback limit, as there is currently none // TODO: make it possible to filter out categories (esp debug messages when implemented) @@ -22,6 +29,8 @@ const int CONSOLE_HISTORY = 50; const QSize ICON_SIZE(24, 24); +const int INITIAL_TRAFFIC_GRAPH_MINS = 30; + const struct { const char *url; const char *source; @@ -187,10 +196,10 @@ RPCConsole::RPCConsole(QWidget *parent) : historyPtr(0) { ui->setupUi(this); + GUIUtil::restoreWindowGeometry("nRPCConsoleWindow", this->size(), this); #ifndef Q_OS_MAC ui->openDebugLogfileButton->setIcon(QIcon(":/icons/export")); - ui->showCLOptionsButton->setIcon(QIcon(":/icons/options")); #endif // Install event filter for up and down arrow @@ -198,17 +207,20 @@ RPCConsole::RPCConsole(QWidget *parent) : ui->messagesWidget->installEventFilter(this); connect(ui->clearButton, SIGNAL(clicked()), this, SLOT(clear())); + connect(ui->btnClearTrafficGraph, SIGNAL(clicked()), ui->trafficGraph, SLOT(clear())); // set OpenSSL version label ui->openSSLVersion->setText(SSLeay_version(SSLEAY_VERSION)); startExecutor(); + setTrafficGraphRange(INITIAL_TRAFFIC_GRAPH_MINS); clear(); } RPCConsole::~RPCConsole() { + GUIUtil::saveWindowGeometry("nRPCConsoleWindow", this); emit stopExecutor(); delete ui; } @@ -251,7 +263,8 @@ bool RPCConsole::eventFilter(QObject* obj, QEvent *event) void RPCConsole::setClientModel(ClientModel *model) { - this->clientModel = model; + clientModel = model; + ui->trafficGraph->setClientModel(model); if(model) { // Keep up to date with client @@ -261,13 +274,16 @@ void RPCConsole::setClientModel(ClientModel *model) setNumBlocks(model->getNumBlocks(), model->getNumBlocksOfPeers()); connect(model, SIGNAL(numBlocksChanged(int,int)), this, SLOT(setNumBlocks(int,int))); + updateTrafficStats(model->getTotalBytesRecv(), model->getTotalBytesSent()); + connect(model, SIGNAL(bytesChanged(quint64,quint64)), this, SLOT(updateTrafficStats(quint64, quint64))); + // Provide initial values ui->clientVersion->setText(model->formatFullVersion()); ui->clientName->setText(model->clientName()); ui->buildDate->setText(model->formatBuildDate()); ui->startupTime->setText(model->formatClientStartupTime()); - ui->isTestNet->setChecked(model->isTestNet()); + ui->networkName->setText(model->getNetworkName()); } } @@ -304,7 +320,7 @@ void RPCConsole::clear() ui->messagesWidget->document()->setDefaultStyleSheet( "table { }" "td.time { color: #808080; padding-top: 3px; } " - "td.message { font-family: Monospace; font-size: 12px; } " + "td.message { font-family: monospace; font-size: 12px; } " // Todo: Remove fixed font-size "td.cmd-request { color: #006060; } " "td.cmd-error { color: red; } " "b { color: #006060; } " @@ -315,6 +331,13 @@ void RPCConsole::clear() tr("Type help for an overview of available commands.")), true); } +void RPCConsole::reject() +{ + // Ignore escape keypress if this is not a seperate window + if(windowType() != Qt::Widget) + QDialog::reject(); +} + void RPCConsole::message(int category, const QString &message, bool html) { QTime time = QTime::currentTime(); @@ -333,7 +356,14 @@ void RPCConsole::message(int category, const QString &message, bool html) void RPCConsole::setNumConnections(int count) { - ui->numberOfConnections->setText(QString::number(count)); + if (!clientModel) + return; + + QString connections = QString::number(count) + " ("; + connections += tr("In:") + " " + QString::number(clientModel->getNumConnections(CONNECTIONS_IN)) + " / "; + connections += tr("Out:") + " " + QString::number(clientModel->getNumConnections(CONNECTIONS_OUT)) + ")"; + + ui->numberOfConnections->setText(connections); } void RPCConsole::setNumBlocks(int count, int countOfPeers) @@ -424,8 +454,43 @@ void RPCConsole::scrollToEnd() scrollbar->setValue(scrollbar->maximum()); } -void RPCConsole::on_showCLOptionsButton_clicked() +void RPCConsole::on_sldGraphRange_valueChanged(int value) { - GUIUtil::HelpMessageBox help; - help.exec(); + const int multiplier = 5; // each position on the slider represents 5 min + int mins = value * multiplier; + setTrafficGraphRange(mins); +} + +QString RPCConsole::FormatBytes(quint64 bytes) +{ + if(bytes < 1024) + return QString(tr("%1 B")).arg(bytes); + if(bytes < 1024 * 1024) + return QString(tr("%1 KB")).arg(bytes / 1024); + if(bytes < 1024 * 1024 * 1024) + return QString(tr("%1 MB")).arg(bytes / 1024 / 1024); + + return QString(tr("%1 GB")).arg(bytes / 1024 / 1024 / 1024); +} + +void RPCConsole::setTrafficGraphRange(int mins) +{ + ui->trafficGraph->setGraphRangeMins(mins); + if(mins < 60) { + ui->lblGraphRange->setText(QString(tr("%1 m")).arg(mins)); + } else { + int hours = mins / 60; + int minsLeft = mins % 60; + if(minsLeft == 0) { + ui->lblGraphRange->setText(QString(tr("%1 h")).arg(hours)); + } else { + ui->lblGraphRange->setText(QString(tr("%1 h %2 m")).arg(hours).arg(minsLeft)); + } + } +} + +void RPCConsole::updateTrafficStats(quint64 totalBytesIn, quint64 totalBytesOut) +{ + ui->lblBytesIn->setText(FormatBytes(totalBytesIn)); + ui->lblBytesOut->setText(FormatBytes(totalBytesOut)); } diff --git a/src/qt/rpcconsole.h b/src/qt/rpcconsole.h index 3c38b4b8..f7a77720 100644 --- a/src/qt/rpcconsole.h +++ b/src/qt/rpcconsole.h @@ -1,12 +1,17 @@ +// Copyright (c) 2011-2014 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef RPCCONSOLE_H #define RPCCONSOLE_H #include +class ClientModel; + namespace Ui { class RPCConsole; } -class ClientModel; /** Local Bitcoin RPC console. */ class RPCConsole: public QDialog @@ -14,7 +19,7 @@ class RPCConsole: public QDialog Q_OBJECT public: - explicit RPCConsole(QWidget *parent = 0); + explicit RPCConsole(QWidget *parent); ~RPCConsole(); void setClientModel(ClientModel *model); @@ -35,11 +40,14 @@ private slots: void on_tabWidget_currentChanged(int index); /** open the debug.log from the current datadir */ void on_openDebugLogfileButton_clicked(); - /** display messagebox with program parameters (same as bitcoin-qt --help) */ - void on_showCLOptionsButton_clicked(); + /** change the time range of the network traffic graph */ + void on_sldGraphRange_valueChanged(int value); + /** update traffic statistics */ + void updateTrafficStats(quint64 totalBytesIn, quint64 totalBytesOut); public slots: void clear(); + void reject(); void message(int category, const QString &message, bool html = false); /** Set number of connections shown in the UI */ void setNumConnections(int count); @@ -49,12 +57,16 @@ public slots: void browseHistory(int offset); /** Scroll console view to end */ void scrollToEnd(); + signals: // For RPC command executor void stopExecutor(); void cmdRequest(const QString &command); private: + static QString FormatBytes(quint64 bytes); + void setTrafficGraphRange(int mins); + Ui::RPCConsole *ui; ClientModel *clientModel; QStringList history; diff --git a/src/qt/sendcoinsdialog.cpp b/src/qt/sendcoinsdialog.cpp index 2c7bab20..118657b1 100644 --- a/src/qt/sendcoinsdialog.cpp +++ b/src/qt/sendcoinsdialog.cpp @@ -1,18 +1,25 @@ +// Copyright (c) 2011-2014 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #include "sendcoinsdialog.h" #include "ui_sendcoinsdialog.h" -#include "walletmodel.h" +#include "addresstablemodel.h" #include "bitcoinunits.h" -#include "addressbookpage.h" +#include "coincontroldialog.h" +#include "guiutil.h" #include "optionsmodel.h" #include "sendcoinsentry.h" -#include "guiutil.h" -#include "askpassphrasedialog.h" +#include "walletmodel.h" + #include "base58.h" +#include "coincontrol.h" +#include "ui_interface.h" #include -#include #include +#include SendCoinsDialog::SendCoinsDialog(QWidget *parent) : QDialog(parent), @@ -27,11 +34,44 @@ SendCoinsDialog::SendCoinsDialog(QWidget *parent) : ui->sendButton->setIcon(QIcon()); #endif + GUIUtil::setupAddressWidget(ui->lineEditCoinControlChange, this); + addEntry(); connect(ui->addButton, SIGNAL(clicked()), this, SLOT(addEntry())); connect(ui->clearButton, SIGNAL(clicked()), this, SLOT(clear())); + // Coin Control + connect(ui->pushButtonCoinControl, SIGNAL(clicked()), this, SLOT(coinControlButtonClicked())); + connect(ui->checkBoxCoinControlChange, SIGNAL(stateChanged(int)), this, SLOT(coinControlChangeChecked(int))); + connect(ui->lineEditCoinControlChange, SIGNAL(textEdited(const QString &)), this, SLOT(coinControlChangeEdited(const QString &))); + + // Coin Control: clipboard actions + QAction *clipboardQuantityAction = new QAction(tr("Copy quantity"), this); + QAction *clipboardAmountAction = new QAction(tr("Copy amount"), this); + QAction *clipboardFeeAction = new QAction(tr("Copy fee"), this); + QAction *clipboardAfterFeeAction = new QAction(tr("Copy after fee"), this); + QAction *clipboardBytesAction = new QAction(tr("Copy bytes"), this); + QAction *clipboardPriorityAction = new QAction(tr("Copy priority"), this); + QAction *clipboardLowOutputAction = new QAction(tr("Copy low output"), this); + QAction *clipboardChangeAction = new QAction(tr("Copy change"), this); + connect(clipboardQuantityAction, SIGNAL(triggered()), this, SLOT(coinControlClipboardQuantity())); + connect(clipboardAmountAction, SIGNAL(triggered()), this, SLOT(coinControlClipboardAmount())); + connect(clipboardFeeAction, SIGNAL(triggered()), this, SLOT(coinControlClipboardFee())); + connect(clipboardAfterFeeAction, SIGNAL(triggered()), this, SLOT(coinControlClipboardAfterFee())); + connect(clipboardBytesAction, SIGNAL(triggered()), this, SLOT(coinControlClipboardBytes())); + connect(clipboardPriorityAction, SIGNAL(triggered()), this, SLOT(coinControlClipboardPriority())); + connect(clipboardLowOutputAction, SIGNAL(triggered()), this, SLOT(coinControlClipboardLowOutput())); + connect(clipboardChangeAction, SIGNAL(triggered()), this, SLOT(coinControlClipboardChange())); + ui->labelCoinControlQuantity->addAction(clipboardQuantityAction); + ui->labelCoinControlAmount->addAction(clipboardAmountAction); + ui->labelCoinControlFee->addAction(clipboardFeeAction); + ui->labelCoinControlAfterFee->addAction(clipboardAfterFeeAction); + ui->labelCoinControlBytes->addAction(clipboardBytesAction); + ui->labelCoinControlPriority->addAction(clipboardPriorityAction); + ui->labelCoinControlLowOutput->addAction(clipboardLowOutputAction); + ui->labelCoinControlChange->addAction(clipboardChangeAction); + fNewRecipientAllowed = true; } @@ -39,19 +79,27 @@ void SendCoinsDialog::setModel(WalletModel *model) { this->model = model; - for(int i = 0; i < ui->entries->count(); ++i) - { - SendCoinsEntry *entry = qobject_cast(ui->entries->itemAt(i)->widget()); - if(entry) - { - entry->setModel(model); - } - } if(model && model->getOptionsModel()) { + for(int i = 0; i < ui->entries->count(); ++i) + { + SendCoinsEntry *entry = qobject_cast(ui->entries->itemAt(i)->widget()); + if(entry) + { + entry->setModel(model); + } + } + setBalance(model->getBalance(), model->getUnconfirmedBalance(), model->getImmatureBalance()); connect(model, SIGNAL(balanceChanged(qint64, qint64, qint64)), this, SLOT(setBalance(qint64, qint64, qint64))); connect(model->getOptionsModel(), SIGNAL(displayUnitChanged(int)), this, SLOT(updateDisplayUnit())); + + // Coin Control + connect(model->getOptionsModel(), SIGNAL(displayUnitChanged(int)), this, SLOT(coinControlUpdateLabels())); + connect(model->getOptionsModel(), SIGNAL(coinControlFeaturesChanged(bool)), this, SLOT(coinControlFeatureChanged(bool))); + connect(model->getOptionsModel(), SIGNAL(transactionFeeChanged(qint64)), this, SLOT(coinControlUpdateLabels())); + ui->frameCoinControl->setVisible(model->getOptionsModel()->getCoinControlFeatures()); + coinControlUpdateLabels(); } } @@ -62,12 +110,12 @@ SendCoinsDialog::~SendCoinsDialog() void SendCoinsDialog::on_sendButton_clicked() { + if(!model || !model->getOptionsModel()) + return; + QList recipients; bool valid = true; - if(!model) - return; - for(int i = 0; i < ui->entries->count(); ++i) { SendCoinsEntry *entry = qobject_cast(ui->entries->itemAt(i)->widget()); @@ -93,25 +141,41 @@ void SendCoinsDialog::on_sendButton_clicked() QStringList formatted; foreach(const SendCoinsRecipient &rcp, recipients) { -#if QT_VERSION < 0x050000 - formatted.append(tr("%1 to %2 (%3)").arg(BitcoinUnits::formatWithUnit(BitcoinUnits::BTC, rcp.amount), Qt::escape(rcp.label), rcp.address)); -#else - formatted.append(tr("%1 to %2 (%3)").arg(BitcoinUnits::formatWithUnit(BitcoinUnits::BTC, rcp.amount), rcp.label.toHtmlEscaped(), rcp.address)); -#endif + // generate bold amount string + QString amount = "" + BitcoinUnits::formatWithUnit(model->getOptionsModel()->getDisplayUnit(), rcp.amount); + amount.append(""); + // generate monospace address string + QString address = "" + rcp.address; + address.append(""); + + QString recipientElement; + + if (!rcp.paymentRequest.IsInitialized()) // normal payment + { + if(rcp.label.length() > 0) // label with address + { + recipientElement = tr("%1 to %2").arg(amount, GUIUtil::HtmlEscape(rcp.label)); + recipientElement.append(QString(" (%1)").arg(address)); + } + else // just address + { + recipientElement = tr("%1 to %2").arg(amount, address); + } + } + else if(!rcp.authenticatedMerchant.isEmpty()) // secure payment request + { + recipientElement = tr("%1 to %2").arg(amount, GUIUtil::HtmlEscape(rcp.authenticatedMerchant)); + } + else // insecure payment request + { + recipientElement = tr("%1 to %2").arg(amount, address); + } + + formatted.append(recipientElement); } fNewRecipientAllowed = false; - QMessageBox::StandardButton retval = QMessageBox::question(this, tr("Confirm send coins"), - tr("Are you sure you want to send %1?").arg(formatted.join(tr(" and "))), - QMessageBox::Yes|QMessageBox::Cancel, - QMessageBox::Cancel); - - if(retval != QMessageBox::Yes) - { - fNewRecipientAllowed = true; - return; - } WalletModel::UnlockContext ctx(model->requestUnlock()); if(!ctx.isValid()) @@ -121,50 +185,70 @@ void SendCoinsDialog::on_sendButton_clicked() return; } - WalletModel::SendCoinsReturn sendstatus = model->sendCoins(recipients); - switch(sendstatus.status) + // prepare transaction for getting txFee earlier + WalletModelTransaction currentTransaction(recipients); + WalletModel::SendCoinsReturn prepareStatus; + if (model->getOptionsModel()->getCoinControlFeatures()) // coin control enabled + prepareStatus = model->prepareTransaction(currentTransaction, CoinControlDialog::coinControl); + else + prepareStatus = model->prepareTransaction(currentTransaction); + + // process prepareStatus and on error generate message shown to user + processSendCoinsReturn(prepareStatus, + BitcoinUnits::formatWithUnit(model->getOptionsModel()->getDisplayUnit(), currentTransaction.getTransactionFee())); + + if(prepareStatus.status != WalletModel::OK) { + fNewRecipientAllowed = true; + return; + } + + qint64 txFee = currentTransaction.getTransactionFee(); + QString questionString = tr("Are you sure you want to send?"); + questionString.append("

%1"); + + if(txFee > 0) + { + // append fee string if a fee is required + questionString.append("
"); + questionString.append(BitcoinUnits::formatWithUnit(model->getOptionsModel()->getDisplayUnit(), txFee)); + questionString.append(" "); + questionString.append(tr("added as transaction fee")); + } + + // add total amount in all subdivision units + questionString.append("
"); + qint64 totalAmount = currentTransaction.getTotalTransactionAmount() + txFee; + QStringList alternativeUnits; + foreach(BitcoinUnits::Unit u, BitcoinUnits::availableUnits()) + { + if(u != model->getOptionsModel()->getDisplayUnit()) + alternativeUnits.append(BitcoinUnits::formatWithUnit(u, totalAmount)); + } + questionString.append(tr("Total Amount %1 (= %2)") + .arg(BitcoinUnits::formatWithUnit(model->getOptionsModel()->getDisplayUnit(), totalAmount)) + .arg(alternativeUnits.join(" " + tr("or") + " "))); + + QMessageBox::StandardButton retval = QMessageBox::question(this, tr("Confirm send coins"), + questionString.arg(formatted.join("
")), + QMessageBox::Yes | QMessageBox::Cancel, + QMessageBox::Cancel); + + if(retval != QMessageBox::Yes) + { + fNewRecipientAllowed = true; + return; + } + + // now send the prepared transaction + WalletModel::SendCoinsReturn sendStatus = model->sendCoins(currentTransaction); + // process sendStatus and on error generate message shown to user + processSendCoinsReturn(sendStatus); + + if (sendStatus.status == WalletModel::OK) { - case WalletModel::InvalidAddress: - QMessageBox::warning(this, tr("Send Coins"), - tr("The recipient address is not valid, please recheck."), - QMessageBox::Ok, QMessageBox::Ok); - break; - case WalletModel::InvalidAmount: - QMessageBox::warning(this, tr("Send Coins"), - tr("The amount to pay must be larger than 0."), - QMessageBox::Ok, QMessageBox::Ok); - break; - case WalletModel::AmountExceedsBalance: - QMessageBox::warning(this, tr("Send Coins"), - tr("The amount exceeds your balance."), - QMessageBox::Ok, QMessageBox::Ok); - break; - case WalletModel::AmountWithFeeExceedsBalance: - QMessageBox::warning(this, tr("Send Coins"), - tr("The total exceeds your balance when the %1 transaction fee is included."). - arg(BitcoinUnits::formatWithUnit(BitcoinUnits::BTC, sendstatus.fee)), - QMessageBox::Ok, QMessageBox::Ok); - break; - case WalletModel::DuplicateAddress: - QMessageBox::warning(this, tr("Send Coins"), - tr("Duplicate address found, can only send to each address once per send operation."), - QMessageBox::Ok, QMessageBox::Ok); - break; - case WalletModel::TransactionCreationFailed: - QMessageBox::warning(this, tr("Send Coins"), - tr("Error: Transaction creation failed!"), - QMessageBox::Ok, QMessageBox::Ok); - break; - case WalletModel::TransactionCommitFailed: - QMessageBox::warning(this, tr("Send Coins"), - tr("Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here."), - QMessageBox::Ok, QMessageBox::Ok); - break; - case WalletModel::Aborted: // User aborted, nothing to do - break; - case WalletModel::OK: accept(); - break; + CoinControlDialog::coinControl->UnSelectAll(); + coinControlUpdateLabels(); } fNewRecipientAllowed = true; } @@ -174,13 +258,11 @@ void SendCoinsDialog::clear() // Remove entries until only one left while(ui->entries->count()) { - delete ui->entries->takeAt(0)->widget(); + ui->entries->takeAt(0)->widget()->deleteLater(); } addEntry(); - updateRemoveEnabled(); - - ui->sendButton->setDefault(true); + updateTabsAndLabels(); } void SendCoinsDialog::reject() @@ -199,8 +281,9 @@ SendCoinsEntry *SendCoinsDialog::addEntry() entry->setModel(model); ui->entries->addWidget(entry); connect(entry, SIGNAL(removeEntry(SendCoinsEntry*)), this, SLOT(removeEntry(SendCoinsEntry*))); + connect(entry, SIGNAL(payAmountChanged()), this, SLOT(coinControlUpdateLabels())); - updateRemoveEnabled(); + updateTabsAndLabels(); // Focus the field, so that entry can start immediately entry->clear(); @@ -213,25 +296,23 @@ SendCoinsEntry *SendCoinsDialog::addEntry() return entry; } -void SendCoinsDialog::updateRemoveEnabled() +void SendCoinsDialog::updateTabsAndLabels() { - // Remove buttons are enabled as soon as there is more than one send-entry - bool enabled = (ui->entries->count() > 1); - for(int i = 0; i < ui->entries->count(); ++i) - { - SendCoinsEntry *entry = qobject_cast(ui->entries->itemAt(i)->widget()); - if(entry) - { - entry->setRemoveEnabled(enabled); - } - } setupTabChain(0); + coinControlUpdateLabels(); } void SendCoinsDialog::removeEntry(SendCoinsEntry* entry) { - delete entry; - updateRemoveEnabled(); + entry->hide(); + + // If the last entry is about to be removed add an empty one + if (ui->entries->count() == 1) + addEntry(); + + entry->deleteLater(); + + updateTabsAndLabels(); } QWidget *SendCoinsDialog::setupTabChain(QWidget *prev) @@ -244,9 +325,10 @@ QWidget *SendCoinsDialog::setupTabChain(QWidget *prev) prev = entry->setupTabChain(prev); } } - QWidget::setTabOrder(prev, ui->addButton); - QWidget::setTabOrder(ui->addButton, ui->sendButton); - return ui->sendButton; + QWidget::setTabOrder(prev, ui->sendButton); + QWidget::setTabOrder(ui->sendButton, ui->clearButton); + QWidget::setTabOrder(ui->clearButton, ui->addButton); + return ui->addButton; } void SendCoinsDialog::setAddress(const QString &address) @@ -290,40 +372,252 @@ void SendCoinsDialog::pasteEntry(const SendCoinsRecipient &rv) } entry->setValue(rv); + updateTabsAndLabels(); } -bool SendCoinsDialog::handleURI(const QString &uri) +bool SendCoinsDialog::handlePaymentRequest(const SendCoinsRecipient &rv) { - SendCoinsRecipient rv; - // URI has to be valid - if (GUIUtil::parseBitcoinURI(uri, &rv)) - { - CBitcoinAddress address(rv.address.toStdString()); - if (!address.IsValid()) + QString strSendCoins = tr("Send Coins"); + if (rv.paymentRequest.IsInitialized()) { + // Expired payment request? + const payments::PaymentDetails& details = rv.paymentRequest.getDetails(); + if (details.has_expires() && (int64_t)details.expires() < GetTime()) + { + emit message(strSendCoins, tr("Payment request expired"), + CClientUIInterface::MSG_WARNING); return false; - pasteEntry(rv); - return true; + } + } + else { + CBitcoinAddress address(rv.address.toStdString()); + if (!address.IsValid()) { + emit message(strSendCoins, tr("Invalid payment address %1").arg(rv.address), + CClientUIInterface::MSG_WARNING); + return false; + } } - return false; + pasteEntry(rv); + return true; } void SendCoinsDialog::setBalance(qint64 balance, qint64 unconfirmedBalance, qint64 immatureBalance) { Q_UNUSED(unconfirmedBalance); Q_UNUSED(immatureBalance); - if(!model || !model->getOptionsModel()) - return; - int unit = model->getOptionsModel()->getDisplayUnit(); - ui->labelBalance->setText(BitcoinUnits::formatWithUnit(unit, balance)); + if(model && model->getOptionsModel()) + { + ui->labelBalance->setText(BitcoinUnits::formatWithUnit(model->getOptionsModel()->getDisplayUnit(), balance)); + } } void SendCoinsDialog::updateDisplayUnit() { - if(model && model->getOptionsModel()) + setBalance(model->getBalance(), 0, 0); +} + +void SendCoinsDialog::processSendCoinsReturn(const WalletModel::SendCoinsReturn &sendCoinsReturn, const QString &msgArg) +{ + QPair msgParams; + // Default to a warning message, override if error message is needed + msgParams.second = CClientUIInterface::MSG_WARNING; + + // This comment is specific to SendCoinsDialog usage of WalletModel::SendCoinsReturn. + // WalletModel::TransactionCommitFailed is used only in WalletModel::sendCoins() + // all others are used only in WalletModel::prepareTransaction() + switch(sendCoinsReturn.status) { - // Update labelBalance with the current balance and the current unit - ui->labelBalance->setText(BitcoinUnits::formatWithUnit(model->getOptionsModel()->getDisplayUnit(), model->getBalance())); + case WalletModel::InvalidAddress: + msgParams.first = tr("The recipient address is not valid, please recheck."); + break; + case WalletModel::InvalidAmount: + msgParams.first = tr("The amount to pay must be larger than 0."); + break; + case WalletModel::AmountExceedsBalance: + msgParams.first = tr("The amount exceeds your balance."); + break; + case WalletModel::AmountWithFeeExceedsBalance: + msgParams.first = tr("The total exceeds your balance when the %1 transaction fee is included.").arg(msgArg); + break; + case WalletModel::DuplicateAddress: + msgParams.first = tr("Duplicate address found, can only send to each address once per send operation."); + break; + case WalletModel::TransactionCreationFailed: + msgParams.first = tr("Transaction creation failed!"); + msgParams.second = CClientUIInterface::MSG_ERROR; + break; + case WalletModel::TransactionCommitFailed: + msgParams.first = tr("The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here."); + msgParams.second = CClientUIInterface::MSG_ERROR; + break; + // included to prevent a compiler warning. + case WalletModel::OK: + default: + return; + } + + emit message(tr("Send Coins"), msgParams.first, msgParams.second); +} + +// Coin Control: copy label "Quantity" to clipboard +void SendCoinsDialog::coinControlClipboardQuantity() +{ + GUIUtil::setClipboard(ui->labelCoinControlQuantity->text()); +} + +// Coin Control: copy label "Amount" to clipboard +void SendCoinsDialog::coinControlClipboardAmount() +{ + GUIUtil::setClipboard(ui->labelCoinControlAmount->text().left(ui->labelCoinControlAmount->text().indexOf(" "))); +} + +// Coin Control: copy label "Fee" to clipboard +void SendCoinsDialog::coinControlClipboardFee() +{ + GUIUtil::setClipboard(ui->labelCoinControlFee->text().left(ui->labelCoinControlFee->text().indexOf(" "))); +} + +// Coin Control: copy label "After fee" to clipboard +void SendCoinsDialog::coinControlClipboardAfterFee() +{ + GUIUtil::setClipboard(ui->labelCoinControlAfterFee->text().left(ui->labelCoinControlAfterFee->text().indexOf(" "))); +} + +// Coin Control: copy label "Bytes" to clipboard +void SendCoinsDialog::coinControlClipboardBytes() +{ + GUIUtil::setClipboard(ui->labelCoinControlBytes->text()); +} + +// Coin Control: copy label "Priority" to clipboard +void SendCoinsDialog::coinControlClipboardPriority() +{ + GUIUtil::setClipboard(ui->labelCoinControlPriority->text()); +} + +// Coin Control: copy label "Low output" to clipboard +void SendCoinsDialog::coinControlClipboardLowOutput() +{ + GUIUtil::setClipboard(ui->labelCoinControlLowOutput->text()); +} + +// Coin Control: copy label "Change" to clipboard +void SendCoinsDialog::coinControlClipboardChange() +{ + GUIUtil::setClipboard(ui->labelCoinControlChange->text().left(ui->labelCoinControlChange->text().indexOf(" "))); +} + +// Coin Control: settings menu - coin control enabled/disabled by user +void SendCoinsDialog::coinControlFeatureChanged(bool checked) +{ + ui->frameCoinControl->setVisible(checked); + + if (!checked && model) // coin control features disabled + CoinControlDialog::coinControl->SetNull(); + + if (checked) + coinControlUpdateLabels(); +} + +// Coin Control: button inputs -> show actual coin control dialog +void SendCoinsDialog::coinControlButtonClicked() +{ + CoinControlDialog dlg; + dlg.setModel(model); + dlg.exec(); + coinControlUpdateLabels(); +} + +// Coin Control: checkbox custom change address +void SendCoinsDialog::coinControlChangeChecked(int state) +{ + if (state == Qt::Unchecked) + { + CoinControlDialog::coinControl->destChange = CNoDestination(); + ui->labelCoinControlChangeLabel->clear(); + } + else + // use this to re-validate an already entered address + coinControlChangeEdited(ui->lineEditCoinControlChange->text()); + + ui->lineEditCoinControlChange->setEnabled((state == Qt::Checked)); +} + +// Coin Control: custom change address changed +void SendCoinsDialog::coinControlChangeEdited(const QString& text) +{ + if (model && model->getAddressTableModel()) + { + // Default to no change address until verified + CoinControlDialog::coinControl->destChange = CNoDestination(); + ui->labelCoinControlChangeLabel->setStyleSheet("QLabel{color:red;}"); + + CBitcoinAddress addr = CBitcoinAddress(text.toStdString()); + + if (text.isEmpty()) // Nothing entered + { + ui->labelCoinControlChangeLabel->setText(""); + } + else if (!addr.IsValid()) // Invalid address + { + ui->labelCoinControlChangeLabel->setText(tr("Warning: Invalid Myriadcoin address")); + } + else // Valid address + { + CPubKey pubkey; + CKeyID keyid; + addr.GetKeyID(keyid); + if (!model->getPubKey(keyid, pubkey)) // Unknown change address + { + ui->labelCoinControlChangeLabel->setText(tr("Warning: Unknown change address")); + } + else // Known change address + { + ui->labelCoinControlChangeLabel->setStyleSheet("QLabel{color:black;}"); + + // Query label + QString associatedLabel = model->getAddressTableModel()->labelForAddress(text); + if (!associatedLabel.isEmpty()) + ui->labelCoinControlChangeLabel->setText(associatedLabel); + else + ui->labelCoinControlChangeLabel->setText(tr("(no label)")); + + CoinControlDialog::coinControl->destChange = addr.Get(); + } + } + } +} + +// Coin Control: update labels +void SendCoinsDialog::coinControlUpdateLabels() +{ + if (!model || !model->getOptionsModel() || !model->getOptionsModel()->getCoinControlFeatures()) + return; + + // set pay amounts + CoinControlDialog::payAmounts.clear(); + for(int i = 0; i < ui->entries->count(); ++i) + { + SendCoinsEntry *entry = qobject_cast(ui->entries->itemAt(i)->widget()); + if(entry) + CoinControlDialog::payAmounts.append(entry->getValue().amount); + } + + if (CoinControlDialog::coinControl->HasSelected()) + { + // actual coin control calculation + CoinControlDialog::updateLabels(model, this); + + // show coin control stats + ui->labelCoinControlAutomaticallySelected->hide(); + ui->widgetCoinControl->show(); + } + else + { + // hide coin control stats + ui->labelCoinControlAutomaticallySelected->show(); + ui->widgetCoinControl->hide(); + ui->labelCoinControlInsuffFunds->hide(); } } diff --git a/src/qt/sendcoinsdialog.h b/src/qt/sendcoinsdialog.h index 043dfdcb..fcae26c7 100644 --- a/src/qt/sendcoinsdialog.h +++ b/src/qt/sendcoinsdialog.h @@ -1,12 +1,16 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef SENDCOINSDIALOG_H #define SENDCOINSDIALOG_H -#include +#include "walletmodel.h" -namespace Ui { - class SendCoinsDialog; -} -class WalletModel; +#include +#include + +class OptionsModel; class SendCoinsEntry; class SendCoinsRecipient; @@ -14,6 +18,10 @@ QT_BEGIN_NAMESPACE class QUrl; QT_END_NAMESPACE +namespace Ui { + class SendCoinsDialog; +} + /** Dialog for sending bitcoins */ class SendCoinsDialog : public QDialog { @@ -31,14 +39,14 @@ public: void setAddress(const QString &address); void pasteEntry(const SendCoinsRecipient &rv); - bool handleURI(const QString &uri); + bool handlePaymentRequest(const SendCoinsRecipient &recipient); public slots: void clear(); void reject(); void accept(); SendCoinsEntry *addEntry(); - void updateRemoveEnabled(); + void updateTabsAndLabels(); void setBalance(qint64 balance, qint64 unconfirmedBalance, qint64 immatureBalance); private: @@ -46,10 +54,32 @@ private: WalletModel *model; bool fNewRecipientAllowed; + // Process WalletModel::SendCoinsReturn and generate a pair consisting + // of a message and message flags for use in emit message(). + // Additional parameter msgArg can be used via .arg(msgArg). + void processSendCoinsReturn(const WalletModel::SendCoinsReturn &sendCoinsReturn, const QString &msgArg = QString()); + private slots: void on_sendButton_clicked(); void removeEntry(SendCoinsEntry* entry); void updateDisplayUnit(); + void coinControlFeatureChanged(bool); + void coinControlButtonClicked(); + void coinControlChangeChecked(int); + void coinControlChangeEdited(const QString &); + void coinControlUpdateLabels(); + void coinControlClipboardQuantity(); + void coinControlClipboardAmount(); + void coinControlClipboardFee(); + void coinControlClipboardAfterFee(); + void coinControlClipboardBytes(); + void coinControlClipboardPriority(); + void coinControlClipboardLowOutput(); + void coinControlClipboardChange(); + +signals: + // Fired when a message should be reported to the user + void message(const QString &title, const QString &message, unsigned int style); }; #endif // SENDCOINSDIALOG_H diff --git a/src/qt/sendcoinsentry.cpp b/src/qt/sendcoinsentry.cpp index 606cfa96..e0f56f8c 100644 --- a/src/qt/sendcoinsentry.cpp +++ b/src/qt/sendcoinsentry.cpp @@ -1,35 +1,39 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #include "sendcoinsentry.h" #include "ui_sendcoinsentry.h" -#include "guiutil.h" -#include "bitcoinunits.h" #include "addressbookpage.h" -#include "walletmodel.h" -#include "optionsmodel.h" #include "addresstablemodel.h" +#include "guiutil.h" +#include "optionsmodel.h" +#include "walletmodel.h" #include #include SendCoinsEntry::SendCoinsEntry(QWidget *parent) : - QFrame(parent), + QStackedWidget(parent), ui(new Ui::SendCoinsEntry), model(0) { ui->setupUi(this); + setCurrentWidget(ui->SendCoins); + #ifdef Q_OS_MAC ui->payToLayout->setSpacing(4); #endif #if QT_VERSION >= 0x040700 - /* Do not move this to the XML file, Qt before 4.7 will choke on it */ ui->addAsLabel->setPlaceholderText(tr("Enter a label for this address to add it to your address book")); - ui->payTo->setPlaceholderText(tr("Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)")); #endif - setFocusPolicy(Qt::TabFocus); - setFocusProxy(ui->payTo); + // normal bitcoin address field GUIUtil::setupAddressWidget(ui->payTo, this); + // just a label for displaying bitcoin address(es) + ui->payTo_is->setFont(GUIUtil::bitcoinAddressFont()); } SendCoinsEntry::~SendCoinsEntry() @@ -47,7 +51,7 @@ void SendCoinsEntry::on_addressBookButton_clicked() { if(!model) return; - AddressBookPage dlg(AddressBookPage::ForSending, AddressBookPage::SendingTab, this); + AddressBookPage dlg(AddressBookPage::ForSelection, AddressBookPage::SendingTab, this); dlg.setModel(model->getAddressTableModel()); if(dlg.exec()) { @@ -58,67 +62,77 @@ void SendCoinsEntry::on_addressBookButton_clicked() void SendCoinsEntry::on_payTo_textChanged(const QString &address) { - if(!model) - return; - // Fill in label from address book, if address has an associated label - QString associatedLabel = model->getAddressTableModel()->labelForAddress(address); - if(!associatedLabel.isEmpty()) - ui->addAsLabel->setText(associatedLabel); + updateLabel(address); } void SendCoinsEntry::setModel(WalletModel *model) { this->model = model; - if(model && model->getOptionsModel()) + if (model && model->getOptionsModel()) connect(model->getOptionsModel(), SIGNAL(displayUnitChanged(int)), this, SLOT(updateDisplayUnit())); + connect(ui->payAmount, SIGNAL(textChanged()), this, SIGNAL(payAmountChanged())); + connect(ui->deleteButton, SIGNAL(clicked()), this, SLOT(deleteClicked())); + connect(ui->deleteButton_is, SIGNAL(clicked()), this, SLOT(deleteClicked())); + connect(ui->deleteButton_s, SIGNAL(clicked()), this, SLOT(deleteClicked())); + clear(); } -void SendCoinsEntry::setRemoveEnabled(bool enabled) -{ - ui->deleteButton->setEnabled(enabled); -} - void SendCoinsEntry::clear() { + // clear UI elements for normal payment ui->payTo->clear(); ui->addAsLabel->clear(); ui->payAmount->clear(); - ui->payTo->setFocus(); + ui->messageTextLabel->clear(); + ui->messageTextLabel->hide(); + ui->messageLabel->hide(); + // clear UI elements for insecure payment request + ui->payTo_is->clear(); + ui->memoTextLabel_is->clear(); + ui->payAmount_is->clear(); + // clear UI elements for secure payment request + ui->payTo_s->clear(); + ui->memoTextLabel_s->clear(); + ui->payAmount_s->clear(); + // update the display unit, to not use the default ("BTC") updateDisplayUnit(); } -void SendCoinsEntry::on_deleteButton_clicked() +void SendCoinsEntry::deleteClicked() { emit removeEntry(this); } bool SendCoinsEntry::validate() { + if (!model) + return false; + // Check input validity bool retval = true; - if(!ui->payAmount->validate()) + // Skip checks for payment request + if (recipient.paymentRequest.IsInitialized()) + return retval; + + if (!model->validateAddress(ui->payTo->text())) + { + ui->payTo->setValid(false); + retval = false; + } + + if (!ui->payAmount->validate()) { retval = false; } - else - { - if(ui->payAmount->value() <= 0) - { - // Cannot send 0 coins or less - ui->payAmount->setValid(false); - retval = false; - } - } - if(!ui->payTo->hasAcceptableInput() || - (model && !model->validateAddress(ui->payTo->text()))) - { - ui->payTo->setValid(false); + // Reject dust outputs: + if (retval && GUIUtil::isDust(ui->payTo->text(), ui->payAmount->value())) { + ui->payAmount->setValid(false); retval = false; } @@ -127,30 +141,66 @@ bool SendCoinsEntry::validate() SendCoinsRecipient SendCoinsEntry::getValue() { - SendCoinsRecipient rv; + // Payment request + if (recipient.paymentRequest.IsInitialized()) + return recipient; - rv.address = ui->payTo->text(); - rv.label = ui->addAsLabel->text(); - rv.amount = ui->payAmount->value(); + // Normal payment + recipient.address = ui->payTo->text(); + recipient.label = ui->addAsLabel->text(); + recipient.amount = ui->payAmount->value(); + recipient.message = ui->messageTextLabel->text(); - return rv; + return recipient; } QWidget *SendCoinsEntry::setupTabChain(QWidget *prev) { QWidget::setTabOrder(prev, ui->payTo); - QWidget::setTabOrder(ui->payTo, ui->addressBookButton); + QWidget::setTabOrder(ui->payTo, ui->addAsLabel); + QWidget *w = ui->payAmount->setupTabChain(ui->addAsLabel); + QWidget::setTabOrder(w, ui->addressBookButton); QWidget::setTabOrder(ui->addressBookButton, ui->pasteButton); QWidget::setTabOrder(ui->pasteButton, ui->deleteButton); - QWidget::setTabOrder(ui->deleteButton, ui->addAsLabel); - return ui->payAmount->setupTabChain(ui->addAsLabel); + return ui->deleteButton; } void SendCoinsEntry::setValue(const SendCoinsRecipient &value) { - ui->payTo->setText(value.address); - ui->addAsLabel->setText(value.label); - ui->payAmount->setValue(value.amount); + recipient = value; + + if (recipient.paymentRequest.IsInitialized()) // payment request + { + if (recipient.authenticatedMerchant.isEmpty()) // insecure + { + ui->payTo_is->setText(recipient.address); + ui->memoTextLabel_is->setText(recipient.message); + ui->payAmount_is->setValue(recipient.amount); + ui->payAmount_is->setReadOnly(true); + setCurrentWidget(ui->SendCoins_InsecurePaymentRequest); + } + else // secure + { + ui->payTo_s->setText(recipient.authenticatedMerchant); + ui->memoTextLabel_s->setText(recipient.message); + ui->payAmount_s->setValue(recipient.amount); + ui->payAmount_s->setReadOnly(true); + setCurrentWidget(ui->SendCoins_SecurePaymentRequest); + } + } + else // normal payment + { + // message + ui->messageTextLabel->setText(recipient.message); + ui->messageTextLabel->setVisible(!recipient.message.isEmpty()); + ui->messageLabel->setVisible(!recipient.message.isEmpty()); + + ui->addAsLabel->clear(); + ui->payTo->setText(recipient.address); // this may set a label from addressbook + if (!recipient.label.isEmpty()) // if a label had been set from the addressbook, dont overwrite with an empty label + ui->addAsLabel->setText(recipient.label); + ui->payAmount->setValue(recipient.amount); + } } void SendCoinsEntry::setAddress(const QString &address) @@ -161,7 +211,7 @@ void SendCoinsEntry::setAddress(const QString &address) bool SendCoinsEntry::isClear() { - return ui->payTo->text().isEmpty(); + return ui->payTo->text().isEmpty() && ui->payTo_is->text().isEmpty() && ui->payTo_s->text().isEmpty(); } void SendCoinsEntry::setFocus() @@ -175,5 +225,23 @@ void SendCoinsEntry::updateDisplayUnit() { // Update payAmount with the current unit ui->payAmount->setDisplayUnit(model->getOptionsModel()->getDisplayUnit()); + ui->payAmount_is->setDisplayUnit(model->getOptionsModel()->getDisplayUnit()); + ui->payAmount_s->setDisplayUnit(model->getOptionsModel()->getDisplayUnit()); } } + +bool SendCoinsEntry::updateLabel(const QString &address) +{ + if(!model) + return false; + + // Fill in label from address book, if address has an associated label + QString associatedLabel = model->getAddressTableModel()->labelForAddress(address); + if(!associatedLabel.isEmpty()) + { + ui->addAsLabel->setText(associatedLabel); + return true; + } + + return false; +} diff --git a/src/qt/sendcoinsentry.h b/src/qt/sendcoinsentry.h index ec5f3410..2b696c77 100644 --- a/src/qt/sendcoinsentry.h +++ b/src/qt/sendcoinsentry.h @@ -1,16 +1,26 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef SENDCOINSENTRY_H #define SENDCOINSENTRY_H -#include +#include "walletmodel.h" + +#include + +class WalletModel; namespace Ui { class SendCoinsEntry; } -class WalletModel; -class SendCoinsRecipient; -/** A single entry in the dialog for sending bitcoins. */ -class SendCoinsEntry : public QFrame +/** + * A single entry in the dialog for sending bitcoins. + * Stacked widget, with different UIs for payment requests + * with a strong payee identity. + */ +class SendCoinsEntry : public QStackedWidget { Q_OBJECT @@ -28,29 +38,33 @@ public: void setValue(const SendCoinsRecipient &value); void setAddress(const QString &address); - /** Set up the tab chain manually, as Qt messes up the tab chain by default in some cases (issue https://bugreports.qt-project.org/browse/QTBUG-10907). + /** Set up the tab chain manually, as Qt messes up the tab chain by default in some cases + * (issue https://bugreports.qt-project.org/browse/QTBUG-10907). */ QWidget *setupTabChain(QWidget *prev); void setFocus(); public slots: - void setRemoveEnabled(bool enabled); void clear(); signals: void removeEntry(SendCoinsEntry *entry); + void payAmountChanged(); private slots: - void on_deleteButton_clicked(); + void deleteClicked(); void on_payTo_textChanged(const QString &address); void on_addressBookButton_clicked(); void on_pasteButton_clicked(); void updateDisplayUnit(); private: + SendCoinsRecipient recipient; Ui::SendCoinsEntry *ui; WalletModel *model; + + bool updateLabel(const QString &address); }; #endif // SENDCOINSENTRY_H diff --git a/src/qt/signverifymessagedialog.cpp b/src/qt/signverifymessagedialog.cpp index 5b2e5b6e..9687db1b 100644 --- a/src/qt/signverifymessagedialog.cpp +++ b/src/qt/signverifymessagedialog.cpp @@ -1,20 +1,23 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #include "signverifymessagedialog.h" #include "ui_signverifymessagedialog.h" #include "addressbookpage.h" -#include "base58.h" #include "guiutil.h" -#include "init.h" -#include "main.h" -#include "optionsmodel.h" #include "walletmodel.h" -#include "wallet.h" -#include +#include "base58.h" +#include "init.h" +#include "wallet.h" #include #include +#include + SignVerifyMessageDialog::SignVerifyMessageDialog(QWidget *parent) : QDialog(parent), ui(new Ui::SignVerifyMessageDialog), @@ -22,13 +25,9 @@ SignVerifyMessageDialog::SignVerifyMessageDialog(QWidget *parent) : { ui->setupUi(this); -#if (QT_VERSION >= 0x040700) - /* Do not move this to the XML file, Qt before 4.7 will choke on it */ - ui->addressIn_SM->setPlaceholderText(tr("Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)")); +#if QT_VERSION >= 0x040700 ui->signatureOut_SM->setPlaceholderText(tr("Click \"Sign Message\" to generate signature")); - ui->addressIn_VM->setPlaceholderText(tr("Enter a Myriadcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)")); - ui->signatureIn_VM->setPlaceholderText(tr("Enter Myriadcoin signature")); #endif GUIUtil::setupAddressWidget(ui->addressIn_SM, this); @@ -70,7 +69,6 @@ void SignVerifyMessageDialog::setAddress_VM(const QString &address) void SignVerifyMessageDialog::showTab_SM(bool fShow) { ui->tabWidget->setCurrentIndex(0); - if (fShow) this->show(); } @@ -86,7 +84,7 @@ void SignVerifyMessageDialog::on_addressBookButton_SM_clicked() { if (model && model->getAddressTableModel()) { - AddressBookPage dlg(AddressBookPage::ForSending, AddressBookPage::ReceivingTab, this); + AddressBookPage dlg(AddressBookPage::ForSelection, AddressBookPage::ReceivingTab, this); dlg.setModel(model->getAddressTableModel()); if (dlg.exec()) { @@ -102,13 +100,15 @@ void SignVerifyMessageDialog::on_pasteButton_SM_clicked() void SignVerifyMessageDialog::on_signMessageButton_SM_clicked() { + if (!model) + return; + /* Clear old signature to ensure users don't get confused on error with an old signature displayed */ ui->signatureOut_SM->clear(); CBitcoinAddress addr(ui->addressIn_SM->text().toStdString()); if (!addr.IsValid()) { - ui->addressIn_SM->setValid(false); ui->statusLabel_SM->setStyleSheet("QLabel { color: red; }"); ui->statusLabel_SM->setText(tr("The entered address is invalid.") + QString(" ") + tr("Please check the address and try again.")); return; @@ -158,7 +158,7 @@ void SignVerifyMessageDialog::on_signMessageButton_SM_clicked() void SignVerifyMessageDialog::on_copySignatureButton_SM_clicked() { - QApplication::clipboard()->setText(ui->signatureOut_SM->text()); + GUIUtil::setClipboard(ui->signatureOut_SM->text()); } void SignVerifyMessageDialog::on_clearButton_SM_clicked() @@ -175,7 +175,7 @@ void SignVerifyMessageDialog::on_addressBookButton_VM_clicked() { if (model && model->getAddressTableModel()) { - AddressBookPage dlg(AddressBookPage::ForSending, AddressBookPage::SendingTab, this); + AddressBookPage dlg(AddressBookPage::ForSelection, AddressBookPage::SendingTab, this); dlg.setModel(model->getAddressTableModel()); if (dlg.exec()) { @@ -189,7 +189,6 @@ void SignVerifyMessageDialog::on_verifyMessageButton_VM_clicked() CBitcoinAddress addr(ui->addressIn_VM->text().toStdString()); if (!addr.IsValid()) { - ui->addressIn_VM->setValid(false); ui->statusLabel_VM->setStyleSheet("QLabel { color: red; }"); ui->statusLabel_VM->setText(tr("The entered address is invalid.") + QString(" ") + tr("Please check the address and try again.")); return; diff --git a/src/qt/signverifymessagedialog.h b/src/qt/signverifymessagedialog.h index 558f24e2..bba86164 100644 --- a/src/qt/signverifymessagedialog.h +++ b/src/qt/signverifymessagedialog.h @@ -1,19 +1,24 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef SIGNVERIFYMESSAGEDIALOG_H #define SIGNVERIFYMESSAGEDIALOG_H #include +class WalletModel; + namespace Ui { class SignVerifyMessageDialog; } -class WalletModel; class SignVerifyMessageDialog : public QDialog { Q_OBJECT public: - explicit SignVerifyMessageDialog(QWidget *parent = 0); + explicit SignVerifyMessageDialog(QWidget *parent); ~SignVerifyMessageDialog(); void setModel(WalletModel *model); diff --git a/src/qt/splashscreen.cpp b/src/qt/splashscreen.cpp index c4fb9a6d..cf840406 100644 --- a/src/qt/splashscreen.cpp +++ b/src/qt/splashscreen.cpp @@ -1,35 +1,44 @@ +// Copyright (c) 2011-2014 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #include "splashscreen.h" + #include "clientversion.h" +#include "init.h" +#include "ui_interface.h" #include "util.h" +#ifdef ENABLE_WALLET +#include "wallet.h" +#endif -#include -#undef loop /* ugh, remove this when the #define loop is gone from util.h */ #include +#include -SplashScreen::SplashScreen(const QPixmap &pixmap, Qt::WindowFlags f) : +SplashScreen::SplashScreen(const QPixmap &pixmap, Qt::WindowFlags f, bool isTestNet) : QSplashScreen(pixmap, f) { + setAutoFillBackground(true); + // set reference point, paddings - int paddingRight = 20; + int paddingRight = 50; int paddingTop = 50; int titleVersionVSpace = 17; - int titleCopyrightVSpace = 36; - int titleCopyrightVSpace2 = 48; + int titleCopyrightVSpace = 40; float fontFactor = 1.0; // define text to place - QString titleText = QString(QApplication::applicationName()).replace(QString("-testnet"), QString(""), Qt::CaseSensitive); // cut of testnet, place it as single object further down + QString titleText = tr("Myriadcoin Core"); QString versionText = QString("Version %1").arg(QString::fromStdString(FormatFullVersion())); - QString copyrightText = QChar(0xA9)+QString(" 2009-%1 ").arg(COPYRIGHT_YEAR) + QString(tr("The Bitcoin developers")); - QString copyrightText2 = QChar(0xA9)+QString(" %1 ").arg(COPYRIGHT_YEAR) + QString(tr("The Myriadcoin developers")); + QString copyrightText = QChar(0xA9)+QString(" 2009-%1 ").arg(COPYRIGHT_YEAR) + QString(tr("The Myriadcoin Core developers")); QString testnetAddText = QString(tr("[testnet]")); // define text to place as single text object QString font = "Arial"; // load the bitmap for writing some text over it QPixmap newPixmap; - if(GetBoolArg("-testnet", false)) { + if(isTestNet) { newPixmap = QPixmap(":/images/splash_testnet"); } else { @@ -67,11 +76,9 @@ SplashScreen::SplashScreen(const QPixmap &pixmap, Qt::WindowFlags f) : // draw copyright stuff pixPaint.setFont(QFont(font, 10*fontFactor)); pixPaint.drawText(newPixmap.width()-titleTextWidth-paddingRight,paddingTop+titleCopyrightVSpace,copyrightText); - pixPaint.drawText(newPixmap.width()-titleTextWidth-paddingRight,paddingTop+titleCopyrightVSpace2,copyrightText2); - // draw testnet string if -testnet is on - if(QApplication::applicationName().contains(QString("-testnet"))) { - // draw copyright stuff + // draw testnet string if testnet is on + if(isTestNet) { QFont boldFont = QFont(font, 10*fontFactor); boldFont.setWeight(QFont::Bold); pixPaint.setFont(boldFont); @@ -83,4 +90,56 @@ SplashScreen::SplashScreen(const QPixmap &pixmap, Qt::WindowFlags f) : pixPaint.end(); this->setPixmap(newPixmap); + + subscribeToCoreSignals(); +} + +SplashScreen::~SplashScreen() +{ + unsubscribeFromCoreSignals(); +} + +void SplashScreen::slotFinish(QWidget *mainWin) +{ + finish(mainWin); +} + +static void InitMessage(SplashScreen *splash, const std::string &message) +{ + QMetaObject::invokeMethod(splash, "showMessage", + Qt::QueuedConnection, + Q_ARG(QString, QString::fromStdString(message)), + Q_ARG(int, Qt::AlignBottom|Qt::AlignHCenter), + Q_ARG(QColor, QColor(55,55,55))); +} + +static void ShowProgress(SplashScreen *splash, const std::string &title, int nProgress) +{ + InitMessage(splash, title + strprintf("%d", nProgress) + "%"); +} + +#ifdef ENABLE_WALLET +static void ConnectWallet(SplashScreen *splash, CWallet* wallet) +{ + wallet->ShowProgress.connect(boost::bind(ShowProgress, splash, _1, _2)); +} +#endif + +void SplashScreen::subscribeToCoreSignals() +{ + // Connect signals to client + uiInterface.InitMessage.connect(boost::bind(InitMessage, this, _1)); +#ifdef ENABLE_WALLET + uiInterface.LoadWallet.connect(boost::bind(ConnectWallet, this, _1)); +#endif +} + +void SplashScreen::unsubscribeFromCoreSignals() +{ + // Disconnect signals from client + uiInterface.InitMessage.disconnect(boost::bind(InitMessage, this, _1)); +#ifdef ENABLE_WALLET + if(pwalletMain) + pwalletMain->ShowProgress.disconnect(boost::bind(ShowProgress, this, _1, _2)); +#endif } diff --git a/src/qt/splashscreen.h b/src/qt/splashscreen.h index 6a6249d8..d79038d8 100644 --- a/src/qt/splashscreen.h +++ b/src/qt/splashscreen.h @@ -1,3 +1,7 @@ +// Copyright (c) 2011-2014 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef SPLASHSCREEN_H #define SPLASHSCREEN_H @@ -10,7 +14,18 @@ class SplashScreen : public QSplashScreen Q_OBJECT public: - explicit SplashScreen(const QPixmap &pixmap = QPixmap(), Qt::WindowFlags f = 0); + explicit SplashScreen(const QPixmap &pixmap, Qt::WindowFlags f, bool isTestNet); + ~SplashScreen(); + +public slots: + /** Slot to call finish() method as it's not defined as slot */ + void slotFinish(QWidget *mainWin); + +private: + /** Connect core signals to splash screen */ + void subscribeToCoreSignals(); + /** Disconnect core signals to splash screen */ + void unsubscribeFromCoreSignals(); }; #endif // SPLASHSCREEN_H diff --git a/src/qt/test/Makefile.am b/src/qt/test/Makefile.am new file mode 100644 index 00000000..486320e9 --- /dev/null +++ b/src/qt/test/Makefile.am @@ -0,0 +1,46 @@ +include $(top_srcdir)/src/Makefile.include + +AM_CPPFLAGS += -I$(top_srcdir)/src \ + -I$(top_srcdir)/src/qt \ + -I$(top_builddir)/src/qt \ + $(PROTOBUF_CFLAGS) \ + $(QR_CFLAGS) +bin_PROGRAMS = test_myriadcoin-qt +TESTS = test_myriadcoin-qt + +TEST_QT_MOC_CPP = moc_uritests.cpp + +if ENABLE_WALLET +TEST_QT_MOC_CPP += moc_paymentservertests.cpp +endif + +TEST_QT_H = \ + uritests.h \ + paymentrequestdata.h \ + paymentservertests.h + +BUILT_SOURCES = $(TEST_QT_MOC_CPP) + +test_myriadcoin_qt_CPPFLAGS = $(AM_CPPFLAGS) $(QT_INCLUDES) $(QT_TEST_INCLUDES) + +test_myriadcoin_qt_SOURCES = \ + test_main.cpp \ + uritests.cpp \ + $(TEST_QT_H) +if ENABLE_WALLET +test_myriadcoin_qt_SOURCES += \ + paymentservertests.cpp +endif + +nodist_test_myriadcoin_qt_SOURCES = $(TEST_QT_MOC_CPP) + +test_myriadcoin_qt_LDADD = $(LIBBITCOINQT) $(LIBBITCOIN_SERVER) +if ENABLE_WALLET +test_myriadcoin_qt_LDADD += $(LIBBITCOIN_WALLET) +endif +test_myriadcoin_qt_LDADD += $(LIBBITCOIN_CLI) $(LIBBITCOIN_COMMON) $(LIBLEVELDB) \ + $(LIBMEMENV) $(BOOST_LIBS) $(QT_DBUS_LIBS) $(QT_TEST_LIBS) $(QT_LIBS) \ + $(QR_LIBS) $(PROTOBUF_LIBS) $(BDB_LIBS) +test_myriadcoin_qt_LDFLAGS = $(QT_LDFLAGS) + +CLEANFILES = $(BUILT_SOURCES) *.gcda *.gcno diff --git a/src/qt/test/paymentrequestdata.h b/src/qt/test/paymentrequestdata.h new file mode 100644 index 00000000..49558165 --- /dev/null +++ b/src/qt/test/paymentrequestdata.h @@ -0,0 +1,307 @@ +// +// Data for paymentservertests.cpp +// + +// Base64/DER-encoded fake certificate authority certificate. +// Convert pem to base64/der with: +// cat file.pem | openssl x509 -inform PEM -outform DER | openssl enc -base64 +// +// Serial Number: 10302349811211485352 (0x8ef94c91b112c0a8) +// Issuer: CN=PaymentRequest Test CA +// Subject: CN=PaymentRequest Test CA +// Not Valid After : Dec 8 16:37:24 2022 GMT +// +const char* caCert_BASE64 = +"\ +MIIB0DCCATmgAwIBAgIJAI75TJGxEsCoMA0GCSqGSIb3DQEBCwUAMCExHzAdBgNV\ +BAMTFlBheW1lbnRSZXF1ZXN0IFRlc3QgQ0EwHhcNMTIxMjEwMTYzNzI0WhcNMjIx\ +MjA4MTYzNzI0WjAhMR8wHQYDVQQDExZQYXltZW50UmVxdWVzdCBUZXN0IENBMIGf\ +MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCvua59nX9radoqDYyplcns5qdVDTN1\ +7tmcGixmMYOYU3UYMU55VSsJs0dWKnMm3COQDY+N63c0XSbRqarBcsLTkaNASuPX\ +FCv1VWuEKSyy5xe4zeoDU7CVSzlxtQD9wbZW/s3ISjgaXBpwn6eVmntb0JwYxxPc\ +M1u/hrMD8BDbSQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUA\ +A4GBADSaRgK5xe47XxycXBhHhr0Wgl4pAsFsufqA9aB9r8KNEHJ0yUvvbD/jaJJM\ +RtQcf0AJ9olzUMY4syehxbzUJP6aeXhZEYiMvdvcv9D55clq6+WLLlNT3jBgAaVn\ +p3waRjPD4bUX3nv+ojz5s4puw7Qq5QUZlhGsMzPvwDGCmZkL\ +"; + +// +// This payment request validates directly against the +// above certificate authority. +// +const char* paymentrequest1_BASE64 = +"\ +Egt4NTA5K3NoYTI1NhrxAwruAzCCAeowggFToAMCAQICAQEwDQYJKoZIhvcNAQEL\ +BQAwITEfMB0GA1UEAxMWUGF5bWVudFJlcXVlc3QgVGVzdCBDQTAeFw0xMjEyMTAx\ +NjM3MjRaFw0yMjEyMDgxNjM3MjRaMEMxGTAXBgNVBAMMEHRlc3RtZXJjaGFudC5v\ +cmcxJjAkBgNVBAoMHVBheW1lbnQgUmVxdWVzdCBUZXN0IE1lcmNoYW50MIGfMA0G\ +CSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHkMy8W1u6HsWlSqdWTmMKf54gICxNfxbY\ ++rcMtAftr62hCYx2d2QiSRd1pCUzmo12IiSX3WxSHwaTnT3MFD6jRx6+zM6XdGar\ +I2zpYle11ANzu4gAthN17uRQHV2O5QxVtzNaMdKeJLXT2L9tfEdyL++9ZUqoQmdA\ +YG9ix330hQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4GB\ +AIkyO99KC68bi9PFRyQQ7nvn5GlQEb3Ca1bRG5+AKN9N5vc8rZ9G2hejtM8wEXni\ +eGBP+chVMsbTPEHKLrwREn7IvcyCcbAStaklPC3w0B/2idQSHskb6P3X13OR2bTH\ +a2+6wuhsOZRUrVNr24rM95DKx/eCC6JN1VW+qRPU6fqzIjQSHwiw2wYSGXapFJVg\ +igPI+6XpExtNLO/i1WFV8ZmoiKwYsuHFiwUqC1VuaXRUZXN0T25lKoABS0j59iMU\ +Uc9MdIfwsO1BskIET0eJSGNZ7eXb9N62u+qf831PMpEHkmlGpk8rHy92nPcgua/U\ +Yt8oZMn3QaTZ5A6HjJbc3A73eLylp1a0SwCl+KDMEvDQhqMn1jAVu2v92AH3uB7n\ +SiWVbw0tX/68iSQEGGfh9n6ee/8Myb3ICdw=\ +"; + +// +// Signed, but expired, merchant cert in the request +// +const char* paymentrequest2_BASE64 = +"\ +Egt4NTA5K3NoYTI1NhrsAwrpAzCCAeUwggFOoAMCAQICAQMwDQYJKoZIhvcNAQEL\ +BQAwITEfMB0GA1UEAxMWUGF5bWVudFJlcXVlc3QgVGVzdCBDQTAeFw0xMzAyMjMy\ +MTI2NDNaFw0xMzAyMjQyMTI2NDNaMD4xHDAaBgNVBAMME2V4cGlyZWRtZXJjaGFu\ +dC5vcmcxHjAcBgNVBAoMFUV4cGlyZWQgVGVzdCBNZXJjaGFudDCBnzANBgkqhkiG\ +9w0BAQEFAAOBjQAwgYkCgYEAx5DMvFtbuh7FpUqnVk5jCn+eICAsTX8W2Pq3DLQH\ +7a+toQmMdndkIkkXdaQlM5qNdiIkl91sUh8Gk509zBQ+o0cevszOl3RmqyNs6WJX\ +tdQDc7uIALYTde7kUB1djuUMVbczWjHSniS109i/bXxHci/vvWVKqEJnQGBvYsd9\ +9IUCAwEAAaMQMA4wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOBgQAaU137\ +j53rvSjlmYZpZ4RWTP7EdD6fl5ZxBeXHytN6DQL33H0eD7OFHt+ofc7E6D7keubl\ +UfCu+jOvt/MvvPUmtCI9yXZ0dNC4sjyETv+wQpxO0UNZwOM4uegdCzlo6Bi3pD4/\ +KKLdMkWuUfuPBmoammny74lZaOVr5deKXztTuCI0Eh8IsNsGEhl2qRSVYIoDyPul\ +6RMbTSzv4tVhVfGZqIisGLLhxYsFKgtVbml0VGVzdFR3byqAAXHuo4nZEPniLpkd\ +y30TkwBxVgprWJ18a9z/7Py35Qss/JMbOXbnBhJtmJCdIowHRI0aa+zqt3KKKAXi\ +mm+V4seMgxTcxMS+eDDkiTcB/RtWWSyRcS2ANjFeY0T4SLMwiCL9qWPi03hr8j96\ +tejrSPOBNSJ3Mi/q5u2Yl4gJZY2b\ +"; + +// +// 10-long chain, all intermediates valid +// +const char* paymentrequest3_BASE64 = +"\ +Egt4NTA5K3NoYTI1Nhq8JAr/AzCCAfswggFkoAMCAQICAQEwDQYJKoZIhvcNAQEL\ +BQAwPzEUMBIGA1UEAwwLdGVzdGNhOC5vcmcxJzAlBgNVBAoMHlBheW1lbnQgUmVx\ +dWVzdCBJbnRlcm1lZGlhdGUgODAeFw0xMzAyMjMyMjQyMzFaFw0yMzAyMjEyMjQy\ +MzFaMDYxGjAYBgNVBAMMEXRlc3RtZXJjaGFudDgub3JnMRgwFgYDVQQKDA9UZXN0\ +IE1lcmNoYW50IDgwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMMCHA3hiHbS\ +TKZ5K9jHRwE8NxkGp3IOx56PDB2diNkldG8XweTcRq7bBm7pdiBt4IVggtfs+6hE\ +hDYIOecyoAnVzPFTdvQ7KQdQ/fD9YLe6lk+o0edOqutPMyrxLFjSluXxEQyk7fdt\ +URloMMYfp3p1/hFCboA1rAsQ2RW38hR5AgMBAAGjEDAOMAwGA1UdEwQFMAMBAf8w\ +DQYJKoZIhvcNAQELBQADgYEAPsdFatnc2RJSpvZsw+nCiPVsllycw5ELglq9vfJz\ +nJJucRxgzmqI2iuas1ugwbXn0BEIRLK7vMF/qBzQR6M/nTxttah+KEu+okjps9vJ\ +cIyhfTyGPC5xkHaHZ7sG+UHOFhPw0/kXn0x+pbVgBZ5315axqcp1R+DTSj/whMAr\ +n0AKiAQwggIEMIIBbaADAgECAgECMA0GCSqGSIb3DQEBCwUAMD8xFDASBgNVBAMM\ +C3Rlc3RjYTcub3JnMScwJQYDVQQKDB5QYXltZW50IFJlcXVlc3QgSW50ZXJtZWRp\ +YXRlIDcwHhcNMTMwMjIzMjI0MjMxWhcNMjMwMjIxMjI0MjMxWjA/MRQwEgYDVQQD\ +DAt0ZXN0Y2E4Lm9yZzEnMCUGA1UECgweUGF5bWVudCBSZXF1ZXN0IEludGVybWVk\ +aWF0ZSA4MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDexUFfxb1sThvabp7u\ +dZz59ciThGmmAW0nP4tjrgEACgvWIInr2dZpTHbiQNF34ycsk0le1JD93D7Qb8rd\ +25OrpaO8XS2Li2zjR9cleixXjSLwV/zv8zJ8yPl/27XL++PDTKBXVpJ8/Syp+9Ty\ +plV1BqDhqtIHb/QSHEkTQXjeYQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqG\ +SIb3DQEBCwUAA4GBACMooQVbkbIZ2DaPwHDc4ULwguG3VI2Kzj50UdExmHtzm2S4\ +MQei+n+HEPjtJAx5OY520+10nfuP+12H2DRLQmWmdvDpeQ/Cv0yavlw4ZRejRFo7\ +KS83C0wo5rd+qTvvOmAN4UTArWkzYcEUulPdiXnRamb0WQHTeVdIbHVkMormCogE\ +MIICBDCCAW2gAwIBAgIBAjANBgkqhkiG9w0BAQsFADA/MRQwEgYDVQQDDAt0ZXN0\ +Y2E2Lm9yZzEnMCUGA1UECgweUGF5bWVudCBSZXF1ZXN0IEludGVybWVkaWF0ZSA2\ +MB4XDTEzMDIyMzIyNDIzMVoXDTIzMDIyMTIyNDIzMVowPzEUMBIGA1UEAwwLdGVz\ +dGNhNy5vcmcxJzAlBgNVBAoMHlBheW1lbnQgUmVxdWVzdCBJbnRlcm1lZGlhdGUg\ +NzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtjBRazrkebXAhXsbjimrMIRm\ +W/f9SwAHwXfc042keNtl0t2z6XE6UPcR2v/KrssXuCZgodeYxz6IM6lWosCM1xot\ +C3ChKKFBfVO30reuKBRUxXfKAFqxaG0YOAEzdZkkY9AGhqWloeSmgxpIfhInU0EF\ +JjCwrJ6IkijBatGoAAECAwEAAaMQMA4wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0B\ +AQsFAAOBgQDBRTi1MolmOA0niHYX0A2lN5QWHkCfX0A7GwyoMA3dvM45m/NYd4WB\ +X+HwfnfYcI6X9jOgNo5OWmc4GGsld0HlxwMYEKISBS9PbSHPBrb3TBOlw5ztQpXZ\ +91+bOhLux52Fr03sK7v9qExmBM12M8UR2ltpzAMiUgLLMHyPfiWkvQqIBDCCAgQw\ +ggFtoAMCAQICAQIwDQYJKoZIhvcNAQELBQAwPzEUMBIGA1UEAwwLdGVzdGNhNS5v\ +cmcxJzAlBgNVBAoMHlBheW1lbnQgUmVxdWVzdCBJbnRlcm1lZGlhdGUgNTAeFw0x\ +MzAyMjMyMjQyMzBaFw0yMzAyMjEyMjQyMzBaMD8xFDASBgNVBAMMC3Rlc3RjYTYu\ +b3JnMScwJQYDVQQKDB5QYXltZW50IFJlcXVlc3QgSW50ZXJtZWRpYXRlIDYwgZ8w\ +DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANJSH3xivX1t9olIdHsznI1aE9SD7t9i\ +SZJsIB0otoETHZRVv9M9LvyzBNK98ZV+kTOlST7PJgC0d9BQM9sgYApSRq5oqKDM\ +9FXbOm/yaReAbU3mkFNFw5roTlJ5ThEy0yOGT/DS0YBRaGIvRPRj2DiqDVdCZZ+w\ +4jo1IYHkZt4FAgMBAAGjEDAOMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQAD\ +gYEATm6+J1OmbrothO60xALKonWMBKr6hudb4amkFBqKbA9wMeM3jl+I/yKfz/Uf\ +xWuJ071IhiNv6Gxx5YwNvhUe1xMhUqHv0gpyK1Z47bD+kYS2se5sWNPNo3Y9qZDG\ +IXiGQxwHmrzaFk79Uy1xsmvsEz42w6hr25Yaw7HkIgrFveoKiAQwggIEMIIBbaAD\ +AgECAgECMA0GCSqGSIb3DQEBCwUAMD8xFDASBgNVBAMMC3Rlc3RjYTQub3JnMScw\ +JQYDVQQKDB5QYXltZW50IFJlcXVlc3QgSW50ZXJtZWRpYXRlIDQwHhcNMTMwMjIz\ +MjI0MjMwWhcNMjMwMjIxMjI0MjMwWjA/MRQwEgYDVQQDDAt0ZXN0Y2E1Lm9yZzEn\ +MCUGA1UECgweUGF5bWVudCBSZXF1ZXN0IEludGVybWVkaWF0ZSA1MIGfMA0GCSqG\ +SIb3DQEBAQUAA4GNADCBiQKBgQC7vVUFpxHzz2Tr/xij3k58s8d/BPA0R6D5RXTV\ +vmhAzc1Zuin4zUKRFs/aCj/0yED8Wu/COfNGF4tVlRNMdl9EcFsxa8XGEL4eAZa+\ +H/rOHH+7/1EINrrVWhZlUecyhilN8jmCZmqEM3ecuD0NAViqyMrgmaiFmsLoQZpE\ +GepDUQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4GBAEdJ\ +Ss8jWiooja3WZzHXeF95QkBJNjIlpDLGcpl4opOYLSuEl9Uxp//LaQQiXuzpj4/I\ +pkWGQmMy5HOyH1lqDyiMgXpcG8PE0jEQAoEUGZ0QEqB1mZ6BCrYvmUuf/5aSVd8Y\ +6lKMR3WzFDYU9Zy0nzuHB/3nvp6MeDRQeRMtYvz4CogEMIICBDCCAW2gAwIBAgIB\ +AjANBgkqhkiG9w0BAQsFADA/MRQwEgYDVQQDDAt0ZXN0Y2EzLm9yZzEnMCUGA1UE\ +CgweUGF5bWVudCBSZXF1ZXN0IEludGVybWVkaWF0ZSAzMB4XDTEzMDIyMzIyNDIy\ +OVoXDTIzMDIyMTIyNDIyOVowPzEUMBIGA1UEAwwLdGVzdGNhNC5vcmcxJzAlBgNV\ +BAoMHlBheW1lbnQgUmVxdWVzdCBJbnRlcm1lZGlhdGUgNDCBnzANBgkqhkiG9w0B\ +AQEFAAOBjQAwgYkCgYEAxYYo3w2UXiYg6O8b4QgwN/vgreTkiW122Ep/z2TiDrhV\ +MhfOOiKdwYESPflfnXnVaQQzCGexYTQqsvqvzHSyna5hL0zPTRJxSKmTVrXRsWtp\ +dCRhjxCGipS3tlQBDi7vb+7SNRIBK4dBjjGzALNk7gMCpy+yM8f6I043jTlmGb0C\ +AwEAAaMQMA4wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOBgQDU+IQxt3Oh\ +KqaUYWC23+cB2gekvWqwMBnrCNrX/Dp+kjoJKUoR2Fs3qw53raHES4SIhpGT9l9l\ +rppNQgFe/JMHeYqOZMZO+6kuU0olJanBJ14tPIc7zlMTQ9OfmZ6v07IpyFbsQDtR\ +hpe80DpuvSFPfJ4fh0WrQf6kn3KDVpGDnAqIBDCCAgQwggFtoAMCAQICAQIwDQYJ\ +KoZIhvcNAQELBQAwPzEUMBIGA1UEAwwLdGVzdGNhMi5vcmcxJzAlBgNVBAoMHlBh\ +eW1lbnQgUmVxdWVzdCBJbnRlcm1lZGlhdGUgMjAeFw0xMzAyMjMyMjQyMjlaFw0y\ +MzAyMjEyMjQyMjlaMD8xFDASBgNVBAMMC3Rlc3RjYTMub3JnMScwJQYDVQQKDB5Q\ +YXltZW50IFJlcXVlc3QgSW50ZXJtZWRpYXRlIDMwgZ8wDQYJKoZIhvcNAQEBBQAD\ +gY0AMIGJAoGBANzgVP99Qg98e6NsKEz1v5KqRB7NTBRRsYnBvb/TSWipvMQaCYuE\ +yk1xG57x++QuASKeR3QHRQJOoAhQaj9JLUhSSv9GQ5PrFLLsOFv7L1tpzXHh2dOB\ +IW92X2yFRW2s39q+Q21yvN+N8uoKdqXhzRA+dDoXh3cavaVeHX1G+IrlAgMBAAGj\ +EDAOMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADgYEASTwg84cX+1UhOG9s\ +ejFV3m34QuI1hPZ+qhqVJlRYUtego8Wng1BburDSwqVAv4ch2wi3c2s4e8J7AXyL\ +tzSbSQG4RN0oZi0mR8EtTTN+Mix/hBIk79dMZg85+I29uFA6Zj2d9oAhQv2qkHhc\ +6tcaheNvkQRlCyH68k3iF1Fqf+4KiAQwggIEMIIBbaADAgECAgECMA0GCSqGSIb3\ +DQEBCwUAMD8xFDASBgNVBAMMC3Rlc3RjYTEub3JnMScwJQYDVQQKDB5QYXltZW50\ +IFJlcXVlc3QgSW50ZXJtZWRpYXRlIDEwHhcNMTMwMjIzMjI0MjI5WhcNMjMwMjIx\ +MjI0MjI5WjA/MRQwEgYDVQQDDAt0ZXN0Y2EyLm9yZzEnMCUGA1UECgweUGF5bWVu\ +dCBSZXF1ZXN0IEludGVybWVkaWF0ZSAyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB\ +iQKBgQDaV8zhfyQuSf/f+fauMfgs3g/RnWy9yxxUkvQneQQPH3uZzCyk3A6q72ip\ +TtwNqiibG9455L9A7SaUjGtnpUz0NKT/VWUdqbfCl1PqXjEZbDobbAQ5hxLGOTyL\ +RQhLIcgeq2/BnmeCqHsC4md04nUp+nBo1HwKyygvK+9sMbCp/wIDAQABoxAwDjAM\ +BgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4GBACvYyE+PPmWFkbjyRu9LAt8D\ +crtyYYLRClKSg6tVvutwukLG2l//kDOohYkJtgTqr6LnCIIIwYdXN+4wxugmw4cn\ +PIZmP6kovxjhhVM95okilor1zniTAo3RN7JDIfTGNgxLdGu1btt7DOFL4zTbeSJM\ +b8M1JpPftehH+x/VLyuUCuoDMIIB5jCCAU+gAwIBAgIBBTANBgkqhkiG9w0BAQsF\ +ADAhMR8wHQYDVQQDExZQYXltZW50UmVxdWVzdCBUZXN0IENBMB4XDTEzMDIyMzIy\ +NDIyOFoXDTIzMDIyMTIyNDIyOFowPzEUMBIGA1UEAwwLdGVzdGNhMS5vcmcxJzAl\ +BgNVBAoMHlBheW1lbnQgUmVxdWVzdCBJbnRlcm1lZGlhdGUgMTCBnzANBgkqhkiG\ +9w0BAQEFAAOBjQAwgYkCgYEAo5Vy9H3nA/OOkF5Ap89yfVNSiTay/LYCaB0eALpc\ +U690U75O9Q3w2M+2AN8wpbbHsJHZMIjEeBRoQfjlYXW1ucQTxWKyT+liu0D25mGX\ +X27CBXBd4iXTxVII/iX+u3lcjORjoHOBy7QgeIDIIS9y0vYu8eArpjh7m4thrVgI\ +RtMCAwEAAaMQMA4wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOBgQB9LKcV\ +JK9sjASNzpQlpUp7nCiw5FSjVY+XMRIKK/kavzlKjZ+InsmmyRVGjDoZi9GrqG9P\ +VHgLBxi2VtVjmokZoNPqao3OfhqORAubC+JR/JLepM7aDaxDdTHVhSUk4lgNAvi2\ +6dGY7nZMsnHlPQ2tPp/HvRRiMq1oDjlylc8VTCI2Eh8IsNsGEhl2qRSVYIoDyPul\ +6RMbTSzv4tVhVfGZqIisGLLhxYsFKg1Vbml0VGVzdFRocmVlKoABn2HTsUQtMNI4\ +yNvkfkFNka3pRvTUTydJrvyfmEeLzImfM1BWddZjnywku9RToNFZZNgow5QnljmF\ +chhR/aHOuEMTxmc12K4rNlgYtHCsxLP9zd+6u0cva3TucZ6EzS8PKEib/+r12/52\ +664NuWA9WtsK7QCFrK2K95PnVCRmWl0=\ +"; + +// +// Long chain, with an invalid (expired) cert in the middle +// +const char* paymentrequest4_BASE64 = +"\ +Egt4NTA5K3NoYTI1NhqeJAr/AzCCAfswggFkoAMCAQICAQEwDQYJKoZIhvcNAQEL\ +BQAwPzEUMBIGA1UEAwwLdGVzdGNhOC5vcmcxJzAlBgNVBAoMHlBheW1lbnQgUmVx\ +dWVzdCBJbnRlcm1lZGlhdGUgODAeFw0xMzAyMjMyMjQyMzFaFw0yMzAyMjEyMjQy\ +MzFaMDYxGjAYBgNVBAMMEXRlc3RtZXJjaGFudDgub3JnMRgwFgYDVQQKDA9UZXN0\ +IE1lcmNoYW50IDgwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMMCHA3hiHbS\ +TKZ5K9jHRwE8NxkGp3IOx56PDB2diNkldG8XweTcRq7bBm7pdiBt4IVggtfs+6hE\ +hDYIOecyoAnVzPFTdvQ7KQdQ/fD9YLe6lk+o0edOqutPMyrxLFjSluXxEQyk7fdt\ +URloMMYfp3p1/hFCboA1rAsQ2RW38hR5AgMBAAGjEDAOMAwGA1UdEwQFMAMBAf8w\ +DQYJKoZIhvcNAQELBQADgYEAPsdFatnc2RJSpvZsw+nCiPVsllycw5ELglq9vfJz\ +nJJucRxgzmqI2iuas1ugwbXn0BEIRLK7vMF/qBzQR6M/nTxttah+KEu+okjps9vJ\ +cIyhfTyGPC5xkHaHZ7sG+UHOFhPw0/kXn0x+pbVgBZ5315axqcp1R+DTSj/whMAr\ +n0AKiAQwggIEMIIBbaADAgECAgECMA0GCSqGSIb3DQEBCwUAMD8xFDASBgNVBAMM\ +C3Rlc3RjYTcub3JnMScwJQYDVQQKDB5QYXltZW50IFJlcXVlc3QgSW50ZXJtZWRp\ +YXRlIDcwHhcNMTMwMjIzMjI0MjMxWhcNMjMwMjIxMjI0MjMxWjA/MRQwEgYDVQQD\ +DAt0ZXN0Y2E4Lm9yZzEnMCUGA1UECgweUGF5bWVudCBSZXF1ZXN0IEludGVybWVk\ +aWF0ZSA4MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDexUFfxb1sThvabp7u\ +dZz59ciThGmmAW0nP4tjrgEACgvWIInr2dZpTHbiQNF34ycsk0le1JD93D7Qb8rd\ +25OrpaO8XS2Li2zjR9cleixXjSLwV/zv8zJ8yPl/27XL++PDTKBXVpJ8/Syp+9Ty\ +plV1BqDhqtIHb/QSHEkTQXjeYQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqG\ +SIb3DQEBCwUAA4GBACMooQVbkbIZ2DaPwHDc4ULwguG3VI2Kzj50UdExmHtzm2S4\ +MQei+n+HEPjtJAx5OY520+10nfuP+12H2DRLQmWmdvDpeQ/Cv0yavlw4ZRejRFo7\ +KS83C0wo5rd+qTvvOmAN4UTArWkzYcEUulPdiXnRamb0WQHTeVdIbHVkMormCogE\ +MIICBDCCAW2gAwIBAgIBAjANBgkqhkiG9w0BAQsFADA/MRQwEgYDVQQDDAt0ZXN0\ +Y2E2Lm9yZzEnMCUGA1UECgweUGF5bWVudCBSZXF1ZXN0IEludGVybWVkaWF0ZSA2\ +MB4XDTEzMDIyMzIyNDIzMVoXDTIzMDIyMTIyNDIzMVowPzEUMBIGA1UEAwwLdGVz\ +dGNhNy5vcmcxJzAlBgNVBAoMHlBheW1lbnQgUmVxdWVzdCBJbnRlcm1lZGlhdGUg\ +NzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtjBRazrkebXAhXsbjimrMIRm\ +W/f9SwAHwXfc042keNtl0t2z6XE6UPcR2v/KrssXuCZgodeYxz6IM6lWosCM1xot\ +C3ChKKFBfVO30reuKBRUxXfKAFqxaG0YOAEzdZkkY9AGhqWloeSmgxpIfhInU0EF\ +JjCwrJ6IkijBatGoAAECAwEAAaMQMA4wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0B\ +AQsFAAOBgQDBRTi1MolmOA0niHYX0A2lN5QWHkCfX0A7GwyoMA3dvM45m/NYd4WB\ +X+HwfnfYcI6X9jOgNo5OWmc4GGsld0HlxwMYEKISBS9PbSHPBrb3TBOlw5ztQpXZ\ +91+bOhLux52Fr03sK7v9qExmBM12M8UR2ltpzAMiUgLLMHyPfiWkvQqIBDCCAgQw\ +ggFtoAMCAQICAQIwDQYJKoZIhvcNAQELBQAwPzEUMBIGA1UEAwwLdGVzdGNhNS5v\ +cmcxJzAlBgNVBAoMHlBheW1lbnQgUmVxdWVzdCBJbnRlcm1lZGlhdGUgNTAeFw0x\ +MzAyMjMyMjQyMzBaFw0yMzAyMjEyMjQyMzBaMD8xFDASBgNVBAMMC3Rlc3RjYTYu\ +b3JnMScwJQYDVQQKDB5QYXltZW50IFJlcXVlc3QgSW50ZXJtZWRpYXRlIDYwgZ8w\ +DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANJSH3xivX1t9olIdHsznI1aE9SD7t9i\ +SZJsIB0otoETHZRVv9M9LvyzBNK98ZV+kTOlST7PJgC0d9BQM9sgYApSRq5oqKDM\ +9FXbOm/yaReAbU3mkFNFw5roTlJ5ThEy0yOGT/DS0YBRaGIvRPRj2DiqDVdCZZ+w\ +4jo1IYHkZt4FAgMBAAGjEDAOMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQAD\ +gYEATm6+J1OmbrothO60xALKonWMBKr6hudb4amkFBqKbA9wMeM3jl+I/yKfz/Uf\ +xWuJ071IhiNv6Gxx5YwNvhUe1xMhUqHv0gpyK1Z47bD+kYS2se5sWNPNo3Y9qZDG\ +IXiGQxwHmrzaFk79Uy1xsmvsEz42w6hr25Yaw7HkIgrFveoK6gMwggHmMIIBT6AD\ +AgECAgEGMA0GCSqGSIb3DQEBCwUAMCExHzAdBgNVBAMTFlBheW1lbnRSZXF1ZXN0\ +IFRlc3QgQ0EwHhcNMTMwMjIzMjI1OTUxWhcNMTMwMjI0MjI1OTUxWjA/MRQwEgYD\ +VQQDDAt0ZXN0Y2E1Lm9yZzEnMCUGA1UECgweUGF5bWVudCBSZXF1ZXN0IEludGVy\ +bWVkaWF0ZSA1MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7vVUFpxHzz2Tr\ +/xij3k58s8d/BPA0R6D5RXTVvmhAzc1Zuin4zUKRFs/aCj/0yED8Wu/COfNGF4tV\ +lRNMdl9EcFsxa8XGEL4eAZa+H/rOHH+7/1EINrrVWhZlUecyhilN8jmCZmqEM3ec\ +uD0NAViqyMrgmaiFmsLoQZpEGepDUQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0G\ +CSqGSIb3DQEBCwUAA4GBAEmcUEnhua/oiXy1fwScLgMqt+jk9mHRpE6SVsIop23Q\ +CY2JfpG6RxhMMzzzhGklEGN6cxG0HCi6B3HJx6PYrFEfTB0rW4K6m0Tvx3WpS9mN\ +uoEuJHLy18ausI/sYAPDHCL+SfBVcqorpaIG2sSpZouRBjRHAyqFAYlwlW87uq5n\ +CogEMIICBDCCAW2gAwIBAgIBAjANBgkqhkiG9w0BAQsFADA/MRQwEgYDVQQDDAt0\ +ZXN0Y2EzLm9yZzEnMCUGA1UECgweUGF5bWVudCBSZXF1ZXN0IEludGVybWVkaWF0\ +ZSAzMB4XDTEzMDIyMzIyNDIyOVoXDTIzMDIyMTIyNDIyOVowPzEUMBIGA1UEAwwL\ +dGVzdGNhNC5vcmcxJzAlBgNVBAoMHlBheW1lbnQgUmVxdWVzdCBJbnRlcm1lZGlh\ +dGUgNDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAxYYo3w2UXiYg6O8b4Qgw\ +N/vgreTkiW122Ep/z2TiDrhVMhfOOiKdwYESPflfnXnVaQQzCGexYTQqsvqvzHSy\ +na5hL0zPTRJxSKmTVrXRsWtpdCRhjxCGipS3tlQBDi7vb+7SNRIBK4dBjjGzALNk\ +7gMCpy+yM8f6I043jTlmGb0CAwEAAaMQMA4wDAYDVR0TBAUwAwEB/zANBgkqhkiG\ +9w0BAQsFAAOBgQDU+IQxt3OhKqaUYWC23+cB2gekvWqwMBnrCNrX/Dp+kjoJKUoR\ +2Fs3qw53raHES4SIhpGT9l9lrppNQgFe/JMHeYqOZMZO+6kuU0olJanBJ14tPIc7\ +zlMTQ9OfmZ6v07IpyFbsQDtRhpe80DpuvSFPfJ4fh0WrQf6kn3KDVpGDnAqIBDCC\ +AgQwggFtoAMCAQICAQIwDQYJKoZIhvcNAQELBQAwPzEUMBIGA1UEAwwLdGVzdGNh\ +Mi5vcmcxJzAlBgNVBAoMHlBheW1lbnQgUmVxdWVzdCBJbnRlcm1lZGlhdGUgMjAe\ +Fw0xMzAyMjMyMjQyMjlaFw0yMzAyMjEyMjQyMjlaMD8xFDASBgNVBAMMC3Rlc3Rj\ +YTMub3JnMScwJQYDVQQKDB5QYXltZW50IFJlcXVlc3QgSW50ZXJtZWRpYXRlIDMw\ +gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANzgVP99Qg98e6NsKEz1v5KqRB7N\ +TBRRsYnBvb/TSWipvMQaCYuEyk1xG57x++QuASKeR3QHRQJOoAhQaj9JLUhSSv9G\ +Q5PrFLLsOFv7L1tpzXHh2dOBIW92X2yFRW2s39q+Q21yvN+N8uoKdqXhzRA+dDoX\ +h3cavaVeHX1G+IrlAgMBAAGjEDAOMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEL\ +BQADgYEASTwg84cX+1UhOG9sejFV3m34QuI1hPZ+qhqVJlRYUtego8Wng1BburDS\ +wqVAv4ch2wi3c2s4e8J7AXyLtzSbSQG4RN0oZi0mR8EtTTN+Mix/hBIk79dMZg85\ ++I29uFA6Zj2d9oAhQv2qkHhc6tcaheNvkQRlCyH68k3iF1Fqf+4KiAQwggIEMIIB\ +baADAgECAgECMA0GCSqGSIb3DQEBCwUAMD8xFDASBgNVBAMMC3Rlc3RjYTEub3Jn\ +MScwJQYDVQQKDB5QYXltZW50IFJlcXVlc3QgSW50ZXJtZWRpYXRlIDEwHhcNMTMw\ +MjIzMjI0MjI5WhcNMjMwMjIxMjI0MjI5WjA/MRQwEgYDVQQDDAt0ZXN0Y2EyLm9y\ +ZzEnMCUGA1UECgweUGF5bWVudCBSZXF1ZXN0IEludGVybWVkaWF0ZSAyMIGfMA0G\ +CSqGSIb3DQEBAQUAA4GNADCBiQKBgQDaV8zhfyQuSf/f+fauMfgs3g/RnWy9yxxU\ +kvQneQQPH3uZzCyk3A6q72ipTtwNqiibG9455L9A7SaUjGtnpUz0NKT/VWUdqbfC\ +l1PqXjEZbDobbAQ5hxLGOTyLRQhLIcgeq2/BnmeCqHsC4md04nUp+nBo1HwKyygv\ +K+9sMbCp/wIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4GB\ +ACvYyE+PPmWFkbjyRu9LAt8DcrtyYYLRClKSg6tVvutwukLG2l//kDOohYkJtgTq\ +r6LnCIIIwYdXN+4wxugmw4cnPIZmP6kovxjhhVM95okilor1zniTAo3RN7JDIfTG\ +NgxLdGu1btt7DOFL4zTbeSJMb8M1JpPftehH+x/VLyuUCuoDMIIB5jCCAU+gAwIB\ +AgIBBTANBgkqhkiG9w0BAQsFADAhMR8wHQYDVQQDExZQYXltZW50UmVxdWVzdCBU\ +ZXN0IENBMB4XDTEzMDIyMzIyNDIyOFoXDTIzMDIyMTIyNDIyOFowPzEUMBIGA1UE\ +AwwLdGVzdGNhMS5vcmcxJzAlBgNVBAoMHlBheW1lbnQgUmVxdWVzdCBJbnRlcm1l\ +ZGlhdGUgMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAo5Vy9H3nA/OOkF5A\ +p89yfVNSiTay/LYCaB0eALpcU690U75O9Q3w2M+2AN8wpbbHsJHZMIjEeBRoQfjl\ +YXW1ucQTxWKyT+liu0D25mGXX27CBXBd4iXTxVII/iX+u3lcjORjoHOBy7QgeIDI\ +IS9y0vYu8eArpjh7m4thrVgIRtMCAwEAAaMQMA4wDAYDVR0TBAUwAwEB/zANBgkq\ +hkiG9w0BAQsFAAOBgQB9LKcVJK9sjASNzpQlpUp7nCiw5FSjVY+XMRIKK/kavzlK\ +jZ+InsmmyRVGjDoZi9GrqG9PVHgLBxi2VtVjmokZoNPqao3OfhqORAubC+JR/JLe\ +pM7aDaxDdTHVhSUk4lgNAvi26dGY7nZMsnHlPQ2tPp/HvRRiMq1oDjlylc8VTCI1\ +Eh8IsNsGEhl2qRSVYIoDyPul6RMbTSzv4tVhVfGZqIisGLLhxYsFKgxVbml0VGVz\ +dEZvdXIqgAEBE1PP93Tkpif35F+dYmXn9kLA/1djcPjCs2o2rwRMM4Uk356O5dgu\ +HXQjsfdR58qZQS9CS5DAtRUf0R8+43/wijO/hb49VNaNXmY+/cPHMkahP2aV3tZi\ +FAyZblLik9A7ZvF+UsjeFQiHB5wzWQvbqk5wQ4yabHIXoYv/E0q+eQ==\ +"; + +const char* paymentrequest5_BASE64 = +"\ +Egt4NTA5K3NoYTI1NhrxAwruAzCCAeowggFToAMCAQICAQEwDQYJKoZIhvcNAQEL\ +BQAwITEfMB0GA1UEAxMWUGF5bWVudFJlcXVlc3QgVGVzdCBDQTAeFw0xMzA0MTkx\ +NzIwMDZaFw0yMzA0MTcxNzIwMDZaMEMxGTAXBgNVBAMMEHRlc3RtZXJjaGFudC5v\ +cmcxJjAkBgNVBAoMHVBheW1lbnQgUmVxdWVzdCBUZXN0IE1lcmNoYW50MIGfMA0G\ +CSqGSIb3DQEBAQUAA4GNADCBiQKBgQDhV6Yn47aEEmbl50YLvXoqGEJA51I/40wr\ +Z6VQGdXYaRqYktagrWDlgYY9h0JQ1bQhm8HgW7ju0R4NaDTXUqxg4HjprF0z3Mfm\ +/6mmebkLOOptfkVD7ceAteNI7cyuqWGIAZA7D9mV97mXoCAtTlBUycvkmoiClCCS\ +h0EpF/UTaQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4GB\ +AGIRwW7I0QvLga+RnJoJSZNZQbtu4rQW3xmoz8WfZMBYXX3QBYg5ftycbdK+/IbP\ +qozfjGW2AS6DNArvpveSPDTK9+GJBNo1paiNtVqwXkC3Ddscv5AIms1eZGiIOQNC\ +mUvdLkpoXo48WAer3EGsZ3B15GyNEELc0q9W5yUebba1IjUSHwiw2wYSGXapFJVg\ +igPI+6XpExtNLO/i1WFV8ZmoiKwYuPvFiwUqDFVuaXRUZXN0Rml2ZSqAAXdsMgdG\ +ssymvca1S/1KeM3n8Ydi2fi1JUzAAr59xPvNJRUeqCLP9upHn5z7br3P12Oz9A20\ +5/4wL4ClPRPVnOHgij0bEg+y0tGESqmF1rfOfXDszlo2U92wCxS07kq79YAZJ1Zo\ +XYh860/Q4wvc7lfiTe+dXBzPKAKhMy91yETY\ +"; diff --git a/src/qt/test/paymentservertests.cpp b/src/qt/test/paymentservertests.cpp new file mode 100644 index 00000000..7dee7a9c --- /dev/null +++ b/src/qt/test/paymentservertests.cpp @@ -0,0 +1,112 @@ +#include "paymentservertests.h" + +#include "optionsmodel.h" +#include "paymentrequestdata.h" + +#include "util.h" + +#include +#include + +#include +#include + +X509 *parse_b64der_cert(const char* cert_data) +{ + std::vector data = DecodeBase64(cert_data); + assert(data.size() > 0); + const unsigned char* dptr = &data[0]; + X509 *cert = d2i_X509(NULL, &dptr, data.size()); + assert(cert); + return cert; +} + + +// +// Test payment request handling +// + +static SendCoinsRecipient handleRequest(PaymentServer* server, std::vector& data) +{ + RecipientCatcher sigCatcher; + QObject::connect(server, SIGNAL(receivedPaymentRequest(SendCoinsRecipient)), + &sigCatcher, SLOT(getRecipient(SendCoinsRecipient))); + + // Write data to a temp file: + QTemporaryFile f; + f.open(); + f.write((const char*)&data[0], data.size()); + f.close(); + + // Create a QObject, install event filter from PaymentServer + // and send a file open event to the object + QObject object; + object.installEventFilter(server); + QFileOpenEvent event(f.fileName()); + // If sending the event fails, this will cause sigCatcher to be empty, + // which will lead to a test failure anyway. + QCoreApplication::sendEvent(&object, &event); + + QObject::disconnect(server, SIGNAL(receivedPaymentRequest(SendCoinsRecipient)), + &sigCatcher, SLOT(getRecipient(SendCoinsRecipient))); + + // Return results from sigCatcher + return sigCatcher.recipient; +} + +void PaymentServerTests::paymentServerTests() +{ + OptionsModel optionsModel; + PaymentServer* server = new PaymentServer(NULL, false); + X509_STORE* caStore = X509_STORE_new(); + X509_STORE_add_cert(caStore, parse_b64der_cert(caCert_BASE64)); + PaymentServer::LoadRootCAs(caStore); + server->setOptionsModel(&optionsModel); + server->uiReady(); + + // Now feed PaymentRequests to server, and observe signals it produces: + std::vector data = DecodeBase64(paymentrequest1_BASE64); + SendCoinsRecipient r = handleRequest(server, data); + QString merchant; + r.paymentRequest.getMerchant(caStore, merchant); + QCOMPARE(merchant, QString("testmerchant.org")); + + // Version of the above, with an expired certificate: + data = DecodeBase64(paymentrequest2_BASE64); + r = handleRequest(server, data); + r.paymentRequest.getMerchant(caStore, merchant); + QCOMPARE(merchant, QString("")); + + // Long certificate chain: + data = DecodeBase64(paymentrequest3_BASE64); + r = handleRequest(server, data); + r.paymentRequest.getMerchant(caStore, merchant); + QCOMPARE(merchant, QString("testmerchant8.org")); + + // Long certificate chain, with an expired certificate in the middle: + data = DecodeBase64(paymentrequest4_BASE64); + r = handleRequest(server, data); + r.paymentRequest.getMerchant(caStore, merchant); + QCOMPARE(merchant, QString("")); + + // Validly signed, but by a CA not in our root CA list: + data = DecodeBase64(paymentrequest5_BASE64); + r = handleRequest(server, data); + r.paymentRequest.getMerchant(caStore, merchant); + QCOMPARE(merchant, QString("")); + + // Try again with no root CA's, verifiedMerchant should be empty: + caStore = X509_STORE_new(); + PaymentServer::LoadRootCAs(caStore); + data = DecodeBase64(paymentrequest1_BASE64); + r = handleRequest(server, data); + r.paymentRequest.getMerchant(caStore, merchant); + QCOMPARE(merchant, QString("")); + + delete server; +} + +void RecipientCatcher::getRecipient(SendCoinsRecipient r) +{ + recipient = r; +} diff --git a/src/qt/test/paymentservertests.h b/src/qt/test/paymentservertests.h new file mode 100644 index 00000000..884e535a --- /dev/null +++ b/src/qt/test/paymentservertests.h @@ -0,0 +1,31 @@ +#ifndef PAYMENTSERVERTESTS_H +#define PAYMENTSERVERTESTS_H + +#include "../paymentserver.h" + +#include +#include + +class PaymentServerTests : public QObject +{ + Q_OBJECT + +private slots: + void paymentServerTests(); +}; + +// Dummy class to receive paymentserver signals. +// If SendCoinsRecipient was a proper QObject, then we could use +// QSignalSpy... but it's not. +class RecipientCatcher : public QObject +{ + Q_OBJECT + +public slots: + void getRecipient(SendCoinsRecipient r); + +public: + SendCoinsRecipient recipient; +}; + +#endif // PAYMENTSERVERTESTS_H diff --git a/src/qt/test/test_main.cpp b/src/qt/test/test_main.cpp index af2d358f..a2adb003 100644 --- a/src/qt/test/test_main.cpp +++ b/src/qt/test/test_main.cpp @@ -1,16 +1,43 @@ -#include -#include - -#include "uritests.h" - -// This is all you need to run all the tests -int main(int argc, char *argv[]) -{ - bool fInvalid = false; - - URITests test1; - if (QTest::qExec(&test1) != 0) - fInvalid = true; - - return fInvalid; -} +#include "bitcoin-config.h" +#if defined(HAVE_CONFIG_H) +#include "bitcoin-config.h" +#endif + +#ifdef ENABLE_WALLET +#include "paymentservertests.h" +#endif +#include "uritests.h" + +#include +#include +#include + +#if defined(QT_STATICPLUGIN) && QT_VERSION < 0x050000 +#include +Q_IMPORT_PLUGIN(qcncodecs) +Q_IMPORT_PLUGIN(qjpcodecs) +Q_IMPORT_PLUGIN(qtwcodecs) +Q_IMPORT_PLUGIN(qkrcodecs) +#endif + +// This is all you need to run all the tests +int main(int argc, char *argv[]) +{ + bool fInvalid = false; + + // Don't remove this, it's needed to access + // QCoreApplication:: in the tests + QCoreApplication app(argc, argv); + app.setApplicationName("Bitcoin-Qt-test"); + + URITests test1; + if (QTest::qExec(&test1) != 0) + fInvalid = true; +#ifdef ENABLE_WALLET + PaymentServerTests test2; + if (QTest::qExec(&test2) != 0) + fInvalid = true; +#endif + + return fInvalid; +} diff --git a/src/qt/test/uritests.cpp b/src/qt/test/uritests.cpp index 802d7471..f621b85a 100644 --- a/src/qt/test/uritests.cpp +++ b/src/qt/test/uritests.cpp @@ -1,6 +1,7 @@ #include "uritests.h" -#include "../guiutil.h" -#include "../walletmodel.h" + +#include "guiutil.h" +#include "walletmodel.h" #include @@ -8,55 +9,54 @@ void URITests::uriTests() { SendCoinsRecipient rv; QUrl uri; - uri.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?req-dontexist=")); + uri.setUrl(QString("myriadcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?req-dontexist=")); QVERIFY(!GUIUtil::parseBitcoinURI(uri, &rv)); - uri.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?dontexist=")); + uri.setUrl(QString("myriadcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?dontexist=")); QVERIFY(GUIUtil::parseBitcoinURI(uri, &rv)); QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W")); QVERIFY(rv.label == QString()); QVERIFY(rv.amount == 0); - uri.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?label=Wikipedia Example Address")); + uri.setUrl(QString("myriadcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?label=Wikipedia Example Address")); QVERIFY(GUIUtil::parseBitcoinURI(uri, &rv)); QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W")); QVERIFY(rv.label == QString("Wikipedia Example Address")); QVERIFY(rv.amount == 0); - uri.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=0.001")); + uri.setUrl(QString("myriadcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=0.001")); QVERIFY(GUIUtil::parseBitcoinURI(uri, &rv)); QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W")); QVERIFY(rv.label == QString()); QVERIFY(rv.amount == 100000); - uri.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=1.001")); + uri.setUrl(QString("myriadcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=1.001")); QVERIFY(GUIUtil::parseBitcoinURI(uri, &rv)); QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W")); QVERIFY(rv.label == QString()); QVERIFY(rv.amount == 100100000); - uri.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=100&label=Wikipedia Example")); + uri.setUrl(QString("myriadcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=100&label=Wikipedia Example")); QVERIFY(GUIUtil::parseBitcoinURI(uri, &rv)); QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W")); QVERIFY(rv.amount == 10000000000LL); QVERIFY(rv.label == QString("Wikipedia Example")); - uri.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?message=Wikipedia Example Address")); + uri.setUrl(QString("myriadcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?message=Wikipedia Example Address")); QVERIFY(GUIUtil::parseBitcoinURI(uri, &rv)); QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W")); QVERIFY(rv.label == QString()); - QVERIFY(GUIUtil::parseBitcoinURI("bitcoin://175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?message=Wikipedia Example Address", &rv)); + QVERIFY(GUIUtil::parseBitcoinURI("myriadcoin://175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?message=Wikipedia Example Address", &rv)); QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W")); QVERIFY(rv.label == QString()); - // We currently don't implement the message parameter (ok, yea, we break spec...) - uri.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?req-message=Wikipedia Example Address")); + uri.setUrl(QString("myriadcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?req-message=Wikipedia Example Address")); + QVERIFY(GUIUtil::parseBitcoinURI(uri, &rv)); + + uri.setUrl(QString("myriadcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=1,000&label=Wikipedia Example")); QVERIFY(!GUIUtil::parseBitcoinURI(uri, &rv)); - uri.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=1,000&label=Wikipedia Example")); - QVERIFY(!GUIUtil::parseBitcoinURI(uri, &rv)); - - uri.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=1,000.0&label=Wikipedia Example")); + uri.setUrl(QString("myriadcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=1,000.0&label=Wikipedia Example")); QVERIFY(!GUIUtil::parseBitcoinURI(uri, &rv)); } diff --git a/src/qt/test/uritests.h b/src/qt/test/uritests.h index 1237516e..17d4280a 100644 --- a/src/qt/test/uritests.h +++ b/src/qt/test/uritests.h @@ -1,8 +1,8 @@ #ifndef URITESTS_H #define URITESTS_H -#include #include +#include class URITests : public QObject { diff --git a/src/qt/trafficgraphwidget.cpp b/src/qt/trafficgraphwidget.cpp new file mode 100644 index 00000000..74565bb6 --- /dev/null +++ b/src/qt/trafficgraphwidget.cpp @@ -0,0 +1,173 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "trafficgraphwidget.h" +#include "clientmodel.h" + +#include +#include +#include + +#include + +#define DESIRED_SAMPLES 800 + +#define XMARGIN 10 +#define YMARGIN 10 + +TrafficGraphWidget::TrafficGraphWidget(QWidget *parent) : + QWidget(parent), + timer(0), + fMax(0.0f), + nMins(0), + vSamplesIn(), + vSamplesOut(), + nLastBytesIn(0), + nLastBytesOut(0), + clientModel(0) +{ + timer = new QTimer(this); + connect(timer, SIGNAL(timeout()), SLOT(updateRates())); +} + +void TrafficGraphWidget::setClientModel(ClientModel *model) +{ + clientModel = model; + if(model) { + nLastBytesIn = model->getTotalBytesRecv(); + nLastBytesOut = model->getTotalBytesSent(); + } +} + +int TrafficGraphWidget::getGraphRangeMins() const +{ + return nMins; +} + +void TrafficGraphWidget::paintPath(QPainterPath &path, QQueue &samples) +{ + int h = height() - YMARGIN * 2, w = width() - XMARGIN * 2; + int sampleCount = samples.size(), x = XMARGIN + w, y; + if(sampleCount > 0) { + path.moveTo(x, YMARGIN + h); + for(int i = 0; i < sampleCount; ++i) { + x = XMARGIN + w - w * i / DESIRED_SAMPLES; + y = YMARGIN + h - (int)(h * samples.at(i) / fMax); + path.lineTo(x, y); + } + path.lineTo(x, YMARGIN + h); + } +} + +void TrafficGraphWidget::paintEvent(QPaintEvent *) +{ + QPainter painter(this); + painter.fillRect(rect(), Qt::black); + + if(fMax <= 0.0f) return; + + QColor axisCol(Qt::gray); + int h = height() - YMARGIN * 2; + painter.setPen(axisCol); + painter.drawLine(XMARGIN, YMARGIN + h, width() - XMARGIN, YMARGIN + h); + + // decide what order of magnitude we are + int base = floor(log10(fMax)); + float val = pow(10.0f, base); + + const QString units = tr("KB/s"); + // draw lines + painter.setPen(axisCol); + painter.drawText(XMARGIN, YMARGIN + h - h * val / fMax, QString("%1 %2").arg(val).arg(units)); + for(float y = val; y < fMax; y += val) { + int yy = YMARGIN + h - h * y / fMax; + painter.drawLine(XMARGIN, yy, width() - XMARGIN, yy); + } + // if we drew 3 or fewer lines, break them up at the next lower order of magnitude + if(fMax / val <= 3.0f) { + axisCol = axisCol.darker(); + val = pow(10.0f, base - 1); + painter.setPen(axisCol); + painter.drawText(XMARGIN, YMARGIN + h - h * val / fMax, QString("%1 %2").arg(val).arg(units)); + int count = 1; + for(float y = val; y < fMax; y += val, count++) { + // don't overwrite lines drawn above + if(count % 10 == 0) + continue; + int yy = YMARGIN + h - h * y / fMax; + painter.drawLine(XMARGIN, yy, width() - XMARGIN, yy); + } + } + + if(!vSamplesIn.empty()) { + QPainterPath p; + paintPath(p, vSamplesIn); + painter.fillPath(p, QColor(0, 255, 0, 128)); + painter.setPen(Qt::green); + painter.drawPath(p); + } + if(!vSamplesOut.empty()) { + QPainterPath p; + paintPath(p, vSamplesOut); + painter.fillPath(p, QColor(255, 0, 0, 128)); + painter.setPen(Qt::red); + painter.drawPath(p); + } +} + +void TrafficGraphWidget::updateRates() +{ + if(!clientModel) return; + + quint64 bytesIn = clientModel->getTotalBytesRecv(), + bytesOut = clientModel->getTotalBytesSent(); + float inRate = (bytesIn - nLastBytesIn) / 1024.0f * 1000 / timer->interval(); + float outRate = (bytesOut - nLastBytesOut) / 1024.0f * 1000 / timer->interval(); + vSamplesIn.push_front(inRate); + vSamplesOut.push_front(outRate); + nLastBytesIn = bytesIn; + nLastBytesOut = bytesOut; + + while(vSamplesIn.size() > DESIRED_SAMPLES) { + vSamplesIn.pop_back(); + } + while(vSamplesOut.size() > DESIRED_SAMPLES) { + vSamplesOut.pop_back(); + } + + float tmax = 0.0f; + foreach(float f, vSamplesIn) { + if(f > tmax) tmax = f; + } + foreach(float f, vSamplesOut) { + if(f > tmax) tmax = f; + } + fMax = tmax; + update(); +} + +void TrafficGraphWidget::setGraphRangeMins(int mins) +{ + nMins = mins; + int msecsPerSample = nMins * 60 * 1000 / DESIRED_SAMPLES; + timer->stop(); + timer->setInterval(msecsPerSample); + + clear(); +} + +void TrafficGraphWidget::clear() +{ + timer->stop(); + + vSamplesOut.clear(); + vSamplesIn.clear(); + fMax = 0.0f; + + if(clientModel) { + nLastBytesIn = clientModel->getTotalBytesRecv(); + nLastBytesOut = clientModel->getTotalBytesSent(); + } + timer->start(); +} diff --git a/src/qt/trafficgraphwidget.h b/src/qt/trafficgraphwidget.h new file mode 100644 index 00000000..efab6e7f --- /dev/null +++ b/src/qt/trafficgraphwidget.h @@ -0,0 +1,48 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef TRAFFICGRAPHWIDGET_H +#define TRAFFICGRAPHWIDGET_H + +#include +#include + +class ClientModel; + +QT_BEGIN_NAMESPACE +class QPaintEvent; +class QTimer; +QT_END_NAMESPACE + +class TrafficGraphWidget : public QWidget +{ + Q_OBJECT + +public: + explicit TrafficGraphWidget(QWidget *parent = 0); + void setClientModel(ClientModel *model); + int getGraphRangeMins() const; + +protected: + void paintEvent(QPaintEvent *); + +public slots: + void updateRates(); + void setGraphRangeMins(int mins); + void clear(); + +private: + void paintPath(QPainterPath &path, QQueue &samples); + + QTimer *timer; + float fMax; + int nMins; + QQueue vSamplesIn; + QQueue vSamplesOut; + quint64 nLastBytesIn; + quint64 nLastBytesOut; + ClientModel *clientModel; +}; + +#endif // TRAFFICGRAPHWIDGET_H diff --git a/src/qt/transactiondesc.cpp b/src/qt/transactiondesc.cpp index aeef721c..45fb3d40 100644 --- a/src/qt/transactiondesc.cpp +++ b/src/qt/transactiondesc.cpp @@ -1,28 +1,39 @@ +// Copyright (c) 2011-2014 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #include "transactiondesc.h" -#include "guiutil.h" #include "bitcoinunits.h" -#include "main.h" -#include "wallet.h" -#include "db.h" -#include "ui_interface.h" -#include "base58.h" +#include "guiutil.h" +#include "base58.h" +#include "db.h" +#include "main.h" +#include "paymentserver.h" +#include "transactionrecord.h" +#include "ui_interface.h" +#include "wallet.h" + +#include #include QString TransactionDesc::FormatTxStatus(const CWalletTx& wtx) { - if (!IsFinalTx(wtx)) + AssertLockHeld(cs_main); + if (!IsFinalTx(wtx, chainActive.Height() + 1)) { if (wtx.nLockTime < LOCKTIME_THRESHOLD) - return tr("Open for %n more block(s)", "", wtx.nLockTime - nBestHeight + 1); + return tr("Open for %n more block(s)", "", wtx.nLockTime - chainActive.Height()); else return tr("Open until %1").arg(GUIUtil::dateTimeStr(wtx.nLockTime)); } else { int nDepth = wtx.GetDepthInMainChain(); - if (GetAdjustedTime() - wtx.nTimeReceived > 2 * 60 && wtx.GetRequestCount() == 0) + if (nDepth < 0) + return tr("conflicted"); + else if (GetAdjustedTime() - wtx.nTimeReceived > 2 * 60 && wtx.GetRequestCount() == 0) return tr("%1/offline").arg(nDepth); else if (nDepth < 6) return tr("%1/unconfirmed").arg(nDepth); @@ -31,244 +42,262 @@ QString TransactionDesc::FormatTxStatus(const CWalletTx& wtx) } } -QString TransactionDesc::toHTML(CWallet *wallet, CWalletTx &wtx) +QString TransactionDesc::toHTML(CWallet *wallet, CWalletTx &wtx, int vout, int unit) { QString strHTML; + LOCK2(cs_main, wallet->cs_wallet); + strHTML.reserve(4000); + strHTML += ""; + + int64_t nTime = wtx.GetTxTime(); + int64_t nCredit = wtx.GetCredit(); + int64_t nDebit = wtx.GetDebit(); + int64_t nNet = nCredit - nDebit; + + strHTML += "" + tr("Status") + ": " + FormatTxStatus(wtx); + int nRequests = wtx.GetRequestCount(); + if (nRequests != -1) { - LOCK(wallet->cs_wallet); - strHTML.reserve(4000); - strHTML += ""; + if (nRequests == 0) + strHTML += tr(", has not been successfully broadcast yet"); + else if (nRequests > 0) + strHTML += tr(", broadcast through %n node(s)", "", nRequests); + } + strHTML += "
"; - int64 nTime = wtx.GetTxTime(); - int64 nCredit = wtx.GetCredit(); - int64 nDebit = wtx.GetDebit(); - int64 nNet = nCredit - nDebit; + strHTML += "" + tr("Date") + ": " + (nTime ? GUIUtil::dateTimeStr(nTime) : "") + "
"; - strHTML += "" + tr("Status") + ": " + FormatTxStatus(wtx); - int nRequests = wtx.GetRequestCount(); - if (nRequests != -1) + // + // From + // + if (wtx.IsCoinBase()) + { + strHTML += "" + tr("Source") + ": " + tr("Generated") + "
"; + } + else if (wtx.mapValue.count("from") && !wtx.mapValue["from"].empty()) + { + // Online transaction + strHTML += "" + tr("From") + ": " + GUIUtil::HtmlEscape(wtx.mapValue["from"]) + "
"; + } + else + { + // Offline transaction + if (nNet > 0) { - if (nRequests == 0) - strHTML += tr(", has not been successfully broadcast yet"); - else if (nRequests > 0) - strHTML += tr(", broadcast through %n node(s)", "", nRequests); - } - strHTML += "
"; - - strHTML += "" + tr("Date") + ": " + (nTime ? GUIUtil::dateTimeStr(nTime) : "") + "
"; - - // - // From - // - if (wtx.IsCoinBase()) - { - strHTML += "" + tr("Source") + ": " + tr("Generated") + "
"; - } - else if (wtx.mapValue.count("from") && !wtx.mapValue["from"].empty()) - { - // Online transaction - strHTML += "" + tr("From") + ": " + GUIUtil::HtmlEscape(wtx.mapValue["from"]) + "
"; - } - else - { - // Offline transaction - if (nNet > 0) - { - // Credit - BOOST_FOREACH(const CTxOut& txout, wtx.vout) - { - if (wallet->IsMine(txout)) - { - CTxDestination address; - if (ExtractDestination(txout.scriptPubKey, address) && IsMine(*wallet, address)) - { - if (wallet->mapAddressBook.count(address)) - { - strHTML += "" + tr("From") + ": " + tr("unknown") + "
"; - strHTML += "" + tr("To") + ": "; - strHTML += GUIUtil::HtmlEscape(CBitcoinAddress(address).ToString()); - if (!wallet->mapAddressBook[address].empty()) - strHTML += " (" + tr("own address") + ", " + tr("label") + ": " + GUIUtil::HtmlEscape(wallet->mapAddressBook[address]) + ")"; - else - strHTML += " (" + tr("own address") + ")"; - strHTML += "
"; - } - } - break; - } - } - } - } - - // - // To - // - if (wtx.mapValue.count("to") && !wtx.mapValue["to"].empty()) - { - // Online transaction - std::string strAddress = wtx.mapValue["to"]; - strHTML += "" + tr("To") + ": "; - CTxDestination dest = CBitcoinAddress(strAddress).Get(); - if (wallet->mapAddressBook.count(dest) && !wallet->mapAddressBook[dest].empty()) - strHTML += GUIUtil::HtmlEscape(wallet->mapAddressBook[dest]) + " "; - strHTML += GUIUtil::HtmlEscape(strAddress) + "
"; - } - - // - // Amount - // - if (wtx.IsCoinBase() && nCredit == 0) - { - // - // Coinbase - // - int64 nUnmatured = 0; - BOOST_FOREACH(const CTxOut& txout, wtx.vout) - nUnmatured += wallet->GetCredit(txout); - strHTML += "" + tr("Credit") + ": "; - if (wtx.IsInMainChain()) - strHTML += BitcoinUnits::formatWithUnit(BitcoinUnits::BTC, nUnmatured)+ " (" + tr("matures in %n more block(s)", "", wtx.GetBlocksToMaturity()) + ")"; - else - strHTML += "(" + tr("not accepted") + ")"; - strHTML += "
"; - } - else if (nNet > 0) - { - // // Credit - // - strHTML += "" + tr("Credit") + ": " + BitcoinUnits::formatWithUnit(BitcoinUnits::BTC, nNet) + "
"; - } - else - { - bool fAllFromMe = true; - BOOST_FOREACH(const CTxIn& txin, wtx.vin) - fAllFromMe = fAllFromMe && wallet->IsMine(txin); - - bool fAllToMe = true; BOOST_FOREACH(const CTxOut& txout, wtx.vout) - fAllToMe = fAllToMe && wallet->IsMine(txout); - - if (fAllFromMe) { - // - // Debit - // - BOOST_FOREACH(const CTxOut& txout, wtx.vout) + if (wallet->IsMine(txout)) { - if (wallet->IsMine(txout)) - continue; - - if (!wtx.mapValue.count("to") || wtx.mapValue["to"].empty()) + CTxDestination address; + if (ExtractDestination(txout.scriptPubKey, address) && IsMine(*wallet, address)) { - // Offline transaction - CTxDestination address; - if (ExtractDestination(txout.scriptPubKey, address)) + if (wallet->mapAddressBook.count(address)) { + strHTML += "" + tr("From") + ": " + tr("unknown") + "
"; strHTML += "" + tr("To") + ": "; - if (wallet->mapAddressBook.count(address) && !wallet->mapAddressBook[address].empty()) - strHTML += GUIUtil::HtmlEscape(wallet->mapAddressBook[address]) + " "; strHTML += GUIUtil::HtmlEscape(CBitcoinAddress(address).ToString()); + if (!wallet->mapAddressBook[address].name.empty()) + strHTML += " (" + tr("own address") + ", " + tr("label") + ": " + GUIUtil::HtmlEscape(wallet->mapAddressBook[address].name) + ")"; + else + strHTML += " (" + tr("own address") + ")"; strHTML += "
"; } } - - strHTML += "" + tr("Debit") + ": " + BitcoinUnits::formatWithUnit(BitcoinUnits::BTC, -txout.nValue) + "
"; + break; } - - if (fAllToMe) - { - // Payment to self - int64 nChange = wtx.GetChange(); - int64 nValue = nCredit - nChange; - strHTML += "" + tr("Debit") + ": " + BitcoinUnits::formatWithUnit(BitcoinUnits::BTC, -nValue) + "
"; - strHTML += "" + tr("Credit") + ": " + BitcoinUnits::formatWithUnit(BitcoinUnits::BTC, nValue) + "
"; - } - - int64 nTxFee = nDebit - GetValueOut(wtx); - if (nTxFee > 0) - strHTML += "" + tr("Transaction fee") + ": " + BitcoinUnits::formatWithUnit(BitcoinUnits::BTC, -nTxFee) + "
"; - } - else - { - // - // Mixed debit transaction - // - BOOST_FOREACH(const CTxIn& txin, wtx.vin) - if (wallet->IsMine(txin)) - strHTML += "" + tr("Debit") + ": " + BitcoinUnits::formatWithUnit(BitcoinUnits::BTC, -wallet->GetDebit(txin)) + "
"; - BOOST_FOREACH(const CTxOut& txout, wtx.vout) - if (wallet->IsMine(txout)) - strHTML += "" + tr("Credit") + ": " + BitcoinUnits::formatWithUnit(BitcoinUnits::BTC, wallet->GetCredit(txout)) + "
"; } } + } - strHTML += "" + tr("Net amount") + ": " + BitcoinUnits::formatWithUnit(BitcoinUnits::BTC, nNet, true) + "
"; + // + // To + // + if (wtx.mapValue.count("to") && !wtx.mapValue["to"].empty()) + { + // Online transaction + std::string strAddress = wtx.mapValue["to"]; + strHTML += "" + tr("To") + ": "; + CTxDestination dest = CBitcoinAddress(strAddress).Get(); + if (wallet->mapAddressBook.count(dest) && !wallet->mapAddressBook[dest].name.empty()) + strHTML += GUIUtil::HtmlEscape(wallet->mapAddressBook[dest].name) + " "; + strHTML += GUIUtil::HtmlEscape(strAddress) + "
"; + } + // + // Amount + // + if (wtx.IsCoinBase() && nCredit == 0) + { // - // Message + // Coinbase // - if (wtx.mapValue.count("message") && !wtx.mapValue["message"].empty()) - strHTML += "
" + tr("Message") + ":
" + GUIUtil::HtmlEscape(wtx.mapValue["message"], true) + "
"; - if (wtx.mapValue.count("comment") && !wtx.mapValue["comment"].empty()) - strHTML += "
" + tr("Comment") + ":
" + GUIUtil::HtmlEscape(wtx.mapValue["comment"], true) + "
"; - - strHTML += "" + tr("Transaction ID") + ": " + wtx.GetHash().ToString().c_str() + "
"; - - if (wtx.IsCoinBase()) - strHTML += "
" + tr("Generated coins must mature 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to \"not accepted\" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.") + "
"; - + int64_t nUnmatured = 0; + BOOST_FOREACH(const CTxOut& txout, wtx.vout) + nUnmatured += wallet->GetCredit(txout); + strHTML += "" + tr("Credit") + ": "; + if (wtx.IsInMainChain()) + strHTML += BitcoinUnits::formatWithUnit(unit, nUnmatured)+ " (" + tr("matures in %n more block(s)", "", wtx.GetBlocksToMaturity()) + ")"; + else + strHTML += "(" + tr("not accepted") + ")"; + strHTML += "
"; + } + else if (nNet > 0) + { // - // Debug view + // Credit // - if (fDebug) + strHTML += "" + tr("Credit") + ": " + BitcoinUnits::formatWithUnit(unit, nNet) + "
"; + } + else + { + bool fAllFromMe = true; + BOOST_FOREACH(const CTxIn& txin, wtx.vin) + fAllFromMe = fAllFromMe && wallet->IsMine(txin); + + bool fAllToMe = true; + BOOST_FOREACH(const CTxOut& txout, wtx.vout) + fAllToMe = fAllToMe && wallet->IsMine(txout); + + if (fAllFromMe) { - strHTML += "

" + tr("Debug information") + "

"; - BOOST_FOREACH(const CTxIn& txin, wtx.vin) - if(wallet->IsMine(txin)) - strHTML += "" + tr("Debit") + ": " + BitcoinUnits::formatWithUnit(BitcoinUnits::BTC, -wallet->GetDebit(txin)) + "
"; + // + // Debit + // BOOST_FOREACH(const CTxOut& txout, wtx.vout) - if(wallet->IsMine(txout)) - strHTML += "" + tr("Credit") + ": " + BitcoinUnits::formatWithUnit(BitcoinUnits::BTC, wallet->GetCredit(txout)) + "
"; - - strHTML += "
" + tr("Transaction") + ":
"; - strHTML += GUIUtil::HtmlEscape(wtx.ToString(), true); - - strHTML += "
" + tr("Inputs") + ":"; - strHTML += "
    "; - { - LOCK(wallet->cs_wallet); - BOOST_FOREACH(const CTxIn& txin, wtx.vin) - { - COutPoint prevout = txin.prevout; + if (wallet->IsMine(txout)) + continue; - CCoins prev; - if(pcoinsTip->GetCoins(prevout.hash, prev)) + if (!wtx.mapValue.count("to") || wtx.mapValue["to"].empty()) + { + // Offline transaction + CTxDestination address; + if (ExtractDestination(txout.scriptPubKey, address)) { - if (prevout.n < prev.vout.size()) - { - strHTML += "
  • "; - const CTxOut &vout = prev.vout[prevout.n]; - CTxDestination address; - if (ExtractDestination(vout.scriptPubKey, address)) - { - if (wallet->mapAddressBook.count(address) && !wallet->mapAddressBook[address].empty()) - strHTML += GUIUtil::HtmlEscape(wallet->mapAddressBook[address]) + " "; - strHTML += QString::fromStdString(CBitcoinAddress(address).ToString()); - } - strHTML = strHTML + " " + tr("Amount") + "=" + BitcoinUnits::formatWithUnit(BitcoinUnits::BTC, vout.nValue); - strHTML = strHTML + " IsMine=" + (wallet->IsMine(vout) ? tr("true") : tr("false")) + "
  • "; - } + strHTML += "" + tr("To") + ": "; + if (wallet->mapAddressBook.count(address) && !wallet->mapAddressBook[address].name.empty()) + strHTML += GUIUtil::HtmlEscape(wallet->mapAddressBook[address].name) + " "; + strHTML += GUIUtil::HtmlEscape(CBitcoinAddress(address).ToString()); + strHTML += "
    "; } } + + strHTML += "" + tr("Debit") + ": " + BitcoinUnits::formatWithUnit(unit, -txout.nValue) + "
    "; } - strHTML += "
"; + if (fAllToMe) + { + // Payment to self + int64_t nChange = wtx.GetChange(); + int64_t nValue = nCredit - nChange; + strHTML += "" + tr("Debit") + ": " + BitcoinUnits::formatWithUnit(unit, -nValue) + "
"; + strHTML += "" + tr("Credit") + ": " + BitcoinUnits::formatWithUnit(unit, nValue) + "
"; + } + + int64_t nTxFee = nDebit - wtx.GetValueOut(); + if (nTxFee > 0) + strHTML += "" + tr("Transaction fee") + ": " + BitcoinUnits::formatWithUnit(unit, -nTxFee) + "
"; + } + else + { + // + // Mixed debit transaction + // + BOOST_FOREACH(const CTxIn& txin, wtx.vin) + if (wallet->IsMine(txin)) + strHTML += "" + tr("Debit") + ": " + BitcoinUnits::formatWithUnit(unit, -wallet->GetDebit(txin)) + "
"; + BOOST_FOREACH(const CTxOut& txout, wtx.vout) + if (wallet->IsMine(txout)) + strHTML += "" + tr("Credit") + ": " + BitcoinUnits::formatWithUnit(unit, wallet->GetCredit(txout)) + "
"; + } + } + + strHTML += "" + tr("Net amount") + ": " + BitcoinUnits::formatWithUnit(unit, nNet, true) + "
"; + + // + // Message + // + if (wtx.mapValue.count("message") && !wtx.mapValue["message"].empty()) + strHTML += "
" + tr("Message") + ":
" + GUIUtil::HtmlEscape(wtx.mapValue["message"], true) + "
"; + if (wtx.mapValue.count("comment") && !wtx.mapValue["comment"].empty()) + strHTML += "
" + tr("Comment") + ":
" + GUIUtil::HtmlEscape(wtx.mapValue["comment"], true) + "
"; + + strHTML += "" + tr("Transaction ID") + ": " + TransactionRecord::formatSubTxId(wtx.GetHash(), vout) + "
"; + + // Message from normal bitcoin:URI (bitcoin:123...?message=example) + foreach (const PAIRTYPE(string, string)& r, wtx.vOrderForm) + if (r.first == "Message") + strHTML += "
" + tr("Message") + ":
" + GUIUtil::HtmlEscape(r.second, true) + "
"; + + // + // PaymentRequest info: + // + foreach (const PAIRTYPE(string, string)& r, wtx.vOrderForm) + { + if (r.first == "PaymentRequest") + { + PaymentRequestPlus req; + req.parse(QByteArray::fromRawData(r.second.data(), r.second.size())); + QString merchant; + if (req.getMerchant(PaymentServer::getCertStore(), merchant)) + strHTML += "" + tr("Merchant") + ": " + GUIUtil::HtmlEscape(merchant) + "
"; + } + } + + if (wtx.IsCoinBase()) + { + quint32 numBlocksToMaturity = COINBASE_MATURITY + 1; + strHTML += "
" + tr("Generated coins must mature %1 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to \"not accepted\" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.").arg(QString::number(numBlocksToMaturity)) + "
"; + } + + // + // Debug view + // + if (fDebug) + { + strHTML += "

" + tr("Debug information") + "

"; + BOOST_FOREACH(const CTxIn& txin, wtx.vin) + if(wallet->IsMine(txin)) + strHTML += "" + tr("Debit") + ": " + BitcoinUnits::formatWithUnit(unit, -wallet->GetDebit(txin)) + "
"; + BOOST_FOREACH(const CTxOut& txout, wtx.vout) + if(wallet->IsMine(txout)) + strHTML += "" + tr("Credit") + ": " + BitcoinUnits::formatWithUnit(unit, wallet->GetCredit(txout)) + "
"; + + strHTML += "
" + tr("Transaction") + ":
"; + strHTML += GUIUtil::HtmlEscape(wtx.ToString(), true); + + strHTML += "
" + tr("Inputs") + ":"; + strHTML += "
    "; + + BOOST_FOREACH(const CTxIn& txin, wtx.vin) + { + COutPoint prevout = txin.prevout; + + CCoins prev; + if(pcoinsTip->GetCoins(prevout.hash, prev)) + { + if (prevout.n < prev.vout.size()) + { + strHTML += "
  • "; + const CTxOut &vout = prev.vout[prevout.n]; + CTxDestination address; + if (ExtractDestination(vout.scriptPubKey, address)) + { + if (wallet->mapAddressBook.count(address) && !wallet->mapAddressBook[address].name.empty()) + strHTML += GUIUtil::HtmlEscape(wallet->mapAddressBook[address].name) + " "; + strHTML += QString::fromStdString(CBitcoinAddress(address).ToString()); + } + strHTML = strHTML + " " + tr("Amount") + "=" + BitcoinUnits::formatWithUnit(unit, vout.nValue); + strHTML = strHTML + " IsMine=" + (wallet->IsMine(vout) ? tr("true") : tr("false")) + "
  • "; + } + } } - strHTML += "
    "; + strHTML += "
"; } + + strHTML += "
"; return strHTML; } diff --git a/src/qt/transactiondesc.h b/src/qt/transactiondesc.h index cb0dda5b..92d093b3 100644 --- a/src/qt/transactiondesc.h +++ b/src/qt/transactiondesc.h @@ -1,8 +1,12 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef TRANSACTIONDESC_H #define TRANSACTIONDESC_H -#include #include +#include class CWallet; class CWalletTx; @@ -14,7 +18,7 @@ class TransactionDesc: public QObject Q_OBJECT public: - static QString toHTML(CWallet *wallet, CWalletTx &wtx); + static QString toHTML(CWallet *wallet, CWalletTx &wtx, int vout, int unit); private: TransactionDesc() {} diff --git a/src/qt/transactiondescdialog.cpp b/src/qt/transactiondescdialog.cpp index 3bd4808c..5ca575fd 100644 --- a/src/qt/transactiondescdialog.cpp +++ b/src/qt/transactiondescdialog.cpp @@ -1,3 +1,7 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #include "transactiondescdialog.h" #include "ui_transactiondescdialog.h" diff --git a/src/qt/transactiondescdialog.h b/src/qt/transactiondescdialog.h index f7ceacb6..d4719975 100644 --- a/src/qt/transactiondescdialog.h +++ b/src/qt/transactiondescdialog.h @@ -1,3 +1,7 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef TRANSACTIONDESCDIALOG_H #define TRANSACTIONDESCDIALOG_H diff --git a/src/qt/transactionfilterproxy.cpp b/src/qt/transactionfilterproxy.cpp index 068e5550..f9546fdd 100644 --- a/src/qt/transactionfilterproxy.cpp +++ b/src/qt/transactionfilterproxy.cpp @@ -1,11 +1,16 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #include "transactionfilterproxy.h" #include "transactiontablemodel.h" - -#include +#include "transactionrecord.h" #include +#include + // Earliest date that can be represented (far in the past) const QDateTime TransactionFilterProxy::MIN_DATE = QDateTime::fromTime_t(0); // Last date that can be represented (far in the future) @@ -18,7 +23,8 @@ TransactionFilterProxy::TransactionFilterProxy(QObject *parent) : addrPrefix(), typeFilter(ALL_TYPES), minAmount(0), - limitRows(-1) + limitRows(-1), + showInactive(true) { } @@ -31,7 +37,10 @@ bool TransactionFilterProxy::filterAcceptsRow(int sourceRow, const QModelIndex & QString address = index.data(TransactionTableModel::AddressRole).toString(); QString label = index.data(TransactionTableModel::LabelRole).toString(); qint64 amount = llabs(index.data(TransactionTableModel::AmountRole).toLongLong()); + int status = index.data(TransactionTableModel::StatusRole).toInt(); + if(!showInactive && status == TransactionStatus::Conflicted) + return false; if(!(TYPE(type) & typeFilter)) return false; if(datetime < dateFrom || datetime > dateTo) @@ -74,6 +83,12 @@ void TransactionFilterProxy::setLimit(int limit) this->limitRows = limit; } +void TransactionFilterProxy::setShowInactive(bool showInactive) +{ + this->showInactive = showInactive; + invalidateFilter(); +} + int TransactionFilterProxy::rowCount(const QModelIndex &parent) const { if(limitRows != -1) diff --git a/src/qt/transactionfilterproxy.h b/src/qt/transactionfilterproxy.h index 1aea85a0..9919bc3f 100644 --- a/src/qt/transactionfilterproxy.h +++ b/src/qt/transactionfilterproxy.h @@ -1,8 +1,12 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef TRANSACTIONFILTERPROXY_H #define TRANSACTIONFILTERPROXY_H -#include #include +#include /** Filter the transaction list according to pre-specified rules. */ class TransactionFilterProxy : public QSortFilterProxyModel @@ -32,6 +36,9 @@ public: /** Set maximum number of rows returned, -1 if unlimited. */ void setLimit(int limit); + /** Set whether to show conflicted transactions. */ + void setShowInactive(bool showInactive); + int rowCount(const QModelIndex &parent = QModelIndex()) const; protected: @@ -44,6 +51,7 @@ private: quint32 typeFilter; qint64 minAmount; int limitRows; + bool showInactive; }; #endif // TRANSACTIONFILTERPROXY_H diff --git a/src/qt/transactionrecord.cpp b/src/qt/transactionrecord.cpp index e9545087..5a3728f4 100644 --- a/src/qt/transactionrecord.cpp +++ b/src/qt/transactionrecord.cpp @@ -1,7 +1,13 @@ +// Copyright (c) 2011-2014 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #include "transactionrecord.h" -#include "wallet.h" #include "base58.h" +#include "wallet.h" + +#include /* Return positive answer if transaction should be shown in list. */ @@ -24,10 +30,10 @@ bool TransactionRecord::showTransaction(const CWalletTx &wtx) QList TransactionRecord::decomposeTransaction(const CWallet *wallet, const CWalletTx &wtx) { QList parts; - int64 nTime = wtx.GetTxTime(); - int64 nCredit = wtx.GetCredit(true); - int64 nDebit = wtx.GetDebit(); - int64 nNet = nCredit - nDebit; + int64_t nTime = wtx.GetTxTime(); + int64_t nCredit = wtx.GetCredit(true); + int64_t nDebit = wtx.GetDebit(); + int64_t nNet = nCredit - nDebit; uint256 hash = wtx.GetHash(); std::map mapValue = wtx.mapValue; @@ -79,7 +85,7 @@ QList TransactionRecord::decomposeTransaction(const CWallet * if (fAllFromMe && fAllToMe) { // Payment to self - int64 nChange = wtx.GetChange(); + int64_t nChange = wtx.GetChange(); parts.append(TransactionRecord(hash, nTime, TransactionRecord::SendToSelf, "", -(nDebit - nChange), nCredit - nChange)); @@ -89,7 +95,7 @@ QList TransactionRecord::decomposeTransaction(const CWallet * // // Debit // - int64 nTxFee = nDebit - GetValueOut(wtx); + int64_t nTxFee = nDebit - wtx.GetValueOut(); for (unsigned int nOut = 0; nOut < wtx.vout.size(); nOut++) { @@ -118,7 +124,7 @@ QList TransactionRecord::decomposeTransaction(const CWallet * sub.address = mapValue["to"]; } - int64 nValue = txout.nValue; + int64_t nValue = txout.nValue; /* Add fee to first output */ if (nTxFee > 0) { @@ -144,6 +150,7 @@ QList TransactionRecord::decomposeTransaction(const CWallet * void TransactionRecord::updateStatus(const CWalletTx &wtx) { + AssertLockHeld(cs_main); // Determine transaction status // Find the block the tx is in @@ -158,16 +165,16 @@ void TransactionRecord::updateStatus(const CWalletTx &wtx) (wtx.IsCoinBase() ? 1 : 0), wtx.nTimeReceived, idx); - status.confirmed = wtx.IsConfirmed(); + status.countsForBalance = wtx.IsTrusted() && !(wtx.GetBlocksToMaturity() > 0); status.depth = wtx.GetDepthInMainChain(); - status.cur_num_blocks = nBestHeight; + status.cur_num_blocks = chainActive.Height(); - if (!IsFinalTx(wtx)) + if (!IsFinalTx(wtx, chainActive.Height() + 1)) { if (wtx.nLockTime < LOCKTIME_THRESHOLD) { status.status = TransactionStatus::OpenUntilBlock; - status.open_for = wtx.nLockTime - nBestHeight + 1; + status.open_for = wtx.nLockTime - chainActive.Height(); } else { @@ -175,29 +182,12 @@ void TransactionRecord::updateStatus(const CWalletTx &wtx) status.open_for = wtx.nLockTime; } } - else - { - if (GetAdjustedTime() - wtx.nTimeReceived > 2 * 60 && wtx.GetRequestCount() == 0) - { - status.status = TransactionStatus::Offline; - } - else if (status.depth < NumConfirmations) - { - status.status = TransactionStatus::Unconfirmed; - } - else - { - status.status = TransactionStatus::HaveConfirmations; - } - } - // For generated transactions, determine maturity - if(type == TransactionRecord::Generated) + else if(type == TransactionRecord::Generated) { - int64 nCredit = wtx.GetCredit(true); - if (nCredit == 0) + if (wtx.GetBlocksToMaturity() > 0) { - status.maturity = TransactionStatus::Immature; + status.status = TransactionStatus::Immature; if (wtx.IsInMainChain()) { @@ -205,27 +195,57 @@ void TransactionRecord::updateStatus(const CWalletTx &wtx) // Check if the block was requested by anyone if (GetAdjustedTime() - wtx.nTimeReceived > 2 * 60 && wtx.GetRequestCount() == 0) - status.maturity = TransactionStatus::MaturesWarning; + status.status = TransactionStatus::MaturesWarning; } else { - status.maturity = TransactionStatus::NotAccepted; + status.status = TransactionStatus::NotAccepted; } } else { - status.maturity = TransactionStatus::Mature; + status.status = TransactionStatus::Confirmed; } } + else + { + if (status.depth < 0) + { + status.status = TransactionStatus::Conflicted; + } + else if (GetAdjustedTime() - wtx.nTimeReceived > 2 * 60 && wtx.GetRequestCount() == 0) + { + status.status = TransactionStatus::Offline; + } + else if (status.depth == 0) + { + status.status = TransactionStatus::Unconfirmed; + } + else if (status.depth < RecommendedNumConfirmations) + { + status.status = TransactionStatus::Confirming; + } + else + { + status.status = TransactionStatus::Confirmed; + } + } + } bool TransactionRecord::statusUpdateNeeded() { - return status.cur_num_blocks != nBestHeight; + AssertLockHeld(cs_main); + return status.cur_num_blocks != chainActive.Height(); } -std::string TransactionRecord::getTxID() +QString TransactionRecord::getTxID() const { - return hash.ToString() + strprintf("-%03d", idx); + return formatSubTxId(hash, idx); +} + +QString TransactionRecord::formatSubTxId(const uint256 &hash, int vout) +{ + return QString::fromStdString(hash.ToString() + strprintf("-%03d", vout)); } diff --git a/src/qt/transactionrecord.h b/src/qt/transactionrecord.h index d760d47c..af6fd403 100644 --- a/src/qt/transactionrecord.h +++ b/src/qt/transactionrecord.h @@ -1,9 +1,14 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef TRANSACTIONRECORD_H #define TRANSACTIONRECORD_H #include "uint256.h" #include +#include class CWallet; class CWalletTx; @@ -14,40 +19,40 @@ class TransactionStatus { public: TransactionStatus(): - confirmed(false), sortKey(""), maturity(Mature), + countsForBalance(false), sortKey(""), matures_in(0), status(Offline), depth(0), open_for(0), cur_num_blocks(-1) { } - enum Maturity - { - Immature, - Mature, - MaturesWarning, /**< Transaction will likely not mature because no nodes have confirmed */ - NotAccepted - }; - enum Status { - OpenUntilDate, - OpenUntilBlock, - Offline, - Unconfirmed, - HaveConfirmations + Confirmed, /**< Have 6 or more confirmations (normal tx) or fully mature (mined tx) **/ + /// Normal (sent/received) transactions + OpenUntilDate, /**< Transaction not yet final, waiting for date */ + OpenUntilBlock, /**< Transaction not yet final, waiting for block */ + Offline, /**< Not sent to any other nodes **/ + Unconfirmed, /**< Not yet mined into a block **/ + Confirming, /**< Confirmed, but waiting for the recommended number of confirmations **/ + Conflicted, /**< Conflicts with other transaction or mempool **/ + /// Generated (mined) transactions + Immature, /**< Mined but waiting for maturity */ + MaturesWarning, /**< Transaction will likely not mature because no nodes have confirmed */ + NotAccepted /**< Mined but not accepted */ }; - bool confirmed; + /// Transaction counts towards available balance + bool countsForBalance; + /// Sorting key based on status std::string sortKey; /** @name Generated (mined) transactions @{*/ - Maturity maturity; int matures_in; /**@}*/ /** @name Reported status @{*/ Status status; - int64 depth; - int64 open_for; /**< Timestamp if status==OpenUntilDate, otherwise number + qint64 depth; + qint64 open_for; /**< Timestamp if status==OpenUntilDate, otherwise number of additional blocks that need to be mined before finalization */ /**@}*/ @@ -73,23 +78,23 @@ public: SendToSelf }; - /** Number of confirmation needed for transaction */ - static const int NumConfirmations = 6; + /** Number of confirmation recommended for accepting a transaction */ + static const int RecommendedNumConfirmations = 6; TransactionRecord(): hash(), time(0), type(Other), address(""), debit(0), credit(0), idx(0) { } - TransactionRecord(uint256 hash, int64 time): + TransactionRecord(uint256 hash, qint64 time): hash(hash), time(time), type(Other), address(""), debit(0), credit(0), idx(0) { } - TransactionRecord(uint256 hash, int64 time, + TransactionRecord(uint256 hash, qint64 time, Type type, const std::string &address, - int64 debit, int64 credit): + qint64 debit, qint64 credit): hash(hash), time(time), type(type), address(address), debit(debit), credit(credit), idx(0) { @@ -103,11 +108,11 @@ public: /** @name Immutable transaction attributes @{*/ uint256 hash; - int64 time; + qint64 time; Type type; std::string address; - int64 debit; - int64 credit; + qint64 debit; + qint64 credit; /**@}*/ /** Subtransaction index, for sort key */ @@ -117,7 +122,10 @@ public: TransactionStatus status; /** Return the unique identifier for this transaction (part) */ - std::string getTxID(); + QString getTxID() const; + + /** Format subtransaction id */ + static QString formatSubTxId(const uint256 &hash, int vout); /** Update status from core wallet tx. */ diff --git a/src/qt/transactiontablemodel.cpp b/src/qt/transactiontablemodel.cpp index baf1e164..8cf2b0a1 100644 --- a/src/qt/transactiontablemodel.cpp +++ b/src/qt/transactiontablemodel.cpp @@ -1,30 +1,37 @@ +// Copyright (c) 2011-2014 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #include "transactiontablemodel.h" -#include "guiutil.h" -#include "transactionrecord.h" -#include "guiconstants.h" -#include "transactiondesc.h" -#include "walletmodel.h" -#include "optionsmodel.h" #include "addresstablemodel.h" #include "bitcoinunits.h" +#include "guiconstants.h" +#include "guiutil.h" +#include "optionsmodel.h" +#include "transactiondesc.h" +#include "transactionrecord.h" +#include "walletmodel.h" +#include "main.h" +#include "sync.h" +#include "uint256.h" +#include "util.h" #include "wallet.h" -#include "ui_interface.h" -#include #include -#include -#include #include +#include +#include +#include // Amount column is right-aligned it contains numbers static int column_alignments[] = { - Qt::AlignLeft|Qt::AlignVCenter, - Qt::AlignLeft|Qt::AlignVCenter, - Qt::AlignLeft|Qt::AlignVCenter, - Qt::AlignLeft|Qt::AlignVCenter, - Qt::AlignRight|Qt::AlignVCenter + Qt::AlignLeft|Qt::AlignVCenter, /* status */ + Qt::AlignLeft|Qt::AlignVCenter, /* date */ + Qt::AlignLeft|Qt::AlignVCenter, /* type */ + Qt::AlignLeft|Qt::AlignVCenter, /* address */ + Qt::AlignRight|Qt::AlignVCenter /* amount */ }; // Comparison operator for sort/binary search of model tx list @@ -48,11 +55,12 @@ struct TxLessThan class TransactionTablePriv { public: - TransactionTablePriv(CWallet *wallet, TransactionTableModel *parent): - wallet(wallet), - parent(parent) + TransactionTablePriv(CWallet *wallet, TransactionTableModel *parent) : + wallet(wallet), + parent(parent) { } + CWallet *wallet; TransactionTableModel *parent; @@ -66,10 +74,10 @@ public: */ void refreshWallet() { - OutputDebugStringF("refreshWallet\n"); + qDebug() << "TransactionTablePriv::refreshWallet"; cachedWallet.clear(); { - LOCK(wallet->cs_wallet); + LOCK2(cs_main, wallet->cs_wallet); for(std::map::iterator it = wallet->mapWallet.begin(); it != wallet->mapWallet.end(); ++it) { if(TransactionRecord::showTransaction(it->second)) @@ -85,9 +93,9 @@ public: */ void updateWallet(const uint256 &hash, int status) { - OutputDebugStringF("updateWallet %s %i\n", hash.ToString().c_str(), status); + qDebug() << "TransactionTablePriv::updateWallet : " + QString::fromStdString(hash.ToString()) + " " + QString::number(status); { - LOCK(wallet->cs_wallet); + LOCK2(cs_main, wallet->cs_wallet); // Find transaction in wallet std::map::iterator mi = wallet->mapWallet.find(hash); @@ -113,20 +121,21 @@ public: status = CT_DELETED; /* In model, but want to hide, treat as deleted */ } - OutputDebugStringF(" inWallet=%i inModel=%i Index=%i-%i showTransaction=%i derivedStatus=%i\n", - inWallet, inModel, lowerIndex, upperIndex, showTransaction, status); + qDebug() << " inWallet=" + QString::number(inWallet) + " inModel=" + QString::number(inModel) + + " Index=" + QString::number(lowerIndex) + "-" + QString::number(upperIndex) + + " showTransaction=" + QString::number(showTransaction) + " derivedStatus=" + QString::number(status); switch(status) { case CT_NEW: if(inModel) { - OutputDebugStringF("Warning: updateWallet: Got CT_NEW, but transaction is already in model\n"); + qDebug() << "TransactionTablePriv::updateWallet : Warning: Got CT_NEW, but transaction is already in model"; break; } if(!inWallet) { - OutputDebugStringF("Warning: updateWallet: Got CT_NEW, but transaction is not in wallet\n"); + qDebug() << "TransactionTablePriv::updateWallet : Warning: Got CT_NEW, but transaction is not in wallet"; break; } if(showTransaction) @@ -150,7 +159,7 @@ public: case CT_DELETED: if(!inModel) { - OutputDebugStringF("Warning: updateWallet: Got CT_DELETED, but transaction is not in model\n"); + qDebug() << "TransactionTablePriv::updateWallet : Warning: Got CT_DELETED, but transaction is not in model"; break; } // Removed -- remove entire transaction from table @@ -177,13 +186,19 @@ public: { TransactionRecord *rec = &cachedWallet[idx]; + // Get required locks upfront. This avoids the GUI from getting + // stuck if the core is holding the locks for a longer time - for + // example, during a wallet rescan. + // // If a status update is needed (blocks came in since last check), // update the status of this transaction from the wallet. Otherwise, // simply re-use the cached status. - if(rec->statusUpdateNeeded()) + TRY_LOCK(cs_main, lockMain); + if(lockMain) { + TRY_LOCK(wallet->cs_wallet, lockWallet); + if(lockWallet && rec->statusUpdateNeeded()) { - LOCK(wallet->cs_wallet); std::map::iterator mi = wallet->mapWallet.find(rec->hash); if(mi != wallet->mapWallet.end()) @@ -200,36 +215,30 @@ public: } } - QString describe(TransactionRecord *rec) + QString describe(TransactionRecord *rec, int unit) { { - LOCK(wallet->cs_wallet); + LOCK2(cs_main, wallet->cs_wallet); std::map::iterator mi = wallet->mapWallet.find(rec->hash); if(mi != wallet->mapWallet.end()) { - return TransactionDesc::toHTML(wallet, mi->second); + return TransactionDesc::toHTML(wallet, mi->second, rec->idx, unit); } } return QString(""); } - }; TransactionTableModel::TransactionTableModel(CWallet* wallet, WalletModel *parent): QAbstractTableModel(parent), wallet(wallet), walletModel(parent), - priv(new TransactionTablePriv(wallet, this)), - cachedNumBlocks(0) + priv(new TransactionTablePriv(wallet, this)) { columns << QString() << tr("Date") << tr("Type") << tr("Address") << tr("Amount"); priv->refreshWallet(); - QTimer *timer = new QTimer(this); - connect(timer, SIGNAL(timeout()), this, SLOT(updateConfirmations())); - timer->start(MODEL_UPDATE_DELAY); - connect(walletModel->getOptionsModel(), SIGNAL(displayUnitChanged(int)), this, SLOT(updateDisplayUnit())); } @@ -248,16 +257,12 @@ void TransactionTableModel::updateTransaction(const QString &hash, int status) void TransactionTableModel::updateConfirmations() { - if(nBestHeight != cachedNumBlocks) - { - cachedNumBlocks = nBestHeight; - // Blocks came in since last poll. - // Invalidate status (number of confirmations) and (possibly) description - // for all rows. Qt is smart enough to only actually request the data for the - // visible rows. - emit dataChanged(index(0, Status), index(priv->size()-1, Status)); - emit dataChanged(index(0, ToAddress), index(priv->size()-1, ToAddress)); - } + // Blocks came in since last poll. + // Invalidate status (number of confirmations) and (possibly) description + // for all rows. Qt is smart enough to only actually request the data for the + // visible rows. + emit dataChanged(index(0, Status), index(priv->size()-1, Status)); + emit dataChanged(index(0, ToAddress), index(priv->size()-1, ToAddress)); } int TransactionTableModel::rowCount(const QModelIndex &parent) const @@ -285,31 +290,29 @@ QString TransactionTableModel::formatTxStatus(const TransactionRecord *wtx) cons status = tr("Open until %1").arg(GUIUtil::dateTimeStr(wtx->status.open_for)); break; case TransactionStatus::Offline: - status = tr("Offline (%1 confirmations)").arg(wtx->status.depth); + status = tr("Offline"); break; case TransactionStatus::Unconfirmed: - status = tr("Unconfirmed (%1 of %2 confirmations)").arg(wtx->status.depth).arg(TransactionRecord::NumConfirmations); + status = tr("Unconfirmed"); break; - case TransactionStatus::HaveConfirmations: + case TransactionStatus::Confirming: + status = tr("Confirming (%1 of %2 recommended confirmations)").arg(wtx->status.depth).arg(TransactionRecord::RecommendedNumConfirmations); + break; + case TransactionStatus::Confirmed: status = tr("Confirmed (%1 confirmations)").arg(wtx->status.depth); break; - } - if(wtx->type == TransactionRecord::Generated) - { - switch(wtx->status.maturity) - { - case TransactionStatus::Immature: - status += "\n" + tr("Mined balance will be available when it matures in %n more block(s)", "", wtx->status.matures_in); - break; - case TransactionStatus::Mature: - break; - case TransactionStatus::MaturesWarning: - status += "\n" + tr("This block was not received by any other nodes and will probably not be accepted!"); - break; - case TransactionStatus::NotAccepted: - status += "\n" + tr("Generated but not accepted"); - break; - } + case TransactionStatus::Conflicted: + status = tr("Conflicted"); + break; + case TransactionStatus::Immature: + status = tr("Immature (%1 confirmations, will be available after %2)").arg(wtx->status.depth).arg(wtx->status.depth + wtx->status.matures_in); + break; + case TransactionStatus::MaturesWarning: + status = tr("This block was not received by any other nodes and will probably not be accepted!"); + break; + case TransactionStatus::NotAccepted: + status = tr("Generated but not accepted"); + break; } return status; @@ -427,7 +430,7 @@ QString TransactionTableModel::formatTxAmount(const TransactionRecord *wtx, bool QString str = BitcoinUnits::format(walletModel->getOptionsModel()->getDisplayUnit(), wtx->credit + wtx->debit); if(showUnconfirmed) { - if(!wtx->status.confirmed || wtx->status.maturity != TransactionStatus::Mature) + if(!wtx->status.countsForBalance) { str = QString("[") + str + QString("]"); } @@ -437,45 +440,36 @@ QString TransactionTableModel::formatTxAmount(const TransactionRecord *wtx, bool QVariant TransactionTableModel::txStatusDecoration(const TransactionRecord *wtx) const { - if(wtx->type == TransactionRecord::Generated) + switch(wtx->status.status) { - switch(wtx->status.maturity) + case TransactionStatus::OpenUntilBlock: + case TransactionStatus::OpenUntilDate: + return QColor(64,64,255); + case TransactionStatus::Offline: + return QColor(192,192,192); + case TransactionStatus::Unconfirmed: + return QIcon(":/icons/transaction_0"); + case TransactionStatus::Confirming: + switch(wtx->status.depth) { - case TransactionStatus::Immature: { - int total = wtx->status.depth + wtx->status.matures_in; - int part = (wtx->status.depth * 4 / total) + 1; - return QIcon(QString(":/icons/transaction_%1").arg(part)); - } - case TransactionStatus::Mature: - return QIcon(":/icons/transaction_confirmed"); - case TransactionStatus::MaturesWarning: - case TransactionStatus::NotAccepted: - return QIcon(":/icons/transaction_0"); - } - } - else - { - switch(wtx->status.status) - { - case TransactionStatus::OpenUntilBlock: - case TransactionStatus::OpenUntilDate: - return QColor(64,64,255); - break; - case TransactionStatus::Offline: - return QColor(192,192,192); - case TransactionStatus::Unconfirmed: - switch(wtx->status.depth) - { - case 0: return QIcon(":/icons/transaction_0"); - case 1: return QIcon(":/icons/transaction_1"); - case 2: return QIcon(":/icons/transaction_2"); - case 3: return QIcon(":/icons/transaction_3"); - case 4: return QIcon(":/icons/transaction_4"); - default: return QIcon(":/icons/transaction_5"); - }; - case TransactionStatus::HaveConfirmations: - return QIcon(":/icons/transaction_confirmed"); + case 1: return QIcon(":/icons/transaction_1"); + case 2: return QIcon(":/icons/transaction_2"); + case 3: return QIcon(":/icons/transaction_3"); + case 4: return QIcon(":/icons/transaction_4"); + default: return QIcon(":/icons/transaction_5"); + }; + case TransactionStatus::Confirmed: + return QIcon(":/icons/transaction_confirmed"); + case TransactionStatus::Conflicted: + return QIcon(":/icons/transaction_conflicted"); + case TransactionStatus::Immature: { + int total = wtx->status.depth + wtx->status.matures_in; + int part = (wtx->status.depth * 4 / total) + 1; + return QIcon(QString(":/icons/transaction_%1").arg(part)); } + case TransactionStatus::MaturesWarning: + case TransactionStatus::NotAccepted: + return QIcon(":/icons/transaction_0"); } return QColor(0,0,0); } @@ -542,8 +536,8 @@ QVariant TransactionTableModel::data(const QModelIndex &index, int role) const case Qt::TextAlignmentRole: return column_alignments[index.column()]; case Qt::ForegroundRole: - // Non-confirmed transactions are grey - if(!rec->status.confirmed) + // Non-confirmed (but not immature) as transactions are grey + if(!rec->status.countsForBalance && rec->status.status != TransactionStatus::Immature) { return COLOR_UNCONFIRMED; } @@ -561,7 +555,7 @@ QVariant TransactionTableModel::data(const QModelIndex &index, int role) const case DateRole: return QDateTime::fromTime_t(static_cast(rec->time)); case LongDescriptionRole: - return priv->describe(rec); + return priv->describe(rec, walletModel->getOptionsModel()->getDisplayUnit()); case AddressRole: return QString::fromStdString(rec->address); case LabelRole: @@ -569,13 +563,15 @@ QVariant TransactionTableModel::data(const QModelIndex &index, int role) const case AmountRole: return rec->credit + rec->debit; case TxIDRole: - return QString::fromStdString(rec->getTxID()); + return rec->getTxID(); + case TxHashRole: + return QString::fromStdString(rec->hash.ToString()); case ConfirmedRole: - // Return True if transaction counts for balance - return rec->status.confirmed && !(rec->type == TransactionRecord::Generated && - rec->status.maturity != TransactionStatus::Mature); + return rec->status.countsForBalance; case FormattedAmountRole: return formatTxAmount(rec, false); + case StatusRole: + return rec->status.status; } return QVariant(); } diff --git a/src/qt/transactiontablemodel.h b/src/qt/transactiontablemodel.h index 6b2961c2..333e6bc6 100644 --- a/src/qt/transactiontablemodel.h +++ b/src/qt/transactiontablemodel.h @@ -1,14 +1,19 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef TRANSACTIONTABLEMODEL_H #define TRANSACTIONTABLEMODEL_H #include #include -class CWallet; -class TransactionTablePriv; class TransactionRecord; +class TransactionTablePriv; class WalletModel; +class CWallet; + /** UI model for the transaction table of a wallet. */ class TransactionTableModel : public QAbstractTableModel @@ -45,10 +50,14 @@ public: AmountRole, /** Unique identifier */ TxIDRole, + /** Transaction hash */ + TxHashRole, /** Is transaction confirmed? */ ConfirmedRole, /** Formatted amount, without brackets when unconfirmed */ - FormattedAmountRole + FormattedAmountRole, + /** Transaction status (TransactionRecord::Status) */ + StatusRole }; int rowCount(const QModelIndex &parent) const; @@ -62,7 +71,6 @@ private: WalletModel *walletModel; QStringList columns; TransactionTablePriv *priv; - int cachedNumBlocks; QString lookupAddress(const std::string &address, bool tooltip) const; QVariant addressColor(const TransactionRecord *wtx) const; diff --git a/src/qt/transactionview.cpp b/src/qt/transactionview.cpp index a43e29c4..d4d29416 100644 --- a/src/qt/transactionview.cpp +++ b/src/qt/transactionview.cpp @@ -1,30 +1,38 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #include "transactionview.h" -#include "transactionfilterproxy.h" -#include "transactionrecord.h" -#include "walletmodel.h" #include "addresstablemodel.h" -#include "transactiontablemodel.h" #include "bitcoinunits.h" #include "csvmodelwriter.h" -#include "transactiondescdialog.h" #include "editaddressdialog.h" -#include "optionsmodel.h" #include "guiutil.h" +#include "optionsmodel.h" +#include "transactiondescdialog.h" +#include "transactionfilterproxy.h" +#include "transactionrecord.h" +#include "transactiontablemodel.h" +#include "walletmodel.h" + +#include "ui_interface.h" -#include #include +#include +#include #include #include -#include -#include -#include #include -#include -#include -#include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include TransactionView::TransactionView(QWidget *parent) : QWidget(parent), model(0), transactionProxyModel(0), @@ -78,14 +86,12 @@ TransactionView::TransactionView(QWidget *parent) : addressWidget = new QLineEdit(this); #if QT_VERSION >= 0x040700 - /* Do not move this to the XML file, Qt before 4.7 will choke on it */ addressWidget->setPlaceholderText(tr("Enter address or label to search")); #endif hlayout->addWidget(addressWidget); amountWidget = new QLineEdit(this); #if QT_VERSION >= 0x040700 - /* Do not move this to the XML file, Qt before 4.7 will choke on it */ amountWidget->setPlaceholderText(tr("Min amount")); #endif #ifdef Q_OS_MAC @@ -135,7 +141,11 @@ TransactionView::TransactionView(QWidget *parent) : contextMenu->addAction(editLabelAction); contextMenu->addAction(showDetailsAction); + mapperThirdPartyTxUrls = new QSignalMapper(this); + // Connect actions + connect(mapperThirdPartyTxUrls, SIGNAL(mapped(QString)), this, SLOT(openThirdPartyTxUrl(QString))); + connect(dateWidget, SIGNAL(activated(int)), this, SLOT(chooseDate(int))); connect(typeWidget, SIGNAL(activated(int)), this, SLOT(chooseType(int))); connect(addressWidget, SIGNAL(textChanged(QString)), this, SLOT(changedPrefix(QString))); @@ -165,6 +175,7 @@ void TransactionView::setModel(WalletModel *model) transactionProxyModel->setSortRole(Qt::EditRole); + transactionView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); transactionView->setModel(transactionProxyModel); transactionView->setAlternatingRowColors(true); transactionView->setSelectionBehavior(QAbstractItemView::SelectRows); @@ -173,15 +184,31 @@ void TransactionView::setModel(WalletModel *model) transactionView->sortByColumn(TransactionTableModel::Status, Qt::DescendingOrder); transactionView->verticalHeader()->hide(); - transactionView->horizontalHeader()->resizeSection(TransactionTableModel::Status, 23); - transactionView->horizontalHeader()->resizeSection(TransactionTableModel::Date, 120); - transactionView->horizontalHeader()->resizeSection(TransactionTableModel::Type, 120); -#if QT_VERSION < 0x050000 - transactionView->horizontalHeader()->setResizeMode(TransactionTableModel::ToAddress, QHeaderView::Stretch); -#else - transactionView->horizontalHeader()->setSectionResizeMode(TransactionTableModel::ToAddress, QHeaderView::Stretch); -#endif - transactionView->horizontalHeader()->resizeSection(TransactionTableModel::Amount, 100); + transactionView->setColumnWidth(TransactionTableModel::Status, STATUS_COLUMN_WIDTH); + transactionView->setColumnWidth(TransactionTableModel::Date, DATE_COLUMN_WIDTH); + transactionView->setColumnWidth(TransactionTableModel::Type, TYPE_COLUMN_WIDTH); + transactionView->setColumnWidth(TransactionTableModel::Amount, AMOUNT_MINIMUM_COLUMN_WIDTH); + + columnResizingFixer = new GUIUtil::TableViewLastColumnResizingFixer(transactionView, AMOUNT_MINIMUM_COLUMN_WIDTH, MINIMUM_COLUMN_WIDTH); + + if (model->getOptionsModel()) + { + // Add third party transaction URLs to context menu + QStringList listUrls = model->getOptionsModel()->getThirdPartyTxUrls().split("|", QString::SkipEmptyParts); + for (int i = 0; i < listUrls.size(); ++i) + { + QString host = QUrl(listUrls[i].trimmed(), QUrl::StrictMode).host(); + if (!host.isEmpty()) + { + QAction *thirdPartyTxUrlAction = new QAction(host, this); // use host as menu item label + if (i == 0) + contextMenu->addSeparator(); + contextMenu->addAction(thirdPartyTxUrlAction); + connect(thirdPartyTxUrlAction, SIGNAL(triggered()), mapperThirdPartyTxUrls, SLOT(map())); + mapperThirdPartyTxUrls->setMapping(thirdPartyTxUrlAction, listUrls[i].trimmed()); + } + } + } } } @@ -266,12 +293,12 @@ void TransactionView::changedAmount(const QString &amount) void TransactionView::exportClicked() { // CSV is currently the only supported format - QString filename = GUIUtil::getSaveFileName( - this, - tr("Export Transaction Data"), QString(), - tr("Comma separated file (*.csv)")); + QString filename = GUIUtil::getSaveFileName(this, + tr("Export Transaction History"), QString(), + tr("Comma separated file (*.csv)"), NULL); - if (filename.isNull()) return; + if (filename.isNull()) + return; CSVModelWriter writer(filename); @@ -285,10 +312,13 @@ void TransactionView::exportClicked() writer.addColumn(tr("Amount"), 0, TransactionTableModel::FormattedAmountRole); writer.addColumn(tr("ID"), 0, TransactionTableModel::TxIDRole); - if(!writer.write()) - { - QMessageBox::critical(this, tr("Error exporting"), tr("Could not write to file %1.").arg(filename), - QMessageBox::Abort, QMessageBox::Abort); + if(!writer.write()) { + emit message(tr("Exporting Failed"), tr("There was an error trying to save the transaction history to %1.").arg(filename), + CClientUIInterface::MSG_ERROR); + } + else { + emit message(tr("Exporting Successful"), tr("The transaction history was successfully saved to %1.").arg(filename), + CClientUIInterface::MSG_INFORMATION); } } @@ -347,10 +377,10 @@ void TransactionView::editLabel() // Determine type of address, launch appropriate editor dialog type QString type = modelIdx.data(AddressTableModel::TypeRole).toString(); - EditAddressDialog dlg(type==AddressTableModel::Receive - ? EditAddressDialog::EditReceivingAddress - : EditAddressDialog::EditSendingAddress, - this); + EditAddressDialog dlg( + type == AddressTableModel::Receive + ? EditAddressDialog::EditReceivingAddress + : EditAddressDialog::EditSendingAddress, this); dlg.setModel(addressBook); dlg.loadRow(idx); dlg.exec(); @@ -359,7 +389,7 @@ void TransactionView::editLabel() { // Add sending address EditAddressDialog dlg(EditAddressDialog::NewSendingAddress, - this); + this); dlg.setModel(addressBook); dlg.setAddress(address); dlg.exec(); @@ -379,6 +409,15 @@ void TransactionView::showDetails() } } +void TransactionView::openThirdPartyTxUrl(QString url) +{ + if(!transactionView || !transactionView->selectionModel()) + return; + QModelIndexList selection = transactionView->selectionModel()->selectedRows(0); + if(!selection.isEmpty()) + QDesktopServices::openUrl(QUrl::fromUserInput(url.replace("%s", selection.at(0).data(TransactionTableModel::TxHashRole).toString()))); +} + QWidget *TransactionView::createDateRangeWidget() { dateRangeWidget = new QFrame(); @@ -433,3 +472,11 @@ void TransactionView::focusTransaction(const QModelIndex &idx) transactionView->setCurrentIndex(targetIdx); transactionView->setFocus(); } + +// We override the virtual resizeEvent of the QWidget to adjust tables column +// sizes as the tables width is proportional to the dialogs width. +void TransactionView::resizeEvent(QResizeEvent* event) +{ + QWidget::resizeEvent(event); + columnResizingFixer->stretchColumnWidth(TransactionTableModel::ToAddress); +} diff --git a/src/qt/transactionview.h b/src/qt/transactionview.h index bb41a83e..7a89fa11 100644 --- a/src/qt/transactionview.h +++ b/src/qt/transactionview.h @@ -1,19 +1,26 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef TRANSACTIONVIEW_H #define TRANSACTIONVIEW_H +#include "guiutil.h" + #include -class WalletModel; class TransactionFilterProxy; +class WalletModel; QT_BEGIN_NAMESPACE -class QTableView; class QComboBox; -class QLineEdit; -class QModelIndex; -class QMenu; -class QFrame; class QDateTimeEdit; +class QFrame; +class QLineEdit; +class QMenu; +class QModelIndex; +class QSignalMapper; +class QTableView; QT_END_NAMESPACE /** Widget showing the transaction list for a wallet, including a filter row. @@ -40,6 +47,14 @@ public: Range }; + enum ColumnWidths { + STATUS_COLUMN_WIDTH = 23, + DATE_COLUMN_WIDTH = 120, + TYPE_COLUMN_WIDTH = 120, + AMOUNT_MINIMUM_COLUMN_WIDTH = 120, + MINIMUM_COLUMN_WIDTH = 23 + }; + private: WalletModel *model; TransactionFilterProxy *transactionProxyModel; @@ -51,6 +66,7 @@ private: QLineEdit *amountWidget; QMenu *contextMenu; + QSignalMapper *mapperThirdPartyTxUrls; QFrame *dateRangeWidget; QDateTimeEdit *dateFrom; @@ -58,6 +74,10 @@ private: QWidget *createDateRangeWidget(); + GUIUtil::TableViewLastColumnResizingFixer *columnResizingFixer; + + virtual void resizeEvent(QResizeEvent* event); + private slots: void contextualMenu(const QPoint &); void dateRangeChanged(); @@ -67,10 +87,14 @@ private slots: void copyLabel(); void copyAmount(); void copyTxID(); + void openThirdPartyTxUrl(QString url); signals: void doubleClicked(const QModelIndex&); + /** Fired when a message should be reported to the user */ + void message(const QString &title, const QString &message, unsigned int style); + public slots: void chooseDate(int idx); void chooseType(int idx); diff --git a/src/qt/utilitydialog.cpp b/src/qt/utilitydialog.cpp new file mode 100644 index 00000000..d4abaa30 --- /dev/null +++ b/src/qt/utilitydialog.cpp @@ -0,0 +1,135 @@ +// Copyright (c) 2011-2014 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "utilitydialog.h" + +#include "ui_aboutdialog.h" +#include "ui_helpmessagedialog.h" + +#include "bitcoingui.h" +#include "clientmodel.h" +#include "guiutil.h" + +#include "clientversion.h" +#include "init.h" +#include "util.h" + +#include +#include + +/** "About" dialog box */ +AboutDialog::AboutDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::AboutDialog) +{ + ui->setupUi(this); + + // Set current copyright year + ui->copyrightLabel->setText(tr("Copyright") + QString(" © 2009-%1 ").arg(COPYRIGHT_YEAR) + tr("The Myriadcoin Core developers")); +} + +void AboutDialog::setModel(ClientModel *model) +{ + if(model) + { + QString version = model->formatFullVersion(); + /* On x86 add a bit specifier to the version so that users can distinguish between + * 32 and 64 bit builds. On other architectures, 32/64 bit may be more ambigious. + */ +#if defined(__x86_64__) + version += " " + tr("(%1-bit)").arg(64); +#elif defined(__i386__ ) + version += " " + tr("(%1-bit)").arg(32); +#endif + ui->versionLabel->setText(version); + } +} + +AboutDialog::~AboutDialog() +{ + delete ui; +} + +void AboutDialog::on_buttonBox_accepted() +{ + close(); +} + +/** "Help message" dialog box */ +HelpMessageDialog::HelpMessageDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::HelpMessageDialog) +{ + ui->setupUi(this); + GUIUtil::restoreWindowGeometry("nHelpMessageDialogWindow", this->size(), this); + + header = tr("Myriadcoin Core") + " " + tr("version") + " " + + QString::fromStdString(FormatFullVersion()) + "\n\n" + + tr("Usage:") + "\n" + + " myriadcoin-qt [" + tr("command-line options") + "] " + "\n"; + + coreOptions = QString::fromStdString(HelpMessage(HMM_BITCOIN_QT)); + + uiOptions = tr("UI options") + ":\n" + + " -choosedatadir " + tr("Choose data directory on startup (default: 0)") + "\n" + + " -lang= " + tr("Set language, for example \"de_DE\" (default: system locale)") + "\n" + + " -min " + tr("Start minimized") + "\n" + + " -rootcertificates= " + tr("Set SSL root certificates for payment request (default: -system-)") + "\n" + + " -splash " + tr("Show splash screen on startup (default: 1)"); + + ui->helpMessageLabel->setFont(GUIUtil::bitcoinAddressFont()); + + // Set help message text + ui->helpMessageLabel->setText(header + "\n" + coreOptions + "\n" + uiOptions); +} + +HelpMessageDialog::~HelpMessageDialog() +{ + GUIUtil::saveWindowGeometry("nHelpMessageDialogWindow", this); + delete ui; +} + +void HelpMessageDialog::printToConsole() +{ + // On other operating systems, the expected action is to print the message to the console. + QString strUsage = header + "\n" + coreOptions + "\n" + uiOptions + "\n"; + fprintf(stdout, "%s", strUsage.toStdString().c_str()); +} + +void HelpMessageDialog::showOrPrint() +{ +#if defined(WIN32) + // On Windows, show a message box, as there is no stderr/stdout in windowed applications + exec(); +#else + // On other operating systems, print help text to console + printToConsole(); +#endif +} + +void HelpMessageDialog::on_okButton_accepted() +{ + close(); +} + + +/** "Shutdown" window */ +void ShutdownWindow::showShutdownWindow(BitcoinGUI *window) +{ + if (!window) + return; + + // Show a simple window indicating shutdown status + QWidget *shutdownWindow = new QWidget(); + QVBoxLayout *layout = new QVBoxLayout(); + layout->addWidget(new QLabel( + tr("Myriadcoin Core is shutting down...") + "

" + + tr("Do not shut down the computer until this window disappears."))); + shutdownWindow->setLayout(layout); + + // Center shutdown window at where main window was + const QPoint global = window->mapToGlobal(window->rect().center()); + shutdownWindow->move(global.x() - shutdownWindow->width() / 2, global.y() - shutdownWindow->height() / 2); + shutdownWindow->show(); +} diff --git a/src/qt/utilitydialog.h b/src/qt/utilitydialog.h new file mode 100644 index 00000000..874daf6a --- /dev/null +++ b/src/qt/utilitydialog.h @@ -0,0 +1,69 @@ +// Copyright (c) 2011-2014 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef UTILITYDIALOG_H +#define UTILITYDIALOG_H + +#include +#include + +class BitcoinGUI; +class ClientModel; + +namespace Ui { + class AboutDialog; + class HelpMessageDialog; +} + +/** "About" dialog box */ +class AboutDialog : public QDialog +{ + Q_OBJECT + +public: + explicit AboutDialog(QWidget *parent); + ~AboutDialog(); + + void setModel(ClientModel *model); + +private: + Ui::AboutDialog *ui; + +private slots: + void on_buttonBox_accepted(); +}; + +/** "Help message" dialog box */ +class HelpMessageDialog : public QDialog +{ + Q_OBJECT + +public: + explicit HelpMessageDialog(QWidget *parent); + ~HelpMessageDialog(); + + void printToConsole(); + void showOrPrint(); + +private: + Ui::HelpMessageDialog *ui; + QString header; + QString coreOptions; + QString uiOptions; + +private slots: + void on_okButton_accepted(); +}; + + +/** "Shutdown" window */ +class ShutdownWindow : public QObject +{ + Q_OBJECT + +public: + static void showShutdownWindow(BitcoinGUI *window); +}; + +#endif // UTILITYDIALOG_H diff --git a/src/qt/walletframe.cpp b/src/qt/walletframe.cpp index 50c03ac6..fead0229 100644 --- a/src/qt/walletframe.cpp +++ b/src/qt/walletframe.cpp @@ -1,28 +1,31 @@ -/* - * Qt4 bitcoin GUI. - * - * W.J. van der Laan 2011-2012 - * The Bitcoin Developers 2011-2013 - */ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #include "walletframe.h" + #include "bitcoingui.h" -#include "walletstack.h" +#include "walletview.h" + +#include #include -#include +#include WalletFrame::WalletFrame(BitcoinGUI *_gui) : QFrame(_gui), - gui(_gui), - clientModel(0) + gui(_gui) { // Leave HBox hook for adding a list view later QHBoxLayout *walletFrameLayout = new QHBoxLayout(this); setContentsMargins(0,0,0,0); - walletStack = new WalletStack(this); - walletStack->setBitcoinGUI(gui); + walletStack = new QStackedWidget(this); walletFrameLayout->setContentsMargins(0,0,0,0); walletFrameLayout->addWidget(walletStack); + + QLabel *noWallet = new QLabel(tr("No wallet has been loaded.")); + noWallet->setAlignment(Qt::AlignCenter); + walletStack->addWidget(noWallet); } WalletFrame::~WalletFrame() @@ -32,98 +35,162 @@ WalletFrame::~WalletFrame() void WalletFrame::setClientModel(ClientModel *clientModel) { this->clientModel = clientModel; - walletStack->setClientModel(clientModel); } bool WalletFrame::addWallet(const QString& name, WalletModel *walletModel) { - return walletStack->addWallet(name, walletModel); + if (!gui || !clientModel || !walletModel || mapWalletViews.count(name) > 0) + return false; + + WalletView *walletView = new WalletView(this); + walletView->setBitcoinGUI(gui); + walletView->setClientModel(clientModel); + walletView->setWalletModel(walletModel); + walletView->showOutOfSyncWarning(bOutOfSync); + + /* TODO we should goto the currently selected page once dynamically adding wallets is supported */ + walletView->gotoOverviewPage(); + walletStack->addWidget(walletView); + mapWalletViews[name] = walletView; + + // Ensure a walletView is able to show the main window + connect(walletView, SIGNAL(showNormalIfMinimized()), gui, SLOT(showNormalIfMinimized())); + + return true; } bool WalletFrame::setCurrentWallet(const QString& name) { - // TODO: Check if valid name - walletStack->setCurrentWallet(name); + if (mapWalletViews.count(name) == 0) + return false; + + WalletView *walletView = mapWalletViews.value(name); + walletStack->setCurrentWidget(walletView); + walletView->updateEncryptionStatus(); + return true; +} + +bool WalletFrame::removeWallet(const QString &name) +{ + if (mapWalletViews.count(name) == 0) + return false; + + WalletView *walletView = mapWalletViews.take(name); + walletStack->removeWidget(walletView); return true; } void WalletFrame::removeAllWallets() { - walletStack->removeAllWallets(); + QMap::const_iterator i; + for (i = mapWalletViews.constBegin(); i != mapWalletViews.constEnd(); ++i) + walletStack->removeWidget(i.value()); + mapWalletViews.clear(); } -bool WalletFrame::handleURI(const QString &uri) +bool WalletFrame::handlePaymentRequest(const SendCoinsRecipient &recipient) { - return walletStack->handleURI(uri); + WalletView *walletView = currentWalletView(); + if (!walletView) + return false; + + return walletView->handlePaymentRequest(recipient); } void WalletFrame::showOutOfSyncWarning(bool fShow) { - if (!walletStack) { - QMessageBox box; - box.setText("walletStack is null"); - box.exec(); - return; - } - walletStack->showOutOfSyncWarning(fShow); + bOutOfSync = fShow; + QMap::const_iterator i; + for (i = mapWalletViews.constBegin(); i != mapWalletViews.constEnd(); ++i) + i.value()->showOutOfSyncWarning(fShow); } void WalletFrame::gotoOverviewPage() { - walletStack->gotoOverviewPage(); + QMap::const_iterator i; + for (i = mapWalletViews.constBegin(); i != mapWalletViews.constEnd(); ++i) + i.value()->gotoOverviewPage(); } void WalletFrame::gotoHistoryPage() { - walletStack->gotoHistoryPage(); -} - -void WalletFrame::gotoAddressBookPage() -{ - walletStack->gotoAddressBookPage(); + QMap::const_iterator i; + for (i = mapWalletViews.constBegin(); i != mapWalletViews.constEnd(); ++i) + i.value()->gotoHistoryPage(); } void WalletFrame::gotoReceiveCoinsPage() { - walletStack->gotoReceiveCoinsPage(); + QMap::const_iterator i; + for (i = mapWalletViews.constBegin(); i != mapWalletViews.constEnd(); ++i) + i.value()->gotoReceiveCoinsPage(); } void WalletFrame::gotoSendCoinsPage(QString addr) { - walletStack->gotoSendCoinsPage(addr); + QMap::const_iterator i; + for (i = mapWalletViews.constBegin(); i != mapWalletViews.constEnd(); ++i) + i.value()->gotoSendCoinsPage(addr); } void WalletFrame::gotoSignMessageTab(QString addr) { - walletStack->gotoSignMessageTab(addr); + WalletView *walletView = currentWalletView(); + if (walletView) + walletView->gotoSignMessageTab(addr); } void WalletFrame::gotoVerifyMessageTab(QString addr) { - walletStack->gotoSignMessageTab(addr); + WalletView *walletView = currentWalletView(); + if (walletView) + walletView->gotoVerifyMessageTab(addr); } void WalletFrame::encryptWallet(bool status) { - walletStack->encryptWallet(status); + WalletView *walletView = currentWalletView(); + if (walletView) + walletView->encryptWallet(status); } void WalletFrame::backupWallet() { - walletStack->backupWallet(); + WalletView *walletView = currentWalletView(); + if (walletView) + walletView->backupWallet(); } void WalletFrame::changePassphrase() { - walletStack->changePassphrase(); + WalletView *walletView = currentWalletView(); + if (walletView) + walletView->changePassphrase(); } void WalletFrame::unlockWallet() { - walletStack->unlockWallet(); + WalletView *walletView = currentWalletView(); + if (walletView) + walletView->unlockWallet(); } -void WalletFrame::setEncryptionStatus() +void WalletFrame::usedSendingAddresses() { - walletStack->setEncryptionStatus(); + WalletView *walletView = currentWalletView(); + if (walletView) + walletView->usedSendingAddresses(); } + +void WalletFrame::usedReceivingAddresses() +{ + WalletView *walletView = currentWalletView(); + if (walletView) + walletView->usedReceivingAddresses(); +} + +WalletView *WalletFrame::currentWalletView() +{ + return qobject_cast(walletStack->currentWidget()); +} + diff --git a/src/qt/walletframe.h b/src/qt/walletframe.h index d7092f98..f1830a0d 100644 --- a/src/qt/walletframe.h +++ b/src/qt/walletframe.h @@ -1,18 +1,22 @@ -/* - * Qt4 bitcoin GUI. - * - * W.J. van der Laan 2011-2012 - * The Bitcoin Developers 2011-2013 - */ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef WALLETFRAME_H #define WALLETFRAME_H #include +#include class BitcoinGUI; class ClientModel; +class SendCoinsRecipient; class WalletModel; -class WalletStack; +class WalletView; + +QT_BEGIN_NAMESPACE +class QStackedWidget; +QT_END_NAMESPACE class WalletFrame : public QFrame { @@ -26,25 +30,28 @@ public: bool addWallet(const QString& name, WalletModel *walletModel); bool setCurrentWallet(const QString& name); - + bool removeWallet(const QString &name); void removeAllWallets(); - bool handleURI(const QString &uri); + bool handlePaymentRequest(const SendCoinsRecipient& recipient); void showOutOfSyncWarning(bool fShow); private: + QStackedWidget *walletStack; BitcoinGUI *gui; ClientModel *clientModel; - WalletStack *walletStack; + QMap mapWalletViews; + + bool bOutOfSync; + + WalletView *currentWalletView(); public slots: /** Switch to overview (home) page */ void gotoOverviewPage(); /** Switch to history (transactions) page */ void gotoHistoryPage(); - /** Switch to address book page */ - void gotoAddressBookPage(); /** Switch to receive coins page */ void gotoReceiveCoinsPage(); /** Switch to send coins page */ @@ -64,11 +71,10 @@ public slots: /** Ask for passphrase to unlock wallet temporarily */ void unlockWallet(); - /** Set the encryption status as shown in the UI. - @param[in] status current encryption status - @see WalletModel::EncryptionStatus - */ - void setEncryptionStatus(); + /** Show used sending addresses */ + void usedSendingAddresses(); + /** Show used receiving addresses */ + void usedReceivingAddresses(); }; -#endif // WALLETFRAME_H \ No newline at end of file +#endif // WALLETFRAME_H diff --git a/src/qt/walletmodel.cpp b/src/qt/walletmodel.cpp index fb3ffc5c..37d82ec0 100644 --- a/src/qt/walletmodel.cpp +++ b/src/qt/walletmodel.cpp @@ -1,20 +1,33 @@ +// Copyright (c) 2011-2014 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #include "walletmodel.h" -#include "guiconstants.h" -#include "optionsmodel.h" + #include "addresstablemodel.h" +#include "guiconstants.h" +#include "recentrequeststablemodel.h" #include "transactiontablemodel.h" +#include "base58.h" +#include "db.h" +#include "keystore.h" +#include "main.h" +#include "sync.h" #include "ui_interface.h" #include "wallet.h" #include "walletdb.h" // for BackupWallet -#include "base58.h" +#include + +#include #include #include WalletModel::WalletModel(CWallet *wallet, OptionsModel *optionsModel, QObject *parent) : QObject(parent), wallet(wallet), optionsModel(optionsModel), addressTableModel(0), transactionTableModel(0), + recentRequestsTableModel(0), cachedBalance(0), cachedUnconfirmedBalance(0), cachedImmatureBalance(0), cachedNumTransactions(0), cachedEncryptionStatus(Unencrypted), @@ -22,6 +35,7 @@ WalletModel::WalletModel(CWallet *wallet, OptionsModel *optionsModel, QObject *p { addressTableModel = new AddressTableModel(wallet, this); transactionTableModel = new TransactionTableModel(wallet, this); + recentRequestsTableModel = new RecentRequestsTableModel(wallet, this); // This timer will be fired repeatedly to update the balance pollTimer = new QTimer(this); @@ -36,8 +50,19 @@ WalletModel::~WalletModel() unsubscribeFromCoreSignals(); } -qint64 WalletModel::getBalance() const +qint64 WalletModel::getBalance(const CCoinControl *coinControl) const { + if (coinControl) + { + qint64 nBalance = 0; + std::vector vCoins; + wallet->AvailableCoins(vCoins, true, coinControl); + BOOST_FOREACH(const COutput& out, vCoins) + nBalance += out.tx->vout[out.i].nValue; + + return nBalance; + } + return wallet->GetBalance(); } @@ -73,11 +98,24 @@ void WalletModel::updateStatus() void WalletModel::pollBalanceChanged() { - if(nBestHeight != cachedNumBlocks) + // Get required locks upfront. This avoids the GUI from getting stuck on + // periodical polls if the core is holding the locks for a longer time - + // for example, during a wallet rescan. + TRY_LOCK(cs_main, lockMain); + if(!lockMain) + return; + TRY_LOCK(wallet->cs_wallet, lockWallet); + if(!lockWallet) + return; + + if(chainActive.Height() != cachedNumBlocks) { // Balance and number of transactions might have changed - cachedNumBlocks = nBestHeight; + cachedNumBlocks = chainActive.Height(); + checkBalanceChanged(); + if(transactionTableModel) + transactionTableModel->updateConfirmations(); } } @@ -112,10 +150,11 @@ void WalletModel::updateTransaction(const QString &hash, int status) } } -void WalletModel::updateAddressBook(const QString &address, const QString &label, bool isMine, int status) +void WalletModel::updateAddressBook(const QString &address, const QString &label, + bool isMine, const QString &purpose, int status) { if(addressTableModel) - addressTableModel->updateEntry(address, label, isMine, status); + addressTableModel->updateEntry(address, label, isMine, purpose, status); } bool WalletModel::validateAddress(const QString &address) @@ -124,107 +163,169 @@ bool WalletModel::validateAddress(const QString &address) return addressParsed.IsValid(); } -WalletModel::SendCoinsReturn WalletModel::sendCoins(const QList &recipients) +WalletModel::SendCoinsReturn WalletModel::prepareTransaction(WalletModelTransaction &transaction, const CCoinControl *coinControl) { qint64 total = 0; - QSet setAddress; - QString hex; + QList recipients = transaction.getRecipients(); + std::vector > vecSend; if(recipients.empty()) { return OK; } + QSet setAddress; // Used to detect duplicates + int nAddresses = 0; + // Pre-check input data for validity foreach(const SendCoinsRecipient &rcp, recipients) { - if(!validateAddress(rcp.address)) - { - return InvalidAddress; + if (rcp.paymentRequest.IsInitialized()) + { // PaymentRequest... + int64_t subtotal = 0; + const payments::PaymentDetails& details = rcp.paymentRequest.getDetails(); + for (int i = 0; i < details.outputs_size(); i++) + { + const payments::Output& out = details.outputs(i); + if (out.amount() <= 0) continue; + subtotal += out.amount(); + const unsigned char* scriptStr = (const unsigned char*)out.script().data(); + CScript scriptPubKey(scriptStr, scriptStr+out.script().size()); + vecSend.push_back(std::pair(scriptPubKey, out.amount())); + } + if (subtotal <= 0) + { + return InvalidAmount; + } + total += subtotal; } - setAddress.insert(rcp.address); + else + { // User-entered bitcoin address / amount: + if(!validateAddress(rcp.address)) + { + return InvalidAddress; + } + if(rcp.amount <= 0) + { + return InvalidAmount; + } + setAddress.insert(rcp.address); + ++nAddresses; - if(rcp.amount <= 0) - { - return InvalidAmount; + CScript scriptPubKey; + scriptPubKey.SetDestination(CBitcoinAddress(rcp.address.toStdString()).Get()); + vecSend.push_back(std::pair(scriptPubKey, rcp.amount)); + + total += rcp.amount; } - total += rcp.amount; } - - if(recipients.size() > setAddress.size()) + if(setAddress.size() != nAddresses) { return DuplicateAddress; } - if(total > getBalance()) + qint64 nBalance = getBalance(coinControl); + + if(total > nBalance) { return AmountExceedsBalance; } - if((total + nTransactionFee) > getBalance()) + if((total + nTransactionFee) > nBalance) { - return SendCoinsReturn(AmountWithFeeExceedsBalance, nTransactionFee); + transaction.setTransactionFee(nTransactionFee); + return SendCoinsReturn(AmountWithFeeExceedsBalance); } { LOCK2(cs_main, wallet->cs_wallet); - // Sendmany - std::vector > vecSend; - foreach(const SendCoinsRecipient &rcp, recipients) - { - CScript scriptPubKey; - scriptPubKey.SetDestination(CBitcoinAddress(rcp.address.toStdString()).Get()); - vecSend.push_back(make_pair(scriptPubKey, rcp.amount)); - } - - CWalletTx wtx; - CReserveKey keyChange(wallet); - int64 nFeeRequired = 0; + transaction.newPossibleKeyChange(wallet); + int64_t nFeeRequired = 0; std::string strFailReason; - bool fCreated = wallet->CreateTransaction(vecSend, wtx, keyChange, nFeeRequired, strFailReason); + + CWalletTx *newTx = transaction.getTransaction(); + CReserveKey *keyChange = transaction.getPossibleKeyChange(); + bool fCreated = wallet->CreateTransaction(vecSend, *newTx, *keyChange, nFeeRequired, strFailReason, coinControl); + transaction.setTransactionFee(nFeeRequired); if(!fCreated) { - if((total + nFeeRequired) > wallet->GetBalance()) + if((total + nFeeRequired) > nBalance) { - return SendCoinsReturn(AmountWithFeeExceedsBalance, nFeeRequired); + return SendCoinsReturn(AmountWithFeeExceedsBalance); } emit message(tr("Send Coins"), QString::fromStdString(strFailReason), CClientUIInterface::MSG_ERROR); return TransactionCreationFailed; } - if(!uiInterface.ThreadSafeAskFee(nFeeRequired)) - { - return Aborted; - } - if(!wallet->CommitTransaction(wtx, keyChange)) - { - return TransactionCommitFailed; - } - hex = QString::fromStdString(wtx.GetHash().GetHex()); } - // Add addresses / update labels that we've sent to to the address book - foreach(const SendCoinsRecipient &rcp, recipients) + return SendCoinsReturn(OK); +} + +WalletModel::SendCoinsReturn WalletModel::sendCoins(WalletModelTransaction &transaction) +{ + QByteArray transaction_array; /* store serialized transaction */ + { - std::string strAddress = rcp.address.toStdString(); - CTxDestination dest = CBitcoinAddress(strAddress).Get(); - std::string strLabel = rcp.label.toStdString(); + LOCK2(cs_main, wallet->cs_wallet); + CWalletTx *newTx = transaction.getTransaction(); + + // Store PaymentRequests in wtx.vOrderForm in wallet. + foreach(const SendCoinsRecipient &rcp, transaction.getRecipients()) { - LOCK(wallet->cs_wallet); - - std::map::iterator mi = wallet->mapAddressBook.find(dest); - - // Check if we have a new address or an updated label - if (mi == wallet->mapAddressBook.end() || mi->second != strLabel) + if (rcp.paymentRequest.IsInitialized()) { - wallet->SetAddressBookName(dest, strLabel); + std::string key("PaymentRequest"); + std::string value; + rcp.paymentRequest.SerializeToString(&value); + newTx->vOrderForm.push_back(make_pair(key, value)); + } + else if (!rcp.message.isEmpty()) // Message from normal bitcoin:URI (bitcoin:123...?message=example) + newTx->vOrderForm.push_back(make_pair("Message", rcp.message.toStdString())); + } + + CReserveKey *keyChange = transaction.getPossibleKeyChange(); + if(!wallet->CommitTransaction(*newTx, *keyChange)) + return TransactionCommitFailed; + + CTransaction* t = (CTransaction*)newTx; + CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION); + ssTx << *t; + transaction_array.append(&(ssTx[0]), ssTx.size()); + } + + // Add addresses / update labels that we've sent to to the address book, + // and emit coinsSent signal for each recipient + foreach(const SendCoinsRecipient &rcp, transaction.getRecipients()) + { + // Don't touch the address book when we have a payment request + if (!rcp.paymentRequest.IsInitialized()) + { + std::string strAddress = rcp.address.toStdString(); + CTxDestination dest = CBitcoinAddress(strAddress).Get(); + std::string strLabel = rcp.label.toStdString(); + { + LOCK(wallet->cs_wallet); + + std::map::iterator mi = wallet->mapAddressBook.find(dest); + + // Check if we have a new address or an updated label + if (mi == wallet->mapAddressBook.end()) + { + wallet->SetAddressBook(dest, strLabel, "send"); + } + else if (mi->second.name != strLabel) + { + wallet->SetAddressBook(dest, strLabel, ""); // "" means don't change purpose + } } } + emit coinsSent(wallet, rcp, transaction_array); } - return SendCoinsReturn(OK, 0, hex); + return SendCoinsReturn(OK); } OptionsModel *WalletModel::getOptionsModel() @@ -242,6 +343,11 @@ TransactionTableModel *WalletModel::getTransactionTableModel() return transactionTableModel; } +RecentRequestsTableModel *WalletModel::getRecentRequestsTableModel() +{ + return recentRequestsTableModel; +} + WalletModel::EncryptionStatus WalletModel::getEncryptionStatus() const { if(!wallet->IsCrypted()) @@ -305,42 +411,81 @@ bool WalletModel::backupWallet(const QString &filename) // Handlers for core signals static void NotifyKeyStoreStatusChanged(WalletModel *walletmodel, CCryptoKeyStore *wallet) { - OutputDebugStringF("NotifyKeyStoreStatusChanged\n"); + qDebug() << "NotifyKeyStoreStatusChanged"; QMetaObject::invokeMethod(walletmodel, "updateStatus", Qt::QueuedConnection); } -static void NotifyAddressBookChanged(WalletModel *walletmodel, CWallet *wallet, const CTxDestination &address, const std::string &label, bool isMine, ChangeType status) +static void NotifyAddressBookChanged(WalletModel *walletmodel, CWallet *wallet, + const CTxDestination &address, const std::string &label, bool isMine, + const std::string &purpose, ChangeType status) { - OutputDebugStringF("NotifyAddressBookChanged %s %s isMine=%i status=%i\n", CBitcoinAddress(address).ToString().c_str(), label.c_str(), isMine, status); + QString strAddress = QString::fromStdString(CBitcoinAddress(address).ToString()); + QString strLabel = QString::fromStdString(label); + QString strPurpose = QString::fromStdString(purpose); + + qDebug() << "NotifyAddressBookChanged : " + strAddress + " " + strLabel + " isMine=" + QString::number(isMine) + " purpose=" + strPurpose + " status=" + QString::number(status); QMetaObject::invokeMethod(walletmodel, "updateAddressBook", Qt::QueuedConnection, - Q_ARG(QString, QString::fromStdString(CBitcoinAddress(address).ToString())), - Q_ARG(QString, QString::fromStdString(label)), + Q_ARG(QString, strAddress), + Q_ARG(QString, strLabel), Q_ARG(bool, isMine), + Q_ARG(QString, strPurpose), Q_ARG(int, status)); } +// queue notifications to show a non freezing progress dialog e.g. for rescan +static bool fQueueNotifications = false; +static std::vector > vQueueNotifications; static void NotifyTransactionChanged(WalletModel *walletmodel, CWallet *wallet, const uint256 &hash, ChangeType status) { - OutputDebugStringF("NotifyTransactionChanged %s status=%i\n", hash.GetHex().c_str(), status); + if (fQueueNotifications) + { + vQueueNotifications.push_back(make_pair(hash, status)); + return; + } + + QString strHash = QString::fromStdString(hash.GetHex()); + + qDebug() << "NotifyTransactionChanged : " + strHash + " status= " + QString::number(status); QMetaObject::invokeMethod(walletmodel, "updateTransaction", Qt::QueuedConnection, - Q_ARG(QString, QString::fromStdString(hash.GetHex())), + Q_ARG(QString, strHash), Q_ARG(int, status)); } +static void ShowProgress(WalletModel *walletmodel, const std::string &title, int nProgress) +{ + // emits signal "showProgress" + QMetaObject::invokeMethod(walletmodel, "showProgress", Qt::QueuedConnection, + Q_ARG(QString, QString::fromStdString(title)), + Q_ARG(int, nProgress)); + + if (nProgress == 0) + fQueueNotifications = true; + + if (nProgress == 100) + { + fQueueNotifications = false; + BOOST_FOREACH(const PAIRTYPE(uint256, ChangeType)& notification, vQueueNotifications) + NotifyTransactionChanged(walletmodel, NULL, notification.first, notification.second); + std::vector >().swap(vQueueNotifications); // clear + } +} + void WalletModel::subscribeToCoreSignals() { // Connect signals to wallet wallet->NotifyStatusChanged.connect(boost::bind(&NotifyKeyStoreStatusChanged, this, _1)); - wallet->NotifyAddressBookChanged.connect(boost::bind(NotifyAddressBookChanged, this, _1, _2, _3, _4, _5)); + wallet->NotifyAddressBookChanged.connect(boost::bind(NotifyAddressBookChanged, this, _1, _2, _3, _4, _5, _6)); wallet->NotifyTransactionChanged.connect(boost::bind(NotifyTransactionChanged, this, _1, _2, _3)); + wallet->ShowProgress.connect(boost::bind(ShowProgress, this, _1, _2)); } void WalletModel::unsubscribeFromCoreSignals() { // Disconnect signals from wallet wallet->NotifyStatusChanged.disconnect(boost::bind(&NotifyKeyStoreStatusChanged, this, _1)); - wallet->NotifyAddressBookChanged.disconnect(boost::bind(NotifyAddressBookChanged, this, _1, _2, _3, _4, _5)); + wallet->NotifyAddressBookChanged.disconnect(boost::bind(NotifyAddressBookChanged, this, _1, _2, _3, _4, _5, _6)); wallet->NotifyTransactionChanged.disconnect(boost::bind(NotifyTransactionChanged, this, _1, _2, _3)); + wallet->ShowProgress.disconnect(boost::bind(ShowProgress, this, _1, _2)); } // WalletModel::UnlockContext implementation @@ -379,3 +524,112 @@ void WalletModel::UnlockContext::CopyFrom(const UnlockContext& rhs) *this = rhs; rhs.relock = false; } + +bool WalletModel::getPubKey(const CKeyID &address, CPubKey& vchPubKeyOut) const +{ + return wallet->GetPubKey(address, vchPubKeyOut); +} + +// returns a list of COutputs from COutPoints +void WalletModel::getOutputs(const std::vector& vOutpoints, std::vector& vOutputs) +{ + LOCK2(cs_main, wallet->cs_wallet); + BOOST_FOREACH(const COutPoint& outpoint, vOutpoints) + { + if (!wallet->mapWallet.count(outpoint.hash)) continue; + int nDepth = wallet->mapWallet[outpoint.hash].GetDepthInMainChain(); + if (nDepth < 0) continue; + COutput out(&wallet->mapWallet[outpoint.hash], outpoint.n, nDepth); + vOutputs.push_back(out); + } +} + +bool WalletModel::isSpent(const COutPoint& outpoint) const +{ + LOCK2(cs_main, wallet->cs_wallet); + return wallet->IsSpent(outpoint.hash, outpoint.n); +} + +// AvailableCoins + LockedCoins grouped by wallet address (put change in one group with wallet address) +void WalletModel::listCoins(std::map >& mapCoins) const +{ + std::vector vCoins; + wallet->AvailableCoins(vCoins); + + LOCK2(cs_main, wallet->cs_wallet); // ListLockedCoins, mapWallet + std::vector vLockedCoins; + wallet->ListLockedCoins(vLockedCoins); + + // add locked coins + BOOST_FOREACH(const COutPoint& outpoint, vLockedCoins) + { + if (!wallet->mapWallet.count(outpoint.hash)) continue; + int nDepth = wallet->mapWallet[outpoint.hash].GetDepthInMainChain(); + if (nDepth < 0) continue; + COutput out(&wallet->mapWallet[outpoint.hash], outpoint.n, nDepth); + vCoins.push_back(out); + } + + BOOST_FOREACH(const COutput& out, vCoins) + { + COutput cout = out; + + while (wallet->IsChange(cout.tx->vout[cout.i]) && cout.tx->vin.size() > 0 && wallet->IsMine(cout.tx->vin[0])) + { + if (!wallet->mapWallet.count(cout.tx->vin[0].prevout.hash)) break; + cout = COutput(&wallet->mapWallet[cout.tx->vin[0].prevout.hash], cout.tx->vin[0].prevout.n, 0); + } + + CTxDestination address; + if(!ExtractDestination(cout.tx->vout[cout.i].scriptPubKey, address)) continue; + mapCoins[CBitcoinAddress(address).ToString().c_str()].push_back(out); + } +} + +bool WalletModel::isLockedCoin(uint256 hash, unsigned int n) const +{ + LOCK2(cs_main, wallet->cs_wallet); + return wallet->IsLockedCoin(hash, n); +} + +void WalletModel::lockCoin(COutPoint& output) +{ + LOCK2(cs_main, wallet->cs_wallet); + wallet->LockCoin(output); +} + +void WalletModel::unlockCoin(COutPoint& output) +{ + LOCK2(cs_main, wallet->cs_wallet); + wallet->UnlockCoin(output); +} + +void WalletModel::listLockedCoins(std::vector& vOutpts) +{ + LOCK2(cs_main, wallet->cs_wallet); + wallet->ListLockedCoins(vOutpts); +} + +void WalletModel::loadReceiveRequests(std::vector& vReceiveRequests) +{ + LOCK(wallet->cs_wallet); + BOOST_FOREACH(const PAIRTYPE(CTxDestination, CAddressBookData)& item, wallet->mapAddressBook) + BOOST_FOREACH(const PAIRTYPE(std::string, std::string)& item2, item.second.destdata) + if (item2.first.size() > 2 && item2.first.substr(0,2) == "rr") // receive request + vReceiveRequests.push_back(item2.second); +} + +bool WalletModel::saveReceiveRequest(const std::string &sAddress, const int64_t nId, const std::string &sRequest) +{ + CTxDestination dest = CBitcoinAddress(sAddress).Get(); + + std::stringstream ss; + ss << nId; + std::string key = "rr" + ss.str(); // "rr" prefix = "receive request" in destdata + + LOCK(wallet->cs_wallet); + if (sRequest.empty()) + return wallet->EraseDestData(dest, key); + else + return wallet->AddDestData(dest, key, sRequest); +} diff --git a/src/qt/walletmodel.h b/src/qt/walletmodel.h index f14b09ef..ccf590aa 100644 --- a/src/qt/walletmodel.h +++ b/src/qt/walletmodel.h @@ -1,14 +1,33 @@ +// Copyright (c) 2011-2014 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef WALLETMODEL_H #define WALLETMODEL_H -#include +#include "paymentrequestplus.h" +#include "walletmodeltransaction.h" #include "allocators.h" /* for SecureString */ -class OptionsModel; +#include +#include + +#include + class AddressTableModel; +class OptionsModel; +class RecentRequestsTableModel; class TransactionTableModel; +class WalletModelTransaction; + +class CCoinControl; +class CKeyID; +class COutPoint; +class COutput; +class CPubKey; class CWallet; +class uint256; QT_BEGIN_NAMESPACE class QTimer; @@ -17,9 +36,60 @@ QT_END_NAMESPACE class SendCoinsRecipient { public: + explicit SendCoinsRecipient() : amount(0), nVersion(SendCoinsRecipient::CURRENT_VERSION) { } + explicit SendCoinsRecipient(const QString &addr, const QString &label, quint64 amount, const QString &message): + address(addr), label(label), amount(amount), message(message), nVersion(SendCoinsRecipient::CURRENT_VERSION) {} + + // If from an insecure payment request, this is used for storing + // the addresses, e.g. address-A
address-B
address-C. + // Info: As we don't need to process addresses in here when using + // payment requests, we can abuse it for displaying an address list. + // Todo: This is a hack, should be replaced with a cleaner solution! QString address; QString label; qint64 amount; + // If from a payment request, this is used for storing the memo + QString message; + + // If from a payment request, paymentRequest.IsInitialized() will be true + PaymentRequestPlus paymentRequest; + // Empty if no authentication or invalid signature/cert/etc. + QString authenticatedMerchant; + + static const int CURRENT_VERSION = 1; + int nVersion; + + IMPLEMENT_SERIALIZE + ( + SendCoinsRecipient* pthis = const_cast(this); + + std::string sAddress = pthis->address.toStdString(); + std::string sLabel = pthis->label.toStdString(); + std::string sMessage = pthis->message.toStdString(); + std::string sPaymentRequest; + if (!fRead && pthis->paymentRequest.IsInitialized()) + pthis->paymentRequest.SerializeToString(&sPaymentRequest); + std::string sAuthenticatedMerchant = pthis->authenticatedMerchant.toStdString(); + + READWRITE(pthis->nVersion); + nVersion = pthis->nVersion; + READWRITE(sAddress); + READWRITE(sLabel); + READWRITE(amount); + READWRITE(sMessage); + READWRITE(sPaymentRequest); + READWRITE(sAuthenticatedMerchant); + + if (fRead) + { + pthis->address = QString::fromStdString(sAddress); + pthis->label = QString::fromStdString(sLabel); + pthis->message = QString::fromStdString(sMessage); + if (!sPaymentRequest.empty()) + pthis->paymentRequest.parse(QByteArray::fromRawData(sPaymentRequest.data(), sPaymentRequest.size())); + pthis->authenticatedMerchant = QString::fromStdString(sAuthenticatedMerchant); + } + ) }; /** Interface to Bitcoin wallet from Qt view code. */ @@ -40,8 +110,7 @@ public: AmountWithFeeExceedsBalance, DuplicateAddress, TransactionCreationFailed, // Error returned when wallet is still locked - TransactionCommitFailed, - Aborted + TransactionCommitFailed }; enum EncryptionStatus @@ -54,8 +123,9 @@ public: OptionsModel *getOptionsModel(); AddressTableModel *getAddressTableModel(); TransactionTableModel *getTransactionTableModel(); + RecentRequestsTableModel *getRecentRequestsTableModel(); - qint64 getBalance() const; + qint64 getBalance(const CCoinControl *coinControl = NULL) const; qint64 getUnconfirmedBalance() const; qint64 getImmatureBalance() const; int getNumTransactions() const; @@ -67,17 +137,16 @@ public: // Return status record for SendCoins, contains error id + information struct SendCoinsReturn { - SendCoinsReturn(StatusCode status, - qint64 fee=0, - QString hex=QString()): - status(status), fee(fee), hex(hex) {} + SendCoinsReturn(StatusCode status = OK): + status(status) {} StatusCode status; - qint64 fee; // is used in case status is "AmountWithFeeExceedsBalance" - QString hex; // is filled with the transaction hash if status is "OK" }; + // prepare transaction for getting txfee before sending coins + SendCoinsReturn prepareTransaction(WalletModelTransaction &transaction, const CCoinControl *coinControl = NULL); + // Send coins to a list of recipients - SendCoinsReturn sendCoins(const QList &recipients); + SendCoinsReturn sendCoins(WalletModelTransaction &transaction); // Wallet encryption bool setWalletEncrypted(bool encrypted, const SecureString &passphrase); @@ -109,6 +178,19 @@ public: UnlockContext requestUnlock(); + bool getPubKey(const CKeyID &address, CPubKey& vchPubKeyOut) const; + void getOutputs(const std::vector& vOutpoints, std::vector& vOutputs); + bool isSpent(const COutPoint& outpoint) const; + void listCoins(std::map >& mapCoins) const; + + bool isLockedCoin(uint256 hash, unsigned int n) const; + void lockCoin(COutPoint& output); + void unlockCoin(COutPoint& output); + void listLockedCoins(std::vector& vOutpts); + + void loadReceiveRequests(std::vector& vReceiveRequests); + bool saveReceiveRequest(const std::string &sAddress, const int64_t nId, const std::string &sRequest); + private: CWallet *wallet; @@ -118,6 +200,7 @@ private: AddressTableModel *addressTableModel; TransactionTableModel *transactionTableModel; + RecentRequestsTableModel *recentRequestsTableModel; // Cache some values to be able to detect changes qint64 cachedBalance; @@ -148,16 +231,22 @@ signals: // this means that the unlocking failed or was cancelled. void requireUnlock(); - // Asynchronous message notification + // Fired when a message should be reported to the user void message(const QString &title, const QString &message, unsigned int style); + // Coins sent: from wallet, to recipient, in (serialized) transaction: + void coinsSent(CWallet* wallet, SendCoinsRecipient recipient, QByteArray transaction); + + // Show progress dialog e.g. for rescan + void showProgress(const QString &title, int nProgress); + public slots: /* Wallet status might have changed */ void updateStatus(); /* New transaction, or transaction changed status */ void updateTransaction(const QString &hash, int status); /* New, updated or removed address book entry */ - void updateAddressBook(const QString &address, const QString &label, bool isMine, int status); + void updateAddressBook(const QString &address, const QString &label, bool isMine, const QString &purpose, int status); /* Current, immature or unconfirmed balance might have changed - emit 'balanceChanged' if so */ void pollBalanceChanged(); }; diff --git a/src/qt/walletmodeltransaction.cpp b/src/qt/walletmodeltransaction.cpp new file mode 100644 index 00000000..943f13e2 --- /dev/null +++ b/src/qt/walletmodeltransaction.cpp @@ -0,0 +1,62 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "walletmodeltransaction.h" + +#include "wallet.h" + +WalletModelTransaction::WalletModelTransaction(const QList &recipients) : + recipients(recipients), + walletTransaction(0), + keyChange(0), + fee(0) +{ + walletTransaction = new CWalletTx(); +} + +WalletModelTransaction::~WalletModelTransaction() +{ + delete keyChange; + delete walletTransaction; +} + +QList WalletModelTransaction::getRecipients() +{ + return recipients; +} + +CWalletTx *WalletModelTransaction::getTransaction() +{ + return walletTransaction; +} + +qint64 WalletModelTransaction::getTransactionFee() +{ + return fee; +} + +void WalletModelTransaction::setTransactionFee(qint64 newFee) +{ + fee = newFee; +} + +qint64 WalletModelTransaction::getTotalTransactionAmount() +{ + qint64 totalTransactionAmount = 0; + foreach(const SendCoinsRecipient &rcp, recipients) + { + totalTransactionAmount += rcp.amount; + } + return totalTransactionAmount; +} + +void WalletModelTransaction::newPossibleKeyChange(CWallet *wallet) +{ + keyChange = new CReserveKey(wallet); +} + +CReserveKey *WalletModelTransaction::getPossibleKeyChange() +{ + return keyChange; +} diff --git a/src/qt/walletmodeltransaction.h b/src/qt/walletmodeltransaction.h new file mode 100644 index 00000000..b7e85bcd --- /dev/null +++ b/src/qt/walletmodeltransaction.h @@ -0,0 +1,44 @@ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef WALLETMODELTRANSACTION_H +#define WALLETMODELTRANSACTION_H + +#include "walletmodel.h" + +#include + +class SendCoinsRecipient; + +class CReserveKey; +class CWallet; +class CWalletTx; + +/** Data model for a walletmodel transaction. */ +class WalletModelTransaction +{ +public: + explicit WalletModelTransaction(const QList &recipients); + ~WalletModelTransaction(); + + QList getRecipients(); + + CWalletTx *getTransaction(); + + void setTransactionFee(qint64 newFee); + qint64 getTransactionFee(); + + qint64 getTotalTransactionAmount(); + + void newPossibleKeyChange(CWallet *wallet); + CReserveKey *getPossibleKeyChange(); + +private: + const QList recipients; + CWalletTx *walletTransaction; + CReserveKey *keyChange; + qint64 fee; +}; + +#endif // WALLETMODELTRANSACTION_H diff --git a/src/qt/walletstack.cpp b/src/qt/walletstack.cpp deleted file mode 100644 index 9e3060e8..00000000 --- a/src/qt/walletstack.cpp +++ /dev/null @@ -1,156 +0,0 @@ -/* - * Qt4 bitcoin GUI. - * - * W.J. van der Laan 2011-2012 - * The Bitcoin Developers 2011-2013 - */ -#include "walletstack.h" -#include "walletview.h" -#include "bitcoingui.h" - -#include -#include - -WalletStack::WalletStack(QWidget *parent) : - QStackedWidget(parent), - clientModel(0), - bOutOfSync(true) -{ - setContentsMargins(0,0,0,0); -} - -WalletStack::~WalletStack() -{ -} - -bool WalletStack::addWallet(const QString& name, WalletModel *walletModel) -{ - if (!gui || !clientModel || mapWalletViews.count(name) > 0) - return false; - - WalletView *walletView = new WalletView(this, gui); - walletView->setBitcoinGUI(gui); - walletView->setClientModel(clientModel); - walletView->setWalletModel(walletModel); - walletView->showOutOfSyncWarning(bOutOfSync); - addWidget(walletView); - mapWalletViews[name] = walletView; - return true; -} - -bool WalletStack::removeWallet(const QString& name) -{ - if (mapWalletViews.count(name) == 0) return false; - WalletView *walletView = mapWalletViews.take(name); - removeWidget(walletView); - return true; -} - -void WalletStack::removeAllWallets() -{ - QMap::const_iterator i; - for (i = mapWalletViews.constBegin(); i != mapWalletViews.constEnd(); ++i) - removeWidget(i.value()); - mapWalletViews.clear(); -} - -bool WalletStack::handleURI(const QString &uri) -{ - WalletView *walletView = (WalletView*)currentWidget(); - if (!walletView) return false; - - return walletView->handleURI(uri); -} - -void WalletStack::showOutOfSyncWarning(bool fShow) -{ - bOutOfSync = fShow; - QMap::const_iterator i; - for (i = mapWalletViews.constBegin(); i != mapWalletViews.constEnd(); ++i) - i.value()->showOutOfSyncWarning(fShow); -} - -void WalletStack::gotoOverviewPage() -{ - QMap::const_iterator i; - for (i = mapWalletViews.constBegin(); i != mapWalletViews.constEnd(); ++i) - i.value()->gotoOverviewPage(); -} - -void WalletStack::gotoHistoryPage() -{ - QMap::const_iterator i; - for (i = mapWalletViews.constBegin(); i != mapWalletViews.constEnd(); ++i) - i.value()->gotoHistoryPage(); -} - -void WalletStack::gotoAddressBookPage() -{ - QMap::const_iterator i; - for (i = mapWalletViews.constBegin(); i != mapWalletViews.constEnd(); ++i) - i.value()->gotoAddressBookPage(); -} - -void WalletStack::gotoReceiveCoinsPage() -{ - QMap::const_iterator i; - for (i = mapWalletViews.constBegin(); i != mapWalletViews.constEnd(); ++i) - i.value()->gotoReceiveCoinsPage(); -} - -void WalletStack::gotoSendCoinsPage(QString addr) -{ - QMap::const_iterator i; - for (i = mapWalletViews.constBegin(); i != mapWalletViews.constEnd(); ++i) - i.value()->gotoSendCoinsPage(addr); -} - -void WalletStack::gotoSignMessageTab(QString addr) -{ - WalletView *walletView = (WalletView*)currentWidget(); - if (walletView) walletView->gotoSignMessageTab(addr); -} - -void WalletStack::gotoVerifyMessageTab(QString addr) -{ - WalletView *walletView = (WalletView*)currentWidget(); - if (walletView) walletView->gotoVerifyMessageTab(addr); -} - -void WalletStack::encryptWallet(bool status) -{ - WalletView *walletView = (WalletView*)currentWidget(); - if (walletView) walletView->encryptWallet(status); -} - -void WalletStack::backupWallet() -{ - WalletView *walletView = (WalletView*)currentWidget(); - if (walletView) walletView->backupWallet(); -} - -void WalletStack::changePassphrase() -{ - WalletView *walletView = (WalletView*)currentWidget(); - if (walletView) walletView->changePassphrase(); -} - -void WalletStack::unlockWallet() -{ - WalletView *walletView = (WalletView*)currentWidget(); - if (walletView) walletView->unlockWallet(); -} - -void WalletStack::setEncryptionStatus() -{ - WalletView *walletView = (WalletView*)currentWidget(); - if (walletView) walletView->setEncryptionStatus(); -} - -void WalletStack::setCurrentWallet(const QString& name) -{ - if (mapWalletViews.count(name) == 0) return; - WalletView *walletView = mapWalletViews.value(name); - setCurrentWidget(walletView); - walletView->setEncryptionStatus(); -} diff --git a/src/qt/walletstack.h b/src/qt/walletstack.h deleted file mode 100644 index 506d595c..00000000 --- a/src/qt/walletstack.h +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Qt4 bitcoin GUI. - * - * W.J. van der Laan 2011-2012 - * The Bitcoin Developers 2011-2013 - */ -#ifndef WALLETSTACK_H -#define WALLETSTACK_H - -#include -#include -#include - -class BitcoinGUI; -class TransactionTableModel; -class ClientModel; -class WalletModel; -class WalletView; -class TransactionView; -class OverviewPage; -class AddressBookPage; -class SendCoinsDialog; -class SignVerifyMessageDialog; -class Notificator; -class RPCConsole; - -class CWalletManager; - -QT_BEGIN_NAMESPACE -class QLabel; -class QModelIndex; -QT_END_NAMESPACE - -/* - WalletStack class. This class is a container for WalletView instances. It takes the place of centralWidget. - It was added to support multiple wallet functionality. It communicates with both the client and the - wallet models to give the user an up-to-date view of the current core state. It manages all the wallet views - it contains and updates them accordingly. - */ -class WalletStack : public QStackedWidget -{ - Q_OBJECT - -public: - explicit WalletStack(QWidget *parent = 0); - ~WalletStack(); - - void setBitcoinGUI(BitcoinGUI *gui) { this->gui = gui; } - - void setClientModel(ClientModel *clientModel) { this->clientModel = clientModel; } - - bool addWallet(const QString& name, WalletModel *walletModel); - bool removeWallet(const QString& name); - - void removeAllWallets(); - - bool handleURI(const QString &uri); - - void showOutOfSyncWarning(bool fShow); - -private: - BitcoinGUI *gui; - ClientModel *clientModel; - QMap mapWalletViews; - - bool bOutOfSync; - -public slots: - void setCurrentWallet(const QString& name); - - /** Switch to overview (home) page */ - void gotoOverviewPage(); - /** Switch to history (transactions) page */ - void gotoHistoryPage(); - /** Switch to address book page */ - void gotoAddressBookPage(); - /** Switch to receive coins page */ - void gotoReceiveCoinsPage(); - /** Switch to send coins page */ - void gotoSendCoinsPage(QString addr = ""); - - /** Show Sign/Verify Message dialog and switch to sign message tab */ - void gotoSignMessageTab(QString addr = ""); - /** Show Sign/Verify Message dialog and switch to verify message tab */ - void gotoVerifyMessageTab(QString addr = ""); - - /** Encrypt the wallet */ - void encryptWallet(bool status); - /** Backup the wallet */ - void backupWallet(); - /** Change encrypted wallet passphrase */ - void changePassphrase(); - /** Ask for passphrase to unlock wallet temporarily */ - void unlockWallet(); - - /** Set the encryption status as shown in the UI. - @param[in] status current encryption status - @see WalletModel::EncryptionStatus - */ - void setEncryptionStatus(); -}; - -#endif // WALLETSTACK_H diff --git a/src/qt/walletview.cpp b/src/qt/walletview.cpp index 277c0566..1cef4834 100644 --- a/src/qt/walletview.cpp +++ b/src/qt/walletview.cpp @@ -1,37 +1,35 @@ -/* - * Qt4 bitcoin GUI. - * - * W.J. van der Laan 2011-2012 - * The Bitcoin Developers 2011-2013 - */ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #include "walletview.h" -#include "bitcoingui.h" -#include "transactiontablemodel.h" + #include "addressbookpage.h" +#include "askpassphrasedialog.h" +#include "bitcoingui.h" +#include "clientmodel.h" +#include "guiutil.h" +#include "optionsmodel.h" +#include "overviewpage.h" +#include "receivecoinsdialog.h" #include "sendcoinsdialog.h" #include "signverifymessagedialog.h" -#include "clientmodel.h" -#include "walletmodel.h" -#include "optionsmodel.h" +#include "transactiontablemodel.h" #include "transactionview.h" -#include "overviewpage.h" -#include "askpassphrasedialog.h" +#include "walletmodel.h" + #include "ui_interface.h" -#include -#include #include -#if QT_VERSION < 0x050000 -#include -#else -#include -#endif +#include #include +#include +#include #include +#include -WalletView::WalletView(QWidget *parent, BitcoinGUI *_gui): +WalletView::WalletView(QWidget *parent): QStackedWidget(parent), - gui(_gui), clientModel(0), walletModel(0) { @@ -53,37 +51,27 @@ WalletView::WalletView(QWidget *parent, BitcoinGUI *_gui): vbox->addLayout(hbox_buttons); transactionsPage->setLayout(vbox); - addressBookPage = new AddressBookPage(AddressBookPage::ForEditing, AddressBookPage::SendingTab); - - receiveCoinsPage = new AddressBookPage(AddressBookPage::ForEditing, AddressBookPage::ReceivingTab); - - sendCoinsPage = new SendCoinsDialog(gui); - - signVerifyMessageDialog = new SignVerifyMessageDialog(gui); + receiveCoinsPage = new ReceiveCoinsDialog(); + sendCoinsPage = new SendCoinsDialog(); addWidget(overviewPage); addWidget(transactionsPage); - addWidget(addressBookPage); addWidget(receiveCoinsPage); addWidget(sendCoinsPage); - // Clicking on a transaction on the overview page simply sends you to transaction history page - connect(overviewPage, SIGNAL(transactionClicked(QModelIndex)), this, SLOT(gotoHistoryPage())); + // Clicking on a transaction on the overview pre-selects the transaction on the transaction history page connect(overviewPage, SIGNAL(transactionClicked(QModelIndex)), transactionView, SLOT(focusTransaction(QModelIndex))); // Double-clicking on a transaction on the transaction history page shows details connect(transactionView, SIGNAL(doubleClicked(QModelIndex)), transactionView, SLOT(showDetails())); - // Clicking on "Send Coins" in the address book sends you to the send coins tab - connect(addressBookPage, SIGNAL(sendCoins(QString)), this, SLOT(gotoSendCoinsPage(QString))); - // Clicking on "Verify Message" in the address book opens the verify message tab in the Sign/Verify Message dialog - connect(addressBookPage, SIGNAL(verifyMessage(QString)), this, SLOT(gotoVerifyMessageTab(QString))); - // Clicking on "Sign Message" in the receive coins page opens the sign message tab in the Sign/Verify Message dialog - connect(receiveCoinsPage, SIGNAL(signMessage(QString)), this, SLOT(gotoSignMessageTab(QString))); // Clicking on "Export" allows to export the transaction list connect(exportButton, SIGNAL(clicked()), transactionView, SLOT(exportClicked())); - gotoOverviewPage(); + // Pass through messages from sendCoinsPage + connect(sendCoinsPage, SIGNAL(message(QString,QString,unsigned int)), this, SIGNAL(message(QString,QString,unsigned int))); + // Pass through messages from transactionView + connect(transactionView, SIGNAL(message(QString,QString,unsigned int)), this, SIGNAL(message(QString,QString,unsigned int))); } WalletView::~WalletView() @@ -92,52 +80,64 @@ WalletView::~WalletView() void WalletView::setBitcoinGUI(BitcoinGUI *gui) { - this->gui = gui; + if (gui) + { + // Clicking on a transaction on the overview page simply sends you to transaction history page + connect(overviewPage, SIGNAL(transactionClicked(QModelIndex)), gui, SLOT(gotoHistoryPage())); + + // Receive and report messages + connect(this, SIGNAL(message(QString,QString,unsigned int)), gui, SLOT(message(QString,QString,unsigned int))); + + // Pass through encryption status changed signals + connect(this, SIGNAL(encryptionStatusChanged(int)), gui, SLOT(setEncryptionStatus(int))); + + // Pass through transaction notifications + connect(this, SIGNAL(incomingTransaction(QString,int,qint64,QString,QString)), gui, SLOT(incomingTransaction(QString,int,qint64,QString,QString))); + } } void WalletView::setClientModel(ClientModel *clientModel) { this->clientModel = clientModel; - if (clientModel) - { - overviewPage->setClientModel(clientModel); - addressBookPage->setOptionsModel(clientModel->getOptionsModel()); - receiveCoinsPage->setOptionsModel(clientModel->getOptionsModel()); - } + + overviewPage->setClientModel(clientModel); } void WalletView::setWalletModel(WalletModel *walletModel) { this->walletModel = walletModel; + + // Put transaction list in tabs + transactionView->setModel(walletModel); + overviewPage->setWalletModel(walletModel); + receiveCoinsPage->setModel(walletModel); + sendCoinsPage->setModel(walletModel); + if (walletModel) { - // Receive and report messages from wallet thread - connect(walletModel, SIGNAL(message(QString,QString,unsigned int)), gui, SLOT(message(QString,QString,unsigned int))); + // Receive and pass through messages from wallet model + connect(walletModel, SIGNAL(message(QString,QString,unsigned int)), this, SIGNAL(message(QString,QString,unsigned int))); - // Put transaction list in tabs - transactionView->setModel(walletModel); - overviewPage->setWalletModel(walletModel); - addressBookPage->setModel(walletModel->getAddressTableModel()); - receiveCoinsPage->setModel(walletModel->getAddressTableModel()); - sendCoinsPage->setModel(walletModel); - signVerifyMessageDialog->setModel(walletModel); - - setEncryptionStatus(); - connect(walletModel, SIGNAL(encryptionStatusChanged(int)), gui, SLOT(setEncryptionStatus(int))); + // Handle changes in encryption status + connect(walletModel, SIGNAL(encryptionStatusChanged(int)), this, SIGNAL(encryptionStatusChanged(int))); + updateEncryptionStatus(); // Balloon pop-up for new transaction connect(walletModel->getTransactionTableModel(), SIGNAL(rowsInserted(QModelIndex,int,int)), - this, SLOT(incomingTransaction(QModelIndex,int,int))); + this, SLOT(processNewTransaction(QModelIndex,int,int))); // Ask for passphrase if needed connect(walletModel, SIGNAL(requireUnlock()), this, SLOT(unlockWallet())); + + // Show progress dialog + connect(walletModel, SIGNAL(showProgress(QString,int)), this, SLOT(showProgress(QString,int))); } } -void WalletView::incomingTransaction(const QModelIndex& parent, int start, int /*end*/) +void WalletView::processNewTransaction(const QModelIndex& parent, int start, int /*end*/) { // Prevent balloon-spam when initial block download is in progress - if(!walletModel || !clientModel || clientModel->inInitialBlockDownload()) + if (!walletModel || !clientModel || clientModel->inInitialBlockDownload()) return; TransactionTableModel *ttm = walletModel->getTransactionTableModel(); @@ -147,36 +147,26 @@ void WalletView::incomingTransaction(const QModelIndex& parent, int start, int / QString type = ttm->index(start, TransactionTableModel::Type, parent).data().toString(); QString address = ttm->index(start, TransactionTableModel::ToAddress, parent).data().toString(); - gui->incomingTransaction(date, walletModel->getOptionsModel()->getDisplayUnit(), amount, type, address); + emit incomingTransaction(date, walletModel->getOptionsModel()->getDisplayUnit(), amount, type, address); } void WalletView::gotoOverviewPage() { - gui->getOverviewAction()->setChecked(true); setCurrentWidget(overviewPage); } void WalletView::gotoHistoryPage() { - gui->getHistoryAction()->setChecked(true); setCurrentWidget(transactionsPage); } -void WalletView::gotoAddressBookPage() -{ - gui->getAddressBookAction()->setChecked(true); - setCurrentWidget(addressBookPage); -} - void WalletView::gotoReceiveCoinsPage() { - gui->getReceiveCoinsAction()->setChecked(true); setCurrentWidget(receiveCoinsPage); } void WalletView::gotoSendCoinsPage(QString addr) { - gui->getSendCoinsAction()->setChecked(true); setCurrentWidget(sendCoinsPage); if (!addr.isEmpty()) @@ -185,7 +175,10 @@ void WalletView::gotoSendCoinsPage(QString addr) void WalletView::gotoSignMessageTab(QString addr) { - // call show() in showTab_SM() + // calls show() in showTab_SM() + SignVerifyMessageDialog *signVerifyMessageDialog = new SignVerifyMessageDialog(this); + signVerifyMessageDialog->setAttribute(Qt::WA_DeleteOnClose); + signVerifyMessageDialog->setModel(walletModel); signVerifyMessageDialog->showTab_SM(true); if (!addr.isEmpty()) @@ -194,23 +187,19 @@ void WalletView::gotoSignMessageTab(QString addr) void WalletView::gotoVerifyMessageTab(QString addr) { - // call show() in showTab_VM() + // calls show() in showTab_VM() + SignVerifyMessageDialog *signVerifyMessageDialog = new SignVerifyMessageDialog(this); + signVerifyMessageDialog->setAttribute(Qt::WA_DeleteOnClose); + signVerifyMessageDialog->setModel(walletModel); signVerifyMessageDialog->showTab_VM(true); if (!addr.isEmpty()) signVerifyMessageDialog->setAddress_VM(addr); } -bool WalletView::handleURI(const QString& strURI) +bool WalletView::handlePaymentRequest(const SendCoinsRecipient& recipient) { - // URI has to be valid - if (sendCoinsPage->handleURI(strURI)) - { - gotoSendCoinsPage(); - return true; - } - else - return false; + return sendCoinsPage->handlePaymentRequest(recipient); } void WalletView::showOutOfSyncWarning(bool fShow) @@ -218,9 +207,9 @@ void WalletView::showOutOfSyncWarning(bool fShow) overviewPage->showOutOfSyncWarning(fShow); } -void WalletView::setEncryptionStatus() +void WalletView::updateEncryptionStatus() { - gui->setEncryptionStatus(walletModel->getEncryptionStatus()); + emit encryptionStatusChanged(walletModel->getEncryptionStatus()); } void WalletView::encryptWallet(bool status) @@ -231,25 +220,25 @@ void WalletView::encryptWallet(bool status) dlg.setModel(walletModel); dlg.exec(); - setEncryptionStatus(); + updateEncryptionStatus(); } void WalletView::backupWallet() { -#if QT_VERSION < 0x050000 - QString saveDir = QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation); -#else - QString saveDir = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation); -#endif - QString filename = QFileDialog::getSaveFileName(this, tr("Backup Wallet"), saveDir, tr("Wallet Data (*.dat)")); - if (!filename.isEmpty()) { - if (!walletModel->backupWallet(filename)) { - gui->message(tr("Backup Failed"), tr("There was an error trying to save the wallet data to the new location."), - CClientUIInterface::MSG_ERROR); + QString filename = GUIUtil::getSaveFileName(this, + tr("Backup Wallet"), QString(), + tr("Wallet Data (*.dat)"), NULL); + + if (filename.isEmpty()) + return; + + if (!walletModel->backupWallet(filename)) { + emit message(tr("Backup Failed"), tr("There was an error trying to save the wallet data to %1.").arg(filename), + CClientUIInterface::MSG_ERROR); } - else - gui->message(tr("Backup Successful"), tr("The wallet data was successfully saved to the new location."), - CClientUIInterface::MSG_INFORMATION); + else { + emit message(tr("Backup Successful"), tr("The wallet data was successfully saved to %1.").arg(filename), + CClientUIInterface::MSG_INFORMATION); } } @@ -272,3 +261,46 @@ void WalletView::unlockWallet() dlg.exec(); } } + +void WalletView::usedSendingAddresses() +{ + if(!walletModel) + return; + AddressBookPage *dlg = new AddressBookPage(AddressBookPage::ForEditing, AddressBookPage::SendingTab, this); + dlg->setAttribute(Qt::WA_DeleteOnClose); + dlg->setModel(walletModel->getAddressTableModel()); + dlg->show(); +} + +void WalletView::usedReceivingAddresses() +{ + if(!walletModel) + return; + AddressBookPage *dlg = new AddressBookPage(AddressBookPage::ForEditing, AddressBookPage::ReceivingTab, this); + dlg->setAttribute(Qt::WA_DeleteOnClose); + dlg->setModel(walletModel->getAddressTableModel()); + dlg->show(); +} + +void WalletView::showProgress(const QString &title, int nProgress) +{ + if (nProgress == 0) + { + progressDialog = new QProgressDialog(title, "", 0, 100); + progressDialog->setWindowModality(Qt::ApplicationModal); + progressDialog->setMinimumDuration(0); + progressDialog->setCancelButton(0); + progressDialog->setAutoClose(false); + progressDialog->setValue(0); + } + else if (nProgress == 100) + { + if (progressDialog) + { + progressDialog->close(); + progressDialog->deleteLater(); + } + } + else if (progressDialog) + progressDialog->setValue(nProgress); +} diff --git a/src/qt/walletview.h b/src/qt/walletview.h index 6bcd70ba..9cfa8d67 100644 --- a/src/qt/walletview.h +++ b/src/qt/walletview.h @@ -1,9 +1,7 @@ -/* - * Qt4 bitcoin GUI. - * - * W.J. van der Laan 2011-2012 - * The Bitcoin Developers 2011-2013 - */ +// Copyright (c) 2011-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef WALLETVIEW_H #define WALLETVIEW_H @@ -11,17 +9,16 @@ class BitcoinGUI; class ClientModel; -class WalletModel; -class TransactionView; class OverviewPage; -class AddressBookPage; +class ReceiveCoinsDialog; class SendCoinsDialog; -class SignVerifyMessageDialog; -class RPCConsole; +class SendCoinsRecipient; +class TransactionView; +class WalletModel; QT_BEGIN_NAMESPACE -class QLabel; class QModelIndex; +class QProgressDialog; QT_END_NAMESPACE /* @@ -35,7 +32,7 @@ class WalletView : public QStackedWidget Q_OBJECT public: - explicit WalletView(QWidget *parent, BitcoinGUI *_gui); + explicit WalletView(QWidget *parent); ~WalletView(); void setBitcoinGUI(BitcoinGUI *gui); @@ -49,31 +46,28 @@ public: */ void setWalletModel(WalletModel *walletModel); - bool handleURI(const QString &uri); + bool handlePaymentRequest(const SendCoinsRecipient& recipient); void showOutOfSyncWarning(bool fShow); private: - BitcoinGUI *gui; ClientModel *clientModel; WalletModel *walletModel; OverviewPage *overviewPage; QWidget *transactionsPage; - AddressBookPage *addressBookPage; - AddressBookPage *receiveCoinsPage; + ReceiveCoinsDialog *receiveCoinsPage; SendCoinsDialog *sendCoinsPage; - SignVerifyMessageDialog *signVerifyMessageDialog; TransactionView *transactionView; + QProgressDialog *progressDialog; + public slots: /** Switch to overview (home) page */ void gotoOverviewPage(); /** Switch to history (transactions) page */ void gotoHistoryPage(); - /** Switch to address book page */ - void gotoAddressBookPage(); /** Switch to receive coins page */ void gotoReceiveCoinsPage(); /** Switch to send coins page */ @@ -88,7 +82,7 @@ public slots: The new items are those between start and end inclusive, under the given parent item. */ - void incomingTransaction(const QModelIndex& parent, int start, int /*end*/); + void processNewTransaction(const QModelIndex& parent, int start, int /*end*/); /** Encrypt the wallet */ void encryptWallet(bool status); /** Backup the wallet */ @@ -98,7 +92,26 @@ public slots: /** Ask for passphrase to unlock wallet temporarily */ void unlockWallet(); - void setEncryptionStatus(); + /** Show used sending addresses */ + void usedSendingAddresses(); + /** Show used receiving addresses */ + void usedReceivingAddresses(); + + /** Re-emit encryption status signal */ + void updateEncryptionStatus(); + + /** Show progress dialog e.g. for rescan */ + void showProgress(const QString &title, int nProgress); + +signals: + /** Signal that we want to show the main window */ + void showNormalIfMinimized(); + /** Fired when a message should be reported to the user */ + void message(const QString &title, const QString &message, unsigned int style); + /** Encryption status of wallet changed */ + void encryptionStatusChanged(int status); + /** Notify that a new transaction appeared */ + void incomingTransaction(const QString& date, int unit, qint64 amount, const QString& type, const QString& address); }; #endif // WALLETVIEW_H diff --git a/src/qt/winshutdownmonitor.cpp b/src/qt/winshutdownmonitor.cpp new file mode 100644 index 00000000..b7526f0a --- /dev/null +++ b/src/qt/winshutdownmonitor.cpp @@ -0,0 +1,57 @@ +// Copyright (c) 2014 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "winshutdownmonitor.h" + +#if defined(Q_OS_WIN) && QT_VERSION >= 0x050000 +#include "init.h" + +#include + +#include + +// If we don't want a message to be processed by Qt, return true and set result to +// the value that the window procedure should return. Otherwise return false. +bool WinShutdownMonitor::nativeEventFilter(const QByteArray &eventType, void *pMessage, long *pnResult) +{ + Q_UNUSED(eventType); + + MSG *pMsg = static_cast(pMessage); + + switch(pMsg->message) + { + case WM_QUERYENDSESSION: + { + // Initiate a client shutdown after receiving a WM_QUERYENDSESSION and block + // Windows session end until we have finished client shutdown. + StartShutdown(); + *pnResult = FALSE; + return true; + } + + case WM_ENDSESSION: + { + *pnResult = FALSE; + return true; + } + } + + return false; +} + +void WinShutdownMonitor::registerShutdownBlockReason(const QString& strReason, const HWND& mainWinId) +{ + typedef BOOL (WINAPI *PSHUTDOWNBRCREATE)(HWND, LPCWSTR); + PSHUTDOWNBRCREATE shutdownBRCreate = (PSHUTDOWNBRCREATE)GetProcAddress(GetModuleHandleA("User32.dll"), "ShutdownBlockReasonCreate"); + if (shutdownBRCreate == NULL) { + qDebug() << "registerShutdownBlockReason : GetProcAddress for ShutdownBlockReasonCreate failed"; + return; + } + + if (shutdownBRCreate(mainWinId, strReason.toStdWString().c_str())) + qDebug() << "registerShutdownBlockReason : Successfully registered: " + strReason; + else + qDebug() << "registerShutdownBlockReason : Failed to register: " + strReason; +} +#endif diff --git a/src/qt/winshutdownmonitor.h b/src/qt/winshutdownmonitor.h new file mode 100644 index 00000000..4c76d2c8 --- /dev/null +++ b/src/qt/winshutdownmonitor.h @@ -0,0 +1,29 @@ +// Copyright (c) 2014 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef WINSHUTDOWNMONITOR_H +#define WINSHUTDOWNMONITOR_H + +#ifdef WIN32 +#include +#include + +#if QT_VERSION >= 0x050000 +#include // for HWND + +#include + +class WinShutdownMonitor : public QAbstractNativeEventFilter +{ +public: + /** Implements QAbstractNativeEventFilter interface for processing Windows messages */ + bool nativeEventFilter(const QByteArray &eventType, void *pMessage, long *pnResult); + + /** Register the reason for blocking shutdown on Windows to allow clean client exit */ + static void registerShutdownBlockReason(const QString& strReason, const HWND& mainWinId); +}; +#endif +#endif + +#endif // WINSHUTDOWNMONITOR_H diff --git a/src/rpcblockchain.cpp b/src/rpcblockchain.cpp index 653933c8..4d359770 100644 --- a/src/rpcblockchain.cpp +++ b/src/rpcblockchain.cpp @@ -1,16 +1,21 @@ // Copyright (c) 2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2013 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. +#include "rpcserver.h" #include "main.h" -#include "bitcoinrpc.h" -#include "core.h" +#include "sync.h" +#include "checkpoints.h" + +#include + +#include "json/json_spirit_value.h" using namespace json_spirit; using namespace std; -void ScriptPubKeyToJSON(const CScript& scriptPubKey, Object& out); +void ScriptPubKeyToJSON(const CScript& scriptPubKey, Object& out, bool fIncludeHex); double GetDifficulty(const CBlockIndex* blockindex, int algo) { @@ -20,11 +25,11 @@ double GetDifficulty(const CBlockIndex* blockindex, int algo) // minimum difficulty = 1.0. if (blockindex == NULL) { - if (pindexBest == NULL) + if (chainActive.Tip() == NULL) nBits = Params().ProofOfWorkLimit(ALGO_SHA256D).GetCompact(); else { - blockindex = GetLastBlockIndexForAlgo(pindexBest, algo); + blockindex = GetLastBlockIndexForAlgo(chainActive.Tip(), algo); if (blockindex == NULL) nBits = Params().ProofOfWorkLimit(algo).GetCompact(); else @@ -33,11 +38,11 @@ double GetDifficulty(const CBlockIndex* blockindex, int algo) } else nBits = blockindex->nBits; - + int nShift = (nBits >> 24) & 0xff; double dDiff = - (double)0x0000ffff / (double)(nBits & 0x00ffffff); + (double)0x0000ffff / (double)(blockindex->nBits & 0x00ffffff); while (nShift < 29) { @@ -73,14 +78,15 @@ Object blockToJSON(const CBlock& block, const CBlockIndex* blockindex) BOOST_FOREACH(const CTransaction&tx, block.vtx) txs.push_back(tx.GetHash().GetHex()); result.push_back(Pair("tx", txs)); - result.push_back(Pair("time", (boost::int64_t)block.GetBlockTime())); - result.push_back(Pair("nonce", (boost::uint64_t)block.nNonce)); + result.push_back(Pair("time", block.GetBlockTime())); + result.push_back(Pair("nonce", (uint64_t)block.nNonce)); result.push_back(Pair("bits", HexBits(block.nBits))); result.push_back(Pair("difficulty", GetDifficulty(blockindex, miningAlgo))); + result.push_back(Pair("chainwork", blockindex->nChainWork.GetHex())); if (blockindex->pprev) result.push_back(Pair("previousblockhash", blockindex->pprev->GetBlockHash().GetHex())); - CBlockIndex *pnext = blockindex->GetNextInMainChain(); + CBlockIndex *pnext = chainActive.Next(blockindex); if (pnext) result.push_back(Pair("nextblockhash", pnext->GetBlockHash().GetHex())); return result; @@ -92,9 +98,15 @@ Value getblockcount(const Array& params, bool fHelp) if (fHelp || params.size() != 0) throw runtime_error( "getblockcount\n" - "Returns the number of blocks in the longest block chain."); + "\nReturns the number of blocks in the longest block chain.\n" + "\nResult:\n" + "n (numeric) The current block count\n" + "\nExamples:\n" + + HelpExampleCli("getblockcount", "") + + HelpExampleRpc("getblockcount", "") + ); - return nBestHeight; + return chainActive.Height(); } Value getbestblockhash(const Array& params, bool fHelp) @@ -102,9 +114,15 @@ Value getbestblockhash(const Array& params, bool fHelp) if (fHelp || params.size() != 0) throw runtime_error( "getbestblockhash\n" - "Returns the hash of the best (tip) block in the longest block chain."); + "\nReturns the hash of the best (tip) block in the longest block chain.\n" + "\nResult\n" + "\"hex\" (string) the block hash hex encoded\n" + "\nExamples\n" + + HelpExampleCli("getbestblockhash", "") + + HelpExampleRpc("getbestblockhash", "") + ); - return hashBestChain.GetHex(); + return chainActive.Tip()->GetBlockHash().GetHex(); } Value getdifficulty(const Array& params, bool fHelp) @@ -112,67 +130,152 @@ Value getdifficulty(const Array& params, bool fHelp) if (fHelp || params.size() != 0) throw runtime_error( "getdifficulty\n" - "Returns the proof-of-work difficulty as a multiple of the minimum difficulty."); + "\nReturns the proof-of-work difficulty as a multiple of the minimum difficulty.\n" + "\nResult:\n" + "n.nnn (numeric) the proof-of-work difficulty as a multiple of the minimum difficulty.\n" + "\nExamples:\n" + + HelpExampleCli("getdifficulty", "") + + HelpExampleRpc("getdifficulty", "") + ); return GetDifficulty(NULL, miningAlgo); } -Value settxfee(const Array& params, bool fHelp) -{ - if (fHelp || params.size() < 1 || params.size() > 1) - throw runtime_error( - "settxfee \n" - " is a real and is rounded to the nearest 0.00000001"); - - // Amount - int64 nAmount = 0; - if (params[0].get_real() != 0.0) - nAmount = AmountFromValue(params[0]); // rejects 0.0 amounts - - nTransactionFee = nAmount; - return true; -} - Value getrawmempool(const Array& params, bool fHelp) { - if (fHelp || params.size() != 0) + if (fHelp || params.size() > 1) throw runtime_error( - "getrawmempool\n" - "Returns all transaction ids in memory pool."); + "getrawmempool ( verbose )\n" + "\nReturns all transaction ids in memory pool as a json array of string transaction ids.\n" + "\nArguments:\n" + "1. verbose (boolean, optional, default=false) true for a json object, false for array of transaction ids\n" + "\nResult: (for verbose = false):\n" + "[ (json array of string)\n" + " \"transactionid\" (string) The transaction id\n" + " ,...\n" + "]\n" + "\nResult: (for verbose = true):\n" + "{ (json object)\n" + " \"transactionid\" : { (json object)\n" + " \"size\" : n, (numeric) transaction size in bytes\n" + " \"fee\" : n, (numeric) transaction fee in myriadcoins\n" + " \"time\" : n, (numeric) local time transaction entered pool in seconds since 1 Jan 1970 GMT\n" + " \"height\" : n, (numeric) block height when transaction entered pool\n" + " \"startingpriority\" : n, (numeric) priority when transaction entered pool\n" + " \"currentpriority\" : n, (numeric) transaction priority now\n" + " \"depends\" : [ (array) unconfirmed transactions used as inputs for this transaction\n" + " \"transactionid\", (string) parent transaction id\n" + " ... ]\n" + " }, ...\n" + "]\n" + "\nExamples\n" + + HelpExampleCli("getrawmempool", "true") + + HelpExampleRpc("getrawmempool", "true") + ); - vector vtxid; - mempool.queryHashes(vtxid); + bool fVerbose = false; + if (params.size() > 0) + fVerbose = params[0].get_bool(); - Array a; - BOOST_FOREACH(const uint256& hash, vtxid) - a.push_back(hash.ToString()); + if (fVerbose) + { + LOCK(mempool.cs); + Object o; + BOOST_FOREACH(const PAIRTYPE(uint256, CTxMemPoolEntry)& entry, mempool.mapTx) + { + const uint256& hash = entry.first; + const CTxMemPoolEntry& e = entry.second; + Object info; + info.push_back(Pair("size", (int)e.GetTxSize())); + info.push_back(Pair("fee", ValueFromAmount(e.GetFee()))); + info.push_back(Pair("time", e.GetTime())); + info.push_back(Pair("height", (int)e.GetHeight())); + info.push_back(Pair("startingpriority", e.GetPriority(e.GetHeight()))); + info.push_back(Pair("currentpriority", e.GetPriority(chainActive.Height()))); + const CTransaction& tx = e.GetTx(); + set setDepends; + BOOST_FOREACH(const CTxIn& txin, tx.vin) + { + if (mempool.exists(txin.prevout.hash)) + setDepends.insert(txin.prevout.hash.ToString()); + } + Array depends(setDepends.begin(), setDepends.end()); + info.push_back(Pair("depends", depends)); + o.push_back(Pair(hash.ToString(), info)); + } + return o; + } + else + { + vector vtxid; + mempool.queryHashes(vtxid); - return a; + Array a; + BOOST_FOREACH(const uint256& hash, vtxid) + a.push_back(hash.ToString()); + + return a; + } } Value getblockhash(const Array& params, bool fHelp) { if (fHelp || params.size() != 1) throw runtime_error( - "getblockhash \n" - "Returns hash of block in best-block-chain at ."); + "getblockhash index\n" + "\nReturns hash of block in best-block-chain at index provided.\n" + "\nArguments:\n" + "1. index (numeric, required) The block index\n" + "\nResult:\n" + "\"hash\" (string) The block hash\n" + "\nExamples:\n" + + HelpExampleCli("getblockhash", "1000") + + HelpExampleRpc("getblockhash", "1000") + ); int nHeight = params[0].get_int(); - if (nHeight < 0 || nHeight > nBestHeight) + if (nHeight < 0 || nHeight > chainActive.Height()) throw runtime_error("Block number out of range."); - CBlockIndex* pblockindex = FindBlockByHeight(nHeight); - return pblockindex->phashBlock->GetHex(); + CBlockIndex* pblockindex = chainActive[nHeight]; + return pblockindex->GetBlockHash().GetHex(); } Value getblock(const Array& params, bool fHelp) { if (fHelp || params.size() < 1 || params.size() > 2) throw runtime_error( - "getblock [verbose=true]\n" - "If verbose is false, returns a string that is serialized, hex-encoded data for block .\n" - "If verbose is true, returns an Object with information about block ." + "getblock \"hash\" ( verbose )\n" + "\nIf verbose is false, returns a string that is serialized, hex-encoded data for block 'hash'.\n" + "If verbose is true, returns an Object with information about block .\n" + "\nArguments:\n" + "1. \"hash\" (string, required) The block hash\n" + "2. verbose (boolean, optional, default=true) true for a json object, false for the hex encoded data\n" + "\nResult (for verbose = true):\n" + "{\n" + " \"hash\" : \"hash\", (string) the block hash (same as provided)\n" + " \"confirmations\" : n, (numeric) The number of confirmations\n" + " \"size\" : n, (numeric) The block size\n" + " \"height\" : n, (numeric) The block height or index\n" + " \"version\" : n, (numeric) The block version\n" + " \"merkleroot\" : \"xxxx\", (string) The merkle root\n" + " \"tx\" : [ (array of string) The transaction ids\n" + " \"transactionid\" (string) The transaction id\n" + " ,...\n" + " ],\n" + " \"time\" : ttt, (numeric) The block time in seconds since epoch (Jan 1 1970 GMT)\n" + " \"nonce\" : n, (numeric) The nonce\n" + " \"bits\" : \"1d00ffff\", (string) The bits\n" + " \"difficulty\" : x.xxx, (numeric) The difficulty\n" + " \"previousblockhash\" : \"hash\", (string) The hash of the previous block\n" + " \"nextblockhash\" : \"hash\" (string) The hash of the next block\n" + "}\n" + "\nResult (for verbose=false):\n" + "\"data\" (string) A string that is serialized, hex-encoded data for block 'hash'.\n" + "\nExamples:\n" + + HelpExampleCli("getblock", "\"00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09\"") + + HelpExampleRpc("getblock", "\"00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09\"") ); std::string strHash = params[0].get_str(); @@ -205,17 +308,32 @@ Value gettxoutsetinfo(const Array& params, bool fHelp) if (fHelp || params.size() != 0) throw runtime_error( "gettxoutsetinfo\n" - "Returns statistics about the unspent transaction output set."); + "\nReturns statistics about the unspent transaction output set.\n" + "Note this call may take some time.\n" + "\nResult:\n" + "{\n" + " \"height\":n, (numeric) The current block height (index)\n" + " \"bestblock\": \"hex\", (string) the best block hash hex\n" + " \"transactions\": n, (numeric) The number of transactions\n" + " \"txouts\": n, (numeric) The number of output transactions\n" + " \"bytes_serialized\": n, (numeric) The serialized size\n" + " \"hash_serialized\": \"hash\", (string) The serialized hash\n" + " \"total_amount\": x.xxx (numeric) The total amount\n" + "}\n" + "\nExamples:\n" + + HelpExampleCli("gettxoutsetinfo", "") + + HelpExampleRpc("gettxoutsetinfo", "") + ); Object ret; CCoinsStats stats; if (pcoinsTip->GetStats(stats)) { - ret.push_back(Pair("height", (boost::int64_t)stats.nHeight)); + ret.push_back(Pair("height", (int64_t)stats.nHeight)); ret.push_back(Pair("bestblock", stats.hashBlock.GetHex())); - ret.push_back(Pair("transactions", (boost::int64_t)stats.nTransactions)); - ret.push_back(Pair("txouts", (boost::int64_t)stats.nTransactionOutputs)); - ret.push_back(Pair("bytes_serialized", (boost::int64_t)stats.nSerializedSize)); + ret.push_back(Pair("transactions", (int64_t)stats.nTransactions)); + ret.push_back(Pair("txouts", (int64_t)stats.nTransactionOutputs)); + ret.push_back(Pair("bytes_serialized", (int64_t)stats.nSerializedSize)); ret.push_back(Pair("hash_serialized", stats.hashSerialized.GetHex())); ret.push_back(Pair("total_amount", ValueFromAmount(stats.nTotalAmount))); } @@ -226,8 +344,39 @@ Value gettxout(const Array& params, bool fHelp) { if (fHelp || params.size() < 2 || params.size() > 3) throw runtime_error( - "gettxout [includemempool=true]\n" - "Returns details about an unspent transaction output."); + "gettxout \"txid\" n ( includemempool )\n" + "\nReturns details about an unspent transaction output.\n" + "\nArguments:\n" + "1. \"txid\" (string, required) The transaction id\n" + "2. n (numeric, required) vout value\n" + "3. includemempool (boolean, optional) Whether to included the mem pool\n" + "\nResult:\n" + "{\n" + " \"bestblock\" : \"hash\", (string) the block hash\n" + " \"confirmations\" : n, (numeric) The number of confirmations\n" + " \"value\" : x.xxx, (numeric) The transaction value in btc\n" + " \"scriptPubKey\" : { (json object)\n" + " \"asm\" : \"code\", (string) \n" + " \"hex\" : \"hex\", (string) \n" + " \"reqSigs\" : n, (numeric) Number of required signatures\n" + " \"type\" : \"pubkeyhash\", (string) The type, eg pubkeyhash\n" + " \"addresses\" : [ (array of string) array of myriadcoin addresses\n" + " \"myriadcoinaddress\" (string) myriadcoin address\n" + " ,...\n" + " ]\n" + " },\n" + " \"version\" : n, (numeric) The version\n" + " \"coinbase\" : true|false (boolean) Coinbase or not\n" + "}\n" + + "\nExamples:\n" + "\nGet unspent transactions\n" + + HelpExampleCli("listunspent", "") + + "\nView the details\n" + + HelpExampleCli("gettxout", "\"txid\" 1") + + "\nAs a json rpc call\n" + + HelpExampleRpc("gettxout", "\"txid\", 1") + ); Object ret; @@ -252,14 +401,16 @@ Value gettxout(const Array& params, bool fHelp) if (n<0 || (unsigned int)n>=coins.vout.size() || coins.vout[n].IsNull()) return Value::null; - ret.push_back(Pair("bestblock", pcoinsTip->GetBestBlock()->GetBlockHash().GetHex())); + std::map::iterator it = mapBlockIndex.find(pcoinsTip->GetBestBlock()); + CBlockIndex *pindex = it->second; + ret.push_back(Pair("bestblock", pindex->GetBlockHash().GetHex())); if ((unsigned int)coins.nHeight == MEMPOOL_HEIGHT) ret.push_back(Pair("confirmations", 0)); else - ret.push_back(Pair("confirmations", pcoinsTip->GetBestBlock()->nHeight - coins.nHeight + 1)); + ret.push_back(Pair("confirmations", pindex->nHeight - coins.nHeight + 1)); ret.push_back(Pair("value", ValueFromAmount(coins.vout[n].nValue))); Object o; - ScriptPubKeyToJSON(coins.vout[n].scriptPubKey, o); + ScriptPubKeyToJSON(coins.vout[n].scriptPubKey, o, true); ret.push_back(Pair("scriptPubKey", o)); ret.push_back(Pair("version", coins.nVersion)); ret.push_back(Pair("coinbase", coins.fCoinBase)); @@ -271,8 +422,17 @@ Value verifychain(const Array& params, bool fHelp) { if (fHelp || params.size() > 2) throw runtime_error( - "verifychain [check level] [num blocks]\n" - "Verifies blockchain database."); + "verifychain ( checklevel numblocks )\n" + "\nVerifies blockchain database.\n" + "\nArguments:\n" + "1. checklevel (numeric, optional, 0-4, default=3) How thorough the block verification is.\n" + "2. numblocks (numeric, optional, default=288, 0=all) The number of blocks to check.\n" + "\nResult:\n" + "true|false (boolean) Verified or not\n" + "\nExamples:\n" + + HelpExampleCli("verifychain", "") + + HelpExampleRpc("verifychain", "") + ); int nCheckLevel = GetArg("-checklevel", 3); int nCheckDepth = GetArg("-checkblocks", 288); @@ -284,3 +444,38 @@ Value verifychain(const Array& params, bool fHelp) return VerifyDB(nCheckLevel, nCheckDepth); } +Value getblockchaininfo(const Array& params, bool fHelp) +{ + if (fHelp || params.size() != 0) + throw runtime_error( + "getblockchaininfo\n" + "Returns an object containing various state info regarding block chain processing.\n" + "\nResult:\n" + "{\n" + " \"chain\": \"xxxx\", (string) current chain (main, testnet3, regtest)\n" + " \"blocks\": xxxxxx, (numeric) the current number of blocks processed in the server\n" + " \"bestblockhash\": \"...\", (string) the hash of the currently best block\n" + " \"difficulty\": xxxxxx, (numeric) the current difficulty\n" + " \"verificationprogress\": xxxx, (numeric) estimate of verification progress [0..1]\n" + " \"chainwork\": \"xxxx\" (string) total amount of work in active chain, in hexadecimal\n" + "}\n" + "\nExamples:\n" + + HelpExampleCli("getblockchaininfo", "") + + HelpExampleRpc("getblockchaininfo", "") + ); + + proxyType proxy; + GetProxy(NET_IPV4, proxy); + + Object obj; + std::string chain = Params().DataDir(); + if(chain.empty()) + chain = "main"; + obj.push_back(Pair("chain", chain)); + obj.push_back(Pair("blocks", (int)chainActive.Height())); + obj.push_back(Pair("bestblockhash", chainActive.Tip()->GetBlockHash().GetHex())); + obj.push_back(Pair("difficulty", (double)GetDifficulty(NULL, miningAlgo))); + obj.push_back(Pair("verificationprogress", Checkpoints::GuessVerificationProgress(chainActive.Tip()))); + obj.push_back(Pair("chainwork", chainActive.Tip()->nChainWork.GetHex())); + return obj; +} diff --git a/src/rpcclient.cpp b/src/rpcclient.cpp new file mode 100644 index 00000000..c53c344a --- /dev/null +++ b/src/rpcclient.cpp @@ -0,0 +1,280 @@ +// Copyright (c) 2010 Satoshi Nakamoto +// Copyright (c) 2009-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "rpcclient.h" + +#include "rpcprotocol.h" +#include "util.h" +#include "ui_interface.h" +#include "chainparams.h" // for Params().RPCPort() + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "json/json_spirit_writer_template.h" + +using namespace std; +using namespace boost; +using namespace boost::asio; +using namespace json_spirit; + +Object CallRPC(const string& strMethod, const Array& params) +{ + if (mapArgs["-rpcuser"] == "" && mapArgs["-rpcpassword"] == "") + throw runtime_error(strprintf( + _("You must set rpcpassword= in the configuration file:\n%s\n" + "If the file does not exist, create it with owner-readable-only file permissions."), + GetConfigFile().string().c_str())); + + // Connect to localhost + bool fUseSSL = GetBoolArg("-rpcssl", false); + asio::io_service io_service; + ssl::context context(io_service, ssl::context::sslv23); + context.set_options(ssl::context::no_sslv2); + asio::ssl::stream sslStream(io_service, context); + SSLIOStreamDevice d(sslStream, fUseSSL); + iostreams::stream< SSLIOStreamDevice > stream(d); + + bool fWait = GetBoolArg("-rpcwait", false); // -rpcwait means try until server has started + do { + bool fConnected = d.connect(GetArg("-rpcconnect", "127.0.0.1"), GetArg("-rpcport", itostr(Params().RPCPort()))); + if (fConnected) break; + if (fWait) + MilliSleep(1000); + else + throw runtime_error("couldn't connect to server"); + } while (fWait); + + // HTTP basic authentication + string strUserPass64 = EncodeBase64(mapArgs["-rpcuser"] + ":" + mapArgs["-rpcpassword"]); + map mapRequestHeaders; + mapRequestHeaders["Authorization"] = string("Basic ") + strUserPass64; + + // Send request + string strRequest = JSONRPCRequest(strMethod, params, 1); + string strPost = HTTPPost(strRequest, mapRequestHeaders); + stream << strPost << std::flush; + + // Receive HTTP reply status + int nProto = 0; + int nStatus = ReadHTTPStatus(stream, nProto); + + // Receive HTTP reply message headers and body + map mapHeaders; + string strReply; + ReadHTTPMessage(stream, mapHeaders, strReply, nProto); + + if (nStatus == HTTP_UNAUTHORIZED) + throw runtime_error("incorrect rpcuser or rpcpassword (authorization failed)"); + else if (nStatus >= 400 && nStatus != HTTP_BAD_REQUEST && nStatus != HTTP_NOT_FOUND && nStatus != HTTP_INTERNAL_SERVER_ERROR) + throw runtime_error(strprintf("server returned HTTP error %d", nStatus)); + else if (strReply.empty()) + throw runtime_error("no response from server"); + + // Parse reply + Value valReply; + if (!read_string(strReply, valReply)) + throw runtime_error("couldn't parse reply from server"); + const Object& reply = valReply.get_obj(); + if (reply.empty()) + throw runtime_error("expected reply to have result, error and id properties"); + + return reply; +} + +template +void ConvertTo(Value& value, bool fAllowNull=false) +{ + if (fAllowNull && value.type() == null_type) + return; + if (value.type() == str_type) + { + // reinterpret string as unquoted json value + Value value2; + string strJSON = value.get_str(); + if (!read_string(strJSON, value2)) + throw runtime_error(string("Error parsing JSON:")+strJSON); + ConvertTo(value2, fAllowNull); + value = value2; + } + else + { + value = value.get_value(); + } +} + +// Convert strings to command-specific RPC representation +Array RPCConvertValues(const std::string &strMethod, const std::vector &strParams) +{ + Array params; + BOOST_FOREACH(const std::string ¶m, strParams) + params.push_back(param); + + int n = params.size(); + + // + // Special case non-string parameter types + // + if (strMethod == "stop" && n > 0) ConvertTo(params[0]); + if (strMethod == "getaddednodeinfo" && n > 0) ConvertTo(params[0]); + if (strMethod == "setgenerate" && n > 0) ConvertTo(params[0]); + if (strMethod == "setgenerate" && n > 1) ConvertTo(params[1]); + if (strMethod == "getnetworkhashps" && n > 0) ConvertTo(params[0]); + if (strMethod == "getnetworkhashps" && n > 1) ConvertTo(params[1]); + if (strMethod == "sendtoaddress" && n > 1) ConvertTo(params[1]); + if (strMethod == "settxfee" && n > 0) ConvertTo(params[0]); + if (strMethod == "getreceivedbyaddress" && n > 1) ConvertTo(params[1]); + if (strMethod == "getreceivedbyaccount" && n > 1) ConvertTo(params[1]); + if (strMethod == "listreceivedbyaddress" && n > 0) ConvertTo(params[0]); + if (strMethod == "listreceivedbyaddress" && n > 1) ConvertTo(params[1]); + if (strMethod == "listreceivedbyaccount" && n > 0) ConvertTo(params[0]); + if (strMethod == "listreceivedbyaccount" && n > 1) ConvertTo(params[1]); + if (strMethod == "getbalance" && n > 1) ConvertTo(params[1]); + if (strMethod == "getblockhash" && n > 0) ConvertTo(params[0]); + if (strMethod == "move" && n > 2) ConvertTo(params[2]); + if (strMethod == "move" && n > 3) ConvertTo(params[3]); + if (strMethod == "sendfrom" && n > 2) ConvertTo(params[2]); + if (strMethod == "sendfrom" && n > 3) ConvertTo(params[3]); + if (strMethod == "listtransactions" && n > 1) ConvertTo(params[1]); + if (strMethod == "listtransactions" && n > 2) ConvertTo(params[2]); + if (strMethod == "listaccounts" && n > 0) ConvertTo(params[0]); + if (strMethod == "walletpassphrase" && n > 1) ConvertTo(params[1]); + if (strMethod == "getblocktemplate" && n > 0) ConvertTo(params[0]); + if (strMethod == "listsinceblock" && n > 1) ConvertTo(params[1]); + if (strMethod == "sendmany" && n > 1) ConvertTo(params[1]); + if (strMethod == "sendmany" && n > 2) ConvertTo(params[2]); + if (strMethod == "addmultisigaddress" && n > 0) ConvertTo(params[0]); + if (strMethod == "addmultisigaddress" && n > 1) ConvertTo(params[1]); + if (strMethod == "createmultisig" && n > 0) ConvertTo(params[0]); + if (strMethod == "createmultisig" && n > 1) ConvertTo(params[1]); + if (strMethod == "listunspent" && n > 0) ConvertTo(params[0]); + if (strMethod == "listunspent" && n > 1) ConvertTo(params[1]); + if (strMethod == "listunspent" && n > 2) ConvertTo(params[2]); + if (strMethod == "getblock" && n > 1) ConvertTo(params[1]); + if (strMethod == "getrawtransaction" && n > 1) ConvertTo(params[1]); + if (strMethod == "createrawtransaction" && n > 0) ConvertTo(params[0]); + if (strMethod == "createrawtransaction" && n > 1) ConvertTo(params[1]); + if (strMethod == "signrawtransaction" && n > 1) ConvertTo(params[1], true); + if (strMethod == "signrawtransaction" && n > 2) ConvertTo(params[2], true); + if (strMethod == "sendrawtransaction" && n > 1) ConvertTo(params[1], true); + if (strMethod == "gettxout" && n > 1) ConvertTo(params[1]); + if (strMethod == "gettxout" && n > 2) ConvertTo(params[2]); + if (strMethod == "lockunspent" && n > 0) ConvertTo(params[0]); + if (strMethod == "lockunspent" && n > 1) ConvertTo(params[1]); + if (strMethod == "importprivkey" && n > 2) ConvertTo(params[2]); + if (strMethod == "verifychain" && n > 0) ConvertTo(params[0]); + if (strMethod == "verifychain" && n > 1) ConvertTo(params[1]); + if (strMethod == "keypoolrefill" && n > 0) ConvertTo(params[0]); + if (strMethod == "getrawmempool" && n > 0) ConvertTo(params[0]); + + return params; +} + +int CommandLineRPC(int argc, char *argv[]) +{ + string strPrint; + int nRet = 0; + try + { + // Skip switches + while (argc > 1 && IsSwitchChar(argv[1][0])) + { + argc--; + argv++; + } + + // Method + if (argc < 2) + throw runtime_error("too few parameters"); + string strMethod = argv[1]; + + // Parameters default to strings + std::vector strParams(&argv[2], &argv[argc]); + Array params = RPCConvertValues(strMethod, strParams); + + // Execute + Object reply = CallRPC(strMethod, params); + + // Parse reply + const Value& result = find_value(reply, "result"); + const Value& error = find_value(reply, "error"); + + if (error.type() != null_type) + { + // Error + strPrint = "error: " + write_string(error, false); + int code = find_value(error.get_obj(), "code").get_int(); + nRet = abs(code); + } + else + { + // Result + if (result.type() == null_type) + strPrint = ""; + else if (result.type() == str_type) + strPrint = result.get_str(); + else + strPrint = write_string(result, true); + } + } + catch (boost::thread_interrupted) { + throw; + } + catch (std::exception& e) { + strPrint = string("error: ") + e.what(); + nRet = abs(RPC_MISC_ERROR); + } + catch (...) { + PrintExceptionContinue(NULL, "CommandLineRPC()"); + throw; + } + + if (strPrint != "") + { + fprintf((nRet == 0 ? stdout : stderr), "%s\n", strPrint.c_str()); + } + return nRet; +} + +std::string HelpMessageCli(bool mainProgram) +{ + string strUsage; + if(mainProgram) + { + strUsage += _("Options:") + "\n"; + strUsage += " -? " + _("This help message") + "\n"; + strUsage += " -conf= " + _("Specify configuration file (default: myriadcoin.conf)") + "\n"; + strUsage += " -datadir= " + _("Specify data directory") + "\n"; + strUsage += " -testnet " + _("Use the test network") + "\n"; + strUsage += " -regtest " + _("Enter regression test mode, which uses a special chain in which blocks can be " + "solved instantly. This is intended for regression testing tools and app development.") + "\n"; + } else { + strUsage += _("RPC client options:") + "\n"; + } + + strUsage += " -rpcconnect= " + _("Send commands to node running on (default: 127.0.0.1)") + "\n"; + strUsage += " -rpcport= " + _("Connect to JSON-RPC on (default: 8332 or testnet: 18332)") + "\n"; + strUsage += " -rpcwait " + _("Wait for RPC server to start") + "\n"; + + if(mainProgram) + { + strUsage += " -rpcuser= " + _("Username for JSON-RPC connections") + "\n"; + strUsage += " -rpcpassword= " + _("Password for JSON-RPC connections") + "\n"; + + strUsage += "\n" + _("SSL options: (see the Bitcoin Wiki for SSL setup instructions)") + "\n"; + strUsage += " -rpcssl " + _("Use OpenSSL (https) for JSON-RPC connections") + "\n"; + } + + return strUsage; +} + diff --git a/src/rpcclient.h b/src/rpcclient.h new file mode 100644 index 00000000..e101d22e --- /dev/null +++ b/src/rpcclient.h @@ -0,0 +1,25 @@ +// Copyright (c) 2010 Satoshi Nakamoto +// Copyright (c) 2009-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef _BITCOINRPC_CLIENT_H_ +#define _BITCOINRPC_CLIENT_H_ 1 + +#include "json/json_spirit_reader_template.h" +#include "json/json_spirit_utils.h" +#include "json/json_spirit_writer_template.h" + +int CommandLineRPC(int argc, char *argv[]); + +json_spirit::Array RPCConvertValues(const std::string &strMethod, const std::vector &strParams); + +/** Show help message for bitcoin-cli. + * The mainProgram argument is used to determine whether to show this message as main program + * (and include some common options) or as sub-header of another help message. + * + * @note the argument can be removed once bitcoin-cli functionality is removed from bitcoind + */ +std::string HelpMessageCli(bool mainProgram); + +#endif diff --git a/src/rpcdump.cpp b/src/rpcdump.cpp index 86d5f2a3..fe2073c4 100644 --- a/src/rpcdump.cpp +++ b/src/rpcdump.cpp @@ -1,35 +1,34 @@ -// Copyright (c) 2009-2012 Bitcoin Developers +// Copyright (c) 2009-2014 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include -#include - -#include "init.h" // for pwalletMain -#include "bitcoinrpc.h" -#include "ui_interface.h" #include "base58.h" +#include "rpcserver.h" +#include "init.h" +#include "main.h" +#include "sync.h" +#include "wallet.h" + +#include +#include -#include -#include -#include #include - -#define printf OutputDebugStringF +#include +#include "json/json_spirit_value.h" using namespace json_spirit; using namespace std; void EnsureWalletIsUnlocked(); -std::string static EncodeDumpTime(int64 nTime) { +std::string static EncodeDumpTime(int64_t nTime) { return DateTimeStrFormat("%Y-%m-%dT%H:%M:%SZ", nTime); } -int64 static DecodeDumpTime(const std::string &str) { - static const boost::posix_time::time_input_facet facet("%Y-%m-%dT%H:%M:%SZ"); +int64_t static DecodeDumpTime(const std::string &str) { static const boost::posix_time::ptime epoch = boost::posix_time::from_time_t(0); - const std::locale loc(std::locale::classic(), &facet); + static const std::locale loc(std::locale::classic(), + new boost::posix_time::time_input_facet("%Y-%m-%dT%H:%M:%SZ")); std::istringstream iss(str); iss.imbue(loc); boost::posix_time::ptime ptime(boost::date_time::not_a_date_time); @@ -69,8 +68,22 @@ Value importprivkey(const Array& params, bool fHelp) { if (fHelp || params.size() < 1 || params.size() > 3) throw runtime_error( - "importprivkey [label] [rescan=true]\n" - "Adds a private key (as returned by dumpprivkey) to your wallet."); + "importprivkey \"myriadcoinprivkey\" ( \"label\" rescan )\n" + "\nAdds a private key (as returned by dumpprivkey) to your wallet.\n" + "\nArguments:\n" + "1. \"myriadcoinprivkey\" (string, required) The private key (see dumpprivkey)\n" + "2. \"label\" (string, optional) an optional label\n" + "3. rescan (boolean, optional, default=true) Rescan the wallet for transactions\n" + "\nExamples:\n" + "\nDump a private key\n" + + HelpExampleCli("dumpprivkey", "\"myaddress\"") + + "\nImport the private key\n" + + HelpExampleCli("importprivkey", "\"mykey\"") + + "\nImport using a label\n" + + HelpExampleCli("importprivkey", "\"mykey\" \"testing\" false") + + "\nAs a json rpc call\n" + + HelpExampleRpc("importprivkey", "\"mykey\", \"testing\", false") + ); EnsureWalletIsUnlocked(); @@ -87,28 +100,33 @@ Value importprivkey(const Array& params, bool fHelp) CBitcoinSecret vchSecret; bool fGood = vchSecret.SetString(strSecret); - if (!fGood) throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid private key"); + if (!fGood) throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid private key encoding"); CKey key = vchSecret.GetKey(); if (!key.IsValid()) throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Private key outside allowed range"); + CPubKey pubkey = key.GetPubKey(); CKeyID vchAddress = pubkey.GetID(); { LOCK2(cs_main, pwalletMain->cs_wallet); pwalletMain->MarkDirty(); - pwalletMain->SetAddressBookName(vchAddress, strLabel); + pwalletMain->SetAddressBook(vchAddress, strLabel, "receive"); // Don't throw error in case a key is already there if (pwalletMain->HaveKey(vchAddress)) return Value::null; + pwalletMain->mapKeyMetadata[vchAddress].nCreateTime = 1; + if (!pwalletMain->AddKeyPubKey(key, pubkey)) throw JSONRPCError(RPC_WALLET_ERROR, "Error adding key to wallet"); + // whenever a key is imported, we need to scan the whole chain + pwalletMain->nTimeFirstKey = 1; // 0 would be considered 'no value' + if (fRescan) { - pwalletMain->ScanForWalletTransactions(pindexGenesisBlock, true); - pwalletMain->ReacceptWalletTransactions(); + pwalletMain->ScanForWalletTransactions(chainActive.Genesis(), true); } } @@ -119,21 +137,36 @@ Value importwallet(const Array& params, bool fHelp) { if (fHelp || params.size() != 1) throw runtime_error( - "importwallet \n" - "Imports keys from a wallet dump file (see dumpwallet)."); + "importwallet \"filename\"\n" + "\nImports keys from a wallet dump file (see dumpwallet).\n" + "\nArguments:\n" + "1. \"filename\" (string, required) The wallet file\n" + "\nExamples:\n" + "\nDump the wallet\n" + + HelpExampleCli("dumpwallet", "\"test\"") + + "\nImport the wallet\n" + + HelpExampleCli("importwallet", "\"test\"") + + "\nImport using the json rpc call\n" + + HelpExampleRpc("importwallet", "\"test\"") + ); EnsureWalletIsUnlocked(); ifstream file; - file.open(params[0].get_str().c_str()); + file.open(params[0].get_str().c_str(), std::ios::in | std::ios::ate); if (!file.is_open()) throw JSONRPCError(RPC_INVALID_PARAMETER, "Cannot open wallet dump file"); - int64 nTimeBegin = pindexBest->nTime; + int64_t nTimeBegin = chainActive.Tip()->nTime; bool fGood = true; + int64_t nFilesize = std::max((int64_t)1, (int64_t)file.tellg()); + file.seekg(0, file.beg); + + pwalletMain->ShowProgress(_("Importing..."), 0); // show progress dialog in GUI while (file.good()) { + pwalletMain->ShowProgress("", std::max(1, std::min(99, (int)(((double)file.tellg() / (double)nFilesize) * 100)))); std::string line; std::getline(file, line); if (line.empty() || line[0] == '#') @@ -150,10 +183,10 @@ Value importwallet(const Array& params, bool fHelp) CPubKey pubkey = key.GetPubKey(); CKeyID keyid = pubkey.GetID(); if (pwalletMain->HaveKey(keyid)) { - printf("Skipping import of %s (key already present)\n", CBitcoinAddress(keyid).ToString().c_str()); + LogPrintf("Skipping import of %s (key already present)\n", CBitcoinAddress(keyid).ToString()); continue; } - int64 nTime = DecodeDumpTime(vstr[1]); + int64_t nTime = DecodeDumpTime(vstr[1]); std::string strLabel; bool fLabel = true; for (unsigned int nStr = 2; nStr < vstr.size(); nStr++) { @@ -168,25 +201,28 @@ Value importwallet(const Array& params, bool fHelp) fLabel = true; } } - printf("Importing %s...\n", CBitcoinAddress(keyid).ToString().c_str()); + LogPrintf("Importing %s...\n", CBitcoinAddress(keyid).ToString()); if (!pwalletMain->AddKeyPubKey(key, pubkey)) { fGood = false; continue; } pwalletMain->mapKeyMetadata[keyid].nCreateTime = nTime; if (fLabel) - pwalletMain->SetAddressBookName(keyid, strLabel); + pwalletMain->SetAddressBook(keyid, strLabel, "receive"); nTimeBegin = std::min(nTimeBegin, nTime); } file.close(); + pwalletMain->ShowProgress("", 100); // hide progress dialog in GUI - CBlockIndex *pindex = pindexBest; + CBlockIndex *pindex = chainActive.Tip(); while (pindex && pindex->pprev && pindex->nTime > nTimeBegin - 7200) pindex = pindex->pprev; - printf("Rescanning last %i blocks\n", pindexBest->nHeight - pindex->nHeight + 1); + if (!pwalletMain->nTimeFirstKey || nTimeBegin < pwalletMain->nTimeFirstKey) + pwalletMain->nTimeFirstKey = nTimeBegin; + + LogPrintf("Rescanning last %i blocks\n", chainActive.Height() - pindex->nHeight + 1); pwalletMain->ScanForWalletTransactions(pindex); - pwalletMain->ReacceptWalletTransactions(); pwalletMain->MarkDirty(); if (!fGood) @@ -199,8 +235,18 @@ Value dumpprivkey(const Array& params, bool fHelp) { if (fHelp || params.size() != 1) throw runtime_error( - "dumpprivkey \n" - "Reveals the private key corresponding to ."); + "dumpprivkey \"myriadcoinaddress\"\n" + "\nReveals the private key corresponding to 'myriadcoinaddress'.\n" + "Then the importprivkey can be used with this output\n" + "\nArguments:\n" + "1. \"myriadcoinaddress\" (string, required) The myriadcoin address for the private key\n" + "\nResult:\n" + "\"key\" (string) The private key\n" + "\nExamples:\n" + + HelpExampleCli("dumpprivkey", "\"myaddress\"") + + HelpExampleCli("importprivkey", "\"mykey\"") + + HelpExampleRpc("dumpprivkey", "\"myaddress\"") + ); EnsureWalletIsUnlocked(); @@ -222,8 +268,14 @@ Value dumpwallet(const Array& params, bool fHelp) { if (fHelp || params.size() != 1) throw runtime_error( - "dumpwallet \n" - "Dumps all wallet keys in a human-readable format."); + "dumpwallet \"filename\"\n" + "\nDumps all wallet keys in a human-readable format.\n" + "\nArguments:\n" + "1. \"filename\" (string, required) The filename\n" + "\nExamples:\n" + + HelpExampleCli("dumpwallet", "\"test\"") + + HelpExampleRpc("dumpwallet", "\"test\"") + ); EnsureWalletIsUnlocked(); @@ -232,37 +284,37 @@ Value dumpwallet(const Array& params, bool fHelp) if (!file.is_open()) throw JSONRPCError(RPC_INVALID_PARAMETER, "Cannot open wallet dump file"); - std::map mapKeyBirth; + std::map mapKeyBirth; std::set setKeyPool; pwalletMain->GetKeyBirthTimes(mapKeyBirth); pwalletMain->GetAllReserveKeys(setKeyPool); // sort time/key pairs - std::vector > vKeyBirth; - for (std::map::const_iterator it = mapKeyBirth.begin(); it != mapKeyBirth.end(); it++) { + std::vector > vKeyBirth; + for (std::map::const_iterator it = mapKeyBirth.begin(); it != mapKeyBirth.end(); it++) { vKeyBirth.push_back(std::make_pair(it->second, it->first)); } mapKeyBirth.clear(); std::sort(vKeyBirth.begin(), vKeyBirth.end()); // produce output - file << strprintf("# Wallet dump created by Myriadcoin %s (%s)\n", CLIENT_BUILD.c_str(), CLIENT_DATE.c_str()); - file << strprintf("# * Created on %s\n", EncodeDumpTime(GetTime()).c_str()); - file << strprintf("# * Best block at time of backup was %i (%s),\n", nBestHeight, hashBestChain.ToString().c_str()); - file << strprintf("# mined on %s\n", EncodeDumpTime(pindexBest->nTime).c_str()); + file << strprintf("# Wallet dump created by Myriadcoin %s (%s)\n", CLIENT_BUILD, CLIENT_DATE); + file << strprintf("# * Created on %s\n", EncodeDumpTime(GetTime())); + file << strprintf("# * Best block at time of backup was %i (%s),\n", chainActive.Height(), chainActive.Tip()->GetBlockHash().ToString()); + file << strprintf("# mined on %s\n", EncodeDumpTime(chainActive.Tip()->nTime)); file << "\n"; - for (std::vector >::const_iterator it = vKeyBirth.begin(); it != vKeyBirth.end(); it++) { + for (std::vector >::const_iterator it = vKeyBirth.begin(); it != vKeyBirth.end(); it++) { const CKeyID &keyid = it->second; std::string strTime = EncodeDumpTime(it->first); std::string strAddr = CBitcoinAddress(keyid).ToString(); CKey key; if (pwalletMain->GetKey(keyid, key)) { if (pwalletMain->mapAddressBook.count(keyid)) { - file << strprintf("%s %s label=%s # addr=%s\n", CBitcoinSecret(key).ToString().c_str(), strTime.c_str(), EncodeDumpString(pwalletMain->mapAddressBook[keyid]).c_str(), strAddr.c_str()); + file << strprintf("%s %s label=%s # addr=%s\n", CBitcoinSecret(key).ToString(), strTime, EncodeDumpString(pwalletMain->mapAddressBook[keyid].name), strAddr); } else if (setKeyPool.count(keyid)) { - file << strprintf("%s %s reserve=1 # addr=%s\n", CBitcoinSecret(key).ToString().c_str(), strTime.c_str(), strAddr.c_str()); + file << strprintf("%s %s reserve=1 # addr=%s\n", CBitcoinSecret(key).ToString(), strTime, strAddr); } else { - file << strprintf("%s %s change=1 # addr=%s\n", CBitcoinSecret(key).ToString().c_str(), strTime.c_str(), strAddr.c_str()); + file << strprintf("%s %s change=1 # addr=%s\n", CBitcoinSecret(key).ToString(), strTime, strAddr); } } } diff --git a/src/rpcmining.cpp b/src/rpcmining.cpp index 979ccf5d..a54c4bfc 100644 --- a/src/rpcmining.cpp +++ b/src/rpcmining.cpp @@ -1,37 +1,135 @@ // Copyright (c) 2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2013 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. +#include "rpcserver.h" #include "chainparams.h" -#include "db.h" #include "init.h" -#include "bitcoinrpc.h" +#include "net.h" +#include "main.h" +#include "miner.h" +#ifdef ENABLE_WALLET +#include "db.h" +#include "wallet.h" +#endif +#include + +#include "json/json_spirit_utils.h" +#include "json/json_spirit_value.h" using namespace json_spirit; using namespace std; -// Key used by getwork/getblocktemplate miners. +#ifdef ENABLE_WALLET +// Key used by getwork miners. // Allocated in InitRPCMining, free'd in ShutdownRPCMining static CReserveKey* pMiningKey = NULL; void InitRPCMining() { + if (!pwalletMain) + return; + // getwork/getblocktemplate mining rewards paid here: pMiningKey = new CReserveKey(pwalletMain); } void ShutdownRPCMining() { + if (!pMiningKey) + return; + delete pMiningKey; pMiningKey = NULL; } +#else +void InitRPCMining() +{ +} +void ShutdownRPCMining() +{ +} +#endif +// Return average network hashes per second based on the last 'lookup' blocks, +// or from the last difficulty change if 'lookup' is nonpositive. +// If 'height' is nonnegative, compute the estimate at the time when a given block was found. +Value GetNetworkHashPS(int lookup, int height) { + CBlockIndex *pb = chainActive.Tip(); + + if (height >= 0 && height < chainActive.Height()) + pb = chainActive[height]; + + if (pb == NULL || !pb->nHeight) + return 0; + + // If lookup is -1, then use blocks since last difficulty change. + if (lookup <= 0) + lookup = pb->nHeight % 2016 + 1; + + // If lookup is larger than chain, then set it to chain length. + if (lookup > pb->nHeight) + lookup = pb->nHeight; + + CBlockIndex *pb0 = pb; + int64_t minTime = pb0->GetBlockTime(); + int64_t maxTime = minTime; + for (int i = 0; i < lookup; i++) { + pb0 = pb0->pprev; + int64_t time = pb0->GetBlockTime(); + minTime = std::min(time, minTime); + maxTime = std::max(time, maxTime); + } + + // In case there's a situation where minTime == maxTime, we don't want a divide by zero exception. + if (minTime == maxTime) + return 0; + + uint256 workDiff = pb->nChainWork - pb0->nChainWork; + int64_t timeDiff = maxTime - minTime; + + return (int64_t)(workDiff.getdouble() / timeDiff); +} + +Value getnetworkhashps(const Array& params, bool fHelp) +{ + if (fHelp || params.size() > 2) + throw runtime_error( + "getnetworkhashps ( blocks height )\n" + "\nReturns the estimated network hashes per second based on the last n blocks.\n" + "Pass in [blocks] to override # of blocks, -1 specifies since last difficulty change.\n" + "Pass in [height] to estimate the network speed at the time when a certain block was found.\n" + "\nArguments:\n" + "1. blocks (numeric, optional, default=120) The number of blocks, or -1 for blocks since last difficulty change.\n" + "2. height (numeric, optional, default=-1) To estimate at the time of the given height.\n" + "\nResult:\n" + "x (numeric) Hashes per second estimated\n" + "\nExamples:\n" + + HelpExampleCli("getnetworkhashps", "") + + HelpExampleRpc("getnetworkhashps", "") + ); + + return GetNetworkHashPS(params.size() > 0 ? params[0].get_int() : 120, params.size() > 1 ? params[1].get_int() : -1); +} + +#ifdef ENABLE_WALLET Value getgenerate(const Array& params, bool fHelp) { if (fHelp || params.size() != 0) throw runtime_error( "getgenerate\n" - "Returns true or false."); + "\nReturn if the server is set to generate coins or not. The default is false.\n" + "It is set with the command line argument -gen (or myriadcoin.conf setting gen)\n" + "It can also be set with the setgenerate call.\n" + "\nResult\n" + "true|false (boolean) If the server is set to generate coins or not\n" + "\nExamples:\n" + + HelpExampleCli("getgenerate", "") + + HelpExampleRpc("getgenerate", "") + ); + + if (!pMiningKey) + return false; return GetBoolArg("-gen", false); } @@ -41,39 +139,97 @@ Value setgenerate(const Array& params, bool fHelp) { if (fHelp || params.size() < 1 || params.size() > 2) throw runtime_error( - "setgenerate [genproclimit]\n" - " is true or false to turn generation on or off.\n" - "Generation is limited to [genproclimit] processors, -1 is unlimited."); + "setgenerate generate ( genproclimit )\n" + "\nSet 'generate' true or false to turn generation on or off.\n" + "Generation is limited to 'genproclimit' processors, -1 is unlimited.\n" + "See the getgenerate call for the current setting.\n" + "\nArguments:\n" + "1. generate (boolean, required) Set to true to turn on generation, off to turn off.\n" + "2. genproclimit (numeric, optional) Set the processor limit for when generation is on. Can be -1 for unlimited.\n" + " Note: in -regtest mode, genproclimit controls how many blocks are generated immediately.\n" + "\nExamples:\n" + "\nSet the generation on with a limit of one processor\n" + + HelpExampleCli("setgenerate", "true 1") + + "\nCheck the setting\n" + + HelpExampleCli("getgenerate", "") + + "\nTurn off generation\n" + + HelpExampleCli("setgenerate", "false") + + "\nUsing json rpc\n" + + HelpExampleRpc("setgenerate", "true, 1") + ); + + if (pwalletMain == NULL) + throw JSONRPCError(RPC_METHOD_NOT_FOUND, "Method not found (disabled)"); bool fGenerate = true; if (params.size() > 0) fGenerate = params[0].get_bool(); + int nGenProcLimit = -1; if (params.size() > 1) { - int nGenProcLimit = params[1].get_int(); - mapArgs["-genproclimit"] = itostr(nGenProcLimit); + nGenProcLimit = params[1].get_int(); if (nGenProcLimit == 0) fGenerate = false; } - mapArgs["-gen"] = (fGenerate ? "1" : "0"); - GenerateBitcoins(fGenerate, pwalletMain); + // -regtest mode: don't return until nGenProcLimit blocks are generated + if (fGenerate && Params().NetworkID() == CChainParams::REGTEST) + { + int nHeightStart = 0; + int nHeightEnd = 0; + int nHeight = 0; + int nGenerate = (nGenProcLimit > 0 ? nGenProcLimit : 1); + { // Don't keep cs_main locked + LOCK(cs_main); + nHeightStart = chainActive.Height(); + nHeight = nHeightStart; + nHeightEnd = nHeightStart+nGenerate; + } + int nHeightLast = -1; + while (nHeight < nHeightEnd) + { + if (nHeightLast != nHeight) + { + nHeightLast = nHeight; + GenerateBitcoins(fGenerate, pwalletMain, 1); + } + MilliSleep(1); + { // Don't keep cs_main locked + LOCK(cs_main); + nHeight = chainActive.Height(); + } + } + } + else // Not -regtest: start generate thread, return immediately + { + mapArgs["-gen"] = (fGenerate ? "1" : "0"); + mapArgs ["-genproclimit"] = itostr(nGenProcLimit); + GenerateBitcoins(fGenerate, pwalletMain, nGenProcLimit); + } + return Value::null; } - Value gethashespersec(const Array& params, bool fHelp) { if (fHelp || params.size() != 0) throw runtime_error( "gethashespersec\n" - "Returns a recent hashes per second performance measurement while generating."); + "\nReturns a recent hashes per second performance measurement while generating.\n" + "See the getgenerate and setgenerate calls to turn generation on and off.\n" + "\nResult:\n" + "n (numeric) The recent hashes per second when generation is on (will return 0 if generation is off)\n" + "\nExamples:\n" + + HelpExampleCli("gethashespersec", "") + + HelpExampleRpc("gethashespersec", "") + ); if (GetTimeMillis() - nHPSTimerStart > 8000) - return (boost::int64_t)0; - return (boost::int64_t)dHashesPerSec; + return (int64_t)0; + return (int64_t)dHashesPerSec; } +#endif Value getmininginfo(const Array& params, bool fHelp) @@ -81,12 +237,29 @@ Value getmininginfo(const Array& params, bool fHelp) if (fHelp || params.size() != 0) throw runtime_error( "getmininginfo\n" - "Returns an object containing mining-related information."); + "\nReturns a json object containing mining-related information." + "\nResult:\n" + "{\n" + " \"blocks\": nnn, (numeric) The current block\n" + " \"currentblocksize\": nnn, (numeric) The last block size\n" + " \"currentblocktx\": nnn, (numeric) The last block transaction\n" + " \"difficulty\": xxx.xxxxx (numeric) The current difficulty\n" + " \"errors\": \"...\" (string) Current errors\n" + " \"generate\": true|false (boolean) If the generation is on or off (see getgenerate or setgenerate calls)\n" + " \"genproclimit\": n (numeric) The processor limit for generation. -1 if no generation. (see getgenerate or setgenerate calls)\n" + " \"hashespersec\": n (numeric) The hashes per second of the generation, or 0 if no generation.\n" + " \"pooledtx\": n (numeric) The size of the mem pool\n" + " \"testnet\": true|false (boolean) If using testnet or not\n" + "}\n" + "\nExamples:\n" + + HelpExampleCli("getmininginfo", "") + + HelpExampleRpc("getmininginfo", "") + ); Object obj; - obj.push_back(Pair("blocks", (int)nBestHeight)); - obj.push_back(Pair("currentblocksize", (uint64_t)nLastBlockSize)); - obj.push_back(Pair("currentblocktx", (uint64_t)nLastBlockTx)); + obj.push_back(Pair("blocks", (int)chainActive.Height())); + obj.push_back(Pair("currentblocksize", (uint64_t)nLastBlockSize)); + obj.push_back(Pair("currentblocktx", (uint64_t)nLastBlockTx)); obj.push_back(Pair("pow_algo_id", miningAlgo)); obj.push_back(Pair("pow_algo", GetAlgoName(miningAlgo))); obj.push_back(Pair("difficulty", (double)GetDifficulty(NULL, miningAlgo))); @@ -95,27 +268,42 @@ Value getmininginfo(const Array& params, bool fHelp) obj.push_back(Pair("difficulty_groestl", (double)GetDifficulty(NULL, ALGO_GROESTL))); obj.push_back(Pair("difficulty_skein", (double)GetDifficulty(NULL, ALGO_SKEIN))); obj.push_back(Pair("difficulty_qubit", (double)GetDifficulty(NULL, ALGO_QUBIT))); - obj.push_back(Pair("errors", GetWarnings("statusbar"))); - obj.push_back(Pair("generate", GetBoolArg("-gen", false))); - obj.push_back(Pair("genproclimit", (int)GetArg("-genproclimit", -1))); - obj.push_back(Pair("hashespersec", gethashespersec(params, false))); - obj.push_back(Pair("pooledtx", (uint64_t)mempool.size())); - obj.push_back(Pair("testnet", TestNet())); + obj.push_back(Pair("errors", GetWarnings("statusbar"))); + obj.push_back(Pair("genproclimit", (int)GetArg("-genproclimit", -1))); + obj.push_back(Pair("networkhashps", getnetworkhashps(params, false))); + obj.push_back(Pair("pooledtx", (uint64_t)mempool.size())); + obj.push_back(Pair("testnet", TestNet())); +#ifdef ENABLE_WALLET + obj.push_back(Pair("generate", getgenerate(params, false))); + obj.push_back(Pair("hashespersec", gethashespersec(params, false))); +#endif return obj; } +#ifdef ENABLE_WALLET Value getwork(const Array& params, bool fHelp) { if (fHelp || params.size() > 1) throw runtime_error( - "getwork [data]\n" - "If [data] is not specified, returns formatted hash data to work on:\n" - " \"midstate\" : precomputed hash state after hashing the first half of the data (DEPRECATED)\n" // deprecated - " \"data\" : block data\n" - " \"hash1\" : formatted hash buffer for second hash (DEPRECATED)\n" // deprecated - " \"target\" : little endian hash target\n" - "If [data] is specified, tries to solve the block and returns true if it was successful."); + "getwork ( \"data\" )\n" + "\nIf 'data' is not specified, it returns the formatted hash data to work on.\n" + "If 'data' is specified, tries to solve the block and returns true if it was successful.\n" + "\nArguments:\n" + "1. \"data\" (string, optional) The hex encoded data to solve\n" + "\nResult (when 'data' is not specified):\n" + "{\n" + " \"midstate\" : \"xxxx\", (string) The precomputed hash state after hashing the first half of the data (DEPRECATED)\n" // deprecated + " \"data\" : \"xxxxx\", (string) The block data\n" + " \"hash1\" : \"xxxxx\", (string) The formatted hash buffer for second hash (DEPRECATED)\n" // deprecated + " \"target\" : \"xxxx\" (string) The little endian hash target\n" + "}\n" + "\nResult (when 'data' is specified):\n" + "true|false (boolean) If solving the block specified in the 'data' was successfull\n" + "\nExamples:\n" + + HelpExampleCli("getwork", "") + + HelpExampleRpc("getwork", "") + ); if (vNodes.empty()) throw JSONRPCError(RPC_CLIENT_NOT_CONNECTED, "Myriadcoin is not connected!"); @@ -132,12 +320,12 @@ Value getwork(const Array& params, bool fHelp) // Update block static unsigned int nTransactionsUpdatedLast; static CBlockIndex* pindexPrev; - static int64 nStart; + static int64_t nStart; static CBlockTemplate* pblocktemplate; - if (pindexPrev != pindexBest || - (nTransactionsUpdated != nTransactionsUpdatedLast && GetTime() - nStart > 60)) + if (pindexPrev != chainActive.Tip() || + (mempool.GetTransactionsUpdated() != nTransactionsUpdatedLast && GetTime() - nStart > 60)) { - if (pindexPrev != pindexBest) + if (pindexPrev != chainActive.Tip()) { // Deallocate old blocks since they're obsolete now mapNewBlock.clear(); @@ -150,12 +338,12 @@ Value getwork(const Array& params, bool fHelp) pindexPrev = NULL; // Store the pindexBest used before CreateNewBlock, to avoid races - nTransactionsUpdatedLast = nTransactionsUpdated; - CBlockIndex* pindexPrevNew = pindexBest; + nTransactionsUpdatedLast = mempool.GetTransactionsUpdated(); + CBlockIndex* pindexPrevNew = chainActive.Tip(); nStart = GetTime(); // Create new block - pblocktemplate = CreateNewBlock(*pMiningKey, miningAlgo); + pblocktemplate = CreateNewBlockWithKey(*pMiningKey, miningAlgo); if (!pblocktemplate) throw JSONRPCError(RPC_OUT_OF_MEMORY, "Out of memory"); vNewBlockTemplate.push_back(pblocktemplate); @@ -213,32 +401,73 @@ Value getwork(const Array& params, bool fHelp) pblock->vtx[0].vin[0].scriptSig = mapNewBlock[pdata->hashMerkleRoot].second; pblock->hashMerkleRoot = pblock->BuildMerkleTree(); + assert(pwalletMain != NULL); return CheckWork(pblock, *pwalletMain, *pMiningKey); } } - +#endif Value getblocktemplate(const Array& params, bool fHelp) { if (fHelp || params.size() > 1) throw runtime_error( - "getblocktemplate [params]\n" - "Returns data needed to construct a block to work on:\n" - " \"version\" : block version\n" - " \"previousblockhash\" : hash of current highest block\n" - " \"transactions\" : contents of non-coinbase transactions that should be included in the next block\n" - " \"coinbaseaux\" : data that should be included in coinbase\n" - " \"coinbasevalue\" : maximum allowable input to coinbase transaction, including the generation award and transaction fees\n" - " \"target\" : hash target\n" - " \"mintime\" : minimum timestamp appropriate for next block\n" - " \"curtime\" : current timestamp\n" - " \"mutable\" : list of ways the block template may be changed\n" - " \"noncerange\" : range of valid nonces\n" - " \"sigoplimit\" : limit of sigops in blocks\n" - " \"sizelimit\" : limit of block size\n" - " \"bits\" : compressed target of next block\n" - " \"height\" : height of the next block\n" - "See https://en.bitcoin.it/wiki/BIP_0022 for full specification."); + "getblocktemplate ( \"jsonrequestobject\" )\n" + "\nIf the request parameters include a 'mode' key, that is used to explicitly select between the default 'template' request or a 'proposal'.\n" + "It returns data needed to construct a block to work on.\n" + "See https://en.bitcoin.it/wiki/BIP_0022 for full specification.\n" + + "\nArguments:\n" + "1. \"jsonrequestobject\" (string, optional) A json object in the following spec\n" + " {\n" + " \"mode\":\"template\" (string, optional) This must be set to \"template\" or omitted\n" + " \"capabilities\":[ (array, optional) A list of strings\n" + " \"support\" (string) client side supported feature, 'longpoll', 'coinbasetxn', 'coinbasevalue', 'proposal', 'serverlist', 'workid'\n" + " ,...\n" + " ]\n" + " }\n" + "\n" + + "\nResult:\n" + "{\n" + " \"version\" : n, (numeric) The block version\n" + " \"previousblockhash\" : \"xxxx\", (string) The hash of current highest block\n" + " \"transactions\" : [ (array) contents of non-coinbase transactions that should be included in the next block\n" + " {\n" + " \"data\" : \"xxxx\", (string) transaction data encoded in hexadecimal (byte-for-byte)\n" + " \"hash\" : \"xxxx\", (string) hash/id encoded in little-endian hexadecimal\n" + " \"depends\" : [ (array) array of numbers \n" + " n (numeric) transactions before this one (by 1-based index in 'transactions' list) that must be present in the final block if this one is\n" + " ,...\n" + " ],\n" + " \"fee\": n, (numeric) difference in value between transaction inputs and outputs (in Satoshis); for coinbase transactions, this is a negative Number of the total collected block fees (ie, not including the block subsidy); if key is not present, fee is unknown and clients MUST NOT assume there isn't one\n" + " \"sigops\" : n, (numeric) total number of SigOps, as counted for purposes of block limits; if key is not present, sigop count is unknown and clients MUST NOT assume there aren't any\n" + " \"required\" : true|false (boolean) if provided and true, this transaction must be in the final block\n" + " }\n" + " ,...\n" + " ],\n" + " \"coinbaseaux\" : { (json object) data that should be included in the coinbase's scriptSig content\n" + " \"flags\" : \"flags\" (string) \n" + " },\n" + " \"coinbasevalue\" : n, (numeric) maximum allowable input to coinbase transaction, including the generation award and transaction fees (in Satoshis)\n" + " \"coinbasetxn\" : { ... }, (json object) information for coinbase transaction\n" + " \"target\" : \"xxxx\", (string) The hash target\n" + " \"mintime\" : xxx, (numeric) The minimum timestamp appropriate for next block time in seconds since epoch (Jan 1 1970 GMT)\n" + " \"mutable\" : [ (array of string) list of ways the block template may be changed \n" + " \"value\" (string) A way the block template may be changed, e.g. 'time', 'transactions', 'prevblock'\n" + " ,...\n" + " ],\n" + " \"noncerange\" : \"00000000ffffffff\", (string) A range of valid nonces\n" + " \"sigoplimit\" : n, (numeric) limit of sigops in blocks\n" + " \"sizelimit\" : n, (numeric) limit of block size\n" + " \"curtime\" : ttt, (numeric) current timestamp in seconds since epoch (Jan 1 1970 GMT)\n" + " \"bits\" : \"xxx\", (string) compressed target of next block\n" + " \"height\" : n (numeric) The height of the next block\n" + "}\n" + + "\nExamples:\n" + + HelpExampleCli("getblocktemplate", "") + + HelpExampleRpc("getblocktemplate", "") + ); std::string strMode = "template"; if (params.size() > 0) @@ -267,17 +496,17 @@ Value getblocktemplate(const Array& params, bool fHelp) // Update block static unsigned int nTransactionsUpdatedLast; static CBlockIndex* pindexPrev; - static int64 nStart; + static int64_t nStart; static CBlockTemplate* pblocktemplate; - if (pindexPrev != pindexBest || - (nTransactionsUpdated != nTransactionsUpdatedLast && GetTime() - nStart > 5)) + if (pindexPrev != chainActive.Tip() || + (mempool.GetTransactionsUpdated() != nTransactionsUpdatedLast && GetTime() - nStart > 5)) { // Clear pindexPrev so future calls make a new block, despite any failures from here on pindexPrev = NULL; // Store the pindexBest used before CreateNewBlock, to avoid races - nTransactionsUpdatedLast = nTransactionsUpdated; - CBlockIndex* pindexPrevNew = pindexBest; + nTransactionsUpdatedLast = mempool.GetTransactionsUpdated(); + CBlockIndex* pindexPrevNew = chainActive.Tip(); nStart = GetTime(); // Create new block @@ -286,7 +515,8 @@ Value getblocktemplate(const Array& params, bool fHelp) delete pblocktemplate; pblocktemplate = NULL; } - pblocktemplate = CreateNewBlock(*pMiningKey, miningAlgo); + CScript scriptDummy = CScript() << OP_TRUE; + pblocktemplate = CreateNewBlock(scriptDummy, miningAlgo); if (!pblocktemplate) throw JSONRPCError(RPC_OUT_OF_MEMORY, "Out of memory"); @@ -369,10 +599,22 @@ Value submitblock(const Array& params, bool fHelp) { if (fHelp || params.size() < 1 || params.size() > 2) throw runtime_error( - "submitblock [optional-params-obj]\n" - "[optional-params-obj] parameter is currently ignored.\n" - "Attempts to submit new block to network.\n" - "See https://en.bitcoin.it/wiki/BIP_0022 for full specification."); + "submitblock \"hexdata\" ( \"jsonparametersobject\" )\n" + "\nAttempts to submit new block to network.\n" + "The 'jsonparametersobject' parameter is currently ignored.\n" + "See https://en.bitcoin.it/wiki/BIP_0022 for full specification.\n" + + "\nArguments\n" + "1. \"hexdata\" (string, required) the hex-encoded block data to submit\n" + "2. \"jsonparametersobject\" (string, optional) object of optional parameters\n" + " {\n" + " \"workid\" : \"id\" (string, optional) if the server provided a workid, it MUST be included with submissions\n" + " }\n" + "\nResult:\n" + "\nExamples:\n" + + HelpExampleCli("submitblock", "\"mydata\"") + + HelpExampleRpc("submitblock", "\"mydata\"") + ); vector blockData(ParseHex(params[0].get_str())); CDataStream ssBlock(blockData, SER_NETWORK, PROTOCOL_VERSION); diff --git a/src/rpcmisc.cpp b/src/rpcmisc.cpp new file mode 100644 index 00000000..aedaf6ea --- /dev/null +++ b/src/rpcmisc.cpp @@ -0,0 +1,332 @@ +// Copyright (c) 2010 Satoshi Nakamoto +// Copyright (c) 2009-2014 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "base58.h" +#include "init.h" +#include "main.h" +#include "net.h" +#include "netbase.h" +#include "rpcserver.h" +#include "util.h" +#ifdef ENABLE_WALLET +#include "wallet.h" +#include "walletdb.h" +#endif + +#include + +#include +#include "json/json_spirit_utils.h" +#include "json/json_spirit_value.h" + +using namespace std; +using namespace boost; +using namespace boost::assign; +using namespace json_spirit; + +Value getinfo(const Array& params, bool fHelp) +{ + if (fHelp || params.size() != 0) + throw runtime_error( + "getinfo\n" + "Returns an object containing various state info.\n" + "\nResult:\n" + "{\n" + " \"version\": xxxxx, (numeric) the server version\n" + " \"protocolversion\": xxxxx, (numeric) the protocol version\n" + " \"walletversion\": xxxxx, (numeric) the wallet version\n" + " \"balance\": xxxxxxx, (numeric) the total myriadcoin balance of the wallet\n" + " \"blocks\": xxxxxx, (numeric) the current number of blocks processed in the server\n" + " \"timeoffset\": xxxxx, (numeric) the time offset\n" + " \"connections\": xxxxx, (numeric) the number of connections\n" + " \"proxy\": \"host:port\", (string, optional) the proxy used by the server\n" + " \"difficulty\": xxxxxx, (numeric) the current difficulty\n" + " \"testnet\": true|false, (boolean) if the server is using testnet or not\n" + " \"keypoololdest\": xxxxxx, (numeric) the timestamp (seconds since GMT epoch) of the oldest pre-generated key in the key pool\n" + " \"keypoolsize\": xxxx, (numeric) how many new keys are pre-generated\n" + " \"unlocked_until\": ttt, (numeric) the timestamp in seconds since epoch (midnight Jan 1 1970 GMT) that the wallet is unlocked for transfers, or 0 if the wallet is locked\n" + " \"paytxfee\": x.xxxx, (numeric) the transaction fee set in btc/kb\n" + " \"relayfee\": x.xxxx, (numeric) minimum relay fee for non-free transactions in btc/kb\n" + " \"errors\": \"...\" (string) any error messages\n" + "}\n" + "\nExamples:\n" + + HelpExampleCli("getinfo", "") + + HelpExampleRpc("getinfo", "") + ); + + proxyType proxy; + GetProxy(NET_IPV4, proxy); + + Object obj; + obj.push_back(Pair("version", (int)CLIENT_VERSION)); + obj.push_back(Pair("protocolversion", (int)PROTOCOL_VERSION)); +#ifdef ENABLE_WALLET + if (pwalletMain) { + obj.push_back(Pair("walletversion", pwalletMain->GetVersion())); + obj.push_back(Pair("balance", ValueFromAmount(pwalletMain->GetBalance()))); + } +#endif + obj.push_back(Pair("blocks", (int)chainActive.Height())); + obj.push_back(Pair("timeoffset", GetTimeOffset())); + obj.push_back(Pair("connections", (int)vNodes.size())); + obj.push_back(Pair("proxy", (proxy.first.IsValid() ? proxy.first.ToStringIPPort() : string()))); + obj.push_back(Pair("difficulty", (double)GetDifficulty(NULL, miningAlgo))); + obj.push_back(Pair("difficulty_sha256d", (double)GetDifficulty(NULL, ALGO_SHA256D))); + obj.push_back(Pair("difficulty_scrypt", (double)GetDifficulty(NULL, ALGO_SCRYPT))); + obj.push_back(Pair("difficulty_groestl", (double)GetDifficulty(NULL, ALGO_GROESTL))); + obj.push_back(Pair("difficulty_skein", (double)GetDifficulty(NULL, ALGO_SKEIN))); + obj.push_back(Pair("difficulty_qubit", (double)GetDifficulty(NULL, ALGO_QUBIT))); + obj.push_back(Pair("testnet", TestNet())); +#ifdef ENABLE_WALLET + if (pwalletMain) { + obj.push_back(Pair("keypoololdest", pwalletMain->GetOldestKeyPoolTime())); + obj.push_back(Pair("keypoolsize", (int)pwalletMain->GetKeyPoolSize())); + } + if (pwalletMain && pwalletMain->IsCrypted()) + obj.push_back(Pair("unlocked_until", nWalletUnlockTime)); + obj.push_back(Pair("paytxfee", ValueFromAmount(nTransactionFee))); +#endif + obj.push_back(Pair("relayfee", ValueFromAmount(CTransaction::nMinRelayTxFee))); + obj.push_back(Pair("errors", GetWarnings("statusbar"))); + return obj; +} + +#ifdef ENABLE_WALLET +class DescribeAddressVisitor : public boost::static_visitor +{ +public: + Object operator()(const CNoDestination &dest) const { return Object(); } + + Object operator()(const CKeyID &keyID) const { + Object obj; + CPubKey vchPubKey; + pwalletMain->GetPubKey(keyID, vchPubKey); + obj.push_back(Pair("isscript", false)); + obj.push_back(Pair("pubkey", HexStr(vchPubKey))); + obj.push_back(Pair("iscompressed", vchPubKey.IsCompressed())); + return obj; + } + + Object operator()(const CScriptID &scriptID) const { + Object obj; + obj.push_back(Pair("isscript", true)); + CScript subscript; + pwalletMain->GetCScript(scriptID, subscript); + std::vector addresses; + txnouttype whichType; + int nRequired; + ExtractDestinations(subscript, whichType, addresses, nRequired); + obj.push_back(Pair("script", GetTxnOutputType(whichType))); + obj.push_back(Pair("hex", HexStr(subscript.begin(), subscript.end()))); + Array a; + BOOST_FOREACH(const CTxDestination& addr, addresses) + a.push_back(CBitcoinAddress(addr).ToString()); + obj.push_back(Pair("addresses", a)); + if (whichType == TX_MULTISIG) + obj.push_back(Pair("sigsrequired", nRequired)); + return obj; + } +}; +#endif + +Value validateaddress(const Array& params, bool fHelp) +{ + if (fHelp || params.size() != 1) + throw runtime_error( + "validateaddress \"myriadcoinaddress\"\n" + "\nReturn information about the given myriadcoin address.\n" + "\nArguments:\n" + "1. \"myriadcoinaddress\" (string, required) The myriadcoin address to validate\n" + "\nResult:\n" + "{\n" + " \"isvalid\" : true|false, (boolean) If the address is valid or not. If not, this is the only property returned.\n" + " \"address\" : \"myriadcoinaddress\", (string) The myriadcoin address validated\n" + " \"ismine\" : true|false, (boolean) If the address is yours or not\n" + " \"isscript\" : true|false, (boolean) If the key is a script\n" + " \"pubkey\" : \"publickeyhex\", (string) The hex value of the raw public key\n" + " \"iscompressed\" : true|false, (boolean) If the address is compressed\n" + " \"account\" : \"account\" (string) The account associated with the address, \"\" is the default account\n" + "}\n" + "\nExamples:\n" + + HelpExampleCli("validateaddress", "\"1PSSGeFHDnKNxiEyFrD1wcEaHr9hrQDDWc\"") + + HelpExampleRpc("validateaddress", "\"1PSSGeFHDnKNxiEyFrD1wcEaHr9hrQDDWc\"") + ); + + CBitcoinAddress address(params[0].get_str()); + bool isValid = address.IsValid(); + + Object ret; + ret.push_back(Pair("isvalid", isValid)); + if (isValid) + { + CTxDestination dest = address.Get(); + string currentAddress = address.ToString(); + ret.push_back(Pair("address", currentAddress)); +#ifdef ENABLE_WALLET + bool fMine = pwalletMain ? IsMine(*pwalletMain, dest) : false; + ret.push_back(Pair("ismine", fMine)); + if (fMine) { + Object detail = boost::apply_visitor(DescribeAddressVisitor(), dest); + ret.insert(ret.end(), detail.begin(), detail.end()); + } + if (pwalletMain && pwalletMain->mapAddressBook.count(dest)) + ret.push_back(Pair("account", pwalletMain->mapAddressBook[dest].name)); +#endif + } + return ret; +} + +// +// Used by addmultisigaddress / createmultisig: +// +CScript _createmultisig(const Array& params) +{ + int nRequired = params[0].get_int(); + const Array& keys = params[1].get_array(); + + // Gather public keys + if (nRequired < 1) + throw runtime_error("a multisignature address must require at least one key to redeem"); + if ((int)keys.size() < nRequired) + throw runtime_error( + strprintf("not enough keys supplied " + "(got %u keys, but need at least %d to redeem)", keys.size(), nRequired)); + std::vector pubkeys; + pubkeys.resize(keys.size()); + for (unsigned int i = 0; i < keys.size(); i++) + { + const std::string& ks = keys[i].get_str(); +#ifdef ENABLE_WALLET + // Case 1: Bitcoin address and we have full public key: + CBitcoinAddress address(ks); + if (pwalletMain && address.IsValid()) + { + CKeyID keyID; + if (!address.GetKeyID(keyID)) + throw runtime_error( + strprintf("%s does not refer to a key",ks)); + CPubKey vchPubKey; + if (!pwalletMain->GetPubKey(keyID, vchPubKey)) + throw runtime_error( + strprintf("no full public key for address %s",ks)); + if (!vchPubKey.IsFullyValid()) + throw runtime_error(" Invalid public key: "+ks); + pubkeys[i] = vchPubKey; + } + + // Case 2: hex public key + else +#endif + if (IsHex(ks)) + { + CPubKey vchPubKey(ParseHex(ks)); + if (!vchPubKey.IsFullyValid()) + throw runtime_error(" Invalid public key: "+ks); + pubkeys[i] = vchPubKey; + } + else + { + throw runtime_error(" Invalid public key: "+ks); + } + } + CScript result; + result.SetMultisig(nRequired, pubkeys); + return result; +} + +Value createmultisig(const Array& params, bool fHelp) +{ + if (fHelp || params.size() < 2 || params.size() > 2) + { + string msg = "createmultisig nrequired [\"key\",...]\n" + "\nCreates a multi-signature address with n signature of m keys required.\n" + "It returns a json object with the address and redeemScript.\n" + + "\nArguments:\n" + "1. nrequired (numeric, required) The number of required signatures out of the n keys or addresses.\n" + "2. \"keys\" (string, required) A json array of keys which are myriadcoin addresses or hex-encoded public keys\n" + " [\n" + " \"key\" (string) myriadcoin address or hex-encoded public key\n" + " ,...\n" + " ]\n" + + "\nResult:\n" + "{\n" + " \"address\":\"multisigaddress\", (string) The value of the new multisig address.\n" + " \"redeemScript\":\"script\" (string) The string value of the hex-encoded redemption script.\n" + "}\n" + + "\nExamples:\n" + "\nCreate a multisig address from 2 addresses\n" + + HelpExampleCli("createmultisig", "2 \"[\\\"16sSauSf5pF2UkUwvKGq4qjNRzBZYqgEL5\\\",\\\"171sgjn4YtPu27adkKGrdDwzRTxnRkBfKV\\\"]\"") + + "\nAs a json rpc call\n" + + HelpExampleRpc("createmultisig", "2, \"[\\\"16sSauSf5pF2UkUwvKGq4qjNRzBZYqgEL5\\\",\\\"171sgjn4YtPu27adkKGrdDwzRTxnRkBfKV\\\"]\"") + ; + throw runtime_error(msg); + } + + // Construct using pay-to-script-hash: + CScript inner = _createmultisig(params); + CScriptID innerID = inner.GetID(); + CBitcoinAddress address(innerID); + + Object result; + result.push_back(Pair("address", address.ToString())); + result.push_back(Pair("redeemScript", HexStr(inner.begin(), inner.end()))); + + return result; +} + +Value verifymessage(const Array& params, bool fHelp) +{ + if (fHelp || params.size() != 3) + throw runtime_error( + "verifymessage \"myriadcoinaddress\" \"signature\" \"message\"\n" + "\nVerify a signed message\n" + "\nArguments:\n" + "1. \"myriadcoinaddress\" (string, required) The myriadcoin address to use for the signature.\n" + "2. \"signature\" (string, required) The signature provided by the signer in base 64 encoding (see signmessage).\n" + "3. \"message\" (string, required) The message that was signed.\n" + "\nResult:\n" + "true|false (boolean) If the signature is verified or not.\n" + "\nExamples:\n" + "\nUnlock the wallet for 30 seconds\n" + + HelpExampleCli("walletpassphrase", "\"mypassphrase\" 30") + + "\nCreate the signature\n" + + HelpExampleCli("signmessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\" \"my message\"") + + "\nVerify the signature\n" + + HelpExampleCli("verifymessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\" \"signature\" \"my message\"") + + "\nAs json rpc\n" + + HelpExampleRpc("verifymessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\", \"signature\", \"my message\"") + ); + + string strAddress = params[0].get_str(); + string strSign = params[1].get_str(); + string strMessage = params[2].get_str(); + + CBitcoinAddress addr(strAddress); + if (!addr.IsValid()) + throw JSONRPCError(RPC_TYPE_ERROR, "Invalid address"); + + CKeyID keyID; + if (!addr.GetKeyID(keyID)) + throw JSONRPCError(RPC_TYPE_ERROR, "Address does not refer to key"); + + bool fInvalid = false; + vector vchSig = DecodeBase64(strSign.c_str(), &fInvalid); + + if (fInvalid) + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Malformed base64 encoding"); + + CHashWriter ss(SER_GETHASH, 0); + ss << strMessageMagic; + ss << strMessage; + + CPubKey pubkey; + if (!pubkey.RecoverCompact(ss.GetHash(), vchSig)) + return false; + + return (pubkey.GetID() == keyID); +} diff --git a/src/rpcnet.cpp b/src/rpcnet.cpp index c437bd7c..bcbea118 100644 --- a/src/rpcnet.cpp +++ b/src/rpcnet.cpp @@ -1,9 +1,18 @@ -// Copyright (c) 2009-2012 Bitcoin Developers +// Copyright (c) 2009-2014 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. +#include "rpcserver.h" + +#include "main.h" #include "net.h" -#include "bitcoinrpc.h" +#include "netbase.h" +#include "protocol.h" +#include "sync.h" +#include "util.h" + +#include +#include "json/json_spirit_value.h" using namespace json_spirit; using namespace std; @@ -13,12 +22,40 @@ Value getconnectioncount(const Array& params, bool fHelp) if (fHelp || params.size() != 0) throw runtime_error( "getconnectioncount\n" - "Returns the number of connections to other nodes."); + "\nReturns the number of connections to other nodes.\n" + "\nbResult:\n" + "n (numeric) The connection count\n" + "\nExamples:\n" + + HelpExampleCli("getconnectioncount", "") + + HelpExampleRpc("getconnectioncount", "") + ); LOCK(cs_vNodes); return (int)vNodes.size(); } +Value ping(const Array& params, bool fHelp) +{ + if (fHelp || params.size() != 0) + throw runtime_error( + "ping\n" + "\nRequests that a ping be sent to all other nodes, to measure ping time.\n" + "Results provided in getpeerinfo, pingtime and pingwait fields are decimal seconds.\n" + "Ping command is handled in queue with all other commands, so it measures processing backlog, not just network ping.\n" + "\nExamples:\n" + + HelpExampleCli("ping", "") + + HelpExampleRpc("ping", "") + ); + + // Request that each node send a ping during next message processing pass + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pNode, vNodes) { + pNode->fPingQueued = true; + } + + return Value::null; +} + static void CopyNodeStats(std::vector& vstats) { vstats.clear(); @@ -37,7 +74,34 @@ Value getpeerinfo(const Array& params, bool fHelp) if (fHelp || params.size() != 0) throw runtime_error( "getpeerinfo\n" - "Returns data about each connected network node."); + "\nReturns data about each connected network node as a json array of objects.\n" + "\nbResult:\n" + "[\n" + " {\n" + " \"addr\":\"host:port\", (string) The ip address and port of the peer\n" + " \"addrlocal\":\"ip:port\", (string) local address\n" + " \"services\":\"00000001\", (string) The services\n" + " \"lastsend\": ttt, (numeric) The time in seconds since epoch (Jan 1 1970 GMT) of the last send\n" + " \"lastrecv\": ttt, (numeric) The time in seconds since epoch (Jan 1 1970 GMT) of the last receive\n" + " \"bytessent\": n, (numeric) The total bytes sent\n" + " \"bytesrecv\": n, (numeric) The total bytes received\n" + " \"conntime\": ttt, (numeric) The connection time in seconds since epoch (Jan 1 1970 GMT)\n" + " \"pingtime\": n, (numeric) ping time\n" + " \"pingwait\": n, (numeric) ping wait\n" + " \"version\": v, (numeric) The peer version, such as 7001\n" + " \"subver\": \"/Satoshi:0.8.5/\", (string) The string version\n" + " \"inbound\": true|false, (boolean) Inbound (true) or Outbound (false)\n" + " \"startingheight\": n, (numeric) The starting height (block) of the peer\n" + " \"banscore\": n, (numeric) The ban score (stats.nMisbehavior)\n" + " \"syncnode\" : true|false (booleamn) if sync node\n" + " }\n" + " ,...\n" + "}\n" + + "\nExamples:\n" + + HelpExampleCli("getpeerinfo", "") + + HelpExampleRpc("getpeerinfo", "") + ); vector vstats; CopyNodeStats(vstats); @@ -46,21 +110,31 @@ Value getpeerinfo(const Array& params, bool fHelp) BOOST_FOREACH(const CNodeStats& stats, vstats) { Object obj; - + CNodeStateStats statestats; + bool fStateStats = GetNodeStateStats(stats.nodeid, statestats); obj.push_back(Pair("addr", stats.addrName)); - obj.push_back(Pair("services", strprintf("%08"PRI64x, stats.nServices))); - obj.push_back(Pair("lastsend", (boost::int64_t)stats.nLastSend)); - obj.push_back(Pair("lastrecv", (boost::int64_t)stats.nLastRecv)); - obj.push_back(Pair("bytessent", (boost::int64_t)stats.nSendBytes)); - obj.push_back(Pair("bytesrecv", (boost::int64_t)stats.nRecvBytes)); - obj.push_back(Pair("conntime", (boost::int64_t)stats.nTimeConnected)); + if (!(stats.addrLocal.empty())) + obj.push_back(Pair("addrlocal", stats.addrLocal)); + obj.push_back(Pair("services", strprintf("%08x", stats.nServices))); + obj.push_back(Pair("lastsend", stats.nLastSend)); + obj.push_back(Pair("lastrecv", stats.nLastRecv)); + obj.push_back(Pair("bytessent", stats.nSendBytes)); + obj.push_back(Pair("bytesrecv", stats.nRecvBytes)); + obj.push_back(Pair("conntime", stats.nTimeConnected)); + obj.push_back(Pair("pingtime", stats.dPingTime)); + if (stats.dPingWait > 0.0) + obj.push_back(Pair("pingwait", stats.dPingWait)); obj.push_back(Pair("version", stats.nVersion)); - obj.push_back(Pair("subver", stats.strSubVer)); + // Use the sanitized form of subver here, to avoid tricksy remote peers from + // corrupting or modifiying the JSON output by putting special characters in + // their ver message. + obj.push_back(Pair("subver", stats.cleanSubVer)); obj.push_back(Pair("inbound", stats.fInbound)); obj.push_back(Pair("startingheight", stats.nStartingHeight)); - obj.push_back(Pair("banscore", stats.nMisbehavior)); - if (stats.fSyncNode) - obj.push_back(Pair("syncnode", true)); + if (fStateStats) { + obj.push_back(Pair("banscore", statestats.nMisbehavior)); + } + obj.push_back(Pair("syncnode", stats.fSyncNode)); ret.push_back(obj); } @@ -76,8 +150,16 @@ Value addnode(const Array& params, bool fHelp) if (fHelp || params.size() != 2 || (strCommand != "onetry" && strCommand != "add" && strCommand != "remove")) throw runtime_error( - "addnode \n" - "Attempts add or remove from the addnode list or try a connection to once."); + "addnode \"node\" \"add|remove|onetry\"\n" + "\nAttempts add or remove a node from the addnode list.\n" + "Or try a connection to a node once.\n" + "\nArguments:\n" + "1. \"node\" (string, required) The node (see getpeerinfo for nodes)\n" + "2. \"command\" (string, required) 'add' to add a node to the list, 'remove' to remove a node from the list, 'onetry' to try a connection to the node once\n" + "\nExamples:\n" + + HelpExampleCli("addnode", "\"192.168.0.6:8333\" \"onetry\"") + + HelpExampleRpc("addnode", "\"192.168.0.6:8333\", \"onetry\"") + ); string strNode = params[0].get_str(); @@ -97,13 +179,13 @@ Value addnode(const Array& params, bool fHelp) if (strCommand == "add") { if (it != vAddedNodes.end()) - throw JSONRPCError(-23, "Error: Node already added"); + throw JSONRPCError(RPC_CLIENT_NODE_ALREADY_ADDED, "Error: Node already added"); vAddedNodes.push_back(strNode); } else if(strCommand == "remove") { if (it == vAddedNodes.end()) - throw JSONRPCError(-24, "Error: Node has not been added."); + throw JSONRPCError(RPC_CLIENT_NODE_NOT_ADDED, "Error: Node has not been added."); vAddedNodes.erase(it); } @@ -114,11 +196,34 @@ Value getaddednodeinfo(const Array& params, bool fHelp) { if (fHelp || params.size() < 1 || params.size() > 2) throw runtime_error( - "getaddednodeinfo [node]\n" - "Returns information about the given added node, or all added nodes\n" + "getaddednodeinfo dns ( \"node\" )\n" + "\nReturns information about the given added node, or all added nodes\n" "(note that onetry addnodes are not listed here)\n" "If dns is false, only a list of added nodes will be provided,\n" - "otherwise connected information will also be available."); + "otherwise connected information will also be available.\n" + "\nArguments:\n" + "1. dns (boolean, required) If false, only a list of added nodes will be provided, otherwise connected information will also be available.\n" + "2. \"node\" (string, optional) If provided, return information about this specific node, otherwise all nodes are returned.\n" + "\nResult:\n" + "[\n" + " {\n" + " \"addednode\" : \"192.168.0.201\", (string) The node ip address\n" + " \"connected\" : true|false, (boolean) If connected\n" + " \"addresses\" : [\n" + " {\n" + " \"address\" : \"192.168.0.201:8333\", (string) The myriadcoin server host and port\n" + " \"connected\" : \"outbound\" (string) connection, inbound or outbound\n" + " }\n" + " ,...\n" + " ]\n" + " }\n" + " ,...\n" + "]\n" + "\nExamples:\n" + + HelpExampleCli("getaddednodeinfo", "true") + + HelpExampleCli("getaddednodeinfo", "true \"192.168.0.201\"") + + HelpExampleRpc("getaddednodeinfo", "true, \"192.168.0.201\"") + ); bool fDns = params[0].get_bool(); @@ -140,18 +245,20 @@ Value getaddednodeinfo(const Array& params, bool fHelp) break; } if (laddedNodes.size() == 0) - throw JSONRPCError(-24, "Error: Node has not been added."); - } - - if (!fDns) - { - Object ret; - BOOST_FOREACH(string& strAddNode, laddedNodes) - ret.push_back(Pair("addednode", strAddNode)); - return ret; + throw JSONRPCError(RPC_CLIENT_NODE_NOT_ADDED, "Error: Node has not been added."); } Array ret; + if (!fDns) + { + BOOST_FOREACH(string& strAddNode, laddedNodes) + { + Object obj; + obj.push_back(Pair("addednode", strAddNode)); + ret.push_back(obj); + } + return ret; + } list > > laddedAddreses(0); BOOST_FOREACH(string& strAddNode, laddedNodes) @@ -201,3 +308,79 @@ Value getaddednodeinfo(const Array& params, bool fHelp) return ret; } + +Value getnettotals(const Array& params, bool fHelp) +{ + if (fHelp || params.size() > 0) + throw runtime_error( + "getnettotals\n" + "\nReturns information about network traffic, including bytes in, bytes out,\n" + "and current time.\n" + "\nResult:\n" + "{\n" + " \"totalbytesrecv\": n, (numeric) Total bytes received\n" + " \"totalbytessent\": n, (numeric) Total bytes sent\n" + " \"timemillis\": t (numeric) Total cpu time\n" + "}\n" + "\nExamples:\n" + + HelpExampleCli("getnettotals", "") + + HelpExampleRpc("getnettotals", "") + ); + + Object obj; + obj.push_back(Pair("totalbytesrecv", CNode::GetTotalBytesRecv())); + obj.push_back(Pair("totalbytessent", CNode::GetTotalBytesSent())); + obj.push_back(Pair("timemillis", GetTimeMillis())); + return obj; +} + +Value getnetworkinfo(const Array& params, bool fHelp) +{ + if (fHelp || params.size() != 0) + throw runtime_error( + "getnetworkinfo\n" + "Returns an object containing various state info regarding P2P networking.\n" + "\nResult:\n" + "{\n" + " \"version\": xxxxx, (numeric) the server version\n" + " \"protocolversion\": xxxxx, (numeric) the protocol version\n" + " \"timeoffset\": xxxxx, (numeric) the time offset\n" + " \"connections\": xxxxx, (numeric) the number of connections\n" + " \"proxy\": \"host:port\", (string, optional) the proxy used by the server\n" + " \"relayfee\": x.xxxx, (numeric) minimum relay fee for non-free transactions in btc/kb\n" + " \"localaddresses\": [, (array) list of local addresses\n" + " \"address\": \"xxxx\", (string) network address\n" + " \"port\": xxx, (numeric) network port\n" + " \"score\": xxx (numeric) relative score\n" + " ]\n" + "}\n" + "\nExamples:\n" + + HelpExampleCli("getnetworkinfo", "") + + HelpExampleRpc("getnetworkinfo", "") + ); + + proxyType proxy; + GetProxy(NET_IPV4, proxy); + + Object obj; + obj.push_back(Pair("version", (int)CLIENT_VERSION)); + obj.push_back(Pair("protocolversion",(int)PROTOCOL_VERSION)); + obj.push_back(Pair("timeoffset", GetTimeOffset())); + obj.push_back(Pair("connections", (int)vNodes.size())); + obj.push_back(Pair("proxy", (proxy.first.IsValid() ? proxy.first.ToStringIPPort() : string()))); + obj.push_back(Pair("relayfee", ValueFromAmount(CTransaction::nMinRelayTxFee))); + Array localAddresses; + { + LOCK(cs_mapLocalHost); + BOOST_FOREACH(const PAIRTYPE(CNetAddr, LocalServiceInfo) &item, mapLocalHost) + { + Object rec; + rec.push_back(Pair("address", item.first.ToString())); + rec.push_back(Pair("port", item.second.nPort)); + rec.push_back(Pair("score", item.second.nScore)); + localAddresses.push_back(rec); + } + } + obj.push_back(Pair("localaddresses", localAddresses)); + return obj; +} diff --git a/src/rpcprotocol.cpp b/src/rpcprotocol.cpp new file mode 100644 index 00000000..89258eeb --- /dev/null +++ b/src/rpcprotocol.cpp @@ -0,0 +1,253 @@ +// Copyright (c) 2010 Satoshi Nakamoto +// Copyright (c) 2009-2014 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "rpcprotocol.h" + +#include "util.h" + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "json/json_spirit_writer_template.h" + +using namespace std; +using namespace boost; +using namespace boost::asio; +using namespace json_spirit; + +// +// HTTP protocol +// +// This ain't Apache. We're just using HTTP header for the length field +// and to be compatible with other JSON-RPC implementations. +// + +string HTTPPost(const string& strMsg, const map& mapRequestHeaders) +{ + ostringstream s; + s << "POST / HTTP/1.1\r\n" + << "User-Agent: myriadcoin-json-rpc/" << FormatFullVersion() << "\r\n" + << "Host: 127.0.0.1\r\n" + << "Content-Type: application/json\r\n" + << "Content-Length: " << strMsg.size() << "\r\n" + << "Connection: close\r\n" + << "Accept: application/json\r\n"; + BOOST_FOREACH(const PAIRTYPE(string, string)& item, mapRequestHeaders) + s << item.first << ": " << item.second << "\r\n"; + s << "\r\n" << strMsg; + + return s.str(); +} + +static string rfc1123Time() +{ + return DateTimeStrFormat("%a, %d %b %Y %H:%M:%S +0000", GetTime()); +} + +string HTTPReply(int nStatus, const string& strMsg, bool keepalive) +{ + if (nStatus == HTTP_UNAUTHORIZED) + return strprintf("HTTP/1.0 401 Authorization Required\r\n" + "Date: %s\r\n" + "Server: myriadcoin-json-rpc/%s\r\n" + "WWW-Authenticate: Basic realm=\"jsonrpc\"\r\n" + "Content-Type: text/html\r\n" + "Content-Length: 296\r\n" + "\r\n" + "\r\n" + "\r\n" + "\r\n" + "Error\r\n" + "\r\n" + "\r\n" + "

401 Unauthorized.

\r\n" + "\r\n", rfc1123Time(), FormatFullVersion()); + const char *cStatus; + if (nStatus == HTTP_OK) cStatus = "OK"; + else if (nStatus == HTTP_BAD_REQUEST) cStatus = "Bad Request"; + else if (nStatus == HTTP_FORBIDDEN) cStatus = "Forbidden"; + else if (nStatus == HTTP_NOT_FOUND) cStatus = "Not Found"; + else if (nStatus == HTTP_INTERNAL_SERVER_ERROR) cStatus = "Internal Server Error"; + else cStatus = ""; + return strprintf( + "HTTP/1.1 %d %s\r\n" + "Date: %s\r\n" + "Connection: %s\r\n" + "Content-Length: %u\r\n" + "Content-Type: application/json\r\n" + "Server: myriadcoin-json-rpc/%s\r\n" + "\r\n" + "%s", + nStatus, + cStatus, + rfc1123Time(), + keepalive ? "keep-alive" : "close", + strMsg.size(), + FormatFullVersion(), + strMsg); +} + +bool ReadHTTPRequestLine(std::basic_istream& stream, int &proto, + string& http_method, string& http_uri) +{ + string str; + getline(stream, str); + + // HTTP request line is space-delimited + vector vWords; + boost::split(vWords, str, boost::is_any_of(" ")); + if (vWords.size() < 2) + return false; + + // HTTP methods permitted: GET, POST + http_method = vWords[0]; + if (http_method != "GET" && http_method != "POST") + return false; + + // HTTP URI must be an absolute path, relative to current host + http_uri = vWords[1]; + if (http_uri.size() == 0 || http_uri[0] != '/') + return false; + + // parse proto, if present + string strProto = ""; + if (vWords.size() > 2) + strProto = vWords[2]; + + proto = 0; + const char *ver = strstr(strProto.c_str(), "HTTP/1."); + if (ver != NULL) + proto = atoi(ver+7); + + return true; +} + +int ReadHTTPStatus(std::basic_istream& stream, int &proto) +{ + string str; + getline(stream, str); + vector vWords; + boost::split(vWords, str, boost::is_any_of(" ")); + if (vWords.size() < 2) + return HTTP_INTERNAL_SERVER_ERROR; + proto = 0; + const char *ver = strstr(str.c_str(), "HTTP/1."); + if (ver != NULL) + proto = atoi(ver+7); + return atoi(vWords[1].c_str()); +} + +int ReadHTTPHeaders(std::basic_istream& stream, map& mapHeadersRet) +{ + int nLen = 0; + while (true) + { + string str; + std::getline(stream, str); + if (str.empty() || str == "\r") + break; + string::size_type nColon = str.find(":"); + if (nColon != string::npos) + { + string strHeader = str.substr(0, nColon); + boost::trim(strHeader); + boost::to_lower(strHeader); + string strValue = str.substr(nColon+1); + boost::trim(strValue); + mapHeadersRet[strHeader] = strValue; + if (strHeader == "content-length") + nLen = atoi(strValue.c_str()); + } + } + return nLen; +} + + +int ReadHTTPMessage(std::basic_istream& stream, map& mapHeadersRet, string& strMessageRet, + int nProto) +{ + mapHeadersRet.clear(); + strMessageRet = ""; + + // Read header + int nLen = ReadHTTPHeaders(stream, mapHeadersRet); + if (nLen < 0 || nLen > (int)MAX_SIZE) + return HTTP_INTERNAL_SERVER_ERROR; + + // Read message + if (nLen > 0) + { + vector vch(nLen); + stream.read(&vch[0], nLen); + strMessageRet = string(vch.begin(), vch.end()); + } + + string sConHdr = mapHeadersRet["connection"]; + + if ((sConHdr != "close") && (sConHdr != "keep-alive")) + { + if (nProto >= 1) + mapHeadersRet["connection"] = "keep-alive"; + else + mapHeadersRet["connection"] = "close"; + } + + return HTTP_OK; +} + +// +// JSON-RPC protocol. Bitcoin speaks version 1.0 for maximum compatibility, +// but uses JSON-RPC 1.1/2.0 standards for parts of the 1.0 standard that were +// unspecified (HTTP errors and contents of 'error'). +// +// 1.0 spec: http://json-rpc.org/wiki/specification +// 1.2 spec: http://jsonrpc.org/historical/json-rpc-over-http.html +// http://www.codeproject.com/KB/recipes/JSON_Spirit.aspx +// + +string JSONRPCRequest(const string& strMethod, const Array& params, const Value& id) +{ + Object request; + request.push_back(Pair("method", strMethod)); + request.push_back(Pair("params", params)); + request.push_back(Pair("id", id)); + return write_string(Value(request), false) + "\n"; +} + +Object JSONRPCReplyObj(const Value& result, const Value& error, const Value& id) +{ + Object reply; + if (error.type() != null_type) + reply.push_back(Pair("result", Value::null)); + else + reply.push_back(Pair("result", result)); + reply.push_back(Pair("error", error)); + reply.push_back(Pair("id", id)); + return reply; +} + +string JSONRPCReply(const Value& result, const Value& error, const Value& id) +{ + Object reply = JSONRPCReplyObj(result, error, id); + return write_string(Value(reply), false) + "\n"; +} + +Object JSONRPCError(int code, const string& message) +{ + Object error; + error.push_back(Pair("code", code)); + error.push_back(Pair("message", message)); + return error; +} diff --git a/src/rpcprotocol.h b/src/rpcprotocol.h new file mode 100644 index 00000000..8b3df196 --- /dev/null +++ b/src/rpcprotocol.h @@ -0,0 +1,140 @@ +// Copyright (c) 2010 Satoshi Nakamoto +// Copyright (c) 2009-2014 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef _BITCOINRPC_PROTOCOL_H_ +#define _BITCOINRPC_PROTOCOL_H_ 1 + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "json/json_spirit_reader_template.h" +#include "json/json_spirit_utils.h" +#include "json/json_spirit_writer_template.h" + +// HTTP status codes +enum HTTPStatusCode +{ + HTTP_OK = 200, + HTTP_BAD_REQUEST = 400, + HTTP_UNAUTHORIZED = 401, + HTTP_FORBIDDEN = 403, + HTTP_NOT_FOUND = 404, + HTTP_INTERNAL_SERVER_ERROR = 500, +}; + +// Bitcoin RPC error codes +enum RPCErrorCode +{ + // Standard JSON-RPC 2.0 errors + RPC_INVALID_REQUEST = -32600, + RPC_METHOD_NOT_FOUND = -32601, + RPC_INVALID_PARAMS = -32602, + RPC_INTERNAL_ERROR = -32603, + RPC_PARSE_ERROR = -32700, + + // General application defined errors + RPC_MISC_ERROR = -1, // std::exception thrown in command handling + RPC_FORBIDDEN_BY_SAFE_MODE = -2, // Server is in safe mode, and command is not allowed in safe mode + RPC_TYPE_ERROR = -3, // Unexpected type was passed as parameter + RPC_INVALID_ADDRESS_OR_KEY = -5, // Invalid address or key + RPC_OUT_OF_MEMORY = -7, // Ran out of memory during operation + RPC_INVALID_PARAMETER = -8, // Invalid, missing or duplicate parameter + RPC_DATABASE_ERROR = -20, // Database error + RPC_DESERIALIZATION_ERROR = -22, // Error parsing or validating structure in raw format + RPC_TRANSACTION_ERROR = -25, // General error during transaction submission + RPC_TRANSACTION_REJECTED = -26, // Transaction was rejected by network rules + RPC_TRANSACTION_ALREADY_IN_CHAIN= -27, // Transaction already in chain + + // P2P client errors + RPC_CLIENT_NOT_CONNECTED = -9, // Bitcoin is not connected + RPC_CLIENT_IN_INITIAL_DOWNLOAD = -10, // Still downloading initial blocks + RPC_CLIENT_NODE_ALREADY_ADDED = -23, // Node is already added + RPC_CLIENT_NODE_NOT_ADDED = -24, // Node has not been added before + + // Wallet errors + RPC_WALLET_ERROR = -4, // Unspecified problem with wallet (key not found etc.) + RPC_WALLET_INSUFFICIENT_FUNDS = -6, // Not enough funds in wallet or account + RPC_WALLET_INVALID_ACCOUNT_NAME = -11, // Invalid account name + RPC_WALLET_KEYPOOL_RAN_OUT = -12, // Keypool ran out, call keypoolrefill first + RPC_WALLET_UNLOCK_NEEDED = -13, // Enter the wallet passphrase with walletpassphrase first + RPC_WALLET_PASSPHRASE_INCORRECT = -14, // The wallet passphrase entered was incorrect + RPC_WALLET_WRONG_ENC_STATE = -15, // Command given in wrong wallet encryption state (encrypting an encrypted wallet etc.) + RPC_WALLET_ENCRYPTION_FAILED = -16, // Failed to encrypt the wallet + RPC_WALLET_ALREADY_UNLOCKED = -17, // Wallet is already unlocked +}; + +// +// IOStream device that speaks SSL but can also speak non-SSL +// +template +class SSLIOStreamDevice : public boost::iostreams::device { +public: + SSLIOStreamDevice(boost::asio::ssl::stream &streamIn, bool fUseSSLIn) : stream(streamIn) + { + fUseSSL = fUseSSLIn; + fNeedHandshake = fUseSSLIn; + } + + void handshake(boost::asio::ssl::stream_base::handshake_type role) + { + if (!fNeedHandshake) return; + fNeedHandshake = false; + stream.handshake(role); + } + std::streamsize read(char* s, std::streamsize n) + { + handshake(boost::asio::ssl::stream_base::server); // HTTPS servers read first + if (fUseSSL) return stream.read_some(boost::asio::buffer(s, n)); + return stream.next_layer().read_some(boost::asio::buffer(s, n)); + } + std::streamsize write(const char* s, std::streamsize n) + { + handshake(boost::asio::ssl::stream_base::client); // HTTPS clients write first + if (fUseSSL) return boost::asio::write(stream, boost::asio::buffer(s, n)); + return boost::asio::write(stream.next_layer(), boost::asio::buffer(s, n)); + } + bool connect(const std::string& server, const std::string& port) + { + boost::asio::ip::tcp::resolver resolver(stream.get_io_service()); + boost::asio::ip::tcp::resolver::query query(server.c_str(), port.c_str()); + boost::asio::ip::tcp::resolver::iterator endpoint_iterator = resolver.resolve(query); + boost::asio::ip::tcp::resolver::iterator end; + boost::system::error_code error = boost::asio::error::host_not_found; + while (error && endpoint_iterator != end) + { + stream.lowest_layer().close(); + stream.lowest_layer().connect(*endpoint_iterator++, error); + } + if (error) + return false; + return true; + } + +private: + bool fNeedHandshake; + bool fUseSSL; + boost::asio::ssl::stream& stream; +}; + +std::string HTTPPost(const std::string& strMsg, const std::map& mapRequestHeaders); +std::string HTTPReply(int nStatus, const std::string& strMsg, bool keepalive); +bool ReadHTTPRequestLine(std::basic_istream& stream, int &proto, + std::string& http_method, std::string& http_uri); +int ReadHTTPStatus(std::basic_istream& stream, int &proto); +int ReadHTTPHeaders(std::basic_istream& stream, std::map& mapHeadersRet); +int ReadHTTPMessage(std::basic_istream& stream, std::map& mapHeadersRet, + std::string& strMessageRet, int nProto); +std::string JSONRPCRequest(const std::string& strMethod, const json_spirit::Array& params, const json_spirit::Value& id); +json_spirit::Object JSONRPCReplyObj(const json_spirit::Value& result, const json_spirit::Value& error, const json_spirit::Value& id); +std::string JSONRPCReply(const json_spirit::Value& result, const json_spirit::Value& error, const json_spirit::Value& id); +json_spirit::Object JSONRPCError(int code, const std::string& message); + +#endif diff --git a/src/rpcrawtransaction.cpp b/src/rpcrawtransaction.cpp index 6f48b0d1..5140473b 100644 --- a/src/rpcrawtransaction.cpp +++ b/src/rpcrawtransaction.cpp @@ -1,67 +1,44 @@ // Copyright (c) 2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2014 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include - #include "base58.h" -#include "bitcoinrpc.h" -#include "db.h" +#include "core.h" #include "init.h" +#include "keystore.h" +#include "main.h" #include "net.h" +#include "rpcserver.h" +#include "uint256.h" +#ifdef ENABLE_WALLET #include "wallet.h" +#endif + +#include + +#include +#include "json/json_spirit_utils.h" +#include "json/json_spirit_value.h" using namespace std; using namespace boost; using namespace boost::assign; using namespace json_spirit; -// -// Utilities: convert hex-encoded Values -// (throws error if not hex). -// -uint256 ParseHashV(const Value& v, string strName) -{ - string strHex; - if (v.type() == str_type) - strHex = v.get_str(); - if (!IsHex(strHex)) // Note: IsHex("") is false - throw JSONRPCError(RPC_INVALID_PARAMETER, strName+" must be hexadecimal string (not '"+strHex+"')"); - uint256 result; - result.SetHex(strHex); - return result; -} -uint256 ParseHashO(const Object& o, string strKey) -{ - return ParseHashV(find_value(o, strKey), strKey); -} -vector ParseHexV(const Value& v, string strName) -{ - string strHex; - if (v.type() == str_type) - strHex = v.get_str(); - if (!IsHex(strHex)) - throw JSONRPCError(RPC_INVALID_PARAMETER, strName+" must be hexadecimal string (not '"+strHex+"')"); - return ParseHex(strHex); -} -vector ParseHexO(const Object& o, string strKey) -{ - return ParseHexV(find_value(o, strKey), strKey); -} - -void ScriptPubKeyToJSON(const CScript& scriptPubKey, Object& out) +void ScriptPubKeyToJSON(const CScript& scriptPubKey, Object& out, bool fIncludeHex) { txnouttype type; vector addresses; int nRequired; out.push_back(Pair("asm", scriptPubKey.ToString())); - out.push_back(Pair("hex", HexStr(scriptPubKey.begin(), scriptPubKey.end()))); + if (fIncludeHex) + out.push_back(Pair("hex", HexStr(scriptPubKey.begin(), scriptPubKey.end()))); if (!ExtractDestinations(scriptPubKey, type, addresses, nRequired)) { - out.push_back(Pair("type", GetTxnOutputType(TX_NONSTANDARD))); + out.push_back(Pair("type", GetTxnOutputType(type))); return; } @@ -78,7 +55,7 @@ void TxToJSON(const CTransaction& tx, const uint256 hashBlock, Object& entry) { entry.push_back(Pair("txid", tx.GetHash().GetHex())); entry.push_back(Pair("version", tx.nVersion)); - entry.push_back(Pair("locktime", (boost::int64_t)tx.nLockTime)); + entry.push_back(Pair("locktime", (int64_t)tx.nLockTime)); Array vin; BOOST_FOREACH(const CTxIn& txin, tx.vin) { @@ -88,13 +65,13 @@ void TxToJSON(const CTransaction& tx, const uint256 hashBlock, Object& entry) else { in.push_back(Pair("txid", txin.prevout.hash.GetHex())); - in.push_back(Pair("vout", (boost::int64_t)txin.prevout.n)); + in.push_back(Pair("vout", (int64_t)txin.prevout.n)); Object o; o.push_back(Pair("asm", txin.scriptSig.ToString())); o.push_back(Pair("hex", HexStr(txin.scriptSig.begin(), txin.scriptSig.end()))); in.push_back(Pair("scriptSig", o)); } - in.push_back(Pair("sequence", (boost::int64_t)txin.nSequence)); + in.push_back(Pair("sequence", (int64_t)txin.nSequence)); vin.push_back(in); } entry.push_back(Pair("vin", vin)); @@ -104,9 +81,9 @@ void TxToJSON(const CTransaction& tx, const uint256 hashBlock, Object& entry) const CTxOut& txout = tx.vout[i]; Object out; out.push_back(Pair("value", ValueFromAmount(txout.nValue))); - out.push_back(Pair("n", (boost::int64_t)i)); + out.push_back(Pair("n", (int64_t)i)); Object o; - ScriptPubKeyToJSON(txout.scriptPubKey, o); + ScriptPubKeyToJSON(txout.scriptPubKey, o, true); out.push_back(Pair("scriptPubKey", o)); vout.push_back(out); } @@ -119,11 +96,11 @@ void TxToJSON(const CTransaction& tx, const uint256 hashBlock, Object& entry) if (mi != mapBlockIndex.end() && (*mi).second) { CBlockIndex* pindex = (*mi).second; - if (pindex->IsInMainChain()) + if (chainActive.Contains(pindex)) { - entry.push_back(Pair("confirmations", 1 + nBestHeight - pindex->nHeight)); - entry.push_back(Pair("time", (boost::int64_t)pindex->nTime)); - entry.push_back(Pair("blocktime", (boost::int64_t)pindex->nTime)); + entry.push_back(Pair("confirmations", 1 + chainActive.Height() - pindex->nHeight)); + entry.push_back(Pair("time", (int64_t)pindex->nTime)); + entry.push_back(Pair("blocktime", (int64_t)pindex->nTime)); } else entry.push_back(Pair("confirmations", 0)); @@ -135,11 +112,64 @@ Value getrawtransaction(const Array& params, bool fHelp) { if (fHelp || params.size() < 1 || params.size() > 2) throw runtime_error( - "getrawtransaction [verbose=0]\n" - "If verbose=0, returns a string that is\n" - "serialized, hex-encoded data for .\n" - "If verbose is non-zero, returns an Object\n" - "with information about ."); + "getrawtransaction \"txid\" ( verbose )\n" + "\nReturn the raw transaction data.\n" + "\nIf verbose=0, returns a string that is serialized, hex-encoded data for 'txid'.\n" + "If verbose is non-zero, returns an Object with information about 'txid'.\n" + + "\nArguments:\n" + "1. \"txid\" (string, required) The transaction id\n" + "2. verbose (numeric, optional, default=0) If 0, return a string, other return a json object\n" + + "\nResult (if verbose is not set or set to 0):\n" + "\"data\" (string) The serialized, hex-encoded data for 'txid'\n" + + "\nResult (if verbose > 0):\n" + "{\n" + " \"hex\" : \"data\", (string) The serialized, hex-encoded data for 'txid'\n" + " \"txid\" : \"id\", (string) The transaction id (same as provided)\n" + " \"version\" : n, (numeric) The version\n" + " \"locktime\" : ttt, (numeric) The lock time\n" + " \"vin\" : [ (array of json objects)\n" + " {\n" + " \"txid\": \"id\", (string) The transaction id\n" + " \"vout\": n, (numeric) \n" + " \"scriptSig\": { (json object) The script\n" + " \"asm\": \"asm\", (string) asm\n" + " \"hex\": \"hex\" (string) hex\n" + " },\n" + " \"sequence\": n (numeric) The script sequence number\n" + " }\n" + " ,...\n" + " ],\n" + " \"vout\" : [ (array of json objects)\n" + " {\n" + " \"value\" : x.xxx, (numeric) The value in btc\n" + " \"n\" : n, (numeric) index\n" + " \"scriptPubKey\" : { (json object)\n" + " \"asm\" : \"asm\", (string) the asm\n" + " \"hex\" : \"hex\", (string) the hex\n" + " \"reqSigs\" : n, (numeric) The required sigs\n" + " \"type\" : \"pubkeyhash\", (string) The type, eg 'pubkeyhash'\n" + " \"addresses\" : [ (json array of string)\n" + " \"myriadcoinaddress\" (string) myriadcoin address\n" + " ,...\n" + " ]\n" + " }\n" + " }\n" + " ,...\n" + " ],\n" + " \"blockhash\" : \"hash\", (string) the block hash\n" + " \"confirmations\" : n, (numeric) The confirmations\n" + " \"time\" : ttt, (numeric) The transaction time in seconds since epoch (Jan 1 1970 GMT)\n" + " \"blocktime\" : ttt (numeric) The block time in seconds since epoch (Jan 1 1970 GMT)\n" + "}\n" + + "\nExamples:\n" + + HelpExampleCli("getrawtransaction", "\"mytxid\"") + + HelpExampleCli("getrawtransaction", "\"mytxid\" 1") + + HelpExampleRpc("getrawtransaction", "\"mytxid\", 1") + ); uint256 hash = ParseHashV(params[0], "parameter 1"); @@ -165,16 +195,44 @@ Value getrawtransaction(const Array& params, bool fHelp) return result; } +#ifdef ENABLE_WALLET Value listunspent(const Array& params, bool fHelp) { if (fHelp || params.size() > 3) throw runtime_error( - "listunspent [minconf=1] [maxconf=9999999] [\"address\",...]\n" - "Returns array of unspent transaction outputs\n" + "listunspent ( minconf maxconf [\"address\",...] )\n" + "\nReturns array of unspent transaction outputs\n" "with between minconf and maxconf (inclusive) confirmations.\n" - "Optionally filtered to only include txouts paid to specified addresses.\n" + "Optionally filter to only include txouts paid to specified addresses.\n" "Results are an array of Objects, each of which has:\n" - "{txid, vout, scriptPubKey, amount, confirmations}"); + "{txid, vout, scriptPubKey, amount, confirmations}\n" + "\nArguments:\n" + "1. minconf (numeric, optional, default=1) The minimum confirmationsi to filter\n" + "2. maxconf (numeric, optional, default=9999999) The maximum confirmations to filter\n" + "3. \"addresses\" (string) A json array of myriadcoin addresses to filter\n" + " [\n" + " \"address\" (string) myriadcoin address\n" + " ,...\n" + " ]\n" + "\nResult\n" + "[ (array of json object)\n" + " {\n" + " \"txid\" : \"txid\", (string) the transaction id \n" + " \"vout\" : n, (numeric) the vout value\n" + " \"address\" : \"address\", (string) the myriadcoin address\n" + " \"account\" : \"account\", (string) The associated account, or \"\" for the default account\n" + " \"scriptPubKey\" : \"key\", (string) the script key\n" + " \"amount\" : x.xxx, (numeric) the transaction amount in btc\n" + " \"confirmations\" : n (numeric) The number of confirmations\n" + " }\n" + " ,...\n" + "]\n" + + "\nExamples\n" + + HelpExampleCli("listunspent", "") + + HelpExampleCli("listunspent", "6 9999999 \"[\\\"1PGFqEzfmQch1gKD3ra4k18PNj3tTUUSqg\\\",\\\"1LtvqCaApEdUGFkpKMM4MstjcaL4dKg8SP\\\"]\"") + + HelpExampleRpc("listunspent", "6, 9999999 \"[\\\"1PGFqEzfmQch1gKD3ra4k18PNj3tTUUSqg\\\",\\\"1LtvqCaApEdUGFkpKMM4MstjcaL4dKg8SP\\\"]\"") + ); RPCTypeCheck(params, list_of(int_type)(int_type)(array_type)); @@ -203,6 +261,7 @@ Value listunspent(const Array& params, bool fHelp) Array results; vector vecOutputs; + assert(pwalletMain != NULL); pwalletMain->AvailableCoins(vecOutputs, false); BOOST_FOREACH(const COutput& out, vecOutputs) { @@ -219,7 +278,7 @@ Value listunspent(const Array& params, bool fHelp) continue; } - int64 nValue = out.tx->vout[out.i].nValue; + int64_t nValue = out.tx->vout[out.i].nValue; const CScript& pk = out.tx->vout[out.i].scriptPubKey; Object entry; entry.push_back(Pair("txid", out.tx->GetHash().GetHex())); @@ -229,7 +288,7 @@ Value listunspent(const Array& params, bool fHelp) { entry.push_back(Pair("address", CBitcoinAddress(address).ToString())); if (pwalletMain->mapAddressBook.count(address)) - entry.push_back(Pair("account", pwalletMain->mapAddressBook[address])); + entry.push_back(Pair("account", pwalletMain->mapAddressBook[address].name)); } entry.push_back(Pair("scriptPubKey", HexStr(pk.begin(), pk.end()))); if (pk.IsPayToScriptHash()) @@ -250,18 +309,40 @@ Value listunspent(const Array& params, bool fHelp) return results; } +#endif Value createrawtransaction(const Array& params, bool fHelp) { if (fHelp || params.size() != 2) throw runtime_error( - "createrawtransaction [{\"txid\":txid,\"vout\":n},...] {address:amount,...}\n" - "Create a transaction spending given inputs\n" - "(array of objects containing transaction id and output number),\n" - "sending to given address(es).\n" + "createrawtransaction [{\"txid\":\"id\",\"vout\":n},...] {\"address\":amount,...}\n" + "\nCreate a transaction spending the given inputs and sending to the given addresses.\n" "Returns hex-encoded raw transaction.\n" "Note that the transaction's inputs are not signed, and\n" - "it is not stored in the wallet or transmitted to the network."); + "it is not stored in the wallet or transmitted to the network.\n" + + "\nArguments:\n" + "1. \"transactions\" (string, required) A json array of json objects\n" + " [\n" + " {\n" + " \"txid\":\"id\", (string, required) The transaction id\n" + " \"vout\":n (numeric, required) The output number\n" + " }\n" + " ,...\n" + " ]\n" + "2. \"addresses\" (string, required) a json object with addresses as keys and amounts as values\n" + " {\n" + " \"address\": x.xxx (numeric, required) The key is the myriadcoin address, the value is the btc amount\n" + " ,...\n" + " }\n" + + "\nResult:\n" + "\"transaction\" (string) hex string of the transaction\n" + + "\nExamples\n" + + HelpExampleCli("createrawtransaction", "\"[{\\\"txid\\\":\\\"myid\\\",\\\"vout\\\":0}]\" \"{\\\"address\\\":0.01}\"") + + HelpExampleRpc("createrawtransaction", "\"[{\\\"txid\\\":\\\"myid\\\",\\\"vout\\\":0}]\", \"{\\\"address\\\":0.01}\"") + ); RPCTypeCheck(params, list_of(array_type)(obj_type)); @@ -300,7 +381,7 @@ Value createrawtransaction(const Array& params, bool fHelp) CScript scriptPubKey; scriptPubKey.SetDestination(address.Get()); - int64 nAmount = AmountFromValue(s.value_); + int64_t nAmount = AmountFromValue(s.value_); CTxOut out(nAmount, scriptPubKey); rawTx.vout.push_back(out); @@ -315,8 +396,52 @@ Value decoderawtransaction(const Array& params, bool fHelp) { if (fHelp || params.size() != 1) throw runtime_error( - "decoderawtransaction \n" - "Return a JSON object representing the serialized, hex-encoded transaction."); + "decoderawtransaction \"hexstring\"\n" + "\nReturn a JSON object representing the serialized, hex-encoded transaction.\n" + + "\nArguments:\n" + "1. \"hex\" (string, required) The transaction hex string\n" + + "\nResult:\n" + "{\n" + " \"txid\" : \"id\", (string) The transaction id\n" + " \"version\" : n, (numeric) The version\n" + " \"locktime\" : ttt, (numeric) The lock time\n" + " \"vin\" : [ (array of json objects)\n" + " {\n" + " \"txid\": \"id\", (string) The transaction id\n" + " \"vout\": n, (numeric) The output number\n" + " \"scriptSig\": { (json object) The script\n" + " \"asm\": \"asm\", (string) asm\n" + " \"hex\": \"hex\" (string) hex\n" + " },\n" + " \"sequence\": n (numeric) The script sequence number\n" + " }\n" + " ,...\n" + " ],\n" + " \"vout\" : [ (array of json objects)\n" + " {\n" + " \"value\" : x.xxx, (numeric) The value in btc\n" + " \"n\" : n, (numeric) index\n" + " \"scriptPubKey\" : { (json object)\n" + " \"asm\" : \"asm\", (string) the asm\n" + " \"hex\" : \"hex\", (string) the hex\n" + " \"reqSigs\" : n, (numeric) The required sigs\n" + " \"type\" : \"pubkeyhash\", (string) The type, eg 'pubkeyhash'\n" + " \"addresses\" : [ (json array of string)\n" + " \"12tvKAXCxZjSmdNbao16dKXC8tRWfcF5oc\" (string) myriadcoin address\n" + " ,...\n" + " ]\n" + " }\n" + " }\n" + " ,...\n" + " ],\n" + "}\n" + + "\nExamples:\n" + + HelpExampleCli("decoderawtransaction", "\"hexstring\"") + + HelpExampleRpc("decoderawtransaction", "\"hexstring\"") + ); vector txData(ParseHexV(params[0], "argument")); CDataStream ssData(txData, SER_NETWORK, PROTOCOL_VERSION); @@ -334,22 +459,96 @@ Value decoderawtransaction(const Array& params, bool fHelp) return result; } +Value decodescript(const Array& params, bool fHelp) +{ + if (fHelp || params.size() != 1) + throw runtime_error( + "decodescript \"hex\"\n" + "\nDecode a hex-encoded script.\n" + "\nArguments:\n" + "1. \"hex\" (string) the hex encoded script\n" + "\nResult:\n" + "{\n" + " \"asm\":\"asm\", (string) Script public key\n" + " \"hex\":\"hex\", (string) hex encoded public key\n" + " \"type\":\"type\", (string) The output type\n" + " \"reqSigs\": n, (numeric) The required signatures\n" + " \"addresses\": [ (json array of string)\n" + " \"address\" (string) myriadcoin address\n" + " ,...\n" + " ],\n" + " \"p2sh\",\"address\" (string) script address\n" + "}\n" + "\nExamples:\n" + + HelpExampleCli("decodescript", "\"hexstring\"") + + HelpExampleRpc("decodescript", "\"hexstring\"") + ); + + RPCTypeCheck(params, list_of(str_type)); + + Object r; + CScript script; + if (params[0].get_str().size() > 0){ + vector scriptData(ParseHexV(params[0], "argument")); + script = CScript(scriptData.begin(), scriptData.end()); + } else { + // Empty scripts are valid + } + ScriptPubKeyToJSON(script, r, false); + + r.push_back(Pair("p2sh", CBitcoinAddress(script.GetID()).ToString())); + return r; +} + Value signrawtransaction(const Array& params, bool fHelp) { if (fHelp || params.size() < 1 || params.size() > 4) throw runtime_error( - "signrawtransaction [{\"txid\":txid,\"vout\":n,\"scriptPubKey\":hex,\"redeemScript\":hex},...] [,...] [sighashtype=\"ALL\"]\n" - "Sign inputs for raw transaction (serialized, hex-encoded).\n" - "Second optional argument (may be null) is an array of previous transaction outputs that\n" + "signrawtransaction \"hexstring\" ( [{\"txid\":\"id\",\"vout\":n,\"scriptPubKey\":\"hex\",\"redeemScript\":\"hex\"},...] [\"privatekey1\",...] sighashtype )\n" + "\nSign inputs for raw transaction (serialized, hex-encoded).\n" + "The second optional argument (may be null) is an array of previous transaction outputs that\n" "this transaction depends on but may not yet be in the block chain.\n" - "Third optional argument (may be null) is an array of base58-encoded private\n" + "The third optional argument (may be null) is an array of base58-encoded private\n" "keys that, if given, will be the only keys used to sign the transaction.\n" - "Fourth optional argument is a string that is one of six values; ALL, NONE, SINGLE or\n" - "ALL|ANYONECANPAY, NONE|ANYONECANPAY, SINGLE|ANYONECANPAY.\n" - "Returns json object with keys:\n" - " hex : raw transaction with signature(s) (hex-encoded string)\n" - " complete : 1 if transaction has a complete set of signature (0 if not)" - + HelpRequiringPassphrase()); +#ifdef ENABLE_WALLET + + HelpRequiringPassphrase() + "\n" +#endif + + "\nArguments:\n" + "1. \"hexstring\" (string, required) The transaction hex string\n" + "2. \"prevtxs\" (string, optional) An json array of previous dependent transaction outputs\n" + " [ (json array of json objects, or 'null' if none provided)\n" + " {\n" + " \"txid\":\"id\", (string, required) The transaction id\n" + " \"vout\":n, (numeric, required) The output number\n" + " \"scriptPubKey\": \"hex\", (string, required) script key\n" + " \"redeemScript\": \"hex\" (string, required) redeem script\n" + " }\n" + " ,...\n" + " ]\n" + "3. \"privatekeys\" (string, optional) A json array of base58-encoded private keys for signing\n" + " [ (json array of strings, or 'null' if none provided)\n" + " \"privatekey\" (string) private key in base58-encoding\n" + " ,...\n" + " ]\n" + "4. \"sighashtype\" (string, optional, default=ALL) The signature hash type. Must be one of\n" + " \"ALL\"\n" + " \"NONE\"\n" + " \"SINGLE\"\n" + " \"ALL|ANYONECANPAY\"\n" + " \"NONE|ANYONECANPAY\"\n" + " \"SINGLE|ANYONECANPAY\"\n" + + "\nResult:\n" + "{\n" + " \"hex\": \"value\", (string) The raw transaction with signature(s) (hex-encoded string)\n" + " \"complete\": n (numeric) if transaction has a complete set of signature (0 if not)\n" + "}\n" + + "\nExamples:\n" + + HelpExampleCli("signrawtransaction", "\"myhex\"") + + HelpExampleRpc("signrawtransaction", "\"myhex\"") + ); RPCTypeCheck(params, list_of(str_type)(array_type)(array_type)(str_type), true); @@ -410,8 +609,10 @@ Value signrawtransaction(const Array& params, bool fHelp) tempKeystore.AddKey(key); } } +#ifdef ENABLE_WALLET else EnsureWalletIsUnlocked(); +#endif // Add previous txouts given in the RPC call: if (params.size() > 1 && params[1].type() != null_type) @@ -467,7 +668,11 @@ Value signrawtransaction(const Array& params, bool fHelp) } } - const CKeyStore& keystore = (fGivenKeys ? tempKeystore : *pwalletMain); +#ifdef ENABLE_WALLET + const CKeyStore& keystore = ((fGivenKeys || !pwalletMain) ? tempKeystore : *pwalletMain); +#else + const CKeyStore& keystore = tempKeystore; +#endif int nHashType = SIGHASH_ALL; if (params.size() > 3 && params[3].type() != null_type) @@ -527,16 +732,37 @@ Value signrawtransaction(const Array& params, bool fHelp) Value sendrawtransaction(const Array& params, bool fHelp) { - if (fHelp || params.size() < 1 || params.size() > 1) + if (fHelp || params.size() < 1 || params.size() > 2) throw runtime_error( - "sendrawtransaction \n" - "Submits raw transaction (serialized, hex-encoded) to local node and network."); + "sendrawtransaction \"hexstring\" ( allowhighfees )\n" + "\nSubmits raw transaction (serialized, hex-encoded) to local node and network.\n" + "\nAlso see createrawtransaction and signrawtransaction calls.\n" + "\nArguments:\n" + "1. \"hexstring\" (string, required) The hex string of the raw transaction)\n" + "2. allowhighfees (boolean, optional, default=false) Allow high fees\n" + "\nResult:\n" + "\"hex\" (string) The transaction hash in hex\n" + "\nExamples:\n" + "\nCreate a transaction\n" + + HelpExampleCli("createrawtransaction", "\"[{\\\"txid\\\" : \\\"mytxid\\\",\\\"vout\\\":0}]\" \"{\\\"myaddress\\\":0.01}\"") + + "Sign the transaction, and get back the hex\n" + + HelpExampleCli("signrawtransaction", "\"myhex\"") + + "\nSend the transaction (signed hex)\n" + + HelpExampleCli("sendrawtransaction", "\"signedhex\"") + + "\nAs a json rpc call\n" + + HelpExampleRpc("sendrawtransaction", "\"signedhex\"") + ); + // parse hex string from parameter vector txData(ParseHexV(params[0], "parameter")); CDataStream ssData(txData, SER_NETWORK, PROTOCOL_VERSION); CTransaction tx; + bool fOverrideFees = false; + if (params.size() > 1) + fOverrideFees = params[1].get_bool(); + // deserialize binary data stream try { ssData >> tx; @@ -546,25 +772,23 @@ Value sendrawtransaction(const Array& params, bool fHelp) } uint256 hashTx = tx.GetHash(); - bool fHave = false; CCoinsViewCache &view = *pcoinsTip; CCoins existingCoins; - { - fHave = view.GetCoins(hashTx, existingCoins); - if (!fHave) { - // push to local node - CValidationState state; - if (!mempool.accept(state, tx, false, NULL)) - throw JSONRPCError(RPC_DESERIALIZATION_ERROR, "TX rejected"); // TODO: report validation state + bool fHaveMempool = mempool.exists(hashTx); + bool fHaveChain = view.GetCoins(hashTx, existingCoins) && existingCoins.nHeight < 1000000000; + if (!fHaveMempool && !fHaveChain) { + // push to local node and sync with wallets + CValidationState state; + if (AcceptToMemoryPool(mempool, state, tx, false, NULL, !fOverrideFees)) + SyncWithWallets(hashTx, tx, NULL); + else { + if(state.IsInvalid()) + throw JSONRPCError(RPC_TRANSACTION_REJECTED, strprintf("%i: %s", state.GetRejectCode(), state.GetRejectReason())); + else + throw JSONRPCError(RPC_TRANSACTION_ERROR, state.GetRejectReason()); } - } - if (fHave) { - if (existingCoins.nHeight < 1000000000) - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "transaction already in block chain"); - // Not in block, but already in the memory pool; will drop - // through to re-relay it. - } else { - SyncWithWallets(hashTx, tx, NULL, true); + } else if (fHaveChain) { + throw JSONRPCError(RPC_TRANSACTION_ALREADY_IN_CHAIN, "transaction already in block chain"); } RelayTransaction(tx, hashTx); diff --git a/src/bitcoinrpc.cpp b/src/rpcserver.cpp similarity index 52% rename from src/bitcoinrpc.cpp rename to src/rpcserver.cpp index 517d60a4..3c378941 100644 --- a/src/bitcoinrpc.cpp +++ b/src/rpcserver.cpp @@ -1,30 +1,29 @@ // Copyright (c) 2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2014 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include "chainparams.h" -#include "init.h" -#include "util.h" -#include "sync.h" -#include "ui_interface.h" +#include "rpcserver.h" + #include "base58.h" -#include "bitcoinrpc.h" -#include "db.h" +#include "init.h" +#include "main.h" +#include "ui_interface.h" +#include "util.h" +#ifdef ENABLE_WALLET +#include "wallet.h" +#endif #include #include -#include #include #include #include -#include #include #include #include -#include #include -#include +#include "json/json_spirit_writer_template.h" using namespace std; using namespace boost; @@ -38,14 +37,8 @@ static asio::io_service* rpc_io_service = NULL; static map > deadlineTimers; static ssl::context* rpc_ssl_context = NULL; static boost::thread_group* rpc_worker_group = NULL; - -Object JSONRPCError(int code, const string& message) -{ - Object error; - error.push_back(Pair("code", code)); - error.push_back(Pair("message", message)); - return error; -} +static boost::asio::io_service::work *rpc_dummy_work = NULL; +static std::vector< boost::shared_ptr > rpc_acceptors; void RPCTypeCheck(const Array& params, const list& typesExpected, @@ -76,29 +69,29 @@ void RPCTypeCheck(const Object& o, { const Value& v = find_value(o, t.first); if (!fAllowNull && v.type() == null_type) - throw JSONRPCError(RPC_TYPE_ERROR, strprintf("Missing %s", t.first.c_str())); + throw JSONRPCError(RPC_TYPE_ERROR, strprintf("Missing %s", t.first)); if (!((v.type() == t.second) || (fAllowNull && (v.type() == null_type)))) { string err = strprintf("Expected type %s for %s, got %s", - Value_type_name[t.second], t.first.c_str(), Value_type_name[v.type()]); + Value_type_name[t.second], t.first, Value_type_name[v.type()]); throw JSONRPCError(RPC_TYPE_ERROR, err); } } } -int64 AmountFromValue(const Value& value) +int64_t AmountFromValue(const Value& value) { double dAmount = value.get_real(); if (dAmount <= 0.0 || dAmount > 21000000.0) throw JSONRPCError(RPC_TYPE_ERROR, "Invalid amount"); - int64 nAmount = roundint64(dAmount * COIN); + int64_t nAmount = roundint64(dAmount * COIN); if (!MoneyRange(nAmount)) throw JSONRPCError(RPC_TYPE_ERROR, "Invalid amount"); return nAmount; } -Value ValueFromAmount(int64 amount) +Value ValueFromAmount(int64_t amount) { return (double)amount / (double)COIN; } @@ -113,6 +106,34 @@ std::string HexBits(unsigned int nBits) return HexStr(BEGIN(uBits.cBits), END(uBits.cBits)); } +uint256 ParseHashV(const Value& v, string strName) +{ + string strHex; + if (v.type() == str_type) + strHex = v.get_str(); + if (!IsHex(strHex)) // Note: IsHex("") is false + throw JSONRPCError(RPC_INVALID_PARAMETER, strName+" must be hexadecimal string (not '"+strHex+"')"); + uint256 result; + result.SetHex(strHex); + return result; +} +uint256 ParseHashO(const Object& o, string strKey) +{ + return ParseHashV(find_value(o, strKey), strKey); +} +vector ParseHexV(const Value& v, string strName) +{ + string strHex; + if (v.type() == str_type) + strHex = v.get_str(); + if (!IsHex(strHex)) + throw JSONRPCError(RPC_INVALID_PARAMETER, strName+" must be hexadecimal string (not '"+strHex+"')"); + return ParseHex(strHex); +} +vector ParseHexO(const Object& o, string strKey) +{ + return ParseHexV(find_value(o, strKey), strKey); +} /// @@ -132,6 +153,11 @@ string CRPCTable::help(string strCommand) const continue; if (strCommand != "" && strMethod != strCommand) continue; +#ifdef ENABLE_WALLET + if (pcmd->reqWallet && !pwalletMain) + continue; +#endif + try { Array params; @@ -150,7 +176,7 @@ string CRPCTable::help(string strCommand) const } } if (strRet == "") - strRet = strprintf("help: unknown command: %s\n", strCommand.c_str()); + strRet = strprintf("help: unknown command: %s\n", strCommand); strRet = strRet.substr(0,strRet.size()-1); return strRet; } @@ -159,8 +185,13 @@ Value help(const Array& params, bool fHelp) { if (fHelp || params.size() > 1) throw runtime_error( - "help [command]\n" - "List commands, or get help for a command."); + "help ( \"command\" )\n" + "\nList all commands, or get help for a specified command.\n" + "\nArguments:\n" + "1. \"command\" (string, optional) The command to get help on\n" + "\nResult:\n" + "\"text\" (string) The help text\n" + ); string strCommand; if (params.size() > 0) @@ -176,44 +207,13 @@ Value stop(const Array& params, bool fHelp) if (fHelp || params.size() > 1) throw runtime_error( "stop\n" - "Stop Myriadcoin server."); + "\nStop Myriadcoin server."); // Shutdown will take long enough that the response should get back StartShutdown(); return "Myriadcoin server stopping"; } -Value makekeypair(const Array& params, bool fHelp) -{ - if (fHelp || params.size() > 1) - throw runtime_error( - "makekeypair [prefix]\n" - "Make a public/private key pair.\n" - "[prefix] is optional preferred prefix for the public key.\n"); - string strPrefix = ""; - if (params.size() > 0) - strPrefix = params[0].get_str(); - - CKey key; - CPubKey pubkey; - string pubkeyhex; - int nCount = 0; - do - { - key.MakeNewKey(false); - nCount++; - pubkey = key.GetPubKey(); - pubkeyhex = HexStr(pubkey.begin(), pubkey.end()); - } while (nCount < 10000 && strPrefix != pubkeyhex.substr(0, strPrefix.size())); - - if (strPrefix != pubkeyhex.substr(0, strPrefix.size())) - return Value::null; - - Object result; - result.push_back(Pair("PublicKey", pubkeyhex)); - result.push_back(Pair("PrivateKey", CBitcoinSecret(key).ToString())); - return result; -} // // Call Table @@ -221,75 +221,100 @@ Value makekeypair(const Array& params, bool fHelp) static const CRPCCommand vRPCCommands[] = -{ // name actor (function) okSafeMode threadSafe - // ------------------------ ----------------------- ---------- ---------- - { "help", &help, true, true }, - { "stop", &stop, true, true }, - { "getblockcount", &getblockcount, true, false }, - { "getbestblockhash", &getbestblockhash, true, false }, - { "getconnectioncount", &getconnectioncount, true, false }, - { "getpeerinfo", &getpeerinfo, true, false }, - { "addnode", &addnode, true, true }, - { "getaddednodeinfo", &getaddednodeinfo, true, true }, - { "getdifficulty", &getdifficulty, true, false }, - { "getgenerate", &getgenerate, true, false }, - { "setgenerate", &setgenerate, true, false }, - { "gethashespersec", &gethashespersec, true, false }, - { "getinfo", &getinfo, true, false }, - { "getmininginfo", &getmininginfo, true, false }, - { "getnewaddress", &getnewaddress, true, false }, - { "getaccountaddress", &getaccountaddress, true, false }, - { "setaccount", &setaccount, true, false }, - { "getaccount", &getaccount, false, false }, - { "getaddressesbyaccount", &getaddressesbyaccount, true, false }, - { "sendtoaddress", &sendtoaddress, false, false }, - { "getreceivedbyaddress", &getreceivedbyaddress, false, false }, - { "getreceivedbyaccount", &getreceivedbyaccount, false, false }, - { "listreceivedbyaddress", &listreceivedbyaddress, false, false }, - { "listreceivedbyaccount", &listreceivedbyaccount, false, false }, - { "backupwallet", &backupwallet, true, false }, - { "keypoolrefill", &keypoolrefill, true, false }, - { "walletpassphrase", &walletpassphrase, true, false }, - { "walletpassphrasechange", &walletpassphrasechange, false, false }, - { "walletlock", &walletlock, true, false }, - { "encryptwallet", &encryptwallet, false, false }, - { "validateaddress", &validateaddress, true, false }, - { "getbalance", &getbalance, false, false }, - { "move", &movecmd, false, false }, - { "sendfrom", &sendfrom, false, false }, - { "sendmany", &sendmany, false, false }, - { "addmultisigaddress", &addmultisigaddress, false, false }, - { "createmultisig", &createmultisig, true, true }, - { "getrawmempool", &getrawmempool, true, false }, - { "getblock", &getblock, false, false }, - { "getblockhash", &getblockhash, false, false }, - { "gettransaction", &gettransaction, false, false }, - { "listtransactions", &listtransactions, false, false }, - { "listaddressgroupings", &listaddressgroupings, false, false }, - { "signmessage", &signmessage, false, false }, - { "verifymessage", &verifymessage, false, false }, - { "getwork", &getwork, true, false }, - { "listaccounts", &listaccounts, false, false }, - { "settxfee", &settxfee, false, false }, - { "getblocktemplate", &getblocktemplate, true, false }, - { "submitblock", &submitblock, false, false }, - { "listsinceblock", &listsinceblock, false, false }, - { "dumpprivkey", &dumpprivkey, true, false }, - { "dumpwallet", &dumpwallet, true, false }, - { "importprivkey", &importprivkey, false, false }, - { "importwallet", &importwallet, false, false }, - { "listunspent", &listunspent, false, false }, - { "getrawtransaction", &getrawtransaction, false, false }, - { "createrawtransaction", &createrawtransaction, false, false }, - { "decoderawtransaction", &decoderawtransaction, false, false }, - { "signrawtransaction", &signrawtransaction, false, false }, - { "sendrawtransaction", &sendrawtransaction, false, false }, - { "gettxoutsetinfo", &gettxoutsetinfo, true, false }, - { "gettxout", &gettxout, true, false }, - { "lockunspent", &lockunspent, false, false }, - { "listlockunspent", &listlockunspent, false, false }, - { "verifychain", &verifychain, true, false }, - { "makekeypair", &makekeypair, false, false }, +{ // name actor (function) okSafeMode threadSafe reqWallet + // ------------------------ ----------------------- ---------- ---------- --------- + /* Overall control/query calls */ + { "getinfo", &getinfo, true, false, false }, /* uses wallet if enabled */ + { "help", &help, true, true, false }, + { "stop", &stop, true, true, false }, + + /* P2P networking */ + { "getnetworkinfo", &getnetworkinfo, true, false, false }, + { "addnode", &addnode, true, true, false }, + { "getaddednodeinfo", &getaddednodeinfo, true, true, false }, + { "getconnectioncount", &getconnectioncount, true, false, false }, + { "getnettotals", &getnettotals, true, true, false }, + { "getpeerinfo", &getpeerinfo, true, false, false }, + { "ping", &ping, true, false, false }, + + /* Block chain and UTXO */ + { "getblockchaininfo", &getblockchaininfo, true, false, false }, + { "getbestblockhash", &getbestblockhash, true, false, false }, + { "getblockcount", &getblockcount, true, false, false }, + { "getblock", &getblock, false, false, false }, + { "getblockhash", &getblockhash, false, false, false }, + { "getdifficulty", &getdifficulty, true, false, false }, + { "getrawmempool", &getrawmempool, true, false, false }, + { "gettxout", &gettxout, true, false, false }, + { "gettxoutsetinfo", &gettxoutsetinfo, true, false, false }, + { "verifychain", &verifychain, true, false, false }, + + /* Mining */ + { "getblocktemplate", &getblocktemplate, true, false, false }, + { "getmininginfo", &getmininginfo, true, false, false }, + { "getnetworkhashps", &getnetworkhashps, true, false, false }, + { "submitblock", &submitblock, false, false, false }, + + /* Raw transactions */ + { "createrawtransaction", &createrawtransaction, false, false, false }, + { "decoderawtransaction", &decoderawtransaction, false, false, false }, + { "decodescript", &decodescript, false, false, false }, + { "getrawtransaction", &getrawtransaction, false, false, false }, + { "sendrawtransaction", &sendrawtransaction, false, false, false }, + { "signrawtransaction", &signrawtransaction, false, false, false }, /* uses wallet if enabled */ + + /* Utility functions */ + { "createmultisig", &createmultisig, true, true , false }, + { "validateaddress", &validateaddress, true, false, false }, /* uses wallet if enabled */ + { "verifymessage", &verifymessage, false, false, false }, + +#ifdef ENABLE_WALLET + /* Wallet */ + { "addmultisigaddress", &addmultisigaddress, false, false, true }, + { "backupwallet", &backupwallet, true, false, true }, + { "dumpprivkey", &dumpprivkey, true, false, true }, + { "dumpwallet", &dumpwallet, true, false, true }, + { "encryptwallet", &encryptwallet, false, false, true }, + { "getaccountaddress", &getaccountaddress, true, false, true }, + { "getaccount", &getaccount, false, false, true }, + { "getaddressesbyaccount", &getaddressesbyaccount, true, false, true }, + { "getbalance", &getbalance, false, false, true }, + { "getnewaddress", &getnewaddress, true, false, true }, + { "getrawchangeaddress", &getrawchangeaddress, true, false, true }, + { "getreceivedbyaccount", &getreceivedbyaccount, false, false, true }, + { "getreceivedbyaddress", &getreceivedbyaddress, false, false, true }, + { "gettransaction", &gettransaction, false, false, true }, + { "getunconfirmedbalance", &getunconfirmedbalance, false, false, true }, + { "getwalletinfo", &getwalletinfo, true, false, true }, + { "importprivkey", &importprivkey, false, false, true }, + { "importwallet", &importwallet, false, false, true }, + { "keypoolrefill", &keypoolrefill, true, false, true }, + { "listaccounts", &listaccounts, false, false, true }, + { "listaddressgroupings", &listaddressgroupings, false, false, true }, + { "listlockunspent", &listlockunspent, false, false, true }, + { "listreceivedbyaccount", &listreceivedbyaccount, false, false, true }, + { "listreceivedbyaddress", &listreceivedbyaddress, false, false, true }, + { "listsinceblock", &listsinceblock, false, false, true }, + { "listtransactions", &listtransactions, false, false, true }, + { "listunspent", &listunspent, false, false, true }, + { "lockunspent", &lockunspent, false, false, true }, + { "move", &movecmd, false, false, true }, + { "sendfrom", &sendfrom, false, false, true }, + { "sendmany", &sendmany, false, false, true }, + { "sendtoaddress", &sendtoaddress, false, false, true }, + { "setaccount", &setaccount, true, false, true }, + { "settxfee", &settxfee, false, false, true }, + { "signmessage", &signmessage, false, false, true }, + { "walletlock", &walletlock, true, false, true }, + { "walletpassphrasechange", &walletpassphrasechange, false, false, true }, + { "walletpassphrase", &walletpassphrase, true, false, true }, + + /* Wallet-enabled mining */ + { "getgenerate", &getgenerate, true, false, false }, + { "gethashespersec", &gethashespersec, true, false, false }, + { "getwork", &getwork, true, false, true }, + { "setgenerate", &setgenerate, true, true, false }, +#endif // ENABLE_WALLET }; CRPCTable::CRPCTable() @@ -312,194 +337,6 @@ const CRPCCommand *CRPCTable::operator[](string name) const return (*it).second; } -// -// HTTP protocol -// -// This ain't Apache. We're just using HTTP header for the length field -// and to be compatible with other JSON-RPC implementations. -// - -string HTTPPost(const string& strMsg, const map& mapRequestHeaders) -{ - ostringstream s; - s << "POST / HTTP/1.1\r\n" - << "User-Agent: myriadcoin-json-rpc/" << FormatFullVersion() << "\r\n" - << "Host: 127.0.0.1\r\n" - << "Content-Type: application/json\r\n" - << "Content-Length: " << strMsg.size() << "\r\n" - << "Connection: close\r\n" - << "Accept: application/json\r\n"; - BOOST_FOREACH(const PAIRTYPE(string, string)& item, mapRequestHeaders) - s << item.first << ": " << item.second << "\r\n"; - s << "\r\n" << strMsg; - - return s.str(); -} - -string rfc1123Time() -{ - char buffer[64]; - time_t now; - time(&now); - struct tm* now_gmt = gmtime(&now); - string locale(setlocale(LC_TIME, NULL)); - setlocale(LC_TIME, "C"); // we want POSIX (aka "C") weekday/month strings - strftime(buffer, sizeof(buffer), "%a, %d %b %Y %H:%M:%S +0000", now_gmt); - setlocale(LC_TIME, locale.c_str()); - return string(buffer); -} - -static string HTTPReply(int nStatus, const string& strMsg, bool keepalive) -{ - if (nStatus == HTTP_UNAUTHORIZED) - return strprintf("HTTP/1.0 401 Authorization Required\r\n" - "Date: %s\r\n" - "Server: myriadcoin-json-rpc/%s\r\n" - "WWW-Authenticate: Basic realm=\"jsonrpc\"\r\n" - "Content-Type: text/html\r\n" - "Content-Length: 296\r\n" - "\r\n" - "\r\n" - "\r\n" - "\r\n" - "Error\r\n" - "\r\n" - "\r\n" - "

401 Unauthorized.

\r\n" - "\r\n", rfc1123Time().c_str(), FormatFullVersion().c_str()); - const char *cStatus; - if (nStatus == HTTP_OK) cStatus = "OK"; - else if (nStatus == HTTP_BAD_REQUEST) cStatus = "Bad Request"; - else if (nStatus == HTTP_FORBIDDEN) cStatus = "Forbidden"; - else if (nStatus == HTTP_NOT_FOUND) cStatus = "Not Found"; - else if (nStatus == HTTP_INTERNAL_SERVER_ERROR) cStatus = "Internal Server Error"; - else cStatus = ""; - return strprintf( - "HTTP/1.1 %d %s\r\n" - "Date: %s\r\n" - "Connection: %s\r\n" - "Content-Length: %"PRIszu"\r\n" - "Content-Type: application/json\r\n" - "Server: myriadcoin-json-rpc/%s\r\n" - "\r\n" - "%s", - nStatus, - cStatus, - rfc1123Time().c_str(), - keepalive ? "keep-alive" : "close", - strMsg.size(), - FormatFullVersion().c_str(), - strMsg.c_str()); -} - -bool ReadHTTPRequestLine(std::basic_istream& stream, int &proto, - string& http_method, string& http_uri) -{ - string str; - getline(stream, str); - - // HTTP request line is space-delimited - vector vWords; - boost::split(vWords, str, boost::is_any_of(" ")); - if (vWords.size() < 2) - return false; - - // HTTP methods permitted: GET, POST - http_method = vWords[0]; - if (http_method != "GET" && http_method != "POST") - return false; - - // HTTP URI must be an absolute path, relative to current host - http_uri = vWords[1]; - if (http_uri.size() == 0 || http_uri[0] != '/') - return false; - - // parse proto, if present - string strProto = ""; - if (vWords.size() > 2) - strProto = vWords[2]; - - proto = 0; - const char *ver = strstr(strProto.c_str(), "HTTP/1."); - if (ver != NULL) - proto = atoi(ver+7); - - return true; -} - -int ReadHTTPStatus(std::basic_istream& stream, int &proto) -{ - string str; - getline(stream, str); - vector vWords; - boost::split(vWords, str, boost::is_any_of(" ")); - if (vWords.size() < 2) - return HTTP_INTERNAL_SERVER_ERROR; - proto = 0; - const char *ver = strstr(str.c_str(), "HTTP/1."); - if (ver != NULL) - proto = atoi(ver+7); - return atoi(vWords[1].c_str()); -} - -int ReadHTTPHeaders(std::basic_istream& stream, map& mapHeadersRet) -{ - int nLen = 0; - loop - { - string str; - std::getline(stream, str); - if (str.empty() || str == "\r") - break; - string::size_type nColon = str.find(":"); - if (nColon != string::npos) - { - string strHeader = str.substr(0, nColon); - boost::trim(strHeader); - boost::to_lower(strHeader); - string strValue = str.substr(nColon+1); - boost::trim(strValue); - mapHeadersRet[strHeader] = strValue; - if (strHeader == "content-length") - nLen = atoi(strValue.c_str()); - } - } - return nLen; -} - -int ReadHTTPMessage(std::basic_istream& stream, map& mapHeadersRet, string& strMessageRet, - int nProto) -{ - mapHeadersRet.clear(); - strMessageRet = ""; - - // Read header - int nLen = ReadHTTPHeaders(stream, mapHeadersRet); - if (nLen < 0 || nLen > (int)MAX_SIZE) - return HTTP_INTERNAL_SERVER_ERROR; - - // Read message - if (nLen > 0) - { - vector vch(nLen); - stream.read(&vch[0], nLen); - strMessageRet = string(vch.begin(), vch.end()); - } - - string sConHdr = mapHeadersRet["connection"]; - - if ((sConHdr != "close") && (sConHdr != "keep-alive")) - { - if (nProto >= 1) - mapHeadersRet["connection"] = "keep-alive"; - else - mapHeadersRet["connection"] = "close"; - } - - return HTTP_OK; -} bool HTTPAuthorized(map& mapHeaders) { @@ -508,44 +345,7 @@ bool HTTPAuthorized(map& mapHeaders) return false; string strUserPass64 = strAuth.substr(6); boost::trim(strUserPass64); string strUserPass = DecodeBase64(strUserPass64); - return strUserPass == strRPCUserColonPass; -} - -// -// JSON-RPC protocol. Myriadcoin speaks version 1.0 for maximum compatibility, -// but uses JSON-RPC 1.1/2.0 standards for parts of the 1.0 standard that were -// unspecified (HTTP errors and contents of 'error'). -// -// 1.0 spec: http://json-rpc.org/wiki/specification -// 1.2 spec: http://groups.google.com/group/json-rpc/web/json-rpc-over-http -// http://www.codeproject.com/KB/recipes/JSON_Spirit.aspx -// - -string JSONRPCRequest(const string& strMethod, const Array& params, const Value& id) -{ - Object request; - request.push_back(Pair("method", strMethod)); - request.push_back(Pair("params", params)); - request.push_back(Pair("id", id)); - return write_string(Value(request), false) + "\n"; -} - -Object JSONRPCReplyObj(const Value& result, const Value& error, const Value& id) -{ - Object reply; - if (error.type() != null_type) - reply.push_back(Pair("result", Value::null)); - else - reply.push_back(Pair("result", result)); - reply.push_back(Pair("error", error)); - reply.push_back(Pair("id", id)); - return reply; -} - -string JSONRPCReply(const Value& result, const Value& error, const Value& id) -{ - Object reply = JSONRPCReplyObj(result, error, id); - return write_string(Value(reply), false) + "\n"; + return TimingResistantEqual(strUserPass, strRPCUserColonPass); } void ErrorReply(std::ostream& stream, const Object& objError, const Value& id) @@ -582,59 +382,6 @@ bool ClientAllowed(const boost::asio::ip::address& address) return false; } -// -// IOStream device that speaks SSL but can also speak non-SSL -// -template -class SSLIOStreamDevice : public iostreams::device { -public: - SSLIOStreamDevice(asio::ssl::stream &streamIn, bool fUseSSLIn) : stream(streamIn) - { - fUseSSL = fUseSSLIn; - fNeedHandshake = fUseSSLIn; - } - - void handshake(ssl::stream_base::handshake_type role) - { - if (!fNeedHandshake) return; - fNeedHandshake = false; - stream.handshake(role); - } - std::streamsize read(char* s, std::streamsize n) - { - handshake(ssl::stream_base::server); // HTTPS servers read first - if (fUseSSL) return stream.read_some(asio::buffer(s, n)); - return stream.next_layer().read_some(asio::buffer(s, n)); - } - std::streamsize write(const char* s, std::streamsize n) - { - handshake(ssl::stream_base::client); // HTTPS clients write first - if (fUseSSL) return asio::write(stream, asio::buffer(s, n)); - return asio::write(stream.next_layer(), asio::buffer(s, n)); - } - bool connect(const std::string& server, const std::string& port) - { - ip::tcp::resolver resolver(stream.get_io_service()); - ip::tcp::resolver::query query(server.c_str(), port.c_str()); - ip::tcp::resolver::iterator endpoint_iterator = resolver.resolve(query); - ip::tcp::resolver::iterator end; - boost::system::error_code error = asio::error::host_not_found; - while (error && endpoint_iterator != end) - { - stream.lowest_layer().close(); - stream.lowest_layer().connect(*endpoint_iterator++, error); - } - if (error) - return false; - return true; - } - -private: - bool fNeedHandshake; - bool fUseSSL; - asio::ssl::stream& stream; -}; - class AcceptedConnection { public: @@ -689,7 +436,7 @@ template static void RPCAcceptHandler(boost::shared_ptr< basic_socket_acceptor > acceptor, ssl::context& context, bool fUseSSL, - AcceptedConnection* conn, + boost::shared_ptr< AcceptedConnection > conn, const boost::system::error_code& error); /** @@ -701,7 +448,7 @@ static void RPCListen(boost::shared_ptr< basic_socket_acceptor* conn = new AcceptedConnectionImpl(acceptor->get_io_service(), context, fUseSSL); + boost::shared_ptr< AcceptedConnectionImpl > conn(new AcceptedConnectionImpl(acceptor->get_io_service(), context, fUseSSL)); acceptor->async_accept( conn->sslStream.lowest_layer(), @@ -711,9 +458,10 @@ static void RPCListen(boost::shared_ptr< basic_socket_acceptor static void RPCAcceptHandler(boost::shared_ptr< basic_socket_acceptor > acceptor, ssl::context& context, const bool fUseSSL, - AcceptedConnection* conn, + boost::shared_ptr< AcceptedConnection > conn, const boost::system::error_code& error) { // Immediately start accepting new connections, except when we're cancelled or our socket is closed. if (error != asio::error::operation_aborted && acceptor->is_open()) RPCListen(acceptor, context, fUseSSL); - AcceptedConnectionImpl* tcp_conn = dynamic_cast< AcceptedConnectionImpl* >(conn); + AcceptedConnectionImpl* tcp_conn = dynamic_cast< AcceptedConnectionImpl* >(conn.get()); - // TODO: Actually handle errors if (error) { - delete conn; + // TODO: Actually handle errors + LogPrintf("%s: Error: %s\n", __func__, error.message()); } - // Restrict callers by IP. It is important to // do this before starting client thread, to filter out // certain DoS and misbehaving clients. @@ -744,12 +491,11 @@ static void RPCAcceptHandler(boost::shared_ptr< basic_socket_acceptorstream() << HTTPReply(HTTP_FORBIDDEN, "", false) << std::flush; - delete conn; + conn->close(); } else { - ServiceConnection(conn); + ServiceConnection(conn.get()); conn->close(); - delete conn; } } @@ -777,9 +523,9 @@ void StartRPCThreads() "If the file does not exist, create it with owner-readable-only file permissions.\n" "It is also recommended to set alertnotify so you are notified of problems;\n" "for example: alertnotify=echo %%s | mail -s \"Myriadcoin Alert\" admin@foo.com\n"), - strWhatAmI.c_str(), - GetConfigFile().string().c_str(), - EncodeBase58(&rand_pwd[0],&rand_pwd[0]+32).c_str()), + strWhatAmI, + GetConfigFile().string(), + EncodeBase58(&rand_pwd[0],&rand_pwd[0]+32)), "", CClientUIInterface::MSG_ERROR); StartShutdown(); return; @@ -798,14 +544,14 @@ void StartRPCThreads() filesystem::path pathCertFile(GetArg("-rpcsslcertificatechainfile", "server.cert")); if (!pathCertFile.is_complete()) pathCertFile = filesystem::path(GetDataDir()) / pathCertFile; if (filesystem::exists(pathCertFile)) rpc_ssl_context->use_certificate_chain_file(pathCertFile.string()); - else printf("ThreadRPCServer ERROR: missing server certificate file %s\n", pathCertFile.string().c_str()); + else LogPrintf("ThreadRPCServer ERROR: missing server certificate file %s\n", pathCertFile.string()); filesystem::path pathPKFile(GetArg("-rpcsslprivatekeyfile", "server.pem")); if (!pathPKFile.is_complete()) pathPKFile = filesystem::path(GetDataDir()) / pathPKFile; if (filesystem::exists(pathPKFile)) rpc_ssl_context->use_private_key_file(pathPKFile.string(), ssl::context::pem); - else printf("ThreadRPCServer ERROR: missing server private key file %s\n", pathPKFile.string().c_str()); + else LogPrintf("ThreadRPCServer ERROR: missing server private key file %s\n", pathPKFile.string()); - string strCiphers = GetArg("-rpcsslciphers", "TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH"); + string strCiphers = GetArg("-rpcsslciphers", "TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH"); SSL_CTX_set_cipher_list(rpc_ssl_context->impl(), strCiphers.c_str()); } @@ -814,12 +560,12 @@ void StartRPCThreads() asio::ip::address bindAddress = loopback ? asio::ip::address_v6::loopback() : asio::ip::address_v6::any(); ip::tcp::endpoint endpoint(bindAddress, GetArg("-rpcport", Params().RPCPort())); boost::system::error_code v6_only_error; - boost::shared_ptr acceptor(new ip::tcp::acceptor(*rpc_io_service)); bool fListening = false; std::string strerr; try { + boost::shared_ptr acceptor(new ip::tcp::acceptor(*rpc_io_service)); acceptor->open(endpoint.protocol()); acceptor->set_option(boost::asio::ip::tcp::acceptor::reuse_address(true)); @@ -831,13 +577,13 @@ void StartRPCThreads() RPCListen(acceptor, *rpc_ssl_context, fUseSSL); + rpc_acceptors.push_back(acceptor); fListening = true; } catch(boost::system::system_error &e) { strerr = strprintf(_("An error occurred while setting up the RPC port %u for listening on IPv6, falling back to IPv4: %s"), endpoint.port(), e.what()); } - try { // If dual IPv6/IPv4 failed (or we're opening loopback interfaces only), open IPv4 separately if (!fListening || loopback || v6_only_error) @@ -845,7 +591,7 @@ void StartRPCThreads() bindAddress = loopback ? asio::ip::address_v4::loopback() : asio::ip::address_v4::any(); endpoint.address(bindAddress); - acceptor.reset(new ip::tcp::acceptor(*rpc_io_service)); + boost::shared_ptr acceptor(new ip::tcp::acceptor(*rpc_io_service)); acceptor->open(endpoint.protocol()); acceptor->set_option(boost::asio::ip::tcp::acceptor::reuse_address(true)); acceptor->bind(endpoint); @@ -853,6 +599,7 @@ void StartRPCThreads() RPCListen(acceptor, *rpc_ssl_context, fUseSSL); + rpc_acceptors.push_back(acceptor); fListening = true; } } @@ -872,13 +619,46 @@ void StartRPCThreads() rpc_worker_group->create_thread(boost::bind(&asio::io_service::run, rpc_io_service)); } +void StartDummyRPCThread() +{ + if(rpc_io_service == NULL) + { + rpc_io_service = new asio::io_service(); + /* Create dummy "work" to keep the thread from exiting when no timeouts active, + * see http://www.boost.org/doc/libs/1_51_0/doc/html/boost_asio/reference/io_service.html#boost_asio.reference.io_service.stopping_the_io_service_from_running_out_of_work */ + rpc_dummy_work = new asio::io_service::work(*rpc_io_service); + rpc_worker_group = new boost::thread_group(); + rpc_worker_group->create_thread(boost::bind(&asio::io_service::run, rpc_io_service)); + } +} + void StopRPCThreads() { if (rpc_io_service == NULL) return; + // First, cancel all timers and acceptors + // This is not done automatically by ->stop(), and in some cases the destructor of + // asio::io_service can hang if this is skipped. + boost::system::error_code ec; + BOOST_FOREACH(const boost::shared_ptr &acceptor, rpc_acceptors) + { + acceptor->cancel(ec); + if (ec) + LogPrintf("%s: Warning: %s when cancelling acceptor", __func__, ec.message()); + } + rpc_acceptors.clear(); + BOOST_FOREACH(const PAIRTYPE(std::string, boost::shared_ptr) &timer, deadlineTimers) + { + timer.second->cancel(ec); + if (ec) + LogPrintf("%s: Warning: %s when cancelling timer", __func__, ec.message()); + } deadlineTimers.clear(); + rpc_io_service->stop(); - rpc_worker_group->join_all(); + if (rpc_worker_group != NULL) + rpc_worker_group->join_all(); + delete rpc_dummy_work; rpc_dummy_work = NULL; delete rpc_worker_group; rpc_worker_group = NULL; delete rpc_ssl_context; rpc_ssl_context = NULL; delete rpc_io_service; rpc_io_service = NULL; @@ -890,7 +670,7 @@ void RPCRunHandler(const boost::system::error_code& err, boost::function func, int64 nSeconds) +void RPCRunLater(const std::string& name, boost::function func, int64_t nSeconds) { assert(rpc_io_service != NULL); @@ -903,7 +683,6 @@ void RPCRunLater(const std::string& name, boost::function func, int6 deadlineTimers[name]->async_wait(boost::bind(RPCRunHandler, _1, func)); } - class JSONRequest { public: @@ -933,7 +712,7 @@ void JSONRequest::parse(const Value& valRequest) throw JSONRPCError(RPC_INVALID_REQUEST, "Method must be a string"); strMethod = valMethod.get_str(); if (strMethod != "getwork" && strMethod != "getblocktemplate") - printf("ThreadRPCServer method=%s\n", strMethod.c_str()); + LogPrint("rpc", "ThreadRPCServer method=%s\n", strMethod); // Parse params Value valParams = find_value(request, "params"); @@ -945,6 +724,7 @@ void JSONRequest::parse(const Value& valRequest) throw JSONRPCError(RPC_INVALID_REQUEST, "Params must be an array"); } + static Object JSONRPCExecOne(const Value& req) { Object rpc_result; @@ -981,7 +761,7 @@ static string JSONRPCExecBatch(const Array& vReq) void ServiceConnection(AcceptedConnection *conn) { bool fRun = true; - while (fRun) + while (fRun && !ShutdownRequested()) { int nProto = 0; map mapHeaders; @@ -1007,10 +787,10 @@ void ServiceConnection(AcceptedConnection *conn) } if (!HTTPAuthorized(mapHeaders)) { - printf("ThreadRPCServer incorrect password attempt from %s\n", conn->peer_address_to_string().c_str()); + LogPrintf("ThreadRPCServer incorrect password attempt from %s\n", conn->peer_address_to_string()); /* Deter brute-forcing short passwords. - If this results in a DOS the user really - shouldn't have their RPC port exposed.*/ + If this results in a DoS the user really + shouldn't have their RPC port exposed. */ if (mapArgs["-rpcpassword"].size() < 20) MilliSleep(250); @@ -1066,6 +846,10 @@ json_spirit::Value CRPCTable::execute(const std::string &strMethod, const json_s const CRPCCommand *pcmd = tableRPC[strMethod]; if (!pcmd) throw JSONRPCError(RPC_METHOD_NOT_FOUND, "Method not found"); +#ifdef ENABLE_WALLET + if (pcmd->reqWallet && !pwalletMain) + throw JSONRPCError(RPC_METHOD_NOT_FOUND, "Method not found (disabled)"); +#endif // Observe safe mode string strWarning = GetWarnings("rpc"); @@ -1080,10 +864,20 @@ json_spirit::Value CRPCTable::execute(const std::string &strMethod, const json_s { if (pcmd->threadSafe) result = pcmd->actor(params, false); - else { +#ifdef ENABLE_WALLET + else if (!pwalletMain) { + LOCK(cs_main); + result = pcmd->actor(params, false); + } else { LOCK2(cs_main, pwalletMain->cs_wallet); result = pcmd->actor(params, false); } +#else // ENABLE_WALLET + else { + LOCK(cs_main); + result = pcmd->actor(params, false); + } +#endif // !ENABLE_WALLET } return result; } @@ -1093,251 +887,13 @@ json_spirit::Value CRPCTable::execute(const std::string &strMethod, const json_s } } - -Object CallRPC(const string& strMethod, const Array& params) -{ - if (mapArgs["-rpcuser"] == "" && mapArgs["-rpcpassword"] == "") - throw runtime_error(strprintf( - _("You must set rpcpassword= in the configuration file:\n%s\n" - "If the file does not exist, create it with owner-readable-only file permissions."), - GetConfigFile().string().c_str())); - - // Connect to localhost - bool fUseSSL = GetBoolArg("-rpcssl", false); - asio::io_service io_service; - ssl::context context(io_service, ssl::context::sslv23); - context.set_options(ssl::context::no_sslv2); - asio::ssl::stream sslStream(io_service, context); - SSLIOStreamDevice d(sslStream, fUseSSL); - iostreams::stream< SSLIOStreamDevice > stream(d); - if (!d.connect(GetArg("-rpcconnect", "127.0.0.1"), GetArg("-rpcport", itostr(Params().RPCPort())))) - throw runtime_error("couldn't connect to server"); - - // HTTP basic authentication - string strUserPass64 = EncodeBase64(mapArgs["-rpcuser"] + ":" + mapArgs["-rpcpassword"]); - map mapRequestHeaders; - mapRequestHeaders["Authorization"] = string("Basic ") + strUserPass64; - - // Send request - string strRequest = JSONRPCRequest(strMethod, params, 1); - string strPost = HTTPPost(strRequest, mapRequestHeaders); - stream << strPost << std::flush; - - // Receive HTTP reply status - int nProto = 0; - int nStatus = ReadHTTPStatus(stream, nProto); - - // Receive HTTP reply message headers and body - map mapHeaders; - string strReply; - ReadHTTPMessage(stream, mapHeaders, strReply, nProto); - - if (nStatus == HTTP_UNAUTHORIZED) - throw runtime_error("incorrect rpcuser or rpcpassword (authorization failed)"); - else if (nStatus >= 400 && nStatus != HTTP_BAD_REQUEST && nStatus != HTTP_NOT_FOUND && nStatus != HTTP_INTERNAL_SERVER_ERROR) - throw runtime_error(strprintf("server returned HTTP error %d", nStatus)); - else if (strReply.empty()) - throw runtime_error("no response from server"); - - // Parse reply - Value valReply; - if (!read_string(strReply, valReply)) - throw runtime_error("couldn't parse reply from server"); - const Object& reply = valReply.get_obj(); - if (reply.empty()) - throw runtime_error("expected reply to have result, error and id properties"); - - return reply; +std::string HelpExampleCli(string methodname, string args){ + return "> myriadcoin-cli " + methodname + " " + args + "\n"; } - - - -template -void ConvertTo(Value& value, bool fAllowNull=false) -{ - if (fAllowNull && value.type() == null_type) - return; - if (value.type() == str_type) - { - // reinterpret string as unquoted json value - Value value2; - string strJSON = value.get_str(); - if (!read_string(strJSON, value2)) - throw runtime_error(string("Error parsing JSON:")+strJSON); - ConvertTo(value2, fAllowNull); - value = value2; - } - else - { - value = value.get_value(); - } +std::string HelpExampleRpc(string methodname, string args){ + return "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", " + "\"method\": \"" + methodname + "\", \"params\": [" + args + "] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/\n"; } -// Convert strings to command-specific RPC representation -Array RPCConvertValues(const std::string &strMethod, const std::vector &strParams) -{ - Array params; - BOOST_FOREACH(const std::string ¶m, strParams) - params.push_back(param); - - int n = params.size(); - - // - // Special case non-string parameter types - // - if (strMethod == "stop" && n > 0) ConvertTo(params[0]); - if (strMethod == "getaddednodeinfo" && n > 0) ConvertTo(params[0]); - if (strMethod == "setgenerate" && n > 0) ConvertTo(params[0]); - if (strMethod == "setgenerate" && n > 1) ConvertTo(params[1]); - if (strMethod == "sendtoaddress" && n > 1) ConvertTo(params[1]); - if (strMethod == "settxfee" && n > 0) ConvertTo(params[0]); - if (strMethod == "getreceivedbyaddress" && n > 1) ConvertTo(params[1]); - if (strMethod == "getreceivedbyaccount" && n > 1) ConvertTo(params[1]); - if (strMethod == "listreceivedbyaddress" && n > 0) ConvertTo(params[0]); - if (strMethod == "listreceivedbyaddress" && n > 1) ConvertTo(params[1]); - if (strMethod == "listreceivedbyaccount" && n > 0) ConvertTo(params[0]); - if (strMethod == "listreceivedbyaccount" && n > 1) ConvertTo(params[1]); - if (strMethod == "getbalance" && n > 1) ConvertTo(params[1]); - if (strMethod == "getblockhash" && n > 0) ConvertTo(params[0]); - if (strMethod == "move" && n > 2) ConvertTo(params[2]); - if (strMethod == "move" && n > 3) ConvertTo(params[3]); - if (strMethod == "sendfrom" && n > 2) ConvertTo(params[2]); - if (strMethod == "sendfrom" && n > 3) ConvertTo(params[3]); - if (strMethod == "listtransactions" && n > 1) ConvertTo(params[1]); - if (strMethod == "listtransactions" && n > 2) ConvertTo(params[2]); - if (strMethod == "listaccounts" && n > 0) ConvertTo(params[0]); - if (strMethod == "walletpassphrase" && n > 1) ConvertTo(params[1]); - if (strMethod == "getblocktemplate" && n > 0) ConvertTo(params[0]); - if (strMethod == "listsinceblock" && n > 1) ConvertTo(params[1]); - if (strMethod == "sendmany" && n > 1) ConvertTo(params[1]); - if (strMethod == "sendmany" && n > 2) ConvertTo(params[2]); - if (strMethod == "addmultisigaddress" && n > 0) ConvertTo(params[0]); - if (strMethod == "addmultisigaddress" && n > 1) ConvertTo(params[1]); - if (strMethod == "createmultisig" && n > 0) ConvertTo(params[0]); - if (strMethod == "createmultisig" && n > 1) ConvertTo(params[1]); - if (strMethod == "listunspent" && n > 0) ConvertTo(params[0]); - if (strMethod == "listunspent" && n > 1) ConvertTo(params[1]); - if (strMethod == "listunspent" && n > 2) ConvertTo(params[2]); - if (strMethod == "getblock" && n > 1) ConvertTo(params[1]); - if (strMethod == "getrawtransaction" && n > 1) ConvertTo(params[1]); - if (strMethod == "createrawtransaction" && n > 0) ConvertTo(params[0]); - if (strMethod == "createrawtransaction" && n > 1) ConvertTo(params[1]); - if (strMethod == "signrawtransaction" && n > 1) ConvertTo(params[1], true); - if (strMethod == "signrawtransaction" && n > 2) ConvertTo(params[2], true); - if (strMethod == "gettxout" && n > 1) ConvertTo(params[1]); - if (strMethod == "gettxout" && n > 2) ConvertTo(params[2]); - if (strMethod == "lockunspent" && n > 0) ConvertTo(params[0]); - if (strMethod == "lockunspent" && n > 1) ConvertTo(params[1]); - if (strMethod == "importprivkey" && n > 2) ConvertTo(params[2]); - if (strMethod == "verifychain" && n > 0) ConvertTo(params[0]); - if (strMethod == "verifychain" && n > 1) ConvertTo(params[1]); - - return params; -} - -int CommandLineRPC(int argc, char *argv[]) -{ - string strPrint; - int nRet = 0; - try - { - // Skip switches - while (argc > 1 && IsSwitchChar(argv[1][0])) - { - argc--; - argv++; - } - - // Method - if (argc < 2) - throw runtime_error("too few parameters"); - string strMethod = argv[1]; - - // Parameters default to strings - std::vector strParams(&argv[2], &argv[argc]); - Array params = RPCConvertValues(strMethod, strParams); - - // Execute - Object reply = CallRPC(strMethod, params); - - // Parse reply - const Value& result = find_value(reply, "result"); - const Value& error = find_value(reply, "error"); - - if (error.type() != null_type) - { - // Error - strPrint = "error: " + write_string(error, false); - int code = find_value(error.get_obj(), "code").get_int(); - nRet = abs(code); - } - else - { - // Result - if (result.type() == null_type) - strPrint = ""; - else if (result.type() == str_type) - strPrint = result.get_str(); - else - strPrint = write_string(result, true); - } - } - catch (boost::thread_interrupted) { - throw; - } - catch (std::exception& e) { - strPrint = string("error: ") + e.what(); - nRet = 87; - } - catch (...) { - PrintException(NULL, "CommandLineRPC()"); - } - - if (strPrint != "") - { - fprintf((nRet == 0 ? stdout : stderr), "%s\n", strPrint.c_str()); - } - return nRet; -} - - - - -#ifdef TEST -int main(int argc, char *argv[]) -{ -#ifdef _MSC_VER - // Turn off Microsoft heap dump noise - _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE); - _CrtSetReportFile(_CRT_WARN, CreateFile("NUL", GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0)); -#endif - setbuf(stdin, NULL); - setbuf(stdout, NULL); - setbuf(stderr, NULL); - - try - { - if (argc >= 2 && string(argv[1]) == "-server") - { - printf("server ready\n"); - ThreadRPCServer(NULL); - } - else - { - return CommandLineRPC(argc, argv); - } - } - catch (boost::thread_interrupted) { - throw; - } - catch (std::exception& e) { - PrintException(&e, "main()"); - } catch (...) { - PrintException(NULL, "main()"); - } - return 0; -} -#endif - const CRPCTable tableRPC; diff --git a/src/bitcoinrpc.h b/src/rpcserver.h similarity index 74% rename from src/bitcoinrpc.h rename to src/rpcserver.h index 399850c7..f85699c3 100644 --- a/src/bitcoinrpc.h +++ b/src/rpcserver.h @@ -1,79 +1,34 @@ // Copyright (c) 2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2014 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#ifndef _BITCOINRPC_H_ -#define _BITCOINRPC_H_ 1 +#ifndef _BITCOINRPC_SERVER_H_ +#define _BITCOINRPC_SERVER_H_ 1 + +#include "uint256.h" +#include "rpcprotocol.h" -#include #include #include - -class CBlockIndex; -class CReserveKey; +#include +#include #include "json/json_spirit_reader_template.h" -#include "json/json_spirit_writer_template.h" #include "json/json_spirit_utils.h" +#include "json/json_spirit_writer_template.h" -#include "util.h" - -// HTTP status codes -enum HTTPStatusCode -{ - HTTP_OK = 200, - HTTP_BAD_REQUEST = 400, - HTTP_UNAUTHORIZED = 401, - HTTP_FORBIDDEN = 403, - HTTP_NOT_FOUND = 404, - HTTP_INTERNAL_SERVER_ERROR = 500, -}; - -// Bitcoin RPC error codes -enum RPCErrorCode -{ - // Standard JSON-RPC 2.0 errors - RPC_INVALID_REQUEST = -32600, - RPC_METHOD_NOT_FOUND = -32601, - RPC_INVALID_PARAMS = -32602, - RPC_INTERNAL_ERROR = -32603, - RPC_PARSE_ERROR = -32700, - - // General application defined errors - RPC_MISC_ERROR = -1, // std::exception thrown in command handling - RPC_FORBIDDEN_BY_SAFE_MODE = -2, // Server is in safe mode, and command is not allowed in safe mode - RPC_TYPE_ERROR = -3, // Unexpected type was passed as parameter - RPC_INVALID_ADDRESS_OR_KEY = -5, // Invalid address or key - RPC_OUT_OF_MEMORY = -7, // Ran out of memory during operation - RPC_INVALID_PARAMETER = -8, // Invalid, missing or duplicate parameter - RPC_DATABASE_ERROR = -20, // Database error - RPC_DESERIALIZATION_ERROR = -22, // Error parsing or validating structure in raw format - - // P2P client errors - RPC_CLIENT_NOT_CONNECTED = -9, // Bitcoin is not connected - RPC_CLIENT_IN_INITIAL_DOWNLOAD = -10, // Still downloading initial blocks - - // Wallet errors - RPC_WALLET_ERROR = -4, // Unspecified problem with wallet (key not found etc.) - RPC_WALLET_INSUFFICIENT_FUNDS = -6, // Not enough funds in wallet or account - RPC_WALLET_INVALID_ACCOUNT_NAME = -11, // Invalid account name - RPC_WALLET_KEYPOOL_RAN_OUT = -12, // Keypool ran out, call keypoolrefill first - RPC_WALLET_UNLOCK_NEEDED = -13, // Enter the wallet passphrase with walletpassphrase first - RPC_WALLET_PASSPHRASE_INCORRECT = -14, // The wallet passphrase entered was incorrect - RPC_WALLET_WRONG_ENC_STATE = -15, // Command given in wrong wallet encryption state (encrypting an encrypted wallet etc.) - RPC_WALLET_ENCRYPTION_FAILED = -16, // Failed to encrypt the wallet - RPC_WALLET_ALREADY_UNLOCKED = -17, // Wallet is already unlocked -}; - -json_spirit::Object JSONRPCError(int code, const std::string& message); +class CBlockIndex; +/* Start RPC threads */ void StartRPCThreads(); +/* Alternative to StartRPCThreads for the GUI, when no server is + * used. The RPC thread in this case is only used to handle timeouts. + * If real RPC threads have already been started this is a no-op. + */ +void StartDummyRPCThread(); +/* Stop RPC threads */ void StopRPCThreads(); -int CommandLineRPC(int argc, char *argv[]); - -/** Convert parameter values for RPC call from strings to command-specific JSON objects. */ -json_spirit::Array RPCConvertValues(const std::string &strMethod, const std::vector &strParams); /* Type-check arguments; throws JSONRPCError if wrong type given. Does not check that @@ -93,7 +48,7 @@ void RPCTypeCheck(const json_spirit::Object& o, Run func nSeconds from now. Uses boost deadline timers. Overrides previous timer (if any). */ -void RPCRunLater(const std::string& name, boost::function func, int64 nSeconds); +void RPCRunLater(const std::string& name, boost::function func, int64_t nSeconds); typedef json_spirit::Value(*rpcfn_type)(const json_spirit::Array& params, bool fHelp); @@ -104,6 +59,7 @@ public: rpcfn_type actor; bool okSafeMode; bool threadSafe; + bool reqWallet; }; /** @@ -130,21 +86,35 @@ public: extern const CRPCTable tableRPC; +// +// Utilities: convert hex-encoded Values +// (throws error if not hex). +// +extern uint256 ParseHashV(const json_spirit::Value& v, std::string strName); +extern uint256 ParseHashO(const json_spirit::Object& o, std::string strKey); +extern std::vector ParseHexV(const json_spirit::Value& v, std::string strName); +extern std::vector ParseHexO(const json_spirit::Object& o, std::string strKey); + extern void InitRPCMining(); extern void ShutdownRPCMining(); -extern int64 nWalletUnlockTime; -extern int64 AmountFromValue(const json_spirit::Value& value); -extern json_spirit::Value ValueFromAmount(int64 amount); +extern int64_t nWalletUnlockTime; +extern int64_t AmountFromValue(const json_spirit::Value& value); +extern json_spirit::Value ValueFromAmount(int64_t amount); extern double GetDifficulty(const CBlockIndex* blockindex, int algo); extern std::string HexBits(unsigned int nBits); extern std::string HelpRequiringPassphrase(); +extern std::string HelpExampleCli(std::string methodname, std::string args); +extern std::string HelpExampleRpc(std::string methodname, std::string args); + extern void EnsureWalletIsUnlocked(); extern json_spirit::Value getconnectioncount(const json_spirit::Array& params, bool fHelp); // in rpcnet.cpp extern json_spirit::Value getpeerinfo(const json_spirit::Array& params, bool fHelp); +extern json_spirit::Value ping(const json_spirit::Array& params, bool fHelp); extern json_spirit::Value addnode(const json_spirit::Array& params, bool fHelp); extern json_spirit::Value getaddednodeinfo(const json_spirit::Array& params, bool fHelp); +extern json_spirit::Value getnettotals(const json_spirit::Array& params, bool fHelp); extern json_spirit::Value dumpprivkey(const json_spirit::Array& params, bool fHelp); // in rpcdump.cpp extern json_spirit::Value importprivkey(const json_spirit::Array& params, bool fHelp); @@ -153,6 +123,7 @@ extern json_spirit::Value importwallet(const json_spirit::Array& params, bool fH extern json_spirit::Value getgenerate(const json_spirit::Array& params, bool fHelp); // in rpcmining.cpp extern json_spirit::Value setgenerate(const json_spirit::Array& params, bool fHelp); +extern json_spirit::Value getnetworkhashps(const json_spirit::Array& params, bool fHelp); extern json_spirit::Value gethashespersec(const json_spirit::Array& params, bool fHelp); extern json_spirit::Value getmininginfo(const json_spirit::Array& params, bool fHelp); extern json_spirit::Value getwork(const json_spirit::Array& params, bool fHelp); @@ -161,6 +132,7 @@ extern json_spirit::Value submitblock(const json_spirit::Array& params, bool fHe extern json_spirit::Value getnewaddress(const json_spirit::Array& params, bool fHelp); // in rpcwallet.cpp extern json_spirit::Value getaccountaddress(const json_spirit::Array& params, bool fHelp); +extern json_spirit::Value getrawchangeaddress(const json_spirit::Array& params, bool fHelp); extern json_spirit::Value setaccount(const json_spirit::Array& params, bool fHelp); extern json_spirit::Value getaccount(const json_spirit::Array& params, bool fHelp); extern json_spirit::Value getaddressesbyaccount(const json_spirit::Array& params, bool fHelp); @@ -170,6 +142,7 @@ extern json_spirit::Value verifymessage(const json_spirit::Array& params, bool f extern json_spirit::Value getreceivedbyaddress(const json_spirit::Array& params, bool fHelp); extern json_spirit::Value getreceivedbyaccount(const json_spirit::Array& params, bool fHelp); extern json_spirit::Value getbalance(const json_spirit::Array& params, bool fHelp); +extern json_spirit::Value getunconfirmedbalance(const json_spirit::Array& params, bool fHelp); extern json_spirit::Value movecmd(const json_spirit::Array& params, bool fHelp); extern json_spirit::Value sendfrom(const json_spirit::Array& params, bool fHelp); extern json_spirit::Value sendmany(const json_spirit::Array& params, bool fHelp); @@ -190,6 +163,9 @@ extern json_spirit::Value walletlock(const json_spirit::Array& params, bool fHel extern json_spirit::Value encryptwallet(const json_spirit::Array& params, bool fHelp); extern json_spirit::Value validateaddress(const json_spirit::Array& params, bool fHelp); extern json_spirit::Value getinfo(const json_spirit::Array& params, bool fHelp); +extern json_spirit::Value getwalletinfo(const json_spirit::Array& params, bool fHelp); +extern json_spirit::Value getblockchaininfo(const json_spirit::Array& params, bool fHelp); +extern json_spirit::Value getnetworkinfo(const json_spirit::Array& params, bool fHelp); extern json_spirit::Value getrawtransaction(const json_spirit::Array& params, bool fHelp); // in rcprawtransaction.cpp extern json_spirit::Value listunspent(const json_spirit::Array& params, bool fHelp); @@ -197,6 +173,7 @@ extern json_spirit::Value lockunspent(const json_spirit::Array& params, bool fHe extern json_spirit::Value listlockunspent(const json_spirit::Array& params, bool fHelp); extern json_spirit::Value createrawtransaction(const json_spirit::Array& params, bool fHelp); extern json_spirit::Value decoderawtransaction(const json_spirit::Array& params, bool fHelp); +extern json_spirit::Value decodescript(const json_spirit::Array& params, bool fHelp); extern json_spirit::Value signrawtransaction(const json_spirit::Array& params, bool fHelp); extern json_spirit::Value sendrawtransaction(const json_spirit::Array& params, bool fHelp); diff --git a/src/rpcwallet.cpp b/src/rpcwallet.cpp index 857451d1..198685eb 100644 --- a/src/rpcwallet.cpp +++ b/src/rpcwallet.cpp @@ -1,28 +1,35 @@ // Copyright (c) 2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2014 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include - +#include "base58.h" +#include "rpcserver.h" +#include "init.h" +#include "net.h" +#include "netbase.h" +#include "util.h" #include "wallet.h" #include "walletdb.h" -#include "bitcoinrpc.h" -#include "init.h" -#include "base58.h" + +#include + +#include +#include "json/json_spirit_utils.h" +#include "json/json_spirit_value.h" using namespace std; using namespace boost; using namespace boost::assign; using namespace json_spirit; -int64 nWalletUnlockTime; +int64_t nWalletUnlockTime; static CCriticalSection cs_nWalletUnlockTime; std::string HelpRequiringPassphrase() { - return pwalletMain->IsCrypted() - ? "\nrequires wallet passphrase to be set with walletpassphrase first" + return pwalletMain && pwalletMain->IsCrypted() + ? "\nRequires wallet passphrase to be set with walletpassphrase call." : ""; } @@ -38,15 +45,20 @@ void WalletTxToJSON(const CWalletTx& wtx, Object& entry) entry.push_back(Pair("confirmations", confirms)); if (wtx.IsCoinBase()) entry.push_back(Pair("generated", true)); - if (confirms) + if (confirms > 0) { entry.push_back(Pair("blockhash", wtx.hashBlock.GetHex())); entry.push_back(Pair("blockindex", wtx.nIndex)); - entry.push_back(Pair("blocktime", (boost::int64_t)(mapBlockIndex[wtx.hashBlock]->nTime))); + entry.push_back(Pair("blocktime", (int64_t)(mapBlockIndex[wtx.hashBlock]->nTime))); } - entry.push_back(Pair("txid", wtx.GetHash().GetHex())); - entry.push_back(Pair("time", (boost::int64_t)wtx.GetTxTime())); - entry.push_back(Pair("timereceived", (boost::int64_t)wtx.nTimeReceived)); + uint256 hash = wtx.GetHash(); + entry.push_back(Pair("txid", hash.GetHex())); + Array conflicts; + BOOST_FOREACH(const uint256& conflict, wtx.GetConflicts()) + conflicts.push_back(conflict.GetHex()); + entry.push_back(Pair("walletconflicts", conflicts)); + entry.push_back(Pair("time", wtx.GetTxTime())); + entry.push_back(Pair("timereceived", (int64_t)wtx.nTimeReceived)); BOOST_FOREACH(const PAIRTYPE(string,string)& item, wtx.mapValue) entry.push_back(Pair(item.first, item.second)); } @@ -59,53 +71,24 @@ string AccountFromValue(const Value& value) return strAccount; } -Value getinfo(const Array& params, bool fHelp) -{ - if (fHelp || params.size() != 0) - throw runtime_error( - "getinfo\n" - "Returns an object containing various state info."); - - proxyType proxy; - GetProxy(NET_IPV4, proxy); - - Object obj; - obj.push_back(Pair("version", (int)CLIENT_VERSION)); - obj.push_back(Pair("protocolversion", (int)PROTOCOL_VERSION)); - obj.push_back(Pair("walletversion", pwalletMain->GetVersion())); - obj.push_back(Pair("balance", ValueFromAmount(pwalletMain->GetBalance()))); - obj.push_back(Pair("blocks", (int)nBestHeight)); - obj.push_back(Pair("timeoffset", (boost::int64_t)GetTimeOffset())); - obj.push_back(Pair("connections", (int)vNodes.size())); - obj.push_back(Pair("proxy", (proxy.first.IsValid() ? proxy.first.ToStringIPPort() : string()))); - obj.push_back(Pair("pow_algo_id", miningAlgo)); - obj.push_back(Pair("pow_algo", GetAlgoName(miningAlgo))); - obj.push_back(Pair("difficulty", (double)GetDifficulty(NULL, miningAlgo))); - obj.push_back(Pair("difficulty_sha256d", (double)GetDifficulty(NULL, ALGO_SHA256D))); - obj.push_back(Pair("difficulty_scrypt", (double)GetDifficulty(NULL, ALGO_SCRYPT))); - obj.push_back(Pair("difficulty_groestl", (double)GetDifficulty(NULL, ALGO_GROESTL))); - obj.push_back(Pair("difficulty_skein", (double)GetDifficulty(NULL, ALGO_SKEIN))); - obj.push_back(Pair("difficulty_qubit", (double)GetDifficulty(NULL, ALGO_QUBIT))); - obj.push_back(Pair("testnet", TestNet())); - obj.push_back(Pair("keypoololdest", (boost::int64_t)pwalletMain->GetOldestKeyPoolTime())); - obj.push_back(Pair("keypoolsize", pwalletMain->GetKeyPoolSize())); - obj.push_back(Pair("paytxfee", ValueFromAmount(nTransactionFee))); - if (pwalletMain->IsCrypted()) - obj.push_back(Pair("unlocked_until", (boost::int64_t)nWalletUnlockTime)); - obj.push_back(Pair("errors", GetWarnings("statusbar"))); - return obj; -} - - - Value getnewaddress(const Array& params, bool fHelp) { if (fHelp || params.size() > 1) throw runtime_error( - "getnewaddress [account]\n" - "Returns a new Myriadcoin address for receiving payments. " - "If [account] is specified (recommended), it is added to the address book " - "so payments received with the address will be credited to [account]."); + "getnewaddress ( \"account\" )\n" + "\nReturns a new Myriadcoin address for receiving payments.\n" + "If 'account' is specified (recommended), it is added to the address book \n" + "so payments received with the address will be credited to 'account'.\n" + "\nArguments:\n" + "1. \"account\" (string, optional) The account name for the address to be linked to. if not provided, the default account \"\" is used. It can also be set to the empty string \"\" to represent the default account. The account does not need to exist, it will be created if there is no account by the given name.\n" + "\nResult:\n" + "\"myriadcoinaddress\" (string) The new myriadcoin address\n" + "\nExamples:\n" + + HelpExampleCli("getnewaddress", "") + + HelpExampleCli("getnewaddress", "\"\"") + + HelpExampleCli("getnewaddress", "\"myaccount\"") + + HelpExampleRpc("getnewaddress", "\"myaccount\"") + ); // Parse the account first so we don't generate a key if there's an error string strAccount; @@ -117,11 +100,11 @@ Value getnewaddress(const Array& params, bool fHelp) // Generate a new key that is added to wallet CPubKey newKey; - if (!pwalletMain->GetKeyFromPool(newKey, false)) + if (!pwalletMain->GetKeyFromPool(newKey)) throw JSONRPCError(RPC_WALLET_KEYPOOL_RAN_OUT, "Error: Keypool ran out, please call keypoolrefill first"); CKeyID keyID = newKey.GetID(); - pwalletMain->SetAddressBookName(keyID, strAccount); + pwalletMain->SetAddressBook(keyID, strAccount, "receive"); return CBitcoinAddress(keyID).ToString(); } @@ -155,10 +138,10 @@ CBitcoinAddress GetAccountAddress(string strAccount, bool bForceNew=false) // Generate a new key if (!account.vchPubKey.IsValid() || bForceNew || bKeyUsed) { - if (!pwalletMain->GetKeyFromPool(account.vchPubKey, false)) + if (!pwalletMain->GetKeyFromPool(account.vchPubKey)) throw JSONRPCError(RPC_WALLET_KEYPOOL_RAN_OUT, "Error: Keypool ran out, please call keypoolrefill first"); - pwalletMain->SetAddressBookName(account.vchPubKey.GetID(), strAccount); + pwalletMain->SetAddressBook(account.vchPubKey.GetID(), strAccount, "receive"); walletdb.WriteAccount(strAccount, account); } @@ -169,8 +152,18 @@ Value getaccountaddress(const Array& params, bool fHelp) { if (fHelp || params.size() != 1) throw runtime_error( - "getaccountaddress \n" - "Returns the current Myriadcoin address for receiving payments to this account."); + "getaccountaddress \"account\"\n" + "\nReturns the current Myriadcoin address for receiving payments to this account.\n" + "\nArguments:\n" + "1. \"account\" (string, required) The account name for the address. It can also be set to the empty string \"\" to represent the default account. The account does not need to exist, it will be created and a new address created if there is no account by the given name.\n" + "\nResult:\n" + "\"myriadcoinaddress\" (string) The account myriadcoin address\n" + "\nExamples:\n" + + HelpExampleCli("getaccountaddress", "") + + HelpExampleCli("getaccountaddress", "\"\"") + + HelpExampleCli("getaccountaddress", "\"myaccount\"") + + HelpExampleRpc("getaccountaddress", "\"myaccount\"") + ); // Parse the account first so we don't generate a key if there's an error string strAccount = AccountFromValue(params[0]); @@ -183,13 +176,49 @@ Value getaccountaddress(const Array& params, bool fHelp) } +Value getrawchangeaddress(const Array& params, bool fHelp) +{ + if (fHelp || params.size() > 1) + throw runtime_error( + "getrawchangeaddress\n" + "\nReturns a new Myriadcoin address, for receiving change.\n" + "This is for use with raw transactions, NOT normal use.\n" + "\nResult:\n" + "\"address\" (string) The address\n" + "\nExamples:\n" + + HelpExampleCli("getrawchangeaddress", "") + + HelpExampleRpc("getrawchangeaddress", "") + ); + + if (!pwalletMain->IsLocked()) + pwalletMain->TopUpKeyPool(); + + CReserveKey reservekey(pwalletMain); + CPubKey vchPubKey; + if (!reservekey.GetReservedKey(vchPubKey)) + throw JSONRPCError(RPC_WALLET_ERROR, "Error: Unable to obtain key for change"); + + reservekey.KeepKey(); + + CKeyID keyID = vchPubKey.GetID(); + + return CBitcoinAddress(keyID).ToString(); +} + Value setaccount(const Array& params, bool fHelp) { if (fHelp || params.size() < 1 || params.size() > 2) throw runtime_error( - "setaccount \n" - "Sets the account associated with the given address."); + "setaccount \"myriadcoinaddress\" \"account\"\n" + "\nSets the account associated with the given address.\n" + "\nArguments:\n" + "1. \"myriadcoinaddress\" (string, required) The myriadcoin address to be associated with an account.\n" + "2. \"account\" (string, required) The account to assign the address to.\n" + "\nExamples:\n" + + HelpExampleCli("setaccount", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\" \"tabby\"") + + HelpExampleRpc("setaccount", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\", \"tabby\"") + ); CBitcoinAddress address(params[0].get_str()); if (!address.IsValid()) @@ -203,12 +232,12 @@ Value setaccount(const Array& params, bool fHelp) // Detect when changing the account of an address that is the 'unused current key' of another account: if (pwalletMain->mapAddressBook.count(address.Get())) { - string strOldAccount = pwalletMain->mapAddressBook[address.Get()]; + string strOldAccount = pwalletMain->mapAddressBook[address.Get()].name; if (address == GetAccountAddress(strOldAccount)) GetAccountAddress(strOldAccount, true); } - pwalletMain->SetAddressBookName(address.Get(), strAccount); + pwalletMain->SetAddressBook(address.Get(), strAccount, "receive"); return Value::null; } @@ -218,17 +247,25 @@ Value getaccount(const Array& params, bool fHelp) { if (fHelp || params.size() != 1) throw runtime_error( - "getaccount \n" - "Returns the account associated with the given address."); + "getaccount \"myriadcoinaddress\"\n" + "\nReturns the account associated with the given address.\n" + "\nArguments:\n" + "1. \"myriadcoinaddress\" (string, required) The myriadcoin address for account lookup.\n" + "\nResult:\n" + "\"accountname\" (string) the account address\n" + "\nExamples:\n" + + HelpExampleCli("getaccount", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\"") + + HelpExampleRpc("getaccount", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\"") + ); CBitcoinAddress address(params[0].get_str()); if (!address.IsValid()) throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Myriadcoin address"); string strAccount; - map::iterator mi = pwalletMain->mapAddressBook.find(address.Get()); - if (mi != pwalletMain->mapAddressBook.end() && !(*mi).second.empty()) - strAccount = (*mi).second; + map::iterator mi = pwalletMain->mapAddressBook.find(address.Get()); + if (mi != pwalletMain->mapAddressBook.end() && !(*mi).second.name.empty()) + strAccount = (*mi).second.name; return strAccount; } @@ -237,17 +274,28 @@ Value getaddressesbyaccount(const Array& params, bool fHelp) { if (fHelp || params.size() != 1) throw runtime_error( - "getaddressesbyaccount \n" - "Returns the list of addresses for the given account."); + "getaddressesbyaccount \"account\"\n" + "\nReturns the list of addresses for the given account.\n" + "\nArguments:\n" + "1. \"account\" (string, required) The account name.\n" + "\nResult:\n" + "[ (json array of string)\n" + " \"myriadcoinaddress\" (string) a myriadcoin address associated with the given account\n" + " ,...\n" + "]\n" + "\nExamples:\n" + + HelpExampleCli("getaddressesbyaccount", "\"tabby\"") + + HelpExampleRpc("getaddressesbyaccount", "\"tabby\"") + ); string strAccount = AccountFromValue(params[0]); // Find all addresses that have the given account Array ret; - BOOST_FOREACH(const PAIRTYPE(CBitcoinAddress, string)& item, pwalletMain->mapAddressBook) + BOOST_FOREACH(const PAIRTYPE(CBitcoinAddress, CAddressBookData)& item, pwalletMain->mapAddressBook) { const CBitcoinAddress& address = item.first; - const string& strName = item.second; + const string& strName = item.second.name; if (strName == strAccount) ret.push_back(address.ToString()); } @@ -258,16 +306,31 @@ Value sendtoaddress(const Array& params, bool fHelp) { if (fHelp || params.size() < 2 || params.size() > 4) throw runtime_error( - "sendtoaddress [comment] [comment-to]\n" - " is a real and is rounded to the nearest 0.00000001" - + HelpRequiringPassphrase()); + "sendtoaddress \"myriadcoinaddress\" amount ( \"comment\" \"comment-to\" )\n" + "\nSent an amount to a given address. The amount is a real and is rounded to the nearest 0.00000001\n" + + HelpRequiringPassphrase() + + "\nArguments:\n" + "1. \"myriadcoinaddress\" (string, required) The myriadcoin address to send to.\n" + "2. \"amount\" (numeric, required) The amount in btc to send. eg 0.1\n" + "3. \"comment\" (string, optional) A comment used to store what the transaction is for. \n" + " This is not part of the transaction, just kept in your wallet.\n" + "4. \"comment-to\" (string, optional) A comment to store the name of the person or organization \n" + " to which you're sending the transaction. This is not part of the \n" + " transaction, just kept in your wallet.\n" + "\nResult:\n" + "\"transactionid\" (string) The transaction id.\n" + "\nExamples:\n" + + HelpExampleCli("sendtoaddress", "\"1M72Sfpbz1BPpXFHz9m3CdqATR44Jvaydd\" 0.1") + + HelpExampleCli("sendtoaddress", "\"1M72Sfpbz1BPpXFHz9m3CdqATR44Jvaydd\" 0.1 \"donation\" \"seans outpost\"") + + HelpExampleRpc("sendtoaddress", "\"1M72Sfpbz1BPpXFHz9m3CdqATR44Jvaydd\", 0.1, \"donation\", \"seans outpost\"") + ); CBitcoinAddress address(params[0].get_str()); if (!address.IsValid()) throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Myriadcoin address"); // Amount - int64 nAmount = AmountFromValue(params[1]); + int64_t nAmount = AmountFromValue(params[1]); // Wallet comments CWalletTx wtx; @@ -276,8 +339,7 @@ Value sendtoaddress(const Array& params, bool fHelp) if (params.size() > 3 && params[3].type() != null_type && !params[3].get_str().empty()) wtx.mapValue["to"] = params[3].get_str(); - if (pwalletMain->IsLocked()) - throw JSONRPCError(RPC_WALLET_UNLOCK_NEEDED, "Error: Please enter the wallet passphrase with walletpassphrase first."); + EnsureWalletIsUnlocked(); string strError = pwalletMain->SendMoneyToDestination(address.Get(), nAmount, wtx); if (strError != "") @@ -291,12 +353,28 @@ Value listaddressgroupings(const Array& params, bool fHelp) if (fHelp) throw runtime_error( "listaddressgroupings\n" - "Lists groups of addresses which have had their common ownership\n" + "\nLists groups of addresses which have had their common ownership\n" "made public by common use as inputs or as the resulting change\n" - "in past transactions"); + "in past transactions\n" + "\nResult:\n" + "[\n" + " [\n" + " [\n" + " \"myriadcoinaddress\", (string) The myriadcoin address\n" + " amount, (numeric) The amount in btc\n" + " \"account\" (string, optional) The account\n" + " ]\n" + " ,...\n" + " ]\n" + " ,...\n" + "]\n" + "\nExamples:\n" + + HelpExampleCli("listaddressgroupings", "") + + HelpExampleRpc("listaddressgroupings", "") + ); Array jsonGroupings; - map balances = pwalletMain->GetAddressBalances(); + map balances = pwalletMain->GetAddressBalances(); BOOST_FOREACH(set grouping, pwalletMain->GetAddressGroupings()) { Array jsonGrouping; @@ -308,7 +386,7 @@ Value listaddressgroupings(const Array& params, bool fHelp) { LOCK(pwalletMain->cs_wallet); if (pwalletMain->mapAddressBook.find(CBitcoinAddress(address).Get()) != pwalletMain->mapAddressBook.end()) - addressInfo.push_back(pwalletMain->mapAddressBook.find(CBitcoinAddress(address).Get())->second); + addressInfo.push_back(pwalletMain->mapAddressBook.find(CBitcoinAddress(address).Get())->second.name); } jsonGrouping.push_back(addressInfo); } @@ -321,8 +399,24 @@ Value signmessage(const Array& params, bool fHelp) { if (fHelp || params.size() != 2) throw runtime_error( - "signmessage \n" - "Sign a message with the private key of an address"); + "signmessage \"myriadcoinaddress\" \"message\"\n" + "\nSign a message with the private key of an address" + + HelpRequiringPassphrase() + "\n" + "\nArguments:\n" + "1. \"myriadcoinaddress\" (string, required) The myriadcoin address to use for the private key.\n" + "2. \"message\" (string, required) The message to create a signature of.\n" + "\nResult:\n" + "\"signature\" (string) The signature of the message encoded in base 64\n" + "\nExamples:\n" + "\nUnlock the wallet for 30 seconds\n" + + HelpExampleCli("walletpassphrase", "\"mypassphrase\" 30") + + "\nCreate the signature\n" + + HelpExampleCli("signmessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\" \"my message\"") + + "\nVerify the signature\n" + + HelpExampleCli("verifymessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\" \"signature\" \"my message\"") + + "\nAs json rpc\n" + + HelpExampleRpc("signmessage", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\", \"my message\"") + ); EnsureWalletIsUnlocked(); @@ -352,49 +446,27 @@ Value signmessage(const Array& params, bool fHelp) return EncodeBase64(&vchSig[0], vchSig.size()); } -Value verifymessage(const Array& params, bool fHelp) -{ - if (fHelp || params.size() != 3) - throw runtime_error( - "verifymessage \n" - "Verify a signed message"); - - string strAddress = params[0].get_str(); - string strSign = params[1].get_str(); - string strMessage = params[2].get_str(); - - CBitcoinAddress addr(strAddress); - if (!addr.IsValid()) - throw JSONRPCError(RPC_TYPE_ERROR, "Invalid address"); - - CKeyID keyID; - if (!addr.GetKeyID(keyID)) - throw JSONRPCError(RPC_TYPE_ERROR, "Address does not refer to key"); - - bool fInvalid = false; - vector vchSig = DecodeBase64(strSign.c_str(), &fInvalid); - - if (fInvalid) - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Malformed base64 encoding"); - - CHashWriter ss(SER_GETHASH, 0); - ss << strMessageMagic; - ss << strMessage; - - CPubKey pubkey; - if (!pubkey.RecoverCompact(ss.GetHash(), vchSig)) - return false; - - return (pubkey.GetID() == keyID); -} - - Value getreceivedbyaddress(const Array& params, bool fHelp) { if (fHelp || params.size() < 1 || params.size() > 2) throw runtime_error( - "getreceivedbyaddress [minconf=1]\n" - "Returns the total amount received by in transactions with at least [minconf] confirmations."); + "getreceivedbyaddress \"myriadcoinaddress\" ( minconf )\n" + "\nReturns the total amount received by the given myriadcoinaddress in transactions with at least minconf confirmations.\n" + "\nArguments:\n" + "1. \"myriadcoinaddress\" (string, required) The myriadcoin address for transactions.\n" + "2. minconf (numeric, optional, default=1) Only include transactions confirmed at least this many times.\n" + "\nResult:\n" + "amount (numeric) The total amount in btc received at this address.\n" + "\nExamples:\n" + "\nThe amount from transactions with at least 1 confirmation\n" + + HelpExampleCli("getreceivedbyaddress", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\"") + + "\nThe amount including unconfirmed transactions, zero confirmations\n" + + HelpExampleCli("getreceivedbyaddress", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\" 0") + + "\nThe amount with at least 6 confirmation, very safe\n" + + HelpExampleCli("getreceivedbyaddress", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\" 6") + + "\nAs a json rpc call\n" + + HelpExampleRpc("getreceivedbyaddress", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\", 6") + ); // Bitcoin address CBitcoinAddress address = CBitcoinAddress(params[0].get_str()); @@ -411,7 +483,7 @@ Value getreceivedbyaddress(const Array& params, bool fHelp) nMinDepth = params[1].get_int(); // Tally - int64 nAmount = 0; + int64_t nAmount = 0; for (map::iterator it = pwalletMain->mapWallet.begin(); it != pwalletMain->mapWallet.end(); ++it) { const CWalletTx& wtx = (*it).second; @@ -428,23 +500,27 @@ Value getreceivedbyaddress(const Array& params, bool fHelp) } -void GetAccountAddresses(string strAccount, set& setAddress) -{ - BOOST_FOREACH(const PAIRTYPE(CTxDestination, string)& item, pwalletMain->mapAddressBook) - { - const CTxDestination& address = item.first; - const string& strName = item.second; - if (strName == strAccount) - setAddress.insert(address); - } -} - Value getreceivedbyaccount(const Array& params, bool fHelp) { if (fHelp || params.size() < 1 || params.size() > 2) throw runtime_error( - "getreceivedbyaccount [minconf=1]\n" - "Returns the total amount received by addresses with in transactions with at least [minconf] confirmations."); + "getreceivedbyaccount \"account\" ( minconf )\n" + "\nReturns the total amount received by addresses with in transactions with at least [minconf] confirmations.\n" + "\nArguments:\n" + "1. \"account\" (string, required) The selected account, may be the default account using \"\".\n" + "2. minconf (numeric, optional, default=1) Only include transactions confirmed at least this many times.\n" + "\nResult:\n" + "amount (numeric) The total amount in btc received for this account.\n" + "\nExamples:\n" + "\nAmount received by the default account with at least 1 confirmation\n" + + HelpExampleCli("getreceivedbyaccount", "\"\"") + + "\nAmount received at the tabby account including unconfirmed amounts with zero confirmations\n" + + HelpExampleCli("getreceivedbyaccount", "\"tabby\" 0") + + "\nThe amount with at least 6 confirmation, very safe\n" + + HelpExampleCli("getreceivedbyaccount", "\"tabby\" 6") + + "\nAs a json rpc call\n" + + HelpExampleRpc("getreceivedbyaccount", "\"tabby\", 6") + ); // Minimum confirmations int nMinDepth = 1; @@ -453,11 +529,10 @@ Value getreceivedbyaccount(const Array& params, bool fHelp) // Get the set of pub keys assigned to account string strAccount = AccountFromValue(params[0]); - set setAddress; - GetAccountAddresses(strAccount, setAddress); + set setAddress = pwalletMain->GetAccountAddresses(strAccount); // Tally - int64 nAmount = 0; + int64_t nAmount = 0; for (map::iterator it = pwalletMain->mapWallet.begin(); it != pwalletMain->mapWallet.end(); ++it) { const CWalletTx& wtx = (*it).second; @@ -477,18 +552,18 @@ Value getreceivedbyaccount(const Array& params, bool fHelp) } -int64 GetAccountBalance(CWalletDB& walletdb, const string& strAccount, int nMinDepth) +int64_t GetAccountBalance(CWalletDB& walletdb, const string& strAccount, int nMinDepth) { - int64 nBalance = 0; + int64_t nBalance = 0; // Tally wallet transactions for (map::iterator it = pwalletMain->mapWallet.begin(); it != pwalletMain->mapWallet.end(); ++it) { const CWalletTx& wtx = (*it).second; - if (!IsFinalTx(wtx)) + if (!IsFinalTx(wtx) || wtx.GetBlocksToMaturity() > 0 || wtx.GetDepthInMainChain() < 0) continue; - int64 nReceived, nSent, nFee; + int64_t nReceived, nSent, nFee; wtx.GetAccountAmounts(strAccount, nReceived, nSent, nFee); if (nReceived != 0 && wtx.GetDepthInMainChain() >= nMinDepth) @@ -502,7 +577,7 @@ int64 GetAccountBalance(CWalletDB& walletdb, const string& strAccount, int nMinD return nBalance; } -int64 GetAccountBalance(const string& strAccount, int nMinDepth) +int64_t GetAccountBalance(const string& strAccount, int nMinDepth) { CWalletDB walletdb(pwalletMain->strWalletFile); return GetAccountBalance(walletdb, strAccount, nMinDepth); @@ -513,9 +588,28 @@ Value getbalance(const Array& params, bool fHelp) { if (fHelp || params.size() > 2) throw runtime_error( - "getbalance [account] [minconf=1]\n" - "If [account] is not specified, returns the server's total available balance.\n" - "If [account] is specified, returns the balance in the account."); + "getbalance ( \"account\" minconf )\n" + "\nIf account is not specified, returns the server's total available balance.\n" + "If account is specified, returns the balance in the account.\n" + "Note that the account \"\" is not the same as leaving the parameter out.\n" + "The server total may be different to the balance in the default \"\" account.\n" + "\nArguments:\n" + "1. \"account\" (string, optional) The selected account, or \"*\" for entire wallet. It may be the default account using \"\".\n" + "2. minconf (numeric, optional, default=1) Only include transactions confirmed at least this many times.\n" + "\nResult:\n" + "amount (numeric) The total amount in btc received for this account.\n" + "\nExamples:\n" + "\nThe total amount in the server across all accounts\n" + + HelpExampleCli("getbalance", "") + + "\nThe total amount in the server across all accounts, with at least 5 confirmations\n" + + HelpExampleCli("getbalance", "\"*\" 6") + + "\nThe total amount in the default account with at least 1 confirmation\n" + + HelpExampleCli("getbalance", "\"\"") + + "\nThe total amount in the account named tabby with at least 6 confirmations\n" + + HelpExampleCli("getbalance", "\"tabby\" 6") + + "\nAs a json rpc call\n" + + HelpExampleRpc("getbalance", "\"tabby\", 6") + ); if (params.size() == 0) return ValueFromAmount(pwalletMain->GetBalance()); @@ -528,24 +622,24 @@ Value getbalance(const Array& params, bool fHelp) // Calculate total balance a different way from GetBalance() // (GetBalance() sums up all unspent TxOuts) // getbalance and getbalance '*' 0 should return the same number - int64 nBalance = 0; + int64_t nBalance = 0; for (map::iterator it = pwalletMain->mapWallet.begin(); it != pwalletMain->mapWallet.end(); ++it) { const CWalletTx& wtx = (*it).second; - if (!wtx.IsConfirmed()) + if (!wtx.IsTrusted() || wtx.GetBlocksToMaturity() > 0) continue; - int64 allFee; + int64_t allFee; string strSentAccount; - list > listReceived; - list > listSent; + list > listReceived; + list > listSent; wtx.GetAmounts(listReceived, listSent, allFee, strSentAccount); if (wtx.GetDepthInMainChain() >= nMinDepth) { - BOOST_FOREACH(const PAIRTYPE(CTxDestination,int64)& r, listReceived) + BOOST_FOREACH(const PAIRTYPE(CTxDestination,int64_t)& r, listReceived) nBalance += r.second; } - BOOST_FOREACH(const PAIRTYPE(CTxDestination,int64)& r, listSent) + BOOST_FOREACH(const PAIRTYPE(CTxDestination,int64_t)& r, listSent) nBalance -= r.second; nBalance -= allFee; } @@ -554,22 +648,46 @@ Value getbalance(const Array& params, bool fHelp) string strAccount = AccountFromValue(params[0]); - int64 nBalance = GetAccountBalance(strAccount, nMinDepth); + int64_t nBalance = GetAccountBalance(strAccount, nMinDepth); return ValueFromAmount(nBalance); } +Value getunconfirmedbalance(const Array ¶ms, bool fHelp) +{ + if (fHelp || params.size() > 0) + throw runtime_error( + "getunconfirmedbalance\n" + "Returns the server's total unconfirmed balance\n"); + return ValueFromAmount(pwalletMain->GetUnconfirmedBalance()); +} + Value movecmd(const Array& params, bool fHelp) { if (fHelp || params.size() < 3 || params.size() > 5) throw runtime_error( - "move [minconf=1] [comment]\n" - "Move from one account in your wallet to another."); + "move \"fromaccount\" \"toaccount\" amount ( minconf \"comment\" )\n" + "\nMove a specified amount from one account in your wallet to another.\n" + "\nArguments:\n" + "1. \"fromaccount\" (string, required) The name of the account to move funds from. May be the default account using \"\".\n" + "2. \"toaccount\" (string, required) The name of the account to move funds to. May be the default account using \"\".\n" + "3. minconf (numeric, optional, default=1) Only use funds with at least this many confirmations.\n" + "4. \"comment\" (string, optional) An optional comment, stored in the wallet only.\n" + "\nResult:\n" + "true|false (boolean) true if successfull.\n" + "\nExamples:\n" + "\nMove 0.01 btc from the default account to the account named tabby\n" + + HelpExampleCli("move", "\"\" \"tabby\" 0.01") + + "\nMove 0.01 btc timotei to akiko with a comment and funds have 6 confirmations\n" + + HelpExampleCli("move", "\"timotei\" \"akiko\" 0.01 6 \"happy birthday!\"") + + "\nAs a json rpc call\n" + + HelpExampleRpc("move", "\"timotei\", \"akiko\", 0.01, 6, \"happy birthday!\"") + ); string strFrom = AccountFromValue(params[0]); string strTo = AccountFromValue(params[1]); - int64 nAmount = AmountFromValue(params[2]); + int64_t nAmount = AmountFromValue(params[2]); if (params.size() > 3) // unused parameter, used to be nMinDepth, keep type-checking it though (void)params[3].get_int(); @@ -581,7 +699,7 @@ Value movecmd(const Array& params, bool fHelp) if (!walletdb.TxnBegin()) throw JSONRPCError(RPC_DATABASE_ERROR, "database error"); - int64 nNow = GetAdjustedTime(); + int64_t nNow = GetAdjustedTime(); // Debit CAccountingEntry debit; @@ -614,15 +732,36 @@ Value sendfrom(const Array& params, bool fHelp) { if (fHelp || params.size() < 3 || params.size() > 6) throw runtime_error( - "sendfrom [minconf=1] [comment] [comment-to]\n" - " is a real and is rounded to the nearest 0.00000001" - + HelpRequiringPassphrase()); + "sendfrom \"fromaccount\" \"tomyriadcoinaddress\" amount ( minconf \"comment\" \"comment-to\" )\n" + "\nSent an amount from an account to a myriadcoin address.\n" + "The amount is a real and is rounded to the nearest 0.00000001." + + HelpRequiringPassphrase() + "\n" + "\nArguments:\n" + "1. \"fromaccount\" (string, required) The name of the account to send funds from. May be the default account using \"\".\n" + "2. \"tomyriadcoinaddress\" (string, required) The myriadcoin address to send funds to.\n" + "3. amount (numeric, required) The amount in btc. (transaction fee is added on top).\n" + "4. minconf (numeric, optional, default=1) Only use funds with at least this many confirmations.\n" + "5. \"comment\" (string, optional) A comment used to store what the transaction is for. \n" + " This is not part of the transaction, just kept in your wallet.\n" + "6. \"comment-to\" (string, optional) An optional comment to store the name of the person or organization \n" + " to which you're sending the transaction. This is not part of the transaction, \n" + " it is just kept in your wallet.\n" + "\nResult:\n" + "\"transactionid\" (string) The transaction id.\n" + "\nExamples:\n" + "\nSend 0.01 btc from the default account to the address, must have at least 1 confirmation\n" + + HelpExampleCli("sendfrom", "\"\" \"1M72Sfpbz1BPpXFHz9m3CdqATR44Jvaydd\" 0.01") + + "\nSend 0.01 from the tabby account to the given address, funds must have at least 6 confirmations\n" + + HelpExampleCli("sendfrom", "\"tabby\" \"1M72Sfpbz1BPpXFHz9m3CdqATR44Jvaydd\" 0.01 6 \"donation\" \"seans outpost\"") + + "\nAs a json rpc call\n" + + HelpExampleRpc("sendfrom", "\"tabby\", \"1M72Sfpbz1BPpXFHz9m3CdqATR44Jvaydd\", 0.01, 6, \"donation\", \"seans outpost\"") + ); string strAccount = AccountFromValue(params[0]); CBitcoinAddress address(params[1].get_str()); if (!address.IsValid()) throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Myriadcoin address"); - int64 nAmount = AmountFromValue(params[2]); + int64_t nAmount = AmountFromValue(params[2]); int nMinDepth = 1; if (params.size() > 3) nMinDepth = params[3].get_int(); @@ -637,7 +776,7 @@ Value sendfrom(const Array& params, bool fHelp) EnsureWalletIsUnlocked(); // Check funds - int64 nBalance = GetAccountBalance(strAccount, nMinDepth); + int64_t nBalance = GetAccountBalance(strAccount, nMinDepth); if (nAmount > nBalance) throw JSONRPCError(RPC_WALLET_INSUFFICIENT_FUNDS, "Account has insufficient funds"); @@ -654,9 +793,29 @@ Value sendmany(const Array& params, bool fHelp) { if (fHelp || params.size() < 2 || params.size() > 4) throw runtime_error( - "sendmany {address:amount,...} [minconf=1] [comment]\n" - "amounts are double-precision floating point numbers" - + HelpRequiringPassphrase()); + "sendmany \"fromaccount\" {\"address\":amount,...} ( minconf \"comment\" )\n" + "\nSend multiple times. Amounts are double-precision floating point numbers." + + HelpRequiringPassphrase() + "\n" + "\nArguments:\n" + "1. \"fromaccount\" (string, required) The account to send the funds from, can be \"\" for the default account\n" + "2. \"amounts\" (string, required) A json object with addresses and amounts\n" + " {\n" + " \"address\":amount (numeric) The myriadcoin address is the key, the numeric amount in btc is the value\n" + " ,...\n" + " }\n" + "3. minconf (numeric, optional, default=1) Only use the balance confirmed at least this many times.\n" + "4. \"comment\" (string, optional) A comment\n" + "\nResult:\n" + "\"transactionid\" (string) The transaction id for the send. Only 1 transaction is created regardless of \n" + " the number of addresses.\n" + "\nExamples:\n" + "\nSend two amounts to two different addresses:\n" + + HelpExampleCli("sendmany", "\"tabby\" \"{\\\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\\\":0.01,\\\"1353tsE8YMTA4EuV7dgUXGjNFf9KpVvKHz\\\":0.02}\"") + + "\nSend two amounts to two different addresses setting the confirmation and comment:\n" + + HelpExampleCli("sendmany", "\"tabby\" \"{\\\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\\\":0.01,\\\"1353tsE8YMTA4EuV7dgUXGjNFf9KpVvKHz\\\":0.02}\" 6 \"testing\"") + + "\nAs a json rpc call\n" + + HelpExampleRpc("sendmany", "\"tabby\", \"{\\\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\\\":0.01,\\\"1353tsE8YMTA4EuV7dgUXGjNFf9KpVvKHz\\\":0.02}\", 6, \"testing\"") + ); string strAccount = AccountFromValue(params[0]); Object sendTo = params[1].get_obj(); @@ -670,9 +829,9 @@ Value sendmany(const Array& params, bool fHelp) wtx.mapValue["comment"] = params[3].get_str(); set setAddress; - vector > vecSend; + vector > vecSend; - int64 totalAmount = 0; + int64_t totalAmount = 0; BOOST_FOREACH(const Pair& s, sendTo) { CBitcoinAddress address(s.name_); @@ -685,7 +844,7 @@ Value sendmany(const Array& params, bool fHelp) CScript scriptPubKey; scriptPubKey.SetDestination(address.Get()); - int64 nAmount = AmountFromValue(s.value_); + int64_t nAmount = AmountFromValue(s.value_); totalAmount += nAmount; vecSend.push_back(make_pair(scriptPubKey, nAmount)); @@ -694,13 +853,13 @@ Value sendmany(const Array& params, bool fHelp) EnsureWalletIsUnlocked(); // Check funds - int64 nBalance = GetAccountBalance(strAccount, nMinDepth); + int64_t nBalance = GetAccountBalance(strAccount, nMinDepth); if (totalAmount > nBalance) throw JSONRPCError(RPC_WALLET_INSUFFICIENT_FUNDS, "Account has insufficient funds"); // Send CReserveKey keyChange(pwalletMain); - int64 nFeeRequired = 0; + int64_t nFeeRequired = 0; string strFailReason; bool fCreated = pwalletMain->CreateTransaction(vecSend, wtx, keyChange, nFeeRequired, strFailReason); if (!fCreated) @@ -711,70 +870,36 @@ Value sendmany(const Array& params, bool fHelp) return wtx.GetHash().GetHex(); } -// -// Used by addmultisigaddress / createmultisig: -// -static CScript _createmultisig(const Array& params) -{ - int nRequired = params[0].get_int(); - const Array& keys = params[1].get_array(); - - // Gather public keys - if (nRequired < 1) - throw runtime_error("a multisignature address must require at least one key to redeem"); - if ((int)keys.size() < nRequired) - throw runtime_error( - strprintf("not enough keys supplied " - "(got %"PRIszu" keys, but need at least %d to redeem)", keys.size(), nRequired)); - std::vector pubkeys; - pubkeys.resize(keys.size()); - for (unsigned int i = 0; i < keys.size(); i++) - { - const std::string& ks = keys[i].get_str(); - - // Case 1: Myriadcoin address and we have full public key: - CBitcoinAddress address(ks); - if (address.IsValid()) - { - CKeyID keyID; - if (!address.GetKeyID(keyID)) - throw runtime_error( - strprintf("%s does not refer to a key",ks.c_str())); - CPubKey vchPubKey; - if (!pwalletMain->GetPubKey(keyID, vchPubKey)) - throw runtime_error( - strprintf("no full public key for address %s",ks.c_str())); - if (!vchPubKey.IsFullyValid()) - throw runtime_error(" Invalid public key: "+ks); - pubkeys[i] = vchPubKey; - } - - // Case 2: hex public key - else if (IsHex(ks)) - { - CPubKey vchPubKey(ParseHex(ks)); - if (!vchPubKey.IsFullyValid()) - throw runtime_error(" Invalid public key: "+ks); - pubkeys[i] = vchPubKey; - } - else - { - throw runtime_error(" Invalid public key: "+ks); - } - } - CScript result; - result.SetMultisig(nRequired, pubkeys); - return result; -} +// Defined in rpcmisc.cpp +extern CScript _createmultisig(const Array& params); Value addmultisigaddress(const Array& params, bool fHelp) { if (fHelp || params.size() < 2 || params.size() > 3) { - string msg = "addmultisigaddress <'[\"key\",\"key\"]'> [account]\n" - "Add a nrequired-to-sign multisignature address to the wallet\"\n" - "each key is a Myriadcoin address or hex-encoded public key\n" - "If [account] is specified, assign address to [account]."; + string msg = "addmultisigaddress nrequired [\"key\",...] ( \"account\" )\n" + "\nAdd a nrequired-to-sign multisignature address to the wallet.\n" + "Each key is a Myriadcoin address or hex-encoded public key.\n" + "If 'account' is specified, assign address to that account.\n" + + "\nArguments:\n" + "1. nrequired (numeric, required) The number of required signatures out of the n keys or addresses.\n" + "2. \"keysobject\" (string, required) A json array of myriadcoin addresses or hex-encoded public keys\n" + " [\n" + " \"address\" (string) myriadcoin address or hex-encoded public key\n" + " ...,\n" + " ]\n" + "3. \"account\" (string, optional) An account to assign the addresses to.\n" + + "\nResult:\n" + "\"myriadcoinaddress\" (string) A myriadcoin address associated with the keys.\n" + + "\nExamples:\n" + "\nAdd a multisig address from 2 addresses\n" + + HelpExampleCli("addmultisigaddress", "2 \"[\\\"16sSauSf5pF2UkUwvKGq4qjNRzBZYqgEL5\\\",\\\"171sgjn4YtPu27adkKGrdDwzRTxnRkBfKV\\\"]\"") + + "\nAs json rpc call\n" + + HelpExampleRpc("addmultisigaddress", "2, \"[\\\"16sSauSf5pF2UkUwvKGq4qjNRzBZYqgEL5\\\",\\\"171sgjn4YtPu27adkKGrdDwzRTxnRkBfKV\\\"]\"") + ; throw runtime_error(msg); } @@ -787,38 +912,14 @@ Value addmultisigaddress(const Array& params, bool fHelp) CScriptID innerID = inner.GetID(); pwalletMain->AddCScript(inner); - pwalletMain->SetAddressBookName(innerID, strAccount); + pwalletMain->SetAddressBook(innerID, strAccount, "send"); return CBitcoinAddress(innerID).ToString(); } -Value createmultisig(const Array& params, bool fHelp) -{ - if (fHelp || params.size() < 2 || params.size() > 2) - { - string msg = "createmultisig <'[\"key\",\"key\"]'>\n" - "Creates a multi-signature address and returns a json object\n" - "with keys:\n" - "address : myriadcoin address\n" - "redeemScript : hex-encoded redemption script"; - throw runtime_error(msg); - } - - // Construct using pay-to-script-hash: - CScript inner = _createmultisig(params); - CScriptID innerID = inner.GetID(); - CBitcoinAddress address(innerID); - - Object result; - result.push_back(Pair("address", address.ToString())); - result.push_back(Pair("redeemScript", HexStr(inner.begin(), inner.end()))); - - return result; -} - struct tallyitem { - int64 nAmount; + int64_t nAmount; int nConf; vector txids; tallyitem() @@ -869,15 +970,15 @@ Value ListReceived(const Array& params, bool fByAccounts) // Reply Array ret; map mapAccountTally; - BOOST_FOREACH(const PAIRTYPE(CBitcoinAddress, string)& item, pwalletMain->mapAddressBook) + BOOST_FOREACH(const PAIRTYPE(CBitcoinAddress, CAddressBookData)& item, pwalletMain->mapAddressBook) { const CBitcoinAddress& address = item.first; - const string& strAccount = item.second; + const string& strAccount = item.second.name; map::iterator it = mapTally.find(address); if (it == mapTally.end() && !fIncludeEmpty) continue; - int64 nAmount = 0; + int64_t nAmount = 0; int nConf = std::numeric_limits::max(); if (it != mapTally.end()) { @@ -915,7 +1016,7 @@ Value ListReceived(const Array& params, bool fByAccounts) { for (map::iterator it = mapAccountTally.begin(); it != mapAccountTally.end(); ++it) { - int64 nAmount = (*it).second.nAmount; + int64_t nAmount = (*it).second.nAmount; int nConf = (*it).second.nConf; Object obj; obj.push_back(Pair("account", (*it).first)); @@ -932,15 +1033,28 @@ Value listreceivedbyaddress(const Array& params, bool fHelp) { if (fHelp || params.size() > 2) throw runtime_error( - "listreceivedbyaddress [minconf=1] [includeempty=false]\n" - "[minconf] is the minimum number of confirmations before payments are included.\n" - "[includeempty] whether to include addresses that haven't received any payments.\n" - "Returns an array of objects containing:\n" - " \"address\" : receiving address\n" - " \"account\" : the account of the receiving address\n" - " \"amount\" : total amount received by the address\n" - " \"confirmations\" : number of confirmations of the most recent transaction included\n" - " \"txids\" : list of transactions with outputs to the address\n"); + "listreceivedbyaddress ( minconf includeempty )\n" + "\nList balances by receiving address.\n" + "\nArguments:\n" + "1. minconf (numeric, optional, default=1) The minimum number of confirmations before payments are included.\n" + "2. includeempty (numeric, optional, dafault=false) Whether to include addresses that haven't received any payments.\n" + + "\nResult:\n" + "[\n" + " {\n" + " \"address\" : \"receivingaddress\", (string) The receiving address\n" + " \"account\" : \"accountname\", (string) The account of the receiving address. The default account is \"\".\n" + " \"amount\" : x.xxx, (numeric) The total amount in btc received by the address\n" + " \"confirmations\" : n (numeric) The number of confirmations of the most recent transaction included\n" + " }\n" + " ,...\n" + "]\n" + + "\nExamples:\n" + + HelpExampleCli("listreceivedbyaddress", "") + + HelpExampleCli("listreceivedbyaddress", "6 true") + + HelpExampleRpc("listreceivedbyaddress", "6, true") + ); return ListReceived(params, false); } @@ -949,23 +1063,44 @@ Value listreceivedbyaccount(const Array& params, bool fHelp) { if (fHelp || params.size() > 2) throw runtime_error( - "listreceivedbyaccount [minconf=1] [includeempty=false]\n" - "[minconf] is the minimum number of confirmations before payments are included.\n" - "[includeempty] whether to include accounts that haven't received any payments.\n" - "Returns an array of objects containing:\n" - " \"account\" : the account of the receiving addresses\n" - " \"amount\" : total amount received by addresses with this account\n" - " \"confirmations\" : number of confirmations of the most recent transaction included"); + "listreceivedbyaccount ( minconf includeempty )\n" + "\nList balances by account.\n" + "\nArguments:\n" + "1. minconf (numeric, optional, default=1) The minimum number of confirmations before payments are included.\n" + "2. includeempty (boolean, optional, default=false) Whether to include accounts that haven't received any payments.\n" + + "\nResult:\n" + "[\n" + " {\n" + " \"account\" : \"accountname\", (string) The account name of the receiving account\n" + " \"amount\" : x.xxx, (numeric) The total amount received by addresses with this account\n" + " \"confirmations\" : n (numeric) The number of confirmations of the most recent transaction included\n" + " }\n" + " ,...\n" + "]\n" + + "\nExamples:\n" + + HelpExampleCli("listreceivedbyaccount", "") + + HelpExampleCli("listreceivedbyaccount", "6 true") + + HelpExampleRpc("listreceivedbyaccount", "6, true") + ); return ListReceived(params, true); } +static void MaybePushAddress(Object & entry, const CTxDestination &dest) +{ + CBitcoinAddress addr; + if (addr.Set(dest)) + entry.push_back(Pair("address", addr.ToString())); +} + void ListTransactions(const CWalletTx& wtx, const string& strAccount, int nMinDepth, bool fLong, Array& ret) { - int64 nFee; + int64_t nFee; string strSentAccount; - list > listReceived; - list > listSent; + list > listReceived; + list > listSent; wtx.GetAmounts(listReceived, listSent, nFee, strSentAccount); @@ -974,11 +1109,11 @@ void ListTransactions(const CWalletTx& wtx, const string& strAccount, int nMinDe // Sent if ((!listSent.empty() || nFee != 0) && (fAllAccounts || strAccount == strSentAccount)) { - BOOST_FOREACH(const PAIRTYPE(CTxDestination, int64)& s, listSent) + BOOST_FOREACH(const PAIRTYPE(CTxDestination, int64_t)& s, listSent) { Object entry; entry.push_back(Pair("account", strSentAccount)); - entry.push_back(Pair("address", CBitcoinAddress(s.first).ToString())); + MaybePushAddress(entry, s.first); entry.push_back(Pair("category", "send")); entry.push_back(Pair("amount", ValueFromAmount(-s.second))); entry.push_back(Pair("fee", ValueFromAmount(-nFee))); @@ -991,16 +1126,16 @@ void ListTransactions(const CWalletTx& wtx, const string& strAccount, int nMinDe // Received if (listReceived.size() > 0 && wtx.GetDepthInMainChain() >= nMinDepth) { - BOOST_FOREACH(const PAIRTYPE(CTxDestination, int64)& r, listReceived) + BOOST_FOREACH(const PAIRTYPE(CTxDestination, int64_t)& r, listReceived) { string account; if (pwalletMain->mapAddressBook.count(r.first)) - account = pwalletMain->mapAddressBook[r.first]; + account = pwalletMain->mapAddressBook[r.first].name; if (fAllAccounts || (account == strAccount)) { Object entry; entry.push_back(Pair("account", account)); - entry.push_back(Pair("address", CBitcoinAddress(r.first).ToString())); + MaybePushAddress(entry, r.first); if (wtx.IsCoinBase()) { if (wtx.GetDepthInMainChain() < 1) @@ -1011,7 +1146,9 @@ void ListTransactions(const CWalletTx& wtx, const string& strAccount, int nMinDe entry.push_back(Pair("category", "generate")); } else + { entry.push_back(Pair("category", "receive")); + } entry.push_back(Pair("amount", ValueFromAmount(r.second))); if (fLong) WalletTxToJSON(wtx, entry); @@ -1030,7 +1167,7 @@ void AcentryToJSON(const CAccountingEntry& acentry, const string& strAccount, Ar Object entry; entry.push_back(Pair("account", acentry.strAccount)); entry.push_back(Pair("category", "move")); - entry.push_back(Pair("time", (boost::int64_t)acentry.nTime)); + entry.push_back(Pair("time", acentry.nTime)); entry.push_back(Pair("amount", ValueFromAmount(acentry.nCreditDebit))); entry.push_back(Pair("otheraccount", acentry.strOtherAccount)); entry.push_back(Pair("comment", acentry.strComment)); @@ -1042,8 +1179,57 @@ Value listtransactions(const Array& params, bool fHelp) { if (fHelp || params.size() > 3) throw runtime_error( - "listtransactions [account] [count=10] [from=0]\n" - "Returns up to [count] most recent transactions skipping the first [from] transactions for account [account]."); + "listtransactions ( \"account\" count from )\n" + "\nReturns up to 'count' most recent transactions skipping the first 'from' transactions for account 'account'.\n" + "\nArguments:\n" + "1. \"account\" (string, optional) The account name. If not included, it will list all transactions for all accounts.\n" + " If \"\" is set, it will list transactions for the default account.\n" + "2. count (numeric, optional, default=10) The number of transactions to return\n" + "3. from (numeric, optional, default=0) The number of transactions to skip\n" + + "\nResult:\n" + "[\n" + " {\n" + " \"account\":\"accountname\", (string) The account name associated with the transaction. \n" + " It will be \"\" for the default account.\n" + " \"address\":\"myriadcoinaddress\", (string) The myriadcoin address of the transaction. Not present for \n" + " move transactions (category = move).\n" + " \"category\":\"send|receive|move\", (string) The transaction category. 'move' is a local (off blockchain)\n" + " transaction between accounts, and not associated with an address,\n" + " transaction id or block. 'send' and 'receive' transactions are \n" + " associated with an address, transaction id and block details\n" + " \"amount\": x.xxx, (numeric) The amount in btc. This is negative for the 'send' category, and for the\n" + " 'move' category for moves outbound. It is positive for the 'receive' category,\n" + " and for the 'move' category for inbound funds.\n" + " \"fee\": x.xxx, (numeric) The amount of the fee in btc. This is negative and only available for the \n" + " 'send' category of transactions.\n" + " \"confirmations\": n, (numeric) The number of confirmations for the transaction. Available for 'send' and \n" + " 'receive' category of transactions.\n" + " \"blockhash\": \"hashvalue\", (string) The block hash containing the transaction. Available for 'send' and 'receive'\n" + " category of transactions.\n" + " \"blockindex\": n, (numeric) The block index containing the transaction. Available for 'send' and 'receive'\n" + " category of transactions.\n" + " \"txid\": \"transactionid\", (string) The transaction id. Available for 'send' and 'receive' category of transactions.\n" + " \"time\": xxx, (numeric) The transaction time in seconds since epoch (midnight Jan 1 1970 GMT).\n" + " \"timereceived\": xxx, (numeric) The time received in seconds since epoch (midnight Jan 1 1970 GMT). Available \n" + " for 'send' and 'receive' category of transactions.\n" + " \"comment\": \"...\", (string) If a comment is associated with the transaction.\n" + " \"otheraccount\": \"accountname\", (string) For the 'move' category of transactions, the account the funds came \n" + " from (for receiving funds, positive amounts), or went to (for sending funds,\n" + " negative amounts).\n" + " }\n" + "]\n" + + "\nExamples:\n" + "\nList the most recent 10 transactions in the systems\n" + + HelpExampleCli("listtransactions", "") + + "\nList the most recent 10 transactions for the tabby account\n" + + HelpExampleCli("listtransactions", "\"tabby\"") + + "\nList transactions 100 to 120 from the tabby account\n" + + HelpExampleCli("listtransactions", "\"tabby\" 20 100") + + "\nAs a json rpc call\n" + + HelpExampleRpc("listtransactions", "\"tabby\", 20, 100") + ); string strAccount = "*"; if (params.size() > 0) @@ -1100,35 +1286,55 @@ Value listaccounts(const Array& params, bool fHelp) { if (fHelp || params.size() > 1) throw runtime_error( - "listaccounts [minconf=1]\n" - "Returns Object that has account names as keys, account balances as values."); + "listaccounts ( minconf )\n" + "\nReturns Object that has account names as keys, account balances as values.\n" + "\nArguments:\n" + "1. minconf (numeric, optional, default=1) Only onclude transactions with at least this many confirmations\n" + "\nResult:\n" + "{ (json object where keys are account names, and values are numeric balances\n" + " \"account\": x.xxx, (numeric) The property name is the account name, and the value is the total balance for the account.\n" + " ...\n" + "}\n" + "\nExamples:\n" + "\nList account balances where there at least 1 confirmation\n" + + HelpExampleCli("listaccounts", "") + + "\nList account balances including zero confirmation transactions\n" + + HelpExampleCli("listaccounts", "0") + + "\nList account balances for 6 or more confirmations\n" + + HelpExampleCli("listaccounts", "6") + + "\nAs json rpc call\n" + + HelpExampleRpc("listaccounts", "6") + ); int nMinDepth = 1; if (params.size() > 0) nMinDepth = params[0].get_int(); - map mapAccountBalances; - BOOST_FOREACH(const PAIRTYPE(CTxDestination, string)& entry, pwalletMain->mapAddressBook) { + map mapAccountBalances; + BOOST_FOREACH(const PAIRTYPE(CTxDestination, CAddressBookData)& entry, pwalletMain->mapAddressBook) { if (IsMine(*pwalletMain, entry.first)) // This address belongs to me - mapAccountBalances[entry.second] = 0; + mapAccountBalances[entry.second.name] = 0; } for (map::iterator it = pwalletMain->mapWallet.begin(); it != pwalletMain->mapWallet.end(); ++it) { const CWalletTx& wtx = (*it).second; - int64 nFee; + int64_t nFee; string strSentAccount; - list > listReceived; - list > listSent; + list > listReceived; + list > listSent; + int nDepth = wtx.GetDepthInMainChain(); + if (wtx.GetBlocksToMaturity() > 0 || nDepth < 0) + continue; wtx.GetAmounts(listReceived, listSent, nFee, strSentAccount); mapAccountBalances[strSentAccount] -= nFee; - BOOST_FOREACH(const PAIRTYPE(CTxDestination, int64)& s, listSent) + BOOST_FOREACH(const PAIRTYPE(CTxDestination, int64_t)& s, listSent) mapAccountBalances[strSentAccount] -= s.second; - if (wtx.GetDepthInMainChain() >= nMinDepth) + if (nDepth >= nMinDepth) { - BOOST_FOREACH(const PAIRTYPE(CTxDestination, int64)& r, listReceived) + BOOST_FOREACH(const PAIRTYPE(CTxDestination, int64_t)& r, listReceived) if (pwalletMain->mapAddressBook.count(r.first)) - mapAccountBalances[pwalletMain->mapAddressBook[r.first]] += r.second; + mapAccountBalances[pwalletMain->mapAddressBook[r.first].name] += r.second; else mapAccountBalances[""] += r.second; } @@ -1140,7 +1346,7 @@ Value listaccounts(const Array& params, bool fHelp) mapAccountBalances[entry.strAccount] += entry.nCreditDebit; Object ret; - BOOST_FOREACH(const PAIRTYPE(string, int64)& accountBalance, mapAccountBalances) { + BOOST_FOREACH(const PAIRTYPE(string, int64_t)& accountBalance, mapAccountBalances) { ret.push_back(Pair(accountBalance.first, ValueFromAmount(accountBalance.second))); } return ret; @@ -1150,8 +1356,37 @@ Value listsinceblock(const Array& params, bool fHelp) { if (fHelp) throw runtime_error( - "listsinceblock [blockhash] [target-confirmations]\n" - "Get all transactions in blocks since block [blockhash], or all transactions if omitted"); + "listsinceblock ( \"blockhash\" target-confirmations )\n" + "\nGet all transactions in blocks since block [blockhash], or all transactions if omitted\n" + "\nArguments:\n" + "1. \"blockhash\" (string, optional) The block hash to list transactions since\n" + "2. target-confirmations: (numeric, optional) The confirmations required, must be 1 or more\n" + "\nResult:\n" + "{\n" + " \"transactions\": [\n" + " \"account\":\"accountname\", (string) The account name associated with the transaction. Will be \"\" for the default account.\n" + " \"address\":\"myriadcoinaddress\", (string) The myriadcoin address of the transaction. Not present for move transactions (category = move).\n" + " \"category\":\"send|receive\", (string) The transaction category. 'send' has negative amounts, 'receive' has positive amounts.\n" + " \"amount\": x.xxx, (numeric) The amount in btc. This is negative for the 'send' category, and for the 'move' category for moves \n" + " outbound. It is positive for the 'receive' category, and for the 'move' category for inbound funds.\n" + " \"fee\": x.xxx, (numeric) The amount of the fee in btc. This is negative and only available for the 'send' category of transactions.\n" + " \"confirmations\": n, (numeric) The number of confirmations for the transaction. Available for 'send' and 'receive' category of transactions.\n" + " \"blockhash\": \"hashvalue\", (string) The block hash containing the transaction. Available for 'send' and 'receive' category of transactions.\n" + " \"blockindex\": n, (numeric) The block index containing the transaction. Available for 'send' and 'receive' category of transactions.\n" + " \"blocktime\": xxx, (numeric) The block time in seconds since epoch (1 Jan 1970 GMT).\n" + " \"txid\": \"transactionid\", (string) The transaction id. Available for 'send' and 'receive' category of transactions.\n" + " \"time\": xxx, (numeric) The transaction time in seconds since epoch (Jan 1 1970 GMT).\n" + " \"timereceived\": xxx, (numeric) The time received in seconds since epoch (Jan 1 1970 GMT). Available for 'send' and 'receive' category of transactions.\n" + " \"comment\": \"...\", (string) If a comment is associated with the transaction.\n" + " \"to\": \"...\", (string) If a comment to is associated with the transaction.\n" + " ],\n" + " \"lastblock\": \"lastblockhash\" (string) The hash of the last block\n" + "}\n" + "\nExamples:\n" + + HelpExampleCli("listsinceblock", "") + + HelpExampleCli("listsinceblock", "\"000000000000000bacf66f7497b7dc45ef753ee9a7d38571037cdb1a57f663ad\" 6") + + HelpExampleRpc("listsinceblock", "\"000000000000000bacf66f7497b7dc45ef753ee9a7d38571037cdb1a57f663ad\", 6") + ); CBlockIndex *pindex = NULL; int target_confirms = 1; @@ -1161,7 +1396,9 @@ Value listsinceblock(const Array& params, bool fHelp) uint256 blockId = 0; blockId.SetHex(params[0].get_str()); - pindex = CBlockLocator(blockId).GetBlockIndex(); + std::map::iterator it = mapBlockIndex.find(blockId); + if (it != mapBlockIndex.end()) + pindex = it->second; } if (params.size() > 1) @@ -1172,7 +1409,7 @@ Value listsinceblock(const Array& params, bool fHelp) throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter"); } - int depth = pindex ? (1 + nBestHeight - pindex->nHeight) : -1; + int depth = pindex ? (1 + chainActive.Height() - pindex->nHeight) : -1; Array transactions; @@ -1184,23 +1421,8 @@ Value listsinceblock(const Array& params, bool fHelp) ListTransactions(tx, "*", 0, true, transactions); } - uint256 lastblock; - - if (target_confirms == 1) - { - lastblock = hashBestChain; - } - else - { - int target_height = pindexBest->nHeight + 1 - target_confirms; - - CBlockIndex *block; - for (block = pindexBest; - block && block->nHeight > target_height; - block = block->pprev) { } - - lastblock = block ? block->GetBlockHash() : 0; - } + CBlockIndex *pblockLast = chainActive[chainActive.Height() + 1 - target_confirms]; + uint256 lastblock = pblockLast ? pblockLast->GetBlockHash() : 0; Object ret; ret.push_back(Pair("transactions", transactions)); @@ -1213,8 +1435,36 @@ Value gettransaction(const Array& params, bool fHelp) { if (fHelp || params.size() != 1) throw runtime_error( - "gettransaction \n" - "Get detailed information about in-wallet transaction "); + "gettransaction \"txid\"\n" + "\nGet detailed information about in-wallet transaction \n" + "\nArguments:\n" + "1. \"txid\" (string, required) The transaction id\n" + "\nResult:\n" + "{\n" + " \"amount\" : x.xxx, (numeric) The transaction amount in btc\n" + " \"confirmations\" : n, (numeric) The number of confirmations\n" + " \"blockhash\" : \"hash\", (string) The block hash\n" + " \"blockindex\" : xx, (numeric) The block index\n" + " \"blocktime\" : ttt, (numeric) The time in seconds since epoch (1 Jan 1970 GMT)\n" + " \"txid\" : \"transactionid\", (string) The transaction id.\n" + " \"time\" : ttt, (numeric) The transaction time in seconds since epoch (1 Jan 1970 GMT)\n" + " \"timereceived\" : ttt, (numeric) The time received in seconds since epoch (1 Jan 1970 GMT)\n" + " \"details\" : [\n" + " {\n" + " \"account\" : \"accountname\", (string) The account name involved in the transaction, can be \"\" for the default account.\n" + " \"address\" : \"myriadcoinaddress\", (string) The myriadcoin address involved in the transaction\n" + " \"category\" : \"send|receive\", (string) The category, either 'send' or 'receive'\n" + " \"amount\" : x.xxx (numeric) The amount in btc\n" + " }\n" + " ,...\n" + " ],\n" + " \"hex\" : \"data\" (string) Raw data for transaction\n" + "}\n" + + "\nbExamples\n" + + HelpExampleCli("gettransaction", "\"1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d\"") + + HelpExampleRpc("gettransaction", "\"1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d\"") + ); uint256 hash; hash.SetHex(params[0].get_str()); @@ -1224,10 +1474,10 @@ Value gettransaction(const Array& params, bool fHelp) throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid or non-wallet transaction id"); const CWalletTx& wtx = pwalletMain->mapWallet[hash]; - int64 nCredit = wtx.GetCredit(); - int64 nDebit = wtx.GetDebit(); - int64 nNet = nCredit - nDebit; - int64 nFee = (wtx.IsFromMe() ? GetValueOut(wtx) - nDebit : 0); + int64_t nCredit = wtx.GetCredit(); + int64_t nDebit = wtx.GetDebit(); + int64_t nNet = nCredit - nDebit; + int64_t nFee = (wtx.IsFromMe() ? wtx.GetValueOut() - nDebit : 0); entry.push_back(Pair("amount", ValueFromAmount(nNet - nFee))); if (wtx.IsFromMe()) @@ -1239,6 +1489,11 @@ Value gettransaction(const Array& params, bool fHelp) ListTransactions(wtx, "*", 0, false, details); entry.push_back(Pair("details", details)); + CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION); + ssTx << static_cast(wtx); + string strHex = HexStr(ssTx.begin(), ssTx.end()); + entry.push_back(Pair("hex", strHex)); + return entry; } @@ -1247,8 +1502,14 @@ Value backupwallet(const Array& params, bool fHelp) { if (fHelp || params.size() != 1) throw runtime_error( - "backupwallet \n" - "Safely copies wallet.dat to destination, which can be a directory or a path with filename."); + "backupwallet \"destination\"\n" + "\nSafely copies wallet.dat to destination, which can be a directory or a path with filename.\n" + "\nArguments:\n" + "1. \"destination\" (string) The destination directory or file\n" + "\nExamples:\n" + + HelpExampleCli("backupwallet", "\"backup.dat\"") + + HelpExampleRpc("backupwallet", "\"backup.dat\"") + ); string strDest = params[0].get_str(); if (!BackupWallet(*pwalletMain, strDest)) @@ -1260,88 +1521,65 @@ Value backupwallet(const Array& params, bool fHelp) Value keypoolrefill(const Array& params, bool fHelp) { - if (fHelp || params.size() > 0) + if (fHelp || params.size() > 1) throw runtime_error( - "keypoolrefill\n" - "Fills the keypool." - + HelpRequiringPassphrase()); + "keypoolrefill ( newsize )\n" + "\nFills the keypool." + + HelpRequiringPassphrase() + "\n" + "\nArguments\n" + "1. newsize (numeric, optional, default=100) The new keypool size\n" + "\nExamples:\n" + + HelpExampleCli("keypoolrefill", "") + + HelpExampleRpc("keypoolrefill", "") + ); + + // 0 is interpreted by TopUpKeyPool() as the default keypool size given by -keypool + unsigned int kpSize = 0; + if (params.size() > 0) { + if (params[0].get_int() < 0) + throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter, expected valid size."); + kpSize = (unsigned int)params[0].get_int(); + } EnsureWalletIsUnlocked(); + pwalletMain->TopUpKeyPool(kpSize); - pwalletMain->TopUpKeyPool(); - - if (pwalletMain->GetKeyPoolSize() < GetArg("-keypool", 100)) + if (pwalletMain->GetKeyPoolSize() < kpSize) throw JSONRPCError(RPC_WALLET_ERROR, "Error refreshing keypool."); return Value::null; } -//static void LockWallet(CWallet* pWallet) -//{ -// LOCK(cs_nWalletUnlockTime); -// nWalletUnlockTime = 0; -// pWallet->Lock(); -//} - -void ThreadCleanWalletPassphrase(void* parg) +static void LockWallet(CWallet* pWallet) { - // Make this thread recognisable as the wallet relocking thread - RenameThread("bitcoin-lock-wa"); - - int64 nMyWakeTime = GetTimeMillis() + *((int64*)parg) * 1000; - - ENTER_CRITICAL_SECTION(cs_nWalletUnlockTime); - - if (nWalletUnlockTime == 0) - { - nWalletUnlockTime = nMyWakeTime; - - do - { - if (nWalletUnlockTime==0) - break; - int64 nToSleep = nWalletUnlockTime - GetTimeMillis(); - if (nToSleep <= 0) - break; - - LEAVE_CRITICAL_SECTION(cs_nWalletUnlockTime); - MilliSleep(nToSleep); - ENTER_CRITICAL_SECTION(cs_nWalletUnlockTime); - - } while(1); - - if (nWalletUnlockTime) - { - nWalletUnlockTime = 0; - pwalletMain->Lock(); - } - } - else - { - if (nWalletUnlockTime < nMyWakeTime) - nWalletUnlockTime = nMyWakeTime; - } - - LEAVE_CRITICAL_SECTION(cs_nWalletUnlockTime); - - delete (int64*)parg; -} - -void ThreadTopUpKeyPool(void* parg) -{ - // Make this thread recognisable as the key-topping-up thread - RenameThread("bitcoin-key-top"); - - pwalletMain->TopUpKeyPool(); + LOCK(cs_nWalletUnlockTime); + nWalletUnlockTime = 0; + pWallet->Lock(); } Value walletpassphrase(const Array& params, bool fHelp) { if (pwalletMain->IsCrypted() && (fHelp || params.size() != 2)) throw runtime_error( - "walletpassphrase \n" - "Stores the wallet decryption key in memory for seconds."); + "walletpassphrase \"passphrase\" timeout\n" + "\nStores the wallet decryption key in memory for 'timeout' seconds.\n" + "This is needed prior to performing transactions related to private keys such as sending myriadcoins\n" + "\nArguments:\n" + "1. \"passphrase\" (string, required) The wallet passphrase\n" + "2. timeout (numeric, required) The time to keep the decryption key in seconds.\n" + "\nNote:\n" + "Issuing the walletpassphrase command while the wallet is already unlocked will set a new unlock\n" + "time that overrides the old one.\n" + "\nExamples:\n" + "\nunlock the wallet for 60 seconds\n" + + HelpExampleCli("walletpassphrase", "\"my pass phrase\" 60") + + "\nLock the wallet again (before 60 seconds)\n" + + HelpExampleCli("walletlock", "") + + "\nAs json rpc call\n" + + HelpExampleRpc("walletpassphrase", "\"my pass phrase\", 60") + ); + if (fHelp) return true; if (!pwalletMain->IsCrypted()) @@ -1364,17 +1602,13 @@ Value walletpassphrase(const Array& params, bool fHelp) "walletpassphrase \n" "Stores the wallet decryption key in memory for seconds."); - //pwalletMain->TopUpKeyPool(); + pwalletMain->TopUpKeyPool(); + + int64_t nSleepTime = params[1].get_int64(); + LOCK(cs_nWalletUnlockTime); + nWalletUnlockTime = GetTime() + nSleepTime; + RPCRunLater("lockwallet", boost::bind(LockWallet, pwalletMain), nSleepTime); - //int64 nSleepTime = params[1].get_int64(); - //LOCK(cs_nWalletUnlockTime); - //nWalletUnlockTime = GetTime() + nSleepTime; - //RPCRunLater("lockwallet", boost::bind(LockWallet, pwalletMain), nSleepTime); - - NewThread(ThreadTopUpKeyPool, NULL); - int64* pnSleepTime = new int64(params[1].get_int64()); - NewThread(ThreadCleanWalletPassphrase, pnSleepTime); - return Value::null; } @@ -1383,8 +1617,16 @@ Value walletpassphrasechange(const Array& params, bool fHelp) { if (pwalletMain->IsCrypted() && (fHelp || params.size() != 2)) throw runtime_error( - "walletpassphrasechange \n" - "Changes the wallet passphrase from to ."); + "walletpassphrasechange \"oldpassphrase\" \"newpassphrase\"\n" + "\nChanges the wallet passphrase from 'oldpassphrase' to 'newpassphrase'.\n" + "\nArguments:\n" + "1. \"oldpassphrase\" (string) The current passphrase\n" + "2. \"newpassphrase\" (string) The new passphrase\n" + "\nExamples:\n" + + HelpExampleCli("walletpassphrasechange", "\"old one\" \"new one\"") + + HelpExampleRpc("walletpassphrasechange", "\"old one\", \"new one\"") + ); + if (fHelp) return true; if (!pwalletMain->IsCrypted()) @@ -1417,9 +1659,20 @@ Value walletlock(const Array& params, bool fHelp) if (pwalletMain->IsCrypted() && (fHelp || params.size() != 0)) throw runtime_error( "walletlock\n" - "Removes the wallet encryption key from memory, locking the wallet.\n" + "\nRemoves the wallet encryption key from memory, locking the wallet.\n" "After calling this method, you will need to call walletpassphrase again\n" - "before being able to call any methods which require the wallet to be unlocked."); + "before being able to call any methods which require the wallet to be unlocked.\n" + "\nExamples:\n" + "\nSet the passphrase for 2 minutes to perform a transaction\n" + + HelpExampleCli("walletpassphrase", "\"my pass phrase\" 120") + + "\nPerform a send (requires passphrase set)\n" + + HelpExampleCli("sendtoaddress", "\"1M72Sfpbz1BPpXFHz9m3CdqATR44Jvaydd\" 1.0") + + "\nClear the passphrase since we are done before 2 minutes is up\n" + + HelpExampleCli("walletlock", "") + + "\nAs json rpc call\n" + + HelpExampleRpc("walletlock", "") + ); + if (fHelp) return true; if (!pwalletMain->IsCrypted()) @@ -1439,8 +1692,28 @@ Value encryptwallet(const Array& params, bool fHelp) { if (!pwalletMain->IsCrypted() && (fHelp || params.size() != 1)) throw runtime_error( - "encryptwallet \n" - "Encrypts the wallet with ."); + "encryptwallet \"passphrase\"\n" + "\nEncrypts the wallet with 'passphrase'. This is for first time encryption.\n" + "After this, any calls that interact with private keys such as sending or signing \n" + "will require the passphrase to be set prior the making these calls.\n" + "Use the walletpassphrase call for this, and then walletlock call.\n" + "If the wallet is already encrypted, use the walletpassphrasechange call.\n" + "Note that this will shutdown the server.\n" + "\nArguments:\n" + "1. \"passphrase\" (string) The pass phrase to encrypt the wallet with. It must be at least 1 character, but should be long.\n" + "\nExamples:\n" + "\nEncrypt you wallet\n" + + HelpExampleCli("encryptwallet", "\"my pass phrase\"") + + "\nNow set the passphrase to use the wallet, such as for signing or sending myriadcoin\n" + + HelpExampleCli("walletpassphrase", "\"my pass phrase\"") + + "\nNow we can so something like sign\n" + + HelpExampleCli("signmessage", "\"myriadcoinaddress\" \"test message\"") + + "\nNow lock the wallet again by removing the passphrase\n" + + HelpExampleCli("walletlock", "") + + "\nAs a json rpc call\n" + + HelpExampleRpc("encryptwallet", "\"my pass phrase\"") + ); + if (fHelp) return true; if (pwalletMain->IsCrypted()) @@ -1467,76 +1740,43 @@ Value encryptwallet(const Array& params, bool fHelp) return "wallet encrypted; Myriadcoin server stopping, restart to run with encrypted wallet. The keypool has been flushed, you need to make a new backup."; } -class DescribeAddressVisitor : public boost::static_visitor -{ -public: - Object operator()(const CNoDestination &dest) const { return Object(); } - - Object operator()(const CKeyID &keyID) const { - Object obj; - CPubKey vchPubKey; - pwalletMain->GetPubKey(keyID, vchPubKey); - obj.push_back(Pair("isscript", false)); - obj.push_back(Pair("pubkey", HexStr(vchPubKey))); - obj.push_back(Pair("iscompressed", vchPubKey.IsCompressed())); - return obj; - } - - Object operator()(const CScriptID &scriptID) const { - Object obj; - obj.push_back(Pair("isscript", true)); - CScript subscript; - pwalletMain->GetCScript(scriptID, subscript); - std::vector addresses; - txnouttype whichType; - int nRequired; - ExtractDestinations(subscript, whichType, addresses, nRequired); - obj.push_back(Pair("script", GetTxnOutputType(whichType))); - Array a; - BOOST_FOREACH(const CTxDestination& addr, addresses) - a.push_back(CBitcoinAddress(addr).ToString()); - obj.push_back(Pair("addresses", a)); - if (whichType == TX_MULTISIG) - obj.push_back(Pair("sigsrequired", nRequired)); - return obj; - } -}; - -Value validateaddress(const Array& params, bool fHelp) -{ - if (fHelp || params.size() != 1) - throw runtime_error( - "validateaddress \n" - "Return information about ."); - - CBitcoinAddress address(params[0].get_str()); - bool isValid = address.IsValid(); - - Object ret; - ret.push_back(Pair("isvalid", isValid)); - if (isValid) - { - CTxDestination dest = address.Get(); - string currentAddress = address.ToString(); - ret.push_back(Pair("address", currentAddress)); - bool fMine = IsMine(*pwalletMain, dest); - ret.push_back(Pair("ismine", fMine)); - if (fMine) { - Object detail = boost::apply_visitor(DescribeAddressVisitor(), dest); - ret.insert(ret.end(), detail.begin(), detail.end()); - } - if (pwalletMain->mapAddressBook.count(dest)) - ret.push_back(Pair("account", pwalletMain->mapAddressBook[dest])); - } - return ret; -} - Value lockunspent(const Array& params, bool fHelp) { if (fHelp || params.size() < 1 || params.size() > 2) throw runtime_error( - "lockunspent unlock? [array-of-Objects]\n" - "Updates list of temporarily unspendable outputs."); + "lockunspent unlock [{\"txid\":\"txid\",\"vout\":n},...]\n" + "\nUpdates list of temporarily unspendable outputs.\n" + "Temporarily lock (unlock=false) or unlock (unlock=true) specified transaction outputs.\n" + "A locked transaction output will not be chosen by automatic coin selection, when spending myriadcoins.\n" + "Locks are stored in memory only. Nodes start with zero locked outputs, and the locked output list\n" + "is always cleared (by virtue of process exit) when a node stops or fails.\n" + "Also see the listunspent call\n" + "\nArguments:\n" + "1. unlock (boolean, required) Whether to unlock (true) or lock (false) the specified transactions\n" + "2. \"transactions\" (string, required) A json array of objects. Each object the txid (string) vout (numeric)\n" + " [ (json array of json objects)\n" + " {\n" + " \"txid\":\"id\", (string) The transaction id\n" + " \"vout\": n (numeric) The output number\n" + " }\n" + " ,...\n" + " ]\n" + + "\nResult:\n" + "true|false (boolean) Whether the command was successful or not\n" + + "\nExamples:\n" + "\nList the unspent transactions\n" + + HelpExampleCli("listunspent", "") + + "\nLock an unspent transaction\n" + + HelpExampleCli("lockunspent", "false \"[{\\\"txid\\\":\\\"a08e6907dbbd3d809776dbfc5d82e371b764ed838b5655e72f463568df1aadf0\\\",\\\"vout\\\":1}]\"") + + "\nList the locked transactions\n" + + HelpExampleCli("listlockunspent", "") + + "\nUnlock the transaction again\n" + + HelpExampleCli("lockunspent", "true \"[{\\\"txid\\\":\\\"a08e6907dbbd3d809776dbfc5d82e371b764ed838b5655e72f463568df1aadf0\\\",\\\"vout\\\":1}]\"") + + "\nAs a json rpc call\n" + + HelpExampleRpc("lockunspent", "false, \"[{\\\"txid\\\":\\\"a08e6907dbbd3d809776dbfc5d82e371b764ed838b5655e72f463568df1aadf0\\\",\\\"vout\\\":1}]\"") + ); if (params.size() == 1) RPCTypeCheck(params, list_of(bool_type)); @@ -1555,18 +1795,18 @@ Value lockunspent(const Array& params, bool fHelp) BOOST_FOREACH(Value& output, outputs) { if (output.type() != obj_type) - throw JSONRPCError(-8, "Invalid parameter, expected object"); + throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter, expected object"); const Object& o = output.get_obj(); RPCTypeCheck(o, map_list_of("txid", str_type)("vout", int_type)); string txid = find_value(o, "txid").get_str(); if (!IsHex(txid)) - throw JSONRPCError(-8, "Invalid parameter, expected hex txid"); + throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter, expected hex txid"); int nOutput = find_value(o, "vout").get_int(); if (nOutput < 0) - throw JSONRPCError(-8, "Invalid parameter, vout must be positive"); + throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter, vout must be positive"); COutPoint outpt(uint256(txid), nOutput); @@ -1584,7 +1824,28 @@ Value listlockunspent(const Array& params, bool fHelp) if (fHelp || params.size() > 0) throw runtime_error( "listlockunspent\n" - "Returns list of temporarily unspendable outputs."); + "\nReturns list of temporarily unspendable outputs.\n" + "See the lockunspent call to lock and unlock transactions for spending.\n" + "\nResult:\n" + "[\n" + " {\n" + " \"txid\" : \"transactionid\", (string) The transaction id locked\n" + " \"vout\" : n (numeric) The vout value\n" + " }\n" + " ,...\n" + "]\n" + "\nExamples:\n" + "\nList the unspent transactions\n" + + HelpExampleCli("listunspent", "") + + "\nLock an unspent transaction\n" + + HelpExampleCli("lockunspent", "false \"[{\\\"txid\\\":\\\"a08e6907dbbd3d809776dbfc5d82e371b764ed838b5655e72f463568df1aadf0\\\",\\\"vout\\\":1}]\"") + + "\nList the locked transactions\n" + + HelpExampleCli("listlockunspent", "") + + "\nUnlock the transaction again\n" + + HelpExampleCli("lockunspent", "true \"[{\\\"txid\\\":\\\"a08e6907dbbd3d809776dbfc5d82e371b764ed838b5655e72f463568df1aadf0\\\",\\\"vout\\\":1}]\"") + + "\nAs a json rpc call\n" + + HelpExampleRpc("listlockunspent", "") + ); vector vOutpts; pwalletMain->ListLockedCoins(vOutpts); @@ -1602,3 +1863,57 @@ Value listlockunspent(const Array& params, bool fHelp) return ret; } +Value settxfee(const Array& params, bool fHelp) +{ + if (fHelp || params.size() < 1 || params.size() > 1) + throw runtime_error( + "settxfee amount\n" + "\nSet the transaction fee per kB.\n" + "\nArguments:\n" + "1. amount (numeric, required) The transaction fee in BTC/kB rounded to the nearest 0.00000001\n" + "\nResult\n" + "true|false (boolean) Returns true if successful\n" + "\nExamples:\n" + + HelpExampleCli("settxfee", "0.00001") + + HelpExampleRpc("settxfee", "0.00001") + ); + + // Amount + int64_t nAmount = 0; + if (params[0].get_real() != 0.0) + nAmount = AmountFromValue(params[0]); // rejects 0.0 amounts + + nTransactionFee = nAmount; + return true; +} + +Value getwalletinfo(const Array& params, bool fHelp) +{ + if (fHelp || params.size() != 0) + throw runtime_error( + "getwalletinfo\n" + "Returns an object containing various wallet state info.\n" + "\nResult:\n" + "{\n" + " \"walletversion\": xxxxx, (numeric) the wallet version\n" + " \"balance\": xxxxxxx, (numeric) the total myriadcoin balance of the wallet\n" + " \"txcount\": xxxxxxx, (numeric) the total number of transactions in the wallet\n" + " \"keypoololdest\": xxxxxx, (numeric) the timestamp (seconds since GMT epoch) of the oldest pre-generated key in the key pool\n" + " \"keypoolsize\": xxxx, (numeric) how many new keys are pre-generated\n" + " \"unlocked_until\": ttt, (numeric) the timestamp in seconds since epoch (midnight Jan 1 1970 GMT) that the wallet is unlocked for transfers, or 0 if the wallet is locked\n" + "}\n" + "\nExamples:\n" + + HelpExampleCli("getwalletinfo", "") + + HelpExampleRpc("getwalletinfo", "") + ); + + Object obj; + obj.push_back(Pair("walletversion", pwalletMain->GetVersion())); + obj.push_back(Pair("balance", ValueFromAmount(pwalletMain->GetBalance()))); + obj.push_back(Pair("txcount", (int)pwalletMain->mapWallet.size())); + obj.push_back(Pair("keypoololdest", pwalletMain->GetOldestKeyPoolTime())); + obj.push_back(Pair("keypoolsize", (int)pwalletMain->GetKeyPoolSize())); + if (pwalletMain->IsCrypted()) + obj.push_back(Pair("unlocked_until", nWalletUnlockTime)); + return obj; +} diff --git a/src/script.cpp b/src/script.cpp index 14fe80e2..810ba16d 100644 --- a/src/script.cpp +++ b/src/script.cpp @@ -1,25 +1,26 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2013 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "script.h" + +#include "bignum.h" +#include "core.h" +#include "hash.h" +#include "key.h" +#include "keystore.h" +#include "sync.h" +#include "uint256.h" +#include "util.h" + #include #include +#include using namespace std; using namespace boost; -#include "script.h" -#include "core.h" -#include "keystore.h" -#include "bignum.h" -#include "key.h" -#include "sync.h" -#include "util.h" - -bool CheckSig(vector vchSig, const vector &vchPubKey, const CScript &scriptCode, const CTransaction& txTo, unsigned int nIn, int nHashType, int flags); - - - typedef vector valtype; static const valtype vchFalse(0); static const valtype vchZero(0); @@ -30,6 +31,7 @@ static const CBigNum bnFalse(0); static const CBigNum bnTrue(1); static const size_t nMaxNumSize = 4; +bool CheckSig(vector vchSig, const vector &vchPubKey, const CScript &scriptCode, const CTransaction& txTo, unsigned int nIn, int nHashType, int flags); CBigNum CastToBigNum(const valtype& vch) { @@ -79,6 +81,7 @@ const char* GetTxnOutputType(txnouttype t) case TX_PUBKEYHASH: return "pubkeyhash"; case TX_SCRIPTHASH: return "scripthash"; case TX_MULTISIG: return "multisig"; + case TX_NULL_DATA: return "nulldata"; } return NULL; } @@ -220,6 +223,7 @@ const char* GetOpName(opcodetype opcode) // template matching params case OP_PUBKEYHASH : return "OP_PUBKEYHASH"; case OP_PUBKEY : return "OP_PUBKEY"; + case OP_SMALLDATA : return "OP_SMALLDATA"; case OP_INVALIDOPCODE : return "OP_INVALIDOPCODE"; default: @@ -227,7 +231,10 @@ const char* GetOpName(opcodetype opcode) } } -bool IsCanonicalPubKey(const valtype &vchPubKey) { +bool IsCanonicalPubKey(const valtype &vchPubKey, unsigned int flags) { + if (!(flags & SCRIPT_VERIFY_STRICTENC)) + return true; + if (vchPubKey.size() < 33) return error("Non-canonical public key: too short"); if (vchPubKey[0] == 0x04) { @@ -242,7 +249,10 @@ bool IsCanonicalPubKey(const valtype &vchPubKey) { return true; } -bool IsCanonicalSignature(const valtype &vchSig) { +bool IsCanonicalSignature(const valtype &vchSig, unsigned int flags) { + if (!(flags & SCRIPT_VERIFY_STRICTENC)) + return true; + // See https://bitcointalk.org/index.php?topic=8392.msg127623#msg127623 // A canonical signature exists of: <30> <02> <02> // Where R and S are not negative (their first byte has its highest bit not set), and not @@ -286,6 +296,11 @@ bool IsCanonicalSignature(const valtype &vchSig) { if (nLenS > 1 && (S[0] == 0x00) && !(S[1] & 0x80)) return error("Non-canonical signature: S value excessively padded"); + if (flags & SCRIPT_VERIFY_EVEN_S) { + if (S[nLenS-1] & 1) + return error("Non-canonical signature: S value odd"); + } + return true; } @@ -302,7 +317,6 @@ bool EvalScript(vector >& stack, const CScript& script, co if (script.size() > 10000) return false; int nOpCount = 0; - bool fStrictEncodings = flags & SCRIPT_VERIFY_STRICTENC; try { @@ -317,6 +331,8 @@ bool EvalScript(vector >& stack, const CScript& script, co return false; if (vchPushValue.size() > MAX_SCRIPT_ELEMENT_SIZE) return false; + + // Note how OP_RESERVED does not count towards the opcode limit. if (opcode > OP_16 && ++nOpCount > 201) return false; @@ -841,9 +857,8 @@ bool EvalScript(vector >& stack, const CScript& script, co // Drop the signature, since there's no way for a signature to sign itself scriptCode.FindAndDelete(CScript(vchSig)); - bool fSuccess = (!fStrictEncodings || (IsCanonicalSignature(vchSig) && IsCanonicalPubKey(vchPubKey))); - if (fSuccess) - fSuccess = CheckSig(vchSig, vchPubKey, scriptCode, txTo, nIn, nHashType, flags); + bool fSuccess = IsCanonicalSignature(vchSig, flags) && IsCanonicalPubKey(vchPubKey, flags) && + CheckSig(vchSig, vchPubKey, scriptCode, txTo, nIn, nHashType, flags); popstack(stack); popstack(stack); @@ -903,9 +918,8 @@ bool EvalScript(vector >& stack, const CScript& script, co valtype& vchPubKey = stacktop(-ikey); // Check signature - bool fOk = (!fStrictEncodings || (IsCanonicalSignature(vchSig) && IsCanonicalPubKey(vchPubKey))); - if (fOk) - fOk = CheckSig(vchSig, vchPubKey, scriptCode, txTo, nIn, nHashType, flags); + bool fOk = IsCanonicalSignature(vchSig, flags) && IsCanonicalPubKey(vchPubKey, flags) && + CheckSig(vchSig, vchPubKey, scriptCode, txTo, nIn, nHashType, flags); if (fOk) { isig++; @@ -961,62 +975,118 @@ bool EvalScript(vector >& stack, const CScript& script, co +namespace { +/** Wrapper that serializes like CTransaction, but with the modifications + * required for the signature hash done in-place + */ +class CTransactionSignatureSerializer { +private: + const CTransaction &txTo; // reference to the spending transaction (the one being serialized) + const CScript &scriptCode; // output script being consumed + const unsigned int nIn; // input index of txTo being signed + const bool fAnyoneCanPay; // whether the hashtype has the SIGHASH_ANYONECANPAY flag set + const bool fHashSingle; // whether the hashtype is SIGHASH_SINGLE + const bool fHashNone; // whether the hashtype is SIGHASH_NONE +public: + CTransactionSignatureSerializer(const CTransaction &txToIn, const CScript &scriptCodeIn, unsigned int nInIn, int nHashTypeIn) : + txTo(txToIn), scriptCode(scriptCodeIn), nIn(nInIn), + fAnyoneCanPay(!!(nHashTypeIn & SIGHASH_ANYONECANPAY)), + fHashSingle((nHashTypeIn & 0x1f) == SIGHASH_SINGLE), + fHashNone((nHashTypeIn & 0x1f) == SIGHASH_NONE) {} -uint256 SignatureHash(CScript scriptCode, const CTransaction& txTo, unsigned int nIn, int nHashType) + /** Serialize the passed scriptCode, skipping OP_CODESEPARATORs */ + template + void SerializeScriptCode(S &s, int nType, int nVersion) const { + CScript::const_iterator it = scriptCode.begin(); + CScript::const_iterator itBegin = it; + opcodetype opcode; + unsigned int nCodeSeparators = 0; + while (scriptCode.GetOp(it, opcode)) { + if (opcode == OP_CODESEPARATOR) + nCodeSeparators++; + } + ::WriteCompactSize(s, scriptCode.size() - nCodeSeparators); + it = itBegin; + while (scriptCode.GetOp(it, opcode)) { + if (opcode == OP_CODESEPARATOR) { + s.write((char*)&itBegin[0], it-itBegin-1); + itBegin = it; + } + } + s.write((char*)&itBegin[0], it-itBegin); + } + + /** Serialize an input of txTo */ + template + void SerializeInput(S &s, unsigned int nInput, int nType, int nVersion) const { + // In case of SIGHASH_ANYONECANPAY, only the input being signed is serialized + if (fAnyoneCanPay) + nInput = nIn; + // Serialize the prevout + ::Serialize(s, txTo.vin[nInput].prevout, nType, nVersion); + // Serialize the script + if (nInput != nIn) + // Blank out other inputs' signatures + ::Serialize(s, CScript(), nType, nVersion); + else + SerializeScriptCode(s, nType, nVersion); + // Serialize the nSequence + if (nInput != nIn && (fHashSingle || fHashNone)) + // let the others update at will + ::Serialize(s, (int)0, nType, nVersion); + else + ::Serialize(s, txTo.vin[nInput].nSequence, nType, nVersion); + } + + /** Serialize an output of txTo */ + template + void SerializeOutput(S &s, unsigned int nOutput, int nType, int nVersion) const { + if (fHashSingle && nOutput != nIn) + // Do not lock-in the txout payee at other indices as txin + ::Serialize(s, CTxOut(), nType, nVersion); + else + ::Serialize(s, txTo.vout[nOutput], nType, nVersion); + } + + /** Serialize txTo */ + template + void Serialize(S &s, int nType, int nVersion) const { + // Serialize nVersion + ::Serialize(s, txTo.nVersion, nType, nVersion); + // Serialize vin + unsigned int nInputs = fAnyoneCanPay ? 1 : txTo.vin.size(); + ::WriteCompactSize(s, nInputs); + for (unsigned int nInput = 0; nInput < nInputs; nInput++) + SerializeInput(s, nInput, nType, nVersion); + // Serialize vout + unsigned int nOutputs = fHashNone ? 0 : (fHashSingle ? nIn+1 : txTo.vout.size()); + ::WriteCompactSize(s, nOutputs); + for (unsigned int nOutput = 0; nOutput < nOutputs; nOutput++) + SerializeOutput(s, nOutput, nType, nVersion); + // Serialie nLockTime + ::Serialize(s, txTo.nLockTime, nType, nVersion); + } +}; +} + +uint256 SignatureHash(const CScript &scriptCode, const CTransaction& txTo, unsigned int nIn, int nHashType) { - if (nIn >= txTo.vin.size()) - { - printf("ERROR: SignatureHash() : nIn=%d out of range\n", nIn); + if (nIn >= txTo.vin.size()) { + LogPrintf("ERROR: SignatureHash() : nIn=%d out of range\n", nIn); return 1; } - CTransaction txTmp(txTo); - // In case concatenating two scripts ends up with two codeseparators, - // or an extra one at the end, this prevents all those possible incompatibilities. - scriptCode.FindAndDelete(CScript(OP_CODESEPARATOR)); - - // Blank out other inputs' signatures - for (unsigned int i = 0; i < txTmp.vin.size(); i++) - txTmp.vin[i].scriptSig = CScript(); - txTmp.vin[nIn].scriptSig = scriptCode; - - // Blank out some of the outputs - if ((nHashType & 0x1f) == SIGHASH_NONE) - { - // Wildcard payee - txTmp.vout.clear(); - - // Let the others update at will - for (unsigned int i = 0; i < txTmp.vin.size(); i++) - if (i != nIn) - txTmp.vin[i].nSequence = 0; - } - else if ((nHashType & 0x1f) == SIGHASH_SINGLE) - { - // Only lock-in the txout payee at same index as txin - unsigned int nOut = nIn; - if (nOut >= txTmp.vout.size()) - { - printf("ERROR: SignatureHash() : nOut=%d out of range\n", nOut); + // Check for invalid use of SIGHASH_SINGLE + if ((nHashType & 0x1f) == SIGHASH_SINGLE) { + if (nIn >= txTo.vout.size()) { + LogPrintf("ERROR: SignatureHash() : nOut=%d out of range\n", nIn); return 1; } - txTmp.vout.resize(nOut+1); - for (unsigned int i = 0; i < nOut; i++) - txTmp.vout[i].SetNull(); - - // Let the others update at will - for (unsigned int i = 0; i < txTmp.vin.size(); i++) - if (i != nIn) - txTmp.vin[i].nSequence = 0; } - // Blank out other inputs completely, not recommended for open transactions - if (nHashType & SIGHASH_ANYONECANPAY) - { - txTmp.vin[0] = txTmp.vin[nIn]; - txTmp.vin.resize(1); - } + // Wrapper to serialize only the necessary parts of the transaction being signed + CTransactionSignatureSerializer txTmp(txTo, scriptCode, nIn, nHashType); // Serialize and hash CHashWriter ss(SER_GETHASH, 0); @@ -1056,12 +1126,12 @@ public: // (~200 bytes per cache entry times 50,000 entries) // Since there are a maximum of 20,000 signature operations per block // 50,000 is a reasonable default. - int64 nMaxCacheSize = GetArg("-maxsigcachesize", 50000); + int64_t nMaxCacheSize = GetArg("-maxsigcachesize", 50000); if (nMaxCacheSize <= 0) return; boost::unique_lock lock(cs_sigcache); - while (static_cast(setValid.size()) > nMaxCacheSize) + while (static_cast(setValid.size()) > nMaxCacheSize) { // Evict a random entry. Random because that helps // foil would-be DoS attackers who might try to pre-generate @@ -1127,7 +1197,7 @@ bool CheckSig(vector vchSig, const vector &vchPubK bool Solver(const CScript& scriptPubKey, txnouttype& typeRet, vector >& vSolutionsRet) { // Templates - static map mTemplates; + static multimap mTemplates; if (mTemplates.empty()) { // Standard tx, sender provides pubkey, receiver adds signature @@ -1138,6 +1208,10 @@ bool Solver(const CScript& scriptPubKey, txnouttype& typeRet, vector= 33 && vch1.size() <= 120) + while (vch1.size() >= 33 && vch1.size() <= 65) { vSolutionsRet.push_back(vch1); if (!script1.GetOp(pc1, opcode1, vch1)) @@ -1201,7 +1275,7 @@ bool Solver(const CScript& scriptPubKey, txnouttype& typeRet, vector 120) + if (vch1.size() < 33 || vch1.size() > 65) break; vSolutionsRet.push_back(vch1); } @@ -1222,6 +1296,12 @@ bool Solver(const CScript& scriptPubKey, txnouttype& typeRet, vector MAX_OP_RETURN_RELAY) + break; + } else if (opcode1 != opcode2 || vch1 != vch2) { // Others must match exactly @@ -1284,6 +1364,7 @@ bool Solver(const CKeyStore& keystore, const CScript& scriptPubKey, uint256 hash switch (whichTypeRet) { case TX_NONSTANDARD: + case TX_NULL_DATA: return false; case TX_PUBKEY: keyID = CPubKey(vSolutions[0]).GetID(); @@ -1314,6 +1395,7 @@ int ScriptSigArgsExpected(txnouttype t, const std::vector vSolutions; - txnouttype whichType; if (!Solver(scriptPubKey, whichType, vSolutions)) return false; @@ -1391,6 +1472,7 @@ bool IsMine(const CKeyStore &keystore, const CScript& scriptPubKey) switch (whichType) { case TX_NONSTANDARD: + case TX_NULL_DATA: return false; case TX_PUBKEY: keyID = CPubKey(vSolutions[0]).GetID(); @@ -1452,6 +1534,10 @@ bool ExtractDestinations(const CScript& scriptPubKey, txnouttype& typeRet, vecto vector vSolutions; if (!Solver(scriptPubKey, typeRet, vSolutions)) return false; + if (typeRet == TX_NULL_DATA){ + // This is data, not addresses + return false; + } if (typeRet == TX_MULTISIG) { @@ -1667,6 +1753,7 @@ static CScript CombineSignatures(CScript scriptPubKey, const CTransaction& txTo, switch (txType) { case TX_NONSTANDARD: + case TX_NULL_DATA: // Don't know anything about this, assume bigger one is correct: if (sigs1.size() >= sigs2.size()) return PushAll(sigs1); @@ -1776,6 +1863,51 @@ bool CScript::IsPayToScriptHash() const this->at(22) == OP_EQUAL); } +bool CScript::IsPushOnly() const +{ + const_iterator pc = begin(); + while (pc < end()) + { + opcodetype opcode; + if (!GetOp(pc, opcode)) + return false; + // Note that IsPushOnly() *does* consider OP_RESERVED to be a + // push-type opcode, however execution of OP_RESERVED fails, so + // it's not relevant to P2SH as the scriptSig would fail prior to + // the P2SH special validation code being executed. + if (opcode > OP_16) + return false; + } + return true; +} + +bool CScript::HasCanonicalPushes() const +{ + const_iterator pc = begin(); + while (pc < end()) + { + opcodetype opcode; + std::vector data; + if (!GetOp(pc, opcode, data)) + return false; + if (opcode > OP_16) + continue; + if (opcode < OP_PUSHDATA1 && opcode > OP_0 && (data.size() == 1 && data[0] <= 16)) + // Could have used an OP_n code, rather than a 1-byte push. + return false; + if (opcode == OP_PUSHDATA1 && data.size() < OP_PUSHDATA1) + // Could have used a normal n-byte push, rather than OP_PUSHDATA1. + return false; + if (opcode == OP_PUSHDATA2 && data.size() <= 0xFF) + // Could have used an OP_PUSHDATA1. + return false; + if (opcode == OP_PUSHDATA4 && data.size() <= 0xFFFF) + // Could have used an OP_PUSHDATA2. + return false; + } + return true; +} + class CScriptVisitor : public boost::static_visitor { private: @@ -1818,7 +1950,7 @@ void CScript::SetMultisig(int nRequired, const std::vector& keys) bool CScriptCompressor::IsToKeyID(CKeyID &hash) const { - if (script.size() == 25 && script[0] == OP_DUP && script[1] == OP_HASH160 + if (script.size() == 25 && script[0] == OP_DUP && script[1] == OP_HASH160 && script[2] == 20 && script[23] == OP_EQUALVERIFY && script[24] == OP_CHECKSIG) { memcpy(&hash, &script[3], 20); diff --git a/src/script.h b/src/script.h index 03afe8b6..657ac0b3 100644 --- a/src/script.h +++ b/src/script.h @@ -1,23 +1,29 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2013 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef H_BITCOIN_SCRIPT #define H_BITCOIN_SCRIPT +#include "bignum.h" +#include "key.h" +#include "util.h" + +#include +#include #include #include #include #include -#include "keystore.h" -#include "bignum.h" - class CCoins; +class CKeyStore; class CTransaction; static const unsigned int MAX_SCRIPT_ELEMENT_SIZE = 520; // bytes +static const unsigned int MAX_OP_RETURN_RELAY = 40; // bytes /** Signature hash types/flags */ enum @@ -32,9 +38,10 @@ enum enum { SCRIPT_VERIFY_NONE = 0, - SCRIPT_VERIFY_P2SH = (1U << 0), - SCRIPT_VERIFY_STRICTENC = (1U << 1), - SCRIPT_VERIFY_NOCACHE = (1U << 2), + SCRIPT_VERIFY_P2SH = (1U << 0), // evaluate P2SH (BIP16) subscripts + SCRIPT_VERIFY_STRICTENC = (1U << 1), // enforce strict conformance to DER and SEC2 for signatures and pubkeys + SCRIPT_VERIFY_EVEN_S = (1U << 2), // enforce even S values in signatures (depends on STRICTENC) + SCRIPT_VERIFY_NOCACHE = (1U << 3), // do not store results in signature cache (but do query it) }; enum txnouttype @@ -45,6 +52,7 @@ enum txnouttype TX_PUBKEYHASH, TX_SCRIPTHASH, TX_MULTISIG, + TX_NULL_DATA, }; class CNoDestination { @@ -201,6 +209,7 @@ enum opcodetype // template matching params + OP_SMALLDATA = 0xf9, OP_SMALLINTEGER = 0xfa, OP_PUBKEYS = 0xfb, OP_PUBKEYHASH = 0xfd, @@ -244,7 +253,7 @@ inline std::string StackString(const std::vector >& v class CScript : public std::vector { protected: - CScript& push_int64(int64 n) + CScript& push_int64(int64_t n) { if (n == -1 || (n >= 1 && n <= 16)) { @@ -258,7 +267,7 @@ protected: return *this; } - CScript& push_uint64(uint64 n) + CScript& push_uint64(uint64_t n) { if (n >= 1 && n <= 16) { @@ -295,16 +304,16 @@ public: //explicit CScript(char b) is not portable. Use 'signed char' or 'unsigned char'. - explicit CScript(signed char b) { operator<<(b); } - explicit CScript(short b) { operator<<(b); } - explicit CScript(int b) { operator<<(b); } - explicit CScript(long b) { operator<<(b); } - explicit CScript(int64 b) { operator<<(b); } - explicit CScript(unsigned char b) { operator<<(b); } - explicit CScript(unsigned int b) { operator<<(b); } - explicit CScript(unsigned short b) { operator<<(b); } - explicit CScript(unsigned long b) { operator<<(b); } - explicit CScript(uint64 b) { operator<<(b); } + explicit CScript(signed char b) { operator<<(b); } + explicit CScript(short b) { operator<<(b); } + explicit CScript(int b) { operator<<(b); } + explicit CScript(long b) { operator<<(b); } + explicit CScript(long long b) { operator<<(b); } + explicit CScript(unsigned char b) { operator<<(b); } + explicit CScript(unsigned int b) { operator<<(b); } + explicit CScript(unsigned short b) { operator<<(b); } + explicit CScript(unsigned long b) { operator<<(b); } + explicit CScript(unsigned long long b) { operator<<(b); } explicit CScript(opcodetype b) { operator<<(b); } explicit CScript(const uint256& b) { operator<<(b); } @@ -313,16 +322,16 @@ public: //CScript& operator<<(char b) is not portable. Use 'signed char' or 'unsigned char'. - CScript& operator<<(signed char b) { return push_int64(b); } - CScript& operator<<(short b) { return push_int64(b); } - CScript& operator<<(int b) { return push_int64(b); } - CScript& operator<<(long b) { return push_int64(b); } - CScript& operator<<(int64 b) { return push_int64(b); } - CScript& operator<<(unsigned char b) { return push_uint64(b); } - CScript& operator<<(unsigned int b) { return push_uint64(b); } - CScript& operator<<(unsigned short b) { return push_uint64(b); } - CScript& operator<<(unsigned long b) { return push_uint64(b); } - CScript& operator<<(uint64 b) { return push_uint64(b); } + CScript& operator<<(signed char b) { return push_int64(b); } + CScript& operator<<(short b) { return push_int64(b); } + CScript& operator<<(int b) { return push_int64(b); } + CScript& operator<<(long b) { return push_int64(b); } + CScript& operator<<(long long b) { return push_int64(b); } + CScript& operator<<(unsigned char b) { return push_uint64(b); } + CScript& operator<<(unsigned int b) { return push_uint64(b); } + CScript& operator<<(unsigned short b) { return push_uint64(b); } + CScript& operator<<(unsigned long b) { return push_uint64(b); } + CScript& operator<<(unsigned long long b) { return push_uint64(b); } CScript& operator<<(opcodetype opcode) { @@ -533,21 +542,19 @@ public: bool IsPayToScriptHash() const; - // Called by IsStandardTx - bool IsPushOnly() const - { - const_iterator pc = begin(); - while (pc < end()) - { - opcodetype opcode; - if (!GetOp(pc, opcode)) - return false; - if (opcode > OP_16) - return false; - } - return true; - } + // Called by IsStandardTx and P2SH VerifyScript (which makes it consensus-critical). + bool IsPushOnly() const; + // Called by IsStandardTx. + bool HasCanonicalPushes() const; + + // Returns whether the script is guaranteed to fail at execution, + // regardless of the initial stack. This allows outputs to be pruned + // instantly when entering the UTXO set. + bool IsUnspendable() const + { + return (size() > 0 && *begin() == OP_RETURN); + } void SetDestination(const CTxDestination& address); void SetMultisig(int nRequired, const std::vector& keys); @@ -555,7 +562,7 @@ public: void PrintHex() const { - printf("CScript(%s)\n", HexStr(begin(), end(), true).c_str()); + LogPrintf("CScript(%s)\n", HexStr(begin(), end(), true).c_str()); } std::string ToString() const @@ -583,7 +590,7 @@ public: void print() const { - printf("%s\n", ToString().c_str()); + LogPrintf("%s\n", ToString().c_str()); } CScriptID GetID() const @@ -665,13 +672,13 @@ public: } }; -bool IsCanonicalPubKey(const std::vector &vchPubKey); -bool IsCanonicalSignature(const std::vector &vchSig); +bool IsCanonicalPubKey(const std::vector &vchPubKey, unsigned int flags); +bool IsCanonicalSignature(const std::vector &vchSig, unsigned int flags); bool EvalScript(std::vector >& stack, const CScript& script, const CTransaction& txTo, unsigned int nIn, unsigned int flags, int nHashType); bool Solver(const CScript& scriptPubKey, txnouttype& typeRet, std::vector >& vSolutionsRet); int ScriptSigArgsExpected(txnouttype t, const std::vector >& vSolutions); -bool IsStandard(const CScript& scriptPubKey); +bool IsStandard(const CScript& scriptPubKey, txnouttype& whichType); bool IsMine(const CKeyStore& keystore, const CScript& scriptPubKey); bool IsMine(const CKeyStore& keystore, const CTxDestination &dest); void ExtractAffectedKeys(const CKeyStore &keystore, const CScript& scriptPubKey, std::vector &vKeys); diff --git a/src/serialize.h b/src/serialize.h index e3d9939b..13417465 100644 --- a/src/serialize.h +++ b/src/serialize.h @@ -1,33 +1,32 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2013 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef BITCOIN_SERIALIZE_H #define BITCOIN_SERIALIZE_H -#include -#include +#include "allocators.h" + +#include +#include +#include +#include #include #include -#include -#include -#include -#include +#include +#include +#include +#include +#include -#include #include -#include -#include +#include -#include "allocators.h" -#include "version.h" - -typedef long long int64; -typedef unsigned long long uint64; - -class CScript; -class CDataStream; class CAutoFile; +class CDataStream; +class CScript; + static const unsigned int MAX_SIZE = 0x02000000; // Used to bypass the rule against non-const reference to temporary @@ -103,47 +102,47 @@ enum #define WRITEDATA(s, obj) s.write((char*)&(obj), sizeof(obj)) #define READDATA(s, obj) s.read((char*)&(obj), sizeof(obj)) -inline unsigned int GetSerializeSize(char a, int, int=0) { return sizeof(a); } -inline unsigned int GetSerializeSize(signed char a, int, int=0) { return sizeof(a); } -inline unsigned int GetSerializeSize(unsigned char a, int, int=0) { return sizeof(a); } -inline unsigned int GetSerializeSize(signed short a, int, int=0) { return sizeof(a); } -inline unsigned int GetSerializeSize(unsigned short a, int, int=0) { return sizeof(a); } -inline unsigned int GetSerializeSize(signed int a, int, int=0) { return sizeof(a); } -inline unsigned int GetSerializeSize(unsigned int a, int, int=0) { return sizeof(a); } -inline unsigned int GetSerializeSize(signed long a, int, int=0) { return sizeof(a); } -inline unsigned int GetSerializeSize(unsigned long a, int, int=0) { return sizeof(a); } -inline unsigned int GetSerializeSize(int64 a, int, int=0) { return sizeof(a); } -inline unsigned int GetSerializeSize(uint64 a, int, int=0) { return sizeof(a); } -inline unsigned int GetSerializeSize(float a, int, int=0) { return sizeof(a); } -inline unsigned int GetSerializeSize(double a, int, int=0) { return sizeof(a); } +inline unsigned int GetSerializeSize(char a, int, int=0) { return sizeof(a); } +inline unsigned int GetSerializeSize(signed char a, int, int=0) { return sizeof(a); } +inline unsigned int GetSerializeSize(unsigned char a, int, int=0) { return sizeof(a); } +inline unsigned int GetSerializeSize(signed short a, int, int=0) { return sizeof(a); } +inline unsigned int GetSerializeSize(unsigned short a, int, int=0) { return sizeof(a); } +inline unsigned int GetSerializeSize(signed int a, int, int=0) { return sizeof(a); } +inline unsigned int GetSerializeSize(unsigned int a, int, int=0) { return sizeof(a); } +inline unsigned int GetSerializeSize(signed long a, int, int=0) { return sizeof(a); } +inline unsigned int GetSerializeSize(unsigned long a, int, int=0) { return sizeof(a); } +inline unsigned int GetSerializeSize(signed long long a, int, int=0) { return sizeof(a); } +inline unsigned int GetSerializeSize(unsigned long long a, int, int=0) { return sizeof(a); } +inline unsigned int GetSerializeSize(float a, int, int=0) { return sizeof(a); } +inline unsigned int GetSerializeSize(double a, int, int=0) { return sizeof(a); } -template inline void Serialize(Stream& s, char a, int, int=0) { WRITEDATA(s, a); } -template inline void Serialize(Stream& s, signed char a, int, int=0) { WRITEDATA(s, a); } -template inline void Serialize(Stream& s, unsigned char a, int, int=0) { WRITEDATA(s, a); } -template inline void Serialize(Stream& s, signed short a, int, int=0) { WRITEDATA(s, a); } -template inline void Serialize(Stream& s, unsigned short a, int, int=0) { WRITEDATA(s, a); } -template inline void Serialize(Stream& s, signed int a, int, int=0) { WRITEDATA(s, a); } -template inline void Serialize(Stream& s, unsigned int a, int, int=0) { WRITEDATA(s, a); } -template inline void Serialize(Stream& s, signed long a, int, int=0) { WRITEDATA(s, a); } -template inline void Serialize(Stream& s, unsigned long a, int, int=0) { WRITEDATA(s, a); } -template inline void Serialize(Stream& s, int64 a, int, int=0) { WRITEDATA(s, a); } -template inline void Serialize(Stream& s, uint64 a, int, int=0) { WRITEDATA(s, a); } -template inline void Serialize(Stream& s, float a, int, int=0) { WRITEDATA(s, a); } -template inline void Serialize(Stream& s, double a, int, int=0) { WRITEDATA(s, a); } +template inline void Serialize(Stream& s, char a, int, int=0) { WRITEDATA(s, a); } +template inline void Serialize(Stream& s, signed char a, int, int=0) { WRITEDATA(s, a); } +template inline void Serialize(Stream& s, unsigned char a, int, int=0) { WRITEDATA(s, a); } +template inline void Serialize(Stream& s, signed short a, int, int=0) { WRITEDATA(s, a); } +template inline void Serialize(Stream& s, unsigned short a, int, int=0) { WRITEDATA(s, a); } +template inline void Serialize(Stream& s, signed int a, int, int=0) { WRITEDATA(s, a); } +template inline void Serialize(Stream& s, unsigned int a, int, int=0) { WRITEDATA(s, a); } +template inline void Serialize(Stream& s, signed long a, int, int=0) { WRITEDATA(s, a); } +template inline void Serialize(Stream& s, unsigned long a, int, int=0) { WRITEDATA(s, a); } +template inline void Serialize(Stream& s, signed long long a, int, int=0) { WRITEDATA(s, a); } +template inline void Serialize(Stream& s, unsigned long long a, int, int=0) { WRITEDATA(s, a); } +template inline void Serialize(Stream& s, float a, int, int=0) { WRITEDATA(s, a); } +template inline void Serialize(Stream& s, double a, int, int=0) { WRITEDATA(s, a); } -template inline void Unserialize(Stream& s, char& a, int, int=0) { READDATA(s, a); } -template inline void Unserialize(Stream& s, signed char& a, int, int=0) { READDATA(s, a); } -template inline void Unserialize(Stream& s, unsigned char& a, int, int=0) { READDATA(s, a); } -template inline void Unserialize(Stream& s, signed short& a, int, int=0) { READDATA(s, a); } -template inline void Unserialize(Stream& s, unsigned short& a, int, int=0) { READDATA(s, a); } -template inline void Unserialize(Stream& s, signed int& a, int, int=0) { READDATA(s, a); } -template inline void Unserialize(Stream& s, unsigned int& a, int, int=0) { READDATA(s, a); } -template inline void Unserialize(Stream& s, signed long& a, int, int=0) { READDATA(s, a); } -template inline void Unserialize(Stream& s, unsigned long& a, int, int=0) { READDATA(s, a); } -template inline void Unserialize(Stream& s, int64& a, int, int=0) { READDATA(s, a); } -template inline void Unserialize(Stream& s, uint64& a, int, int=0) { READDATA(s, a); } -template inline void Unserialize(Stream& s, float& a, int, int=0) { READDATA(s, a); } -template inline void Unserialize(Stream& s, double& a, int, int=0) { READDATA(s, a); } +template inline void Unserialize(Stream& s, char& a, int, int=0) { READDATA(s, a); } +template inline void Unserialize(Stream& s, signed char& a, int, int=0) { READDATA(s, a); } +template inline void Unserialize(Stream& s, unsigned char& a, int, int=0) { READDATA(s, a); } +template inline void Unserialize(Stream& s, signed short& a, int, int=0) { READDATA(s, a); } +template inline void Unserialize(Stream& s, unsigned short& a, int, int=0) { READDATA(s, a); } +template inline void Unserialize(Stream& s, signed int& a, int, int=0) { READDATA(s, a); } +template inline void Unserialize(Stream& s, unsigned int& a, int, int=0) { READDATA(s, a); } +template inline void Unserialize(Stream& s, signed long& a, int, int=0) { READDATA(s, a); } +template inline void Unserialize(Stream& s, unsigned long& a, int, int=0) { READDATA(s, a); } +template inline void Unserialize(Stream& s, signed long long& a, int, int=0) { READDATA(s, a); } +template inline void Unserialize(Stream& s, unsigned long long& a, int, int=0) { READDATA(s, a); } +template inline void Unserialize(Stream& s, float& a, int, int=0) { READDATA(s, a); } +template inline void Unserialize(Stream& s, double& a, int, int=0) { READDATA(s, a); } inline unsigned int GetSerializeSize(bool a, int, int=0) { return sizeof(char); } template inline void Serialize(Stream& s, bool a, int, int=0) { char f=a; WRITEDATA(s, f); } @@ -161,16 +160,16 @@ template inline void Unserialize(Stream& s, bool& a, int, int=0 // size <= UINT_MAX -- 5 bytes (254 + 4 bytes) // size > UINT_MAX -- 9 bytes (255 + 8 bytes) // -inline unsigned int GetSizeOfCompactSize(uint64 nSize) +inline unsigned int GetSizeOfCompactSize(uint64_t nSize) { if (nSize < 253) return sizeof(unsigned char); else if (nSize <= std::numeric_limits::max()) return sizeof(unsigned char) + sizeof(unsigned short); else if (nSize <= std::numeric_limits::max()) return sizeof(unsigned char) + sizeof(unsigned int); - else return sizeof(unsigned char) + sizeof(uint64); + else return sizeof(unsigned char) + sizeof(uint64_t); } template -void WriteCompactSize(Stream& os, uint64 nSize) +void WriteCompactSize(Stream& os, uint64_t nSize) { if (nSize < 253) { @@ -194,7 +193,7 @@ void WriteCompactSize(Stream& os, uint64 nSize) else { unsigned char chSize = 255; - uint64 xSize = nSize; + uint64_t xSize = nSize; WRITEDATA(os, chSize); WRITEDATA(os, xSize); } @@ -202,11 +201,11 @@ void WriteCompactSize(Stream& os, uint64 nSize) } template -uint64 ReadCompactSize(Stream& is) +uint64_t ReadCompactSize(Stream& is) { unsigned char chSize; READDATA(is, chSize); - uint64 nSizeRet = 0; + uint64_t nSizeRet = 0; if (chSize < 253) { nSizeRet = chSize; @@ -216,20 +215,26 @@ uint64 ReadCompactSize(Stream& is) unsigned short xSize; READDATA(is, xSize); nSizeRet = xSize; + if (nSizeRet < 253) + throw std::ios_base::failure("non-canonical ReadCompactSize()"); } else if (chSize == 254) { unsigned int xSize; READDATA(is, xSize); nSizeRet = xSize; + if (nSizeRet < 0x10000u) + throw std::ios_base::failure("non-canonical ReadCompactSize()"); } else { - uint64 xSize; + uint64_t xSize; READDATA(is, xSize); nSizeRet = xSize; + if (nSizeRet < 0x100000000LLu) + throw std::ios_base::failure("non-canonical ReadCompactSize()"); } - if (nSizeRet > (uint64)MAX_SIZE) + if (nSizeRet > (uint64_t)MAX_SIZE) throw std::ios_base::failure("ReadCompactSize() : size too large"); return nSizeRet; } @@ -895,19 +900,6 @@ public: iterator insert(iterator it, const char& x=char()) { return vch.insert(it, x); } void insert(iterator it, size_type n, const char& x) { vch.insert(it, n, x); } - void insert(iterator it, const_iterator first, const_iterator last) - { - assert(last - first >= 0); - if (it == vch.begin() + nReadPos && (unsigned int)(last - first) <= nReadPos) - { - // special case for inserting at the front when there's room - nReadPos -= (last - first); - memcpy(&vch[nReadPos], &first[0], last - first); - } - else - vch.insert(it, first, last); - } - void insert(iterator it, std::vector::const_iterator first, std::vector::const_iterator last) { assert(last - first >= 0); @@ -1046,10 +1038,7 @@ public: if (nReadPosNext >= vch.size()) { if (nReadPosNext > vch.size()) - { setstate(std::ios::failbit, "CDataStream::ignore() : end of data"); - nSize = vch.size() - nReadPos; - } nReadPos = 0; vch.clear(); return (*this); @@ -1098,8 +1087,8 @@ public: } void GetAndClear(CSerializeData &data) { - vch.swap(data); - CSerializeData().swap(vch); + data.insert(data.end(), begin(), end()); + clear(); } }; @@ -1234,10 +1223,10 @@ class CBufferedFile { private: FILE *src; // source file - uint64 nSrcPos; // how many bytes have been read from source - uint64 nReadPos; // how many bytes have been read from this - uint64 nReadLimit; // up to which position we're allowed to read - uint64 nRewind; // how many bytes we guarantee to rewind + uint64_t nSrcPos; // how many bytes have been read from source + uint64_t nReadPos; // how many bytes have been read from this + uint64_t nReadLimit; // up to which position we're allowed to read + uint64_t nRewind; // how many bytes we guarantee to rewind std::vector vchBuf; // the buffer short state; @@ -1273,8 +1262,8 @@ public: int nType; int nVersion; - CBufferedFile(FILE *fileIn, uint64 nBufSize, uint64 nRewindIn, int nTypeIn, int nVersionIn) : - src(fileIn), nSrcPos(0), nReadPos(0), nReadLimit((uint64)(-1)), nRewind(nRewindIn), vchBuf(nBufSize, 0), + CBufferedFile(FILE *fileIn, uint64_t nBufSize, uint64_t nRewindIn, int nTypeIn, int nVersionIn) : + src(fileIn), nSrcPos(0), nReadPos(0), nReadLimit((uint64_t)(-1)), nRewind(nRewindIn), vchBuf(nBufSize, 0), state(0), exceptmask(std::ios_base::badbit | std::ios_base::failbit), nType(nTypeIn), nVersion(nVersionIn) { } @@ -1312,12 +1301,12 @@ public: } // return the current reading position - uint64 GetPos() { + uint64_t GetPos() { return nReadPos; } // rewind to a given reading position - bool SetPos(uint64 nPos) { + bool SetPos(uint64_t nPos) { nReadPos = nPos; if (nReadPos + nRewind < nSrcPos) { nReadPos = nSrcPos - nRewind; @@ -1330,9 +1319,9 @@ public: } } - bool Seek(uint64 nPos) { + bool Seek(uint64_t nPos) { long nLongPos = nPos; - if (nPos != (uint64)nLongPos) + if (nPos != (uint64_t)nLongPos) return false; if (fseek(src, nLongPos, SEEK_SET)) return false; @@ -1345,7 +1334,7 @@ public: // prevent reading beyond a certain position // no argument removes the limit - bool SetLimit(uint64 nPos = (uint64)(-1)) { + bool SetLimit(uint64_t nPos = (uint64_t)(-1)) { if (nPos < nReadPos) return false; nReadLimit = nPos; diff --git a/src/sync.cpp b/src/sync.cpp index 1ac4403b..e624a9ee 100644 --- a/src/sync.cpp +++ b/src/sync.cpp @@ -3,6 +3,7 @@ // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "sync.h" + #include "util.h" #include @@ -10,8 +11,8 @@ #ifdef DEBUG_LOCKCONTENTION void PrintLockContention(const char* pszName, const char* pszFile, int nLine) { - printf("LOCKCONTENTION: %s\n", pszName); - printf("Locker: %s:%d\n", pszFile, nLine); + LogPrintf("LOCKCONTENTION: %s\n", pszName); + LogPrintf("Locker: %s:%d\n", pszFile, nLine); } #endif /* DEBUG_LOCKCONTENTION */ @@ -41,6 +42,8 @@ struct CLockLocation return mutexName+" "+sourceFile+":"+itostr(sourceLine); } + std::string MutexName() const { return mutexName; } + private: std::string mutexName; std::string sourceFile; @@ -56,20 +59,20 @@ static boost::thread_specific_ptr lockstack; static void potential_deadlock_detected(const std::pair& mismatch, const LockStack& s1, const LockStack& s2) { - printf("POTENTIAL DEADLOCK DETECTED\n"); - printf("Previous lock order was:\n"); + LogPrintf("POTENTIAL DEADLOCK DETECTED\n"); + LogPrintf("Previous lock order was:\n"); BOOST_FOREACH(const PAIRTYPE(void*, CLockLocation)& i, s2) { - if (i.first == mismatch.first) printf(" (1)"); - if (i.first == mismatch.second) printf(" (2)"); - printf(" %s\n", i.second.ToString().c_str()); + if (i.first == mismatch.first) LogPrintf(" (1)"); + if (i.first == mismatch.second) LogPrintf(" (2)"); + LogPrintf(" %s\n", i.second.ToString()); } - printf("Current lock order is:\n"); + LogPrintf("Current lock order is:\n"); BOOST_FOREACH(const PAIRTYPE(void*, CLockLocation)& i, s1) { - if (i.first == mismatch.first) printf(" (1)"); - if (i.first == mismatch.second) printf(" (2)"); - printf(" %s\n", i.second.ToString().c_str()); + if (i.first == mismatch.first) LogPrintf(" (1)"); + if (i.first == mismatch.second) LogPrintf(" (2)"); + LogPrintf(" %s\n", i.second.ToString()); } } @@ -78,7 +81,7 @@ static void push_lock(void* c, const CLockLocation& locklocation, bool fTry) if (lockstack.get() == NULL) lockstack.reset(new LockStack); - if (fDebug) printf("Locking: %s\n", locklocation.ToString().c_str()); + LogPrint("lock", "Locking: %s\n", locklocation.ToString()); dd_mutex.lock(); (*lockstack).push_back(std::make_pair(c, locklocation)); @@ -108,7 +111,7 @@ static void pop_lock() if (fDebug) { const CLockLocation& locklocation = (*lockstack).rbegin()->second; - printf("Unlocked: %s\n", locklocation.ToString().c_str()); + LogPrint("lock", "Unlocked: %s\n", locklocation.ToString()); } dd_mutex.lock(); (*lockstack).pop_back(); @@ -125,4 +128,21 @@ void LeaveCritical() pop_lock(); } +std::string LocksHeld() +{ + std::string result; + BOOST_FOREACH(const PAIRTYPE(void*, CLockLocation)&i, *lockstack) + result += i.second.ToString() + std::string("\n"); + return result; +} + +void AssertLockHeldInternal(const char *pszName, const char* pszFile, int nLine, void *cs) +{ + BOOST_FOREACH(const PAIRTYPE(void*, CLockLocation)&i, *lockstack) + if (i.first == cs) return; + fprintf(stderr, "Assertion failed: lock %s not held in %s:%i; locks held:\n%s", + pszName, pszFile, nLine, LocksHeld().c_str()); + abort(); +} + #endif /* DEBUG_LOCKORDER */ diff --git a/src/sync.h b/src/sync.h index 64de7cc5..077ed59b 100644 --- a/src/sync.h +++ b/src/sync.h @@ -1,15 +1,17 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2013 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef BITCOIN_SYNC_H #define BITCOIN_SYNC_H +#include "threadsafety.h" + +#include +#include #include #include -#include -#include -#include "threadsafety.h" //////////////////////////////////////////////// @@ -85,10 +87,14 @@ typedef AnnotatedMixin CWaitableCriticalSection; #ifdef DEBUG_LOCKORDER void EnterCritical(const char* pszName, const char* pszFile, int nLine, void* cs, bool fTry = false); void LeaveCritical(); +std::string LocksHeld(); +void AssertLockHeldInternal(const char* pszName, const char* pszFile, int nLine, void *cs); #else void static inline EnterCritical(const char* pszName, const char* pszFile, int nLine, void* cs, bool fTry = false) {} void static inline LeaveCritical() {} +void static inline AssertLockHeldInternal(const char* pszName, const char* pszFile, int nLine, void *cs) {} #endif +#define AssertLockHeld(cs) AssertLockHeldInternal(#cs, __FILE__, __LINE__, &cs) #ifdef DEBUG_LOCKCONTENTION void PrintLockContention(const char* pszName, const char* pszFile, int nLine); diff --git a/src/test/Checkpoints_tests.cpp b/src/test/Checkpoints_tests.cpp index b14e9f70..8f70f18c 100644 --- a/src/test/Checkpoints_tests.cpp +++ b/src/test/Checkpoints_tests.cpp @@ -1,12 +1,16 @@ +// Copyright (c) 2011-2013 The Bitcoin Core developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + // // Unit tests for block-chain checkpoints // -#include // for 'map_list_of()' -#include -#include -#include "../checkpoints.h" -#include "../util.h" +#include "checkpoints.h" + +#include "uint256.h" + +#include using namespace std; diff --git a/src/test/DoS_tests.cpp b/src/test/DoS_tests.cpp index ea0cc1bc..d86cc7a2 100644 --- a/src/test/DoS_tests.cpp +++ b/src/test/DoS_tests.cpp @@ -1,26 +1,32 @@ +// Copyright (c) 2011-2014 The Bitcoin Core developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + // // Unit tests for denial-of-service detection/prevention code // -#include -#include // for 'map_list_of()' -#include -#include -#include -#include "chainparams.h" + +#include "bignum.h" +#include "keystore.h" #include "main.h" -#include "wallet.h" #include "net.h" -#include "util.h" +#include "script.h" +#include "serialize.h" #include +#include // for 'map_list_of()' +#include +#include +#include + // Tests this internal-to-main.cpp method: -extern bool AddOrphanTx(const CDataStream& vMsg); +extern bool AddOrphanTx(const CTransaction& tx); extern unsigned int LimitOrphanTxSize(unsigned int nMaxOrphans); -extern std::map mapOrphanTransactions; -extern std::map > mapOrphanTransactionsByPrev; +extern std::map mapOrphanTransactions; +extern std::map > mapOrphanTransactionsByPrev; CService ip(uint32_t i) { @@ -36,16 +42,21 @@ BOOST_AUTO_TEST_CASE(DoS_banning) CNode::ClearBanned(); CAddress addr1(ip(0xa0b0c001)); CNode dummyNode1(INVALID_SOCKET, addr1, "", true); - dummyNode1.Misbehaving(100); // Should get banned + dummyNode1.nVersion = 1; + Misbehaving(dummyNode1.GetId(), 100); // Should get banned + SendMessages(&dummyNode1, false); BOOST_CHECK(CNode::IsBanned(addr1)); BOOST_CHECK(!CNode::IsBanned(ip(0xa0b0c001|0x0000ff00))); // Different IP, not banned CAddress addr2(ip(0xa0b0c002)); CNode dummyNode2(INVALID_SOCKET, addr2, "", true); - dummyNode2.Misbehaving(50); + dummyNode2.nVersion = 1; + Misbehaving(dummyNode2.GetId(), 50); + SendMessages(&dummyNode2, false); BOOST_CHECK(!CNode::IsBanned(addr2)); // 2 not banned yet... BOOST_CHECK(CNode::IsBanned(addr1)); // ... but 1 still should be - dummyNode2.Misbehaving(50); + Misbehaving(dummyNode2.GetId(), 50); + SendMessages(&dummyNode2, false); BOOST_CHECK(CNode::IsBanned(addr2)); } @@ -55,11 +66,15 @@ BOOST_AUTO_TEST_CASE(DoS_banscore) mapArgs["-banscore"] = "111"; // because 11 is my favorite number CAddress addr1(ip(0xa0b0c001)); CNode dummyNode1(INVALID_SOCKET, addr1, "", true); - dummyNode1.Misbehaving(100); + dummyNode1.nVersion = 1; + Misbehaving(dummyNode1.GetId(), 100); + SendMessages(&dummyNode1, false); BOOST_CHECK(!CNode::IsBanned(addr1)); - dummyNode1.Misbehaving(10); + Misbehaving(dummyNode1.GetId(), 10); + SendMessages(&dummyNode1, false); BOOST_CHECK(!CNode::IsBanned(addr1)); - dummyNode1.Misbehaving(1); + Misbehaving(dummyNode1.GetId(), 1); + SendMessages(&dummyNode1, false); BOOST_CHECK(CNode::IsBanned(addr1)); mapArgs.erase("-banscore"); } @@ -67,13 +82,15 @@ BOOST_AUTO_TEST_CASE(DoS_banscore) BOOST_AUTO_TEST_CASE(DoS_bantime) { CNode::ClearBanned(); - int64 nStartTime = GetTime(); + int64_t nStartTime = GetTime(); SetMockTime(nStartTime); // Overrides future calls to GetTime() CAddress addr(ip(0xa0b0c001)); CNode dummyNode(INVALID_SOCKET, addr, "", true); + dummyNode.nVersion = 1; - dummyNode.Misbehaving(100); + Misbehaving(dummyNode.GetId(), 100); + SendMessages(&dummyNode, false); BOOST_CHECK(CNode::IsBanned(addr)); SetMockTime(nStartTime+60*60); @@ -83,11 +100,11 @@ BOOST_AUTO_TEST_CASE(DoS_bantime) BOOST_CHECK(!CNode::IsBanned(addr)); } -static bool CheckNBits(unsigned int nbits1, int64 time1, unsigned int nbits2, int64 time2)\ +static bool CheckNBits(unsigned int nbits1, int64_t time1, unsigned int nbits2, int64_t time2)\ { if (time1 > time2) return CheckNBits(nbits2, time2, nbits1, time1); - int64 deltaTime = time2-time1; + int64_t deltaTime = time2-time1; CBigNum required; required.SetCompact(ComputeMinWork(nbits1, deltaTime)); @@ -102,7 +119,7 @@ BOOST_AUTO_TEST_CASE(DoS_checknbits) // Timestamps,nBits from the bitcoin block chain. // These are the block-chain checkpoint blocks - typedef std::map BlockData; + typedef std::map BlockData; BlockData chainData = map_list_of(1239852051,486604799)(1262749024,486594666) (1279305360,469854461)(1280200847,469830746)(1281678674,469809688) @@ -134,14 +151,11 @@ BOOST_AUTO_TEST_CASE(DoS_checknbits) CTransaction RandomOrphan() { - std::map::iterator it; + std::map::iterator it; it = mapOrphanTransactions.lower_bound(GetRandHash()); if (it == mapOrphanTransactions.end()) it = mapOrphanTransactions.begin(); - const CDataStream* pvMsg = it->second; - CTransaction tx; - CDataStream(*pvMsg) >> tx; - return tx; + return it->second; } BOOST_AUTO_TEST_CASE(DoS_mapOrphans) @@ -163,9 +177,7 @@ BOOST_AUTO_TEST_CASE(DoS_mapOrphans) tx.vout[0].nValue = 1*CENT; tx.vout[0].scriptPubKey.SetDestination(key.GetPubKey().GetID()); - CDataStream ds(SER_DISK, CLIENT_VERSION); - ds << tx; - AddOrphanTx(ds); + AddOrphanTx(tx); } // ... and 50 that depend on other orphans: @@ -182,9 +194,7 @@ BOOST_AUTO_TEST_CASE(DoS_mapOrphans) tx.vout[0].scriptPubKey.SetDestination(key.GetPubKey().GetID()); SignSignature(keystore, txPrev, tx, 0); - CDataStream ds(SER_DISK, CLIENT_VERSION); - ds << tx; - AddOrphanTx(ds); + AddOrphanTx(tx); } // This really-big orphan should be ignored: @@ -208,9 +218,7 @@ BOOST_AUTO_TEST_CASE(DoS_mapOrphans) for (unsigned int j = 1; j < tx.vin.size(); j++) tx.vin[j].scriptSig = tx.vin[0].scriptSig; - CDataStream ds(SER_DISK, CLIENT_VERSION); - ds << tx; - BOOST_CHECK(!AddOrphanTx(ds)); + BOOST_CHECK(!AddOrphanTx(tx)); } // Test LimitOrphanTxSize() function: @@ -247,9 +255,7 @@ BOOST_AUTO_TEST_CASE(DoS_checkSig) tx.vout[0].nValue = 1*CENT; tx.vout[0].scriptPubKey.SetDestination(key.GetPubKey().GetID()); - CDataStream ds(SER_DISK, CLIENT_VERSION); - ds << tx; - AddOrphanTx(ds); + AddOrphanTx(tx); } // Create a transaction that depends on orphans: diff --git a/src/test/Makefile.am b/src/test/Makefile.am new file mode 100644 index 00000000..cb2219e8 --- /dev/null +++ b/src/test/Makefile.am @@ -0,0 +1,76 @@ +include $(top_srcdir)/src/Makefile.include + +AM_CPPFLAGS += -I$(top_srcdir)/src + +bin_PROGRAMS = test_myriadcoin + +TESTS = test_myriadcoin + +JSON_TEST_FILES = \ + data/script_valid.json \ + data/base58_keys_valid.json \ + data/sig_canonical.json \ + data/sig_noncanonical.json \ + data/base58_encode_decode.json \ + data/base58_keys_invalid.json \ + data/script_invalid.json \ + data/tx_invalid.json \ + data/tx_valid.json \ + data/sighash.json + +RAW_TEST_FILES = data/alertTests.raw + +BUILT_SOURCES = $(JSON_TEST_FILES:.json=.json.h) $(RAW_TEST_FILES:.raw=.raw.h) + +# test_bitcoin binary # +test_myriadcoin_CPPFLAGS = $(AM_CPPFLAGS) $(TESTDEFS) +test_myriadcoin_LDADD = $(LIBBITCOIN_SERVER) $(LIBBITCOIN_CLI) $(LIBBITCOIN_COMMON) $(LIBLEVELDB) $(LIBMEMENV) \ + $(BOOST_LIBS) $(BOOST_UNIT_TEST_FRAMEWORK_LIB) +if ENABLE_WALLET +test_myriadcoin_LDADD += $(LIBBITCOIN_WALLET) +endif +test_myriadcoin_LDADD += $(BDB_LIBS) + +test_myriadcoin_SOURCES = \ + alert_tests.cpp \ + allocator_tests.cpp \ + base32_tests.cpp \ + base58_tests.cpp \ + base64_tests.cpp \ + bignum_tests.cpp \ + bloom_tests.cpp \ + canonical_tests.cpp \ + checkblock_tests.cpp \ + Checkpoints_tests.cpp \ + compress_tests.cpp \ + DoS_tests.cpp \ + getarg_tests.cpp \ + key_tests.cpp \ + main_tests.cpp \ + miner_tests.cpp \ + mruset_tests.cpp \ + multisig_tests.cpp \ + netbase_tests.cpp \ + pmt_tests.cpp \ + rpc_tests.cpp \ + script_P2SH_tests.cpp \ + script_tests.cpp \ + serialize_tests.cpp \ + sigopcount_tests.cpp \ + test_bitcoin.cpp \ + transaction_tests.cpp \ + uint256_tests.cpp \ + util_tests.cpp \ + sighash_tests.cpp \ + $(JSON_TEST_FILES) $(RAW_TEST_FILES) + +if ENABLE_WALLET +test_myriadcoin_SOURCES += \ + accounting_tests.cpp \ + wallet_tests.cpp \ + rpc_wallet_tests.cpp +endif + +nodist_test_myriadcoin_SOURCES = $(BUILT_SOURCES) + +CLEANFILES = *.gcda *.gcno $(BUILT_SOURCES) diff --git a/src/test/README b/src/test/README.md similarity index 87% rename from src/test/README rename to src/test/README.md index 77f7faa8..7efce6f0 100644 --- a/src/test/README +++ b/src/test/README.md @@ -1,3 +1,4 @@ +# Notes The sources in this directory are unit test cases. Boost includes a unit testing framework, and since bitcoin already uses boost, it makes sense to simply use this framework rather than require developers to @@ -17,5 +18,4 @@ uint256_tests.cpp. For further reading, I found the following website to be helpful in explaining how the boost unit test framework works: - -http://www.alittlemadness.com/2009/03/31/c-unit-testing-with-boosttest/ +[http://www.alittlemadness.com/2009/03/31/c-unit-testing-with-boosttest/](http://www.alittlemadness.com/2009/03/31/c-unit-testing-with-boosttest/). \ No newline at end of file diff --git a/src/test/accounting_tests.cpp b/src/test/accounting_tests.cpp index 8ac65728..e2a75da3 100644 --- a/src/test/accounting_tests.cpp +++ b/src/test/accounting_tests.cpp @@ -1,15 +1,21 @@ -#include +// Copyright (c) 2012-2014 The Bitcoin Core developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include - -#include "init.h" #include "wallet.h" #include "walletdb.h" +#include + +#include +#include + +extern CWallet* pwalletMain; + BOOST_AUTO_TEST_SUITE(accounting_tests) static void -GetResults(CWalletDB& walletdb, std::map& results) +GetResults(CWalletDB& walletdb, std::map& results) { std::list aes; @@ -28,7 +34,9 @@ BOOST_AUTO_TEST_CASE(acc_orderupgrade) std::vector vpwtx; CWalletTx wtx; CAccountingEntry ae; - std::map results; + std::map results; + + LOCK(pwalletMain->cs_wallet); ae.strAccount = ""; ae.nCreditDebit = 1; diff --git a/src/test/alert_tests.cpp b/src/test/alert_tests.cpp index f7a11376..b16f3f7f 100644 --- a/src/test/alert_tests.cpp +++ b/src/test/alert_tests.cpp @@ -1,14 +1,23 @@ +// Copyright (c) 2013 The Bitcoin Core developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + // // Unit tests for alert system // -#include -#include -#include - #include "alert.h" +#include "data/alertTests.raw.h" + #include "serialize.h" #include "util.h" +#include "version.h" + +#include + +#include +#include +#include #if 0 // @@ -22,7 +31,7 @@ alert.nID = 1; alert.nCancel = 0; // cancels previous messages up to this ID number alert.nMinVer = 0; // These versions are protocol versions - alert.nMaxVer = 70001; + alert.nMaxVer = 999001; alert.nPriority = 1; alert.strComment = "Alert comment"; alert.strStatusBar = "Alert 1"; @@ -71,27 +80,13 @@ struct ReadAlerts { ReadAlerts() { - std::string filename("alertTests"); - namespace fs = boost::filesystem; - fs::path testFile = fs::current_path() / "test" / "data" / filename; -#ifdef TEST_DATA_DIR - if (!fs::exists(testFile)) - { - testFile = fs::path(BOOST_PP_STRINGIZE(TEST_DATA_DIR)) / filename; - } -#endif - FILE* fp = fopen(testFile.string().c_str(), "rb"); - if (!fp) return; - - - CAutoFile filein = CAutoFile(fp, SER_DISK, CLIENT_VERSION); - if (!filein) return; - + std::vector vch(alert_tests::alertTests, alert_tests::alertTests + sizeof(alert_tests::alertTests)); + CDataStream stream(vch, SER_DISK, CLIENT_VERSION); try { - while (!feof(filein)) + while (stream.good()) { CAlert alert; - filein >> alert; + stream >> alert; alerts.push_back(alert); } } @@ -125,27 +120,30 @@ BOOST_AUTO_TEST_CASE(AlertApplies) { BOOST_CHECK(alert.CheckSignature()); } + + BOOST_CHECK(alerts.size() >= 3); + // Matches: BOOST_CHECK(alerts[0].AppliesTo(1, "")); - BOOST_CHECK(alerts[0].AppliesTo(70001, "")); + BOOST_CHECK(alerts[0].AppliesTo(999001, "")); BOOST_CHECK(alerts[0].AppliesTo(1, "/Satoshi:11.11.11/")); BOOST_CHECK(alerts[1].AppliesTo(1, "/Satoshi:0.1.0/")); - BOOST_CHECK(alerts[1].AppliesTo(70001, "/Satoshi:0.1.0/")); + BOOST_CHECK(alerts[1].AppliesTo(999001, "/Satoshi:0.1.0/")); BOOST_CHECK(alerts[2].AppliesTo(1, "/Satoshi:0.1.0/")); BOOST_CHECK(alerts[2].AppliesTo(1, "/Satoshi:0.2.0/")); // Don't match: BOOST_CHECK(!alerts[0].AppliesTo(-1, "")); - BOOST_CHECK(!alerts[0].AppliesTo(70002, "")); + BOOST_CHECK(!alerts[0].AppliesTo(999002, "")); BOOST_CHECK(!alerts[1].AppliesTo(1, "")); BOOST_CHECK(!alerts[1].AppliesTo(1, "Satoshi:0.1.0")); BOOST_CHECK(!alerts[1].AppliesTo(1, "/Satoshi:0.1.0")); BOOST_CHECK(!alerts[1].AppliesTo(1, "Satoshi:0.1.0/")); BOOST_CHECK(!alerts[1].AppliesTo(-1, "/Satoshi:0.1.0/")); - BOOST_CHECK(!alerts[1].AppliesTo(70002, "/Satoshi:0.1.0/")); + BOOST_CHECK(!alerts[1].AppliesTo(999002, "/Satoshi:0.1.0/")); BOOST_CHECK(!alerts[1].AppliesTo(1, "/Satoshi:0.2.0/")); BOOST_CHECK(!alerts[2].AppliesTo(1, "/Satoshi:0.3.0/")); diff --git a/src/test/allocator_tests.cpp b/src/test/allocator_tests.cpp index d5cb8e81..2752a0b2 100644 --- a/src/test/allocator_tests.cpp +++ b/src/test/allocator_tests.cpp @@ -1,9 +1,11 @@ -#include +// Copyright (c) 2012-2013 The Bitcoin Core developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include "init.h" -#include "main.h" #include "util.h" +#include + BOOST_AUTO_TEST_SUITE(allocator_tests) // Dummy memory page locker for platform independent tests diff --git a/src/test/base32_tests.cpp b/src/test/base32_tests.cpp index fdf32859..87473585 100644 --- a/src/test/base32_tests.cpp +++ b/src/test/base32_tests.cpp @@ -1,7 +1,11 @@ -#include +// Copyright (c) 2012-2013 The Bitcoin Core developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "util.h" +#include + BOOST_AUTO_TEST_SUITE(base32_tests) BOOST_AUTO_TEST_CASE(base32_testvectors) diff --git a/src/test/base58_tests.cpp b/src/test/base58_tests.cpp index af654164..b81a19cf 100644 --- a/src/test/base58_tests.cpp +++ b/src/test/base58_tests.cpp @@ -1,21 +1,33 @@ -#include -#include "json/json_spirit_reader_template.h" -#include "json/json_spirit_writer_template.h" -#include "json/json_spirit_utils.h" +// Copyright (c) 2011-2014 The Bitcoin Core developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "base58.h" + +#include "data/base58_encode_decode.json.h" +#include "data/base58_keys_invalid.json.h" +#include "data/base58_keys_valid.json.h" + +#include "key.h" +#include "script.h" +#include "uint256.h" #include "util.h" +#include +#include +#include "json/json_spirit_reader_template.h" +#include "json/json_spirit_utils.h" +#include "json/json_spirit_writer_template.h" + using namespace json_spirit; -extern Array read_json(const std::string& filename); +extern Array read_json(const std::string& jsondata); BOOST_AUTO_TEST_SUITE(base58_tests) // Goal: test low-level base58 encoding functionality BOOST_AUTO_TEST_CASE(base58_EncodeBase58) { - Array tests = read_json("base58_encode_decode.json"); - + Array tests = read_json(std::string(json_tests::base58_encode_decode, json_tests::base58_encode_decode + sizeof(json_tests::base58_encode_decode))); BOOST_FOREACH(Value& tv, tests) { Array test = tv.get_array(); @@ -36,7 +48,7 @@ BOOST_AUTO_TEST_CASE(base58_EncodeBase58) // Goal: test low-level base58 decoding functionality BOOST_AUTO_TEST_CASE(base58_DecodeBase58) { - Array tests = read_json("base58_encode_decode.json"); + Array tests = read_json(std::string(json_tests::base58_encode_decode, json_tests::base58_encode_decode + sizeof(json_tests::base58_encode_decode))); std::vector result; BOOST_FOREACH(Value& tv, tests) @@ -55,6 +67,12 @@ BOOST_AUTO_TEST_CASE(base58_DecodeBase58) } BOOST_CHECK(!DecodeBase58("invalid", result)); + + // check that DecodeBase58 skips whitespace, but still fails with unexpected non-whitespace at the end. + BOOST_CHECK(!DecodeBase58(" \t\n\v\f\r skip \r\f\v\n\t a", result)); + BOOST_CHECK( DecodeBase58(" \t\n\v\f\r skip \r\f\v\n\t ", result)); + std::vector expected = ParseHex("971a55"); + BOOST_CHECK_EQUAL_COLLECTIONS(result.begin(), result.end(), expected.begin(), expected.end()); } // Visitor to check address type @@ -104,7 +122,7 @@ public: // Goal: check that parsed keys match test payload BOOST_AUTO_TEST_CASE(base58_keys_valid_parse) { - Array tests = read_json("base58_keys_valid.json"); + Array tests = read_json(std::string(json_tests::base58_keys_valid, json_tests::base58_keys_valid + sizeof(json_tests::base58_keys_valid))); std::vector result; CBitcoinSecret secret; CBitcoinAddress addr; @@ -163,7 +181,7 @@ BOOST_AUTO_TEST_CASE(base58_keys_valid_parse) // Goal: check that generated keys match test vectors BOOST_AUTO_TEST_CASE(base58_keys_valid_gen) { - Array tests = read_json("base58_keys_valid.json"); + Array tests = read_json(std::string(json_tests::base58_keys_valid, json_tests::base58_keys_valid + sizeof(json_tests::base58_keys_valid))); std::vector result; BOOST_FOREACH(Value& tv, tests) { @@ -215,7 +233,7 @@ BOOST_AUTO_TEST_CASE(base58_keys_valid_gen) continue; } CBitcoinAddress addrOut; - BOOST_CHECK_MESSAGE(boost::apply_visitor(CBitcoinAddressVisitor(&addrOut), dest), "encode dest: " + strTest); + BOOST_CHECK_MESSAGE(addrOut.Set(dest), "encode dest: " + strTest); BOOST_CHECK_MESSAGE(addrOut.ToString() == exp_base58string, "mismatch: " + strTest); } } @@ -223,7 +241,7 @@ BOOST_AUTO_TEST_CASE(base58_keys_valid_gen) // Visiting a CNoDestination must fail CBitcoinAddress dummyAddr; CTxDestination nodest = CNoDestination(); - BOOST_CHECK(!boost::apply_visitor(CBitcoinAddressVisitor(&dummyAddr), nodest)); + BOOST_CHECK(!dummyAddr.Set(nodest)); SelectParams(CChainParams::MAIN); } @@ -231,7 +249,7 @@ BOOST_AUTO_TEST_CASE(base58_keys_valid_gen) // Goal: check that base58 parsing code is robust against a variety of corrupted data BOOST_AUTO_TEST_CASE(base58_keys_invalid) { - Array tests = read_json("base58_keys_invalid.json"); // Negative testcases + Array tests = read_json(std::string(json_tests::base58_keys_invalid, json_tests::base58_keys_invalid + sizeof(json_tests::base58_keys_invalid))); // Negative testcases std::vector result; CBitcoinSecret secret; CBitcoinAddress addr; diff --git a/src/test/base64_tests.cpp b/src/test/base64_tests.cpp index c5a053e2..d4a23d9a 100644 --- a/src/test/base64_tests.cpp +++ b/src/test/base64_tests.cpp @@ -1,9 +1,11 @@ -#include +// Copyright (c) 2011-2013 The Bitcoin Core developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include "main.h" -#include "wallet.h" #include "util.h" +#include + BOOST_AUTO_TEST_SUITE(base64_tests) BOOST_AUTO_TEST_CASE(base64_testvectors) diff --git a/src/test/bignum_tests.cpp b/src/test/bignum_tests.cpp index 196b7274..d5ee8c97 100644 --- a/src/test/bignum_tests.cpp +++ b/src/test/bignum_tests.cpp @@ -1,8 +1,13 @@ -#include -#include +// Copyright (c) 2012-2014 The Bitcoin Core developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "bignum.h" -#include "util.h" + +#include +#include + +#include BOOST_AUTO_TEST_SUITE(bignum_tests) @@ -34,11 +39,8 @@ BOOST_AUTO_TEST_SUITE(bignum_tests) // stack buffer overruns. // // For more accurate diagnostics, you can use an undefined arithmetic operation -// detector such as the clang-based tool: -// -// "IOC: An Integer Overflow Checker for C/C++" -// -// Available at: http://embed.cs.utah.edu/ioc/ +// detector such as the clang's undefined behaviour checker. +// See also: http://clang.llvm.org/docs/UsersManual.html#controlling-code-generation // // It might also be useful to use Google's AddressSanitizer to detect // stack buffer overruns, which valgrind can't currently detect. @@ -46,7 +48,7 @@ BOOST_AUTO_TEST_SUITE(bignum_tests) // Let's force this code not to be inlined, in order to actually // test a generic version of the function. This increases the chance // that -ftrapv will detect overflows. -NOINLINE void mysetint64(CBigNum& num, int64 n) +NOINLINE void mysetint64(CBigNum& num, int64_t n) { num.setint64(n); } @@ -55,7 +57,7 @@ NOINLINE void mysetint64(CBigNum& num, int64 n) // value to 0, then the second one with a non-inlined function. BOOST_AUTO_TEST_CASE(bignum_setint64) { - int64 n; + int64_t n; { n = 0; @@ -103,7 +105,7 @@ BOOST_AUTO_TEST_CASE(bignum_setint64) BOOST_CHECK(num.ToString() == "-5"); } { - n = std::numeric_limits::min(); + n = std::numeric_limits::min(); CBigNum num(n); BOOST_CHECK(num.ToString() == "-9223372036854775808"); num.setulong(0); @@ -112,7 +114,7 @@ BOOST_AUTO_TEST_CASE(bignum_setint64) BOOST_CHECK(num.ToString() == "-9223372036854775808"); } { - n = std::numeric_limits::max(); + n = std::numeric_limits::max(); CBigNum num(n); BOOST_CHECK(num.ToString() == "9223372036854775807"); num.setulong(0); @@ -134,6 +136,42 @@ BOOST_AUTO_TEST_CASE(bignum_SetCompact) BOOST_CHECK_EQUAL(num.GetHex(), "0"); BOOST_CHECK_EQUAL(num.GetCompact(), 0U); + num.SetCompact(0x01003456); + BOOST_CHECK_EQUAL(num.GetHex(), "0"); + BOOST_CHECK_EQUAL(num.GetCompact(), 0U); + + num.SetCompact(0x02000056); + BOOST_CHECK_EQUAL(num.GetHex(), "0"); + BOOST_CHECK_EQUAL(num.GetCompact(), 0U); + + num.SetCompact(0x03000000); + BOOST_CHECK_EQUAL(num.GetHex(), "0"); + BOOST_CHECK_EQUAL(num.GetCompact(), 0U); + + num.SetCompact(0x04000000); + BOOST_CHECK_EQUAL(num.GetHex(), "0"); + BOOST_CHECK_EQUAL(num.GetCompact(), 0U); + + num.SetCompact(0x00923456); + BOOST_CHECK_EQUAL(num.GetHex(), "0"); + BOOST_CHECK_EQUAL(num.GetCompact(), 0U); + + num.SetCompact(0x01803456); + BOOST_CHECK_EQUAL(num.GetHex(), "0"); + BOOST_CHECK_EQUAL(num.GetCompact(), 0U); + + num.SetCompact(0x02800056); + BOOST_CHECK_EQUAL(num.GetHex(), "0"); + BOOST_CHECK_EQUAL(num.GetCompact(), 0U); + + num.SetCompact(0x03800000); + BOOST_CHECK_EQUAL(num.GetHex(), "0"); + BOOST_CHECK_EQUAL(num.GetCompact(), 0U); + + num.SetCompact(0x04800000); + BOOST_CHECK_EQUAL(num.GetHex(), "0"); + BOOST_CHECK_EQUAL(num.GetCompact(), 0U); + num.SetCompact(0x01123456); BOOST_CHECK_EQUAL(num.GetHex(), "12"); BOOST_CHECK_EQUAL(num.GetCompact(), 0x01120000U); @@ -175,4 +213,12 @@ BOOST_AUTO_TEST_CASE(bignum_SetCompact) BOOST_CHECK_EQUAL(num.GetCompact(), 0xff123456U); } +BOOST_AUTO_TEST_CASE(bignum_SetHex) +{ + std::string hexStr = "deecf97fd890808b9cc0f1b6a3e7a60b400f52710e6ad075b1340755bfa58cc9"; + CBigNum num; + num.SetHex(hexStr); + BOOST_CHECK_EQUAL(num.GetHex(), hexStr); +} + BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/bip32_tests.cpp b/src/test/bip32_tests.cpp new file mode 100644 index 00000000..9cf07fc3 --- /dev/null +++ b/src/test/bip32_tests.cpp @@ -0,0 +1,120 @@ +// Copyright (c) 2013 The Bitcoin Core developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include + +#include "base58.h" +#include "key.h" +#include "uint256.h" +#include "util.h" + +#include +#include + +struct TestDerivation { + std::string pub; + std::string prv; + unsigned int nChild; +}; + +struct TestVector { + std::string strHexMaster; + std::vector vDerive; + + TestVector(std::string strHexMasterIn) : strHexMaster(strHexMasterIn) {} + + TestVector& operator()(std::string pub, std::string prv, unsigned int nChild) { + vDerive.push_back(TestDerivation()); + TestDerivation &der = vDerive.back(); + der.pub = pub; + der.prv = prv; + der.nChild = nChild; + return *this; + } +}; + +TestVector test1 = + TestVector("000102030405060708090a0b0c0d0e0f") + ("xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8", + "xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi", + 0x80000000) + ("xpub68Gmy5EdvgibQVfPdqkBBCHxA5htiqg55crXYuXoQRKfDBFA1WEjWgP6LHhwBZeNK1VTsfTFUHCdrfp1bgwQ9xv5ski8PX9rL2dZXvgGDnw", + "xprv9uHRZZhk6KAJC1avXpDAp4MDc3sQKNxDiPvvkX8Br5ngLNv1TxvUxt4cV1rGL5hj6KCesnDYUhd7oWgT11eZG7XnxHrnYeSvkzY7d2bhkJ7", + 1) + ("xpub6ASuArnXKPbfEwhqN6e3mwBcDTgzisQN1wXN9BJcM47sSikHjJf3UFHKkNAWbWMiGj7Wf5uMash7SyYq527Hqck2AxYysAA7xmALppuCkwQ", + "xprv9wTYmMFdV23N2TdNG573QoEsfRrWKQgWeibmLntzniatZvR9BmLnvSxqu53Kw1UmYPxLgboyZQaXwTCg8MSY3H2EU4pWcQDnRnrVA1xe8fs", + 0x80000002) + ("xpub6D4BDPcP2GT577Vvch3R8wDkScZWzQzMMUm3PWbmWvVJrZwQY4VUNgqFJPMM3No2dFDFGTsxxpG5uJh7n7epu4trkrX7x7DogT5Uv6fcLW5", + "xprv9z4pot5VBttmtdRTWfWQmoH1taj2axGVzFqSb8C9xaxKymcFzXBDptWmT7FwuEzG3ryjH4ktypQSAewRiNMjANTtpgP4mLTj34bhnZX7UiM", + 2) + ("xpub6FHa3pjLCk84BayeJxFW2SP4XRrFd1JYnxeLeU8EqN3vDfZmbqBqaGJAyiLjTAwm6ZLRQUMv1ZACTj37sR62cfN7fe5JnJ7dh8zL4fiyLHV", + "xprvA2JDeKCSNNZky6uBCviVfJSKyQ1mDYahRjijr5idH2WwLsEd4Hsb2Tyh8RfQMuPh7f7RtyzTtdrbdqqsunu5Mm3wDvUAKRHSC34sJ7in334", + 1000000000) + ("xpub6H1LXWLaKsWFhvm6RVpEL9P4KfRZSW7abD2ttkWP3SSQvnyA8FSVqNTEcYFgJS2UaFcxupHiYkro49S8yGasTvXEYBVPamhGW6cFJodrTHy", + "xprvA41z7zogVVwxVSgdKUHDy1SKmdb533PjDz7J6N6mV6uS3ze1ai8FHa8kmHScGpWmj4WggLyQjgPie1rFSruoUihUZREPSL39UNdE3BBDu76", + 0); + +TestVector test2 = + TestVector("fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542") + ("xpub661MyMwAqRbcFW31YEwpkMuc5THy2PSt5bDMsktWQcFF8syAmRUapSCGu8ED9W6oDMSgv6Zz8idoc4a6mr8BDzTJY47LJhkJ8UB7WEGuduB", + "xprv9s21ZrQH143K31xYSDQpPDxsXRTUcvj2iNHm5NUtrGiGG5e2DtALGdso3pGz6ssrdK4PFmM8NSpSBHNqPqm55Qn3LqFtT2emdEXVYsCzC2U", + 0) + ("xpub69H7F5d8KSRgmmdJg2KhpAK8SR3DjMwAdkxj3ZuxV27CprR9LgpeyGmXUbC6wb7ERfvrnKZjXoUmmDznezpbZb7ap6r1D3tgFxHmwMkQTPH", + "xprv9vHkqa6EV4sPZHYqZznhT2NPtPCjKuDKGY38FBWLvgaDx45zo9WQRUT3dKYnjwih2yJD9mkrocEZXo1ex8G81dwSM1fwqWpWkeS3v86pgKt", + 0xFFFFFFFF) + ("xpub6ASAVgeehLbnwdqV6UKMHVzgqAG8Gr6riv3Fxxpj8ksbH9ebxaEyBLZ85ySDhKiLDBrQSARLq1uNRts8RuJiHjaDMBU4Zn9h8LZNnBC5y4a", + "xprv9wSp6B7kry3Vj9m1zSnLvN3xH8RdsPP1Mh7fAaR7aRLcQMKTR2vidYEeEg2mUCTAwCd6vnxVrcjfy2kRgVsFawNzmjuHc2YmYRmagcEPdU9", + 1) + ("xpub6DF8uhdarytz3FWdA8TvFSvvAh8dP3283MY7p2V4SeE2wyWmG5mg5EwVvmdMVCQcoNJxGoWaU9DCWh89LojfZ537wTfunKau47EL2dhHKon", + "xprv9zFnWC6h2cLgpmSA46vutJzBcfJ8yaJGg8cX1e5StJh45BBciYTRXSd25UEPVuesF9yog62tGAQtHjXajPPdbRCHuWS6T8XA2ECKADdw4Ef", + 0xFFFFFFFE) + ("xpub6ERApfZwUNrhLCkDtcHTcxd75RbzS1ed54G1LkBUHQVHQKqhMkhgbmJbZRkrgZw4koxb5JaHWkY4ALHY2grBGRjaDMzQLcgJvLJuZZvRcEL", + "xprvA1RpRA33e1JQ7ifknakTFpgNXPmW2YvmhqLQYMmrj4xJXXWYpDPS3xz7iAxn8L39njGVyuoseXzU6rcxFLJ8HFsTjSyQbLYnMpCqE2VbFWc", + 2) + ("xpub6FnCn6nSzZAw5Tw7cgR9bi15UV96gLZhjDstkXXxvCLsUXBGXPdSnLFbdpq8p9HmGsApME5hQTZ3emM2rnY5agb9rXpVGyy3bdW6EEgAtqt", + "xprvA2nrNbFZABcdryreWet9Ea4LvTJcGsqrMzxHx98MMrotbir7yrKCEXw7nadnHM8Dq38EGfSh6dqA9QWTyefMLEcBYJUuekgW4BYPJcr9E7j", + 0); + +void RunTest(const TestVector &test) { + std::vector seed = ParseHex(test.strHexMaster); + CExtKey key; + CExtPubKey pubkey; + key.SetMaster(&seed[0], seed.size()); + pubkey = key.Neuter(); + BOOST_FOREACH(const TestDerivation &derive, test.vDerive) { + unsigned char data[74]; + key.Encode(data); + pubkey.Encode(data); + // Test private key + CBitcoinExtKey b58key; b58key.SetKey(key); + BOOST_CHECK(b58key.ToString() == derive.prv); + // Test public key + CBitcoinExtPubKey b58pubkey; b58pubkey.SetKey(pubkey); + BOOST_CHECK(b58pubkey.ToString() == derive.pub); + // Derive new keys + CExtKey keyNew; + BOOST_CHECK(key.Derive(keyNew, derive.nChild)); + CExtPubKey pubkeyNew = keyNew.Neuter(); + if (!(derive.nChild & 0x80000000)) { + // Compare with public derivation + CExtPubKey pubkeyNew2; + BOOST_CHECK(pubkey.Derive(pubkeyNew2, derive.nChild)); + BOOST_CHECK(pubkeyNew == pubkeyNew2); + } + key = keyNew; + pubkey = pubkeyNew; + } +} + +BOOST_AUTO_TEST_SUITE(bip32_tests) + +BOOST_AUTO_TEST_CASE(bip32_test1) { + RunTest(test1); +} + +BOOST_AUTO_TEST_CASE(bip32_test2) { + RunTest(test2); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/bloom_tests.cpp b/src/test/bloom_tests.cpp index 0d349a99..abedd309 100644 --- a/src/test/bloom_tests.cpp +++ b/src/test/bloom_tests.cpp @@ -1,11 +1,19 @@ -#include -#include +// Copyright (c) 2012-2013 The Bitcoin Core developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "bloom.h" -#include "util.h" -#include "key.h" + #include "base58.h" +#include "key.h" #include "main.h" +#include "serialize.h" +#include "uint256.h" +#include "util.h" + +#include + +#include using namespace std; using namespace boost::tuples; diff --git a/src/test/canonical_tests.cpp b/src/test/canonical_tests.cpp index 42d21f8a..a26ad335 100644 --- a/src/test/canonical_tests.cpp +++ b/src/test/canonical_tests.cpp @@ -1,20 +1,29 @@ +// Copyright (c) 2012-2013 The Bitcoin Core developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + // // Unit tests for canonical signatures +// + -#include "json/json_spirit_writer_template.h" -#include -#include -#include "key.h" #include "script.h" #include "util.h" +#include "data/sig_noncanonical.json.h" +#include "data/sig_canonical.json.h" + +#include +#include +#include "json/json_spirit_writer_template.h" +#include using namespace std; using namespace json_spirit; // In script_tests.cpp -extern Array read_json(const std::string& filename); +extern Array read_json(const std::string& jsondata); BOOST_AUTO_TEST_SUITE(canonical_tests) @@ -58,13 +67,13 @@ bool static IsCanonicalSignature_OpenSSL(const std::vector &vchSi BOOST_AUTO_TEST_CASE(script_canon) { - Array tests = read_json("sig_canonical.json"); + Array tests = read_json(std::string(json_tests::sig_canonical, json_tests::sig_canonical + sizeof(json_tests::sig_canonical))); BOOST_FOREACH(Value &tv, tests) { string test = tv.get_str(); if (IsHex(test)) { std::vector sig = ParseHex(test); - BOOST_CHECK_MESSAGE(IsCanonicalSignature(sig), test); + BOOST_CHECK_MESSAGE(IsCanonicalSignature(sig, SCRIPT_VERIFY_STRICTENC), test); BOOST_CHECK_MESSAGE(IsCanonicalSignature_OpenSSL(sig), test); } } @@ -72,13 +81,13 @@ BOOST_AUTO_TEST_CASE(script_canon) BOOST_AUTO_TEST_CASE(script_noncanon) { - Array tests = read_json("sig_noncanonical.json"); + Array tests = read_json(std::string(json_tests::sig_noncanonical, json_tests::sig_noncanonical + sizeof(json_tests::sig_noncanonical))); BOOST_FOREACH(Value &tv, tests) { string test = tv.get_str(); if (IsHex(test)) { std::vector sig = ParseHex(test); - BOOST_CHECK_MESSAGE(!IsCanonicalSignature(sig), test); + BOOST_CHECK_MESSAGE(!IsCanonicalSignature(sig, SCRIPT_VERIFY_STRICTENC), test); BOOST_CHECK_MESSAGE(!IsCanonicalSignature_OpenSSL(sig), test); } } diff --git a/src/test/checkblock_tests.cpp b/src/test/checkblock_tests.cpp index 5675c40e..10352240 100644 --- a/src/test/checkblock_tests.cpp +++ b/src/test/checkblock_tests.cpp @@ -1,25 +1,28 @@ +// Copyright (c) 2013-2014 The Bitcoin Core developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + // // Unit tests for block.CheckBlock() // -#include -#include // for 'map_list_of()' -#include -#include -#include + #include "main.h" -#include "wallet.h" -#include "net.h" -#include "util.h" + +#include + +#include +#include +#include + BOOST_AUTO_TEST_SUITE(CheckBlock_tests) -bool -read_block(const std::string& filename, CBlock& block) +bool read_block(const std::string& filename, CBlock& block) { namespace fs = boost::filesystem; - fs::path testFile = fs::current_path() / "test" / "data" / filename; + fs::path testFile = fs::current_path() / "data" / filename; #ifdef TEST_DATA_DIR if (!fs::exists(testFile)) { diff --git a/src/test/compress_tests.cpp b/src/test/compress_tests.cpp index 71b86bcb..719955ba 100644 --- a/src/test/compress_tests.cpp +++ b/src/test/compress_tests.cpp @@ -1,9 +1,13 @@ -#include - -#include -#include +// Copyright (c) 2012-2013 The Bitcoin Core developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "main.h" +#include "util.h" + +#include + +#include // amounts 0.00000001 .. 0.00100000 #define NUM_MULTIPLES_UNIT 100000 @@ -17,19 +21,17 @@ // amounts 50 .. 21000000 #define NUM_MULTIPLES_50BTC 420000 -using namespace std; - BOOST_AUTO_TEST_SUITE(compress_tests) -bool static TestEncode(uint64 in) { +bool static TestEncode(uint64_t in) { return in == CTxOutCompressor::DecompressAmount(CTxOutCompressor::CompressAmount(in)); } -bool static TestDecode(uint64 in) { +bool static TestDecode(uint64_t in) { return in == CTxOutCompressor::CompressAmount(CTxOutCompressor::DecompressAmount(in)); } -bool static TestPair(uint64 dec, uint64 enc) { +bool static TestPair(uint64_t dec, uint64_t enc) { return CTxOutCompressor::CompressAmount(dec) == enc && CTxOutCompressor::DecompressAmount(enc) == dec; } @@ -43,19 +45,19 @@ BOOST_AUTO_TEST_CASE(compress_amounts) BOOST_CHECK(TestPair( 50*COIN, 0x32)); BOOST_CHECK(TestPair(21000000*COIN, 0x1406f40)); - for (uint64 i = 1; i <= NUM_MULTIPLES_UNIT; i++) + for (uint64_t i = 1; i <= NUM_MULTIPLES_UNIT; i++) BOOST_CHECK(TestEncode(i)); - for (uint64 i = 1; i <= NUM_MULTIPLES_CENT; i++) + for (uint64_t i = 1; i <= NUM_MULTIPLES_CENT; i++) BOOST_CHECK(TestEncode(i * CENT)); - for (uint64 i = 1; i <= NUM_MULTIPLES_1BTC; i++) + for (uint64_t i = 1; i <= NUM_MULTIPLES_1BTC; i++) BOOST_CHECK(TestEncode(i * COIN)); - for (uint64 i = 1; i <= NUM_MULTIPLES_50BTC; i++) + for (uint64_t i = 1; i <= NUM_MULTIPLES_50BTC; i++) BOOST_CHECK(TestEncode(i * 50 * COIN)); - for (uint64 i = 0; i < 100000; i++) + for (uint64_t i = 0; i < 100000; i++) BOOST_CHECK(TestDecode(i)); } diff --git a/src/test/data/README.md b/src/test/data/README.md new file mode 100644 index 00000000..f69a021c --- /dev/null +++ b/src/test/data/README.md @@ -0,0 +1,14 @@ +Description +------------ + +This directory contains data-driven tests for various aspects of Bitcoin. + +License +-------- + +The data files in this directory are + + Copyright (c) 2012-2014 The Bitcoin Core developers + Distributed under the MIT/X11 software license, see the accompanying + file COPYING or http://www.opensource.org/licenses/mit-license.php. + diff --git a/src/test/data/alertTests b/src/test/data/alertTests deleted file mode 100644 index 7fc45289..00000000 Binary files a/src/test/data/alertTests and /dev/null differ diff --git a/src/test/data/alertTests.raw b/src/test/data/alertTests.raw new file mode 100644 index 00000000..01f50680 Binary files /dev/null and b/src/test/data/alertTests.raw differ diff --git a/src/test/data/script_invalid.json b/src/test/data/script_invalid.json index 95664226..8cb365a4 100644 --- a/src/test/data/script_invalid.json +++ b/src/test/data/script_invalid.json @@ -13,7 +13,9 @@ ["0","NOP"], ["1", "IF VER ELSE 1 ENDIF", "VER non-functional"], ["0", "IF VERIF ELSE 1 ENDIF", "VERIF illegal everywhere"], -["0", "IF VERNOTIF ELSE 1 ENDIF", "VERNOT illegal everywhere"], +["0", "IF ELSE 1 ELSE VERIF ENDIF", "VERIF illegal everywhere"], +["0", "IF VERNOTIF ELSE 1 ENDIF", "VERNOTIF illegal everywhere"], +["0", "IF ELSE 1 ELSE VERNOTIF ENDIF", "VERNOTIF illegal everywhere"], ["1 IF", "1 ENDIF", "IF/ENDIF can't span scriptSig/scriptPubKey"], ["1 IF 0 ENDIF", "1 ENDIF"], @@ -36,6 +38,18 @@ ["1 1", "NOTIF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF"], ["0 0", "NOTIF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF"], +["1", "IF RETURN ELSE ELSE 1 ENDIF", "Multiple ELSEs"], +["1", "IF 1 ELSE ELSE RETURN ENDIF"], + +["1", "ENDIF", "Malformed IF/ELSE/ENDIF sequence"], +["1", "ELSE ENDIF"], +["1", "ENDIF ELSE"], +["1", "ENDIF ELSE IF"], +["1", "IF ELSE ENDIF ELSE"], +["1", "IF ELSE ENDIF ELSE ENDIF"], +["1", "IF ENDIF ENDIF"], +["1", "IF ELSE ELSE ENDIF ENDIF"], + ["1", "RETURN"], ["1", "DUP IF RETURN ENDIF"], @@ -237,6 +251,7 @@ ["1","VER", "OP_VER is reserved"], ["1","VERIF", "OP_VERIF is reserved"], ["1","VERNOTIF", "OP_VERNOTIF is reserved"], +["1","RESERVED", "OP_RESERVED is reserved"], ["1","RESERVED1", "OP_RESERVED1 is reserved"], ["1","RESERVED2", "OP_RESERVED2 is reserved"], ["1","0xba", "0xba == OP_NOP10 + 1"], @@ -310,5 +325,7 @@ ["NOP1 0x01 1", "HASH160 0x14 0xda1745e9b549bd0bfa1a569971c77eba30cd5a4b EQUAL"], ["0 0x01 0x50", "HASH160 0x14 0xece424a6bb6ddf4db592c0faed60685047a361b1 EQUAL", "OP_RESERVED in P2SH should fail"], -["0 0x01 VER", "HASH160 0x14 0x0f4d7845db968f2a81b530b6f3c1d6246d4c7e01 EQUAL", "OP_VER in P2SH should fail"] +["0 0x01 VER", "HASH160 0x14 0x0f4d7845db968f2a81b530b6f3c1d6246d4c7e01 EQUAL", "OP_VER in P2SH should fail"], + +["0x00", "'00' EQUAL", "Basic OP_0 execution"] ] diff --git a/src/test/data/script_valid.json b/src/test/data/script_valid.json index 58682d38..3b4c1918 100644 --- a/src/test/data/script_valid.json +++ b/src/test/data/script_valid.json @@ -16,7 +16,7 @@ ["0x51", "0x5f ADD 0x60 EQUAL", "0x51 through 0x60 push 1 through 16 onto stack"], ["1","NOP"], ["0", "IF VER ELSE 1 ENDIF", "VER non-functional (ok if not executed)"], -["0", "IF RESERVED1 RESERVED2 ELSE 1 ENDIF", "RESERVED ok in un-executed IF"], +["0", "IF RESERVED RESERVED1 RESERVED2 ELSE 1 ENDIF", "RESERVED ok in un-executed IF"], ["1", "DUP IF ENDIF"], ["1", "IF 1 ENDIF"], @@ -34,6 +34,21 @@ ["1 0", "NOTIF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF"], ["0 1", "NOTIF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF"], +["0", "IF 0 ELSE 1 ELSE 0 ENDIF", "Multiple ELSE's are valid and executed inverts on each ELSE encountered"], +["1", "IF 1 ELSE 0 ELSE ENDIF"], +["1", "IF ELSE 0 ELSE 1 ENDIF"], +["1", "IF 1 ELSE 0 ELSE 1 ENDIF ADD 2 EQUAL"], +["'' 1", "IF SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ENDIF 0x14 0x68ca4fec736264c13b859bac43d5173df6871682 EQUAL"], + +["1", "NOTIF 0 ELSE 1 ELSE 0 ENDIF", "Multiple ELSE's are valid and execution inverts on each ELSE encountered"], +["0", "NOTIF 1 ELSE 0 ELSE ENDIF"], +["0", "NOTIF ELSE 0 ELSE 1 ENDIF"], +["0", "NOTIF 1 ELSE 0 ELSE 1 ENDIF ADD 2 EQUAL"], +["'' 0", "NOTIF SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ENDIF 0x14 0x68ca4fec736264c13b859bac43d5173df6871682 EQUAL"], + +["0", "IF 1 IF RETURN ELSE RETURN ELSE RETURN ENDIF ELSE 1 IF 1 ELSE RETURN ELSE 1 ENDIF ELSE RETURN ENDIF ADD 2 EQUAL", "Nested ELSE ELSE"], +["1", "NOTIF 0 NOTIF RETURN ELSE RETURN ELSE RETURN ENDIF ELSE 0 NOTIF 1 ELSE RETURN ELSE 1 ENDIF ELSE RETURN ENDIF ADD 2 EQUAL"], + ["0", "IF RETURN ENDIF 1", "RETURN only works if executed"], ["1 1", "VERIFY"], @@ -276,6 +291,10 @@ "'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 0x6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f 2DUP 0x616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "Max-size (10,000-byte), max-push(520 bytes), max-opcodes(201), max stack size(1,000 items). 0x6f is 3DUP, 0x61 is NOP"], +["0", +"IF 0x5050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050 ENDIF 1", +">201 opcodes, but RESERVED (0x50) doesn't count towards opcode limit."], + ["NOP","1"], ["1", "0x01 0x01 EQUAL", "The following is useful for checking implementations of BN_bn2mpi"], @@ -301,6 +320,15 @@ ["2147483647", "1ADD 1"], ["-2147483647", "1ADD 1"], +["1", "0x02 0x0100 EQUAL NOT", "Not the same byte array..."], +["1", "0x02 0x0100 NUMEQUAL", "... but they are numerically equal"], +["11", "0x4c 0x03 0x0b0000 NUMEQUAL"], +["0", "0x01 0x80 EQUAL NOT"], +["0", "0x01 0x80 NUMEQUAL", "Zero numerically equals negative zero"], +["0", "0x02 0x0080 NUMEQUAL"], +["0x03 0x000080", "0x04 0x00000080 NUMEQUAL"], +["0x03 0x100080", "0x04 0x10000080 NUMEQUAL"], +["0x03 0x100000", "0x04 0x10000000 NUMEQUAL"], ["NOP", "NOP 1", "The following tests check the if(stack.size() < N) tests in each opcode"], ["1", "IF 1 ENDIF", "They are here to catch copy-and-paste errors"], @@ -375,5 +403,15 @@ ["NOP", "NOP10 1"], ["0 0x01 1", "HASH160 0x14 0xda1745e9b549bd0bfa1a569971c77eba30cd5a4b EQUAL", "Very basic P2SH"], -["0x4c 0 0x01 1", "HASH160 0x14 0xda1745e9b549bd0bfa1a569971c77eba30cd5a4b EQUAL"] +["0x4c 0 0x01 1", "HASH160 0x14 0xda1745e9b549bd0bfa1a569971c77eba30cd5a4b EQUAL"], + +["0x40 0x42424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242", +"0x4d 0x4000 0x42424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242 EQUAL", +"Basic PUSH signedness check"], + +["0x4c 0x40 0x42424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242", +"0x4d 0x4000 0x42424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242 EQUAL", +"Basic PUSHDATA1 signedness check"], + +["0x00", "SIZE 0 EQUAL", "Basic OP_0 execution"] ] diff --git a/src/test/data/sighash.json b/src/test/data/sighash.json new file mode 100644 index 00000000..d66a56ac --- /dev/null +++ b/src/test/data/sighash.json @@ -0,0 +1,503 @@ +[ + ["raw_transaction, script, input_index, hashType, signature_hash (result)"], + ["907c2bc503ade11cc3b04eb2918b6f547b0630ab569273824748c87ea14b0696526c66ba740200000004ab65ababfd1f9bdd4ef073c7afc4ae00da8a66f429c917a0081ad1e1dabce28d373eab81d8628de802000000096aab5253ab52000052ad042b5f25efb33beec9f3364e8a9139e8439d9d7e26529c3c30b6c3fd89f8684cfd68ea0200000009ab53526500636a52ab599ac2fe02a526ed040000000008535300516352515164370e010000000003006300ab2ec229", "", 2, 1864164639, "31af167a6cf3f9d5f6875caa4d31704ceb0eba078d132b78dab52c3b8997317e"], + ["a0aa3126041621a6dea5b800141aa696daf28408959dfb2df96095db9fa425ad3f427f2f6103000000015360290e9c6063fa26912c2e7fb6a0ad80f1c5fea1771d42f12976092e7a85a4229fdb6e890000000001abc109f6e47688ac0e4682988785744602b8c87228fcef0695085edf19088af1a9db126e93000000000665516aac536affffffff8fe53e0806e12dfd05d67ac68f4768fdbe23fc48ace22a5aa8ba04c96d58e2750300000009ac51abac63ab5153650524aa680455ce7b000000000000499e50030000000008636a00ac526563ac5051ee030000000003abacabd2b6fe000000000003516563910fb6b5", "65", 0, -1391424484, "48d6a1bd2cd9eec54eb866fc71209418a950402b5d7e52363bfb75c98e141175"], + ["6e7e9d4b04ce17afa1e8546b627bb8d89a6a7fefd9d892ec8a192d79c2ceafc01694a6a7e7030000000953ac6a51006353636a33bced1544f797f08ceed02f108da22cd24c9e7809a446c61eb3895914508ac91f07053a01000000055163ab516affffffff11dc54eee8f9e4ff0bcf6b1a1a35b1cd10d63389571375501af7444073bcec3c02000000046aab53514a821f0ce3956e235f71e4c69d91abe1e93fb703bd33039ac567249ed339bf0ba0883ef300000000090063ab65000065ac654bec3cc504bcf499020000000005ab6a52abac64eb060100000000076a6a5351650053bbbc130100000000056a6aab53abd6e1380100000000026a51c4e509b8", "acab655151", 0, 479279909, "2a3d95b09237b72034b23f2d2bb29fa32a58ab5c6aa72f6aafdfa178ab1dd01c"], + ["73107cbd025c22ebc8c3e0a47b2a760739216a528de8d4dab5d45cbeb3051cebae73b01ca10200000007ab6353656a636affffffffe26816dffc670841e6a6c8c61c586da401df1261a330a6c6b3dd9f9a0789bc9e000000000800ac6552ac6aac51ffffffff0174a8f0010000000004ac52515100000000", "5163ac63635151ac", 1, 1190874345, "06e328de263a87b09beabe222a21627a6ea5c7f560030da31610c4611f4a46bc"], + ["e93bbf6902be872933cb987fc26ba0f914fcfc2f6ce555258554dd9939d12032a8536c8802030000000453ac5353eabb6451e074e6fef9de211347d6a45900ea5aaf2636ef7967f565dce66fa451805c5cd10000000003525253ffffffff047dc3e6020000000007516565ac656aabec9eea010000000001633e46e600000000000015080a030000000001ab00000000", "5300ac6a53ab6a", 1, -886562767, "f03aa4fc5f97e826323d0daa03343ebf8a34ed67a1ce18631f8b88e5c992e798"], + ["50818f4c01b464538b1e7e7f5ae4ed96ad23c68c830e78da9a845bc19b5c3b0b20bb82e5e9030000000763526a63655352ffffffff023b3f9c040000000008630051516a6a5163a83caf01000000000553ab65510000000000", "6aac", 0, 946795545, "746306f322de2b4b58ffe7faae83f6a72433c22f88062cdde881d4dd8a5a4e2d"], + ["a93e93440250f97012d466a6cc24839f572def241c814fe6ae94442cf58ea33eb0fdd9bcc1030000000600636a0065acffffffff5dee3a6e7e5ad6310dea3e5b3ddda1a56bf8de7d3b75889fc024b5e233ec10f80300000007ac53635253ab53ffffffff0160468b04000000000800526a5300ac526a00000000", "ac00636a53", 1, 1773442520, "5c9d3a2ce9365bb72cfabbaa4579c843bb8abf200944612cf8ae4b56a908bcbd"], + ["ce7d371f0476dda8b811d4bf3b64d5f86204725deeaa3937861869d5b2766ea7d17c57e40b0100000003535265ffffffff7e7e9188f76c34a46d0bbe856bde5cb32f089a07a70ea96e15e92abb37e479a10100000006ab6552ab655225bcab06d1c2896709f364b1e372814d842c9c671356a1aa5ca4e060462c65ae55acc02d0000000006abac0063ac5281b33e332f96beebdbc6a379ebe6aea36af115c067461eb99d22ba1afbf59462b59ae0bd0200000004ab635365be15c23801724a1704000000000965006a65ac00000052ca555572", "53ab530051ab", 1, 2030598449, "c336b2f7d3702fbbdeffc014d106c69e3413c7c71e436ba7562d8a7a2871f181"], + ["d3b7421e011f4de0f1cea9ba7458bf3486bee722519efab711a963fa8c100970cf7488b7bb0200000003525352dcd61b300148be5d05000000000000000000", "535251536aac536a", 0, -1960128125, "29aa6d2d752d3310eba20442770ad345b7f6a35f96161ede5f07b33e92053e2a"], + ["04bac8c5033460235919a9c63c42b2db884c7c8f2ed8fcd69ff683a0a2cccd9796346a04050200000003655351fcad3a2c5a7cbadeb4ec7acc9836c3f5c3e776e5c566220f7f965cf194f8ef98efb5e3530200000007526a006552526526a2f55ba5f69699ece76692552b399ba908301907c5763d28a15b08581b23179cb01eac03000000075363ab6a516351073942c2025aa98a05000000000765006aabac65abd7ffa6030000000004516a655200000000", "53ac6365ac526a", 1, 764174870, "bf5fdc314ded2372a0ad078568d76c5064bf2affbde0764c335009e56634481b"], + ["c363a70c01ab174230bbe4afe0c3efa2d7f2feaf179431359adedccf30d1f69efe0c86ed390200000002ab51558648fe0231318b04000000000151662170000000000008ac5300006a63acac00000000", "", 0, 2146479410, "191ab180b0d753763671717d051f138d4866b7cb0d1d4811472e64de595d2c70"], + ["8d437a7304d8772210a923fd81187c425fc28c17a5052571501db05c7e89b11448b36618cd02000000026a6340fec14ad2c9298fde1477f1e8325e5747b61b7e2ff2a549f3d132689560ab6c45dd43c3010000000963ac00ac000051516a447ed907a7efffebeb103988bf5f947fc688aab2c6a7914f48238cf92c337fad4a79348102000000085352ac526a5152517436edf2d80e3ef06725227c970a816b25d0b58d2cd3c187a7af2cea66d6b27ba69bf33a0300000007000063ab526553f3f0d6140386815d030000000003ab6300de138f00000000000900525153515265abac1f87040300000000036aac6500000000", "51", 3, -315779667, "b6632ac53578a741ae8c36d8b69e79f39b89913a2c781cdf1bf47a8c29d997a5"], + ["fd878840031e82fdbe1ad1d745d1185622b0060ac56638290ec4f66b1beef4450817114a2c0000000009516a63ab53650051abffffffff37b7a10322b5418bfd64fb09cd8a27ddf57731aeb1f1f920ffde7cb2dfb6cdb70300000008536a5365ac53515369ecc034f1594690dbe189094dc816d6d57ea75917de764cbf8eccce4632cbabe7e116cd0100000003515352ffffffff035777fc000000000003515200abe9140300000000050063005165bed6d10200000000076300536363ab65195e9110", "635265", 0, 1729787658, "6e3735d37a4b28c45919543aabcb732e7a3e1874db5315abb7cc6b143d62ff10"], + ["f40a750702af06efff3ea68e5d56e42bc41cdb8b6065c98f1221fe04a325a898cb61f3d7ee030000000363acacffffffffb5788174aef79788716f96af779d7959147a0c2e0e5bfb6c2dba2df5b4b97894030000000965510065535163ac6affffffff0445e6fd0200000000096aac536365526a526aa6546b000000000008acab656a6552535141a0fd010000000000c897ea030000000008526500ab526a6a631b39dba3", "00abab5163ac", 1, -1778064747, "d76d0fc0abfa72d646df888bce08db957e627f72962647016eeae5a8412354cf"], + ["a63bc673049c75211aa2c09ecc38e360eaa571435fedd2af1116b5c1fa3d0629c269ecccbf0000000008ac65ab516352ac52ffffffffbf1a76fdda7f451a5f0baff0f9ccd0fe9136444c094bb8c544b1af0fa2774b06010000000463535253ffffffff13d6b7c3ddceef255d680d87181e100864eeb11a5bb6a3528cb0d70d7ee2bbbc02000000056a0052abab951241809623313b198bb520645c15ec96bfcc74a2b0f3db7ad61d455cc32db04afc5cc702000000016309c9ae25014d9473020000000004abab6aac3bb1e803", "", 3, -232881718, "6e48f3da3a4ac07eb4043a232df9f84e110485d7c7669dd114f679c27d15b97e"], + ["4c565efe04e7d32bac03ae358d63140c1cfe95de15e30c5b84f31bb0b65bb542d637f49e0f010000000551abab536348ae32b31c7d3132030a510a1b1aacf7b7c3f19ce8dc49944ef93e5fa5fe2d356b4a73a00100000009abac635163ac00ab514c8bc57b6b844e04555c0a4f4fb426df139475cd2396ae418bc7015820e852f711519bc202000000086a00510000abac52488ff4aec72cbcfcc98759c58e20a8d2d9725aa4a80f83964e69bc4e793a4ff25cd75dc701000000086a52ac6aac5351532ec6b10802463e0200000000000553005265523e08680100000000002f39a6b0", "", 3, 70712784, "c6076b6a45e6fcfba14d3df47a34f6aadbacfba107e95621d8d7c9c0e40518ed"], + ["1233d5e703403b3b8b4dae84510ddfc126b4838dcb47d3b23df815c0b3a07b55bf3098110e010000000163c5c55528041f480f40cf68a8762d6ed3efe2bd402795d5233e5d94bf5ddee71665144898030000000965525165655151656affffffff6381667e78bb74d0880625993bec0ea3bd41396f2bcccc3cc097b240e5e92d6a01000000096363acac6a63536365ffffffff04610ad60200000000065251ab65ab52e90d680200000000046351516ae30e98010000000008abab52520063656a671856010000000004ac6aac514c84e383", "6aabab636300", 1, -114996813, "aeb8c5a62e8a0b572c28f2029db32854c0b614dbecef0eaa726abebb42eebb8d"], + ["0c69702103b25ceaed43122cc2672de84a3b9aa49872f2a5bb458e19a52f8cc75973abb9f102000000055365656aacffffffff3ffb1cf0f76d9e3397de0942038c856b0ebbea355dc9d8f2b06036e19044b0450100000000ffffffff4b7793f4169617c54b734f2cd905ed65f1ce3d396ecd15b6c426a677186ca0620200000008655263526551006a181a25b703240cce0100000000046352ab53dee22903000000000865526a6a516a51005e121602000000000852ab52ababac655200000000", "6a516aab63", 1, -2040012771, "a6e6cb69f409ec14e10dd476f39167c29e586e99bfac93a37ed2c230fcc1dbbe"], + ["fd22692802db8ae6ab095aeae3867305a954278f7c076c542f0344b2591789e7e33e4d29f4020000000151ffffffffb9409129cfed9d3226f3b6bab7a2c83f99f48d039100eeb5796f00903b0e5e5e0100000006656552ac63abd226abac0403e649000000000007abab51ac5100ac8035f10000000000095165006a63526a52510d42db030000000007635365ac6a63ab24ef5901000000000453ab6a0000000000", "536a52516aac6a", 1, 309309168, "7ca0f75e6530ec9f80d031fc3513ca4ecd67f20cb38b4dacc6a1d825c3cdbfdb"], + ["a43f85f701ffa54a3cc57177510f3ea28ecb6db0d4431fc79171cad708a6054f6e5b4f89170000000008ac6a006a536551652bebeaa2013e779c05000000000665ac5363635100000000", "ac", 0, 2028978692, "58294f0d7f2e68fe1fd30c01764fe1619bcc7961d68968944a0e263af6550437"], + ["c2b0b99001acfecf7da736de0ffaef8134a9676811602a6299ba5a2563a23bb09e8cbedf9300000000026300ffffffff042997c50300000000045252536a272437030000000007655353ab6363ac663752030000000002ab6a6d5c900000000000066a6a5265abab00000000", "52ac525163515251", 0, -894181723, "8b300032a1915a4ac05cea2f7d44c26f2a08d109a71602636f15866563eaafdc"], + ["82f9f10304c17a9d954cf3380db817814a8c738d2c811f0412284b2c791ec75515f38c4f8c020000000265ab5729ca7db1b79abee66c8a757221f29280d0681355cb522149525f36da760548dbd7080a0100000001510b477bd9ce9ad5bb81c0306273a3a7d051e053f04ecf3a1dbeda543e20601a5755c0cfae030000000451ac656affffffff71141a04134f6c292c2e0d415e6705dfd8dcee892b0d0807828d5aeb7d11f5ef0300000001520b6c6dc802a6f3dd0000000000056aab515163bfb6800300000000015300000000", "", 3, -635779440, "d55ed1e6c53510f2608716c12132a11fb5e662ec67421a513c074537eeccc34b"], + ["8edcf5a1014b604e53f0d12fe143cf4284f86dc79a634a9f17d7e9f8725f7beb95e8ffcd2403000000046aabac52ffffffff01c402b5040000000005ab6a63525100000000", "6351525251acabab6a", 0, 1520147826, "2765bbdcd3ebb8b1a316c04656b28d637f80bffbe9b040661481d3dc83eea6d6"], + ["2074bad5011847f14df5ea7b4afd80cd56b02b99634893c6e3d5aaad41ca7c8ee8e5098df003000000026a6affffffff018ad59700000000000900ac656a526551635300000000", "65635265", 0, -1804671183, "663c999a52288c9999bff36c9da2f8b78d5c61b8347538f76c164ccba9868d0a"], + ["7100b11302e554d4ef249ee416e7510a485e43b2ba4b8812d8fe5529fe33ea75f36d392c4403000000020000ffffffff3d01a37e075e9a7715a657ae1bdf1e44b46e236ad16fd2f4c74eb9bf370368810000000007636553ac536365ffffffff01db696a0400000000065200ac656aac00000000", "63005151", 0, -1210499507, "b9c3aee8515a4a3b439de1ffc9c156824bda12cb75bfe5bc863164e8fd31bd7a"], + ["02c1017802091d1cb08fec512db7b012fe4220d57a5f15f9e7676358b012786e1209bcff950100000004acab6352ffffffff799bc282724a970a6fea1828984d0aeb0f16b67776fa213cbdc4838a2f1961a3010000000951516a536552ab6aabffffffff016c7b4b03000000000865abac5253ac5352b70195ad", "65655200516a", 0, -241626954, "be567cb47170b34ff81c66c1142cb9d27f9b6898a384d6dfc4fce16b75b6cb14"], + ["cb3178520136cd294568b83bb2520f78fecc507898f4a2db2674560d72fd69b9858f75b3b502000000066aac00515100ffffffff03ab005a01000000000563526363006e3836030000000001abfbda3200000000000665ab0065006500000000", "ab516a0063006a5300", 0, 1182109299, "2149e79c3f4513da4e4378608e497dcfdfc7f27c21a826868f728abd2b8a637a"], + ["18a4b0c004702cf0e39686ac98aab78ad788308f1d484b1ddfe70dc1997148ba0e28515c310300000000ffffffff05275a52a23c59da91129093364e275da5616c4070d8a05b96df5a2080ef259500000000096aac51656a6aac53ab66e64966b3b36a07dd2bb40242dd4a3743d3026e7e1e0d9e9e18f11d068464b989661321030000000265ac383339c4fae63379cafb63b0bab2eca70e1f5fc7d857eb5c88ccd6c0465093924bba8b2a000000000300636ab5e0545402bc2c4c010000000000cd41c002000000000000000000", "abac635253656a00", 3, 2052372230, "32db877b6b1ca556c9e859442329406f0f8246706522369839979a9f7a235a32"], + ["1d9c5df20139904c582285e1ea63dec934251c0f9cf5c47e86abfb2b394ebc57417a81f67c010000000353515222ba722504800d3402000000000353656a3c0b4a0200000000000fb8d20500000000076300ab005200516462f30400000000015200000000", "ab65", 0, -210854112, "edf73e2396694e58f6b619f68595b0c1cdcb56a9b3147845b6d6afdb5a80b736"], + ["4504cb1904c7a4acf375ddae431a74de72d5436efc73312cf8e9921f431267ea6852f9714a01000000066a656a656553a2fbd587c098b3a1c5bd1d6480f730a0d6d9b537966e20efc0e352d971576d0f87df0d6d01000000016321aeec3c4dcc819f1290edb463a737118f39ab5765800547522708c425306ebfca3f396603000000055300ac656a1d09281d05bfac57b5eb17eb3fa81ffcedfbcd3a917f1be0985c944d473d2c34d245eb350300000007656a51525152ac263078d9032f470f0500000000066aac00000052e12da60200000000003488410200000000076365006300ab539981e432", "52536a52526a", 1, -31909119, "f0a2deee7fd8a3a9fad6927e763ded11c940ee47e9e6d410f94fda5001f82e0c"], + ["14bc7c3e03322ec0f1311f4327e93059c996275302554473104f3f7b46ca179bfac9ef753503000000016affffffff9d405eaeffa1ca54d9a05441a296e5cc3a3e32bb8307afaf167f7b57190b07e00300000008abab51ab5263abab45533aa242c61bca90dd15d46079a0ab0841d85df67b29ba87f2393cd764a6997c372b55030000000452005263ffffffff0250f40e02000000000651516a0063630e95ab0000000000046a5151ac00000000", "6a65005151", 0, -1460947095, "aa418d096929394c9147be8818d8c9dafe6d105945ab9cd7ec682df537b5dd79"], + ["2b3bd0dd04a1832f893bf49a776cd567ec4b43945934f4786b615d6cb850dfc0349b33301a000000000565ac000051cf80c670f6ddafab63411adb4d91a69c11d9ac588898cbfb4cb16061821cc104325c895103000000025163ffffffffa9e2d7506d2d7d53b882bd377bbcc941f7a0f23fd15d2edbef3cd9df8a4c39d10200000009ac63006a52526a5265ffffffff44c099cdf10b10ce87d4b38658d002fd6ea17ae4a970053c05401d86d6e75f99000000000963ab53526a5252ab63ffffffff035af69c01000000000100ba9b8b0400000000004cead10500000000026a520b77d667", "ab52abac526553", 3, -1955078165, "eb9ceecc3b401224cb79a44d23aa8f428e29f1405daf69b4e01910b848ef1523"], + ["35df11f004a48ba439aba878fe9df20cc935b4a761c262b1b707e6f2b33e2bb7565cd68b130000000000ffffffffb2a2f99abf64163bb57ca900500b863f40c02632dfd9ea2590854c5fb4811da90200000006ac006363636affffffffaf9d89b2a8d2670ca37c8f7c140600b81259f2e037cb4590578ec6e37af8bf200000000005abac6a655270a4751eb551f058a93301ffeda2e252b6614a1fdd0e283e1d9fe53c96c5bbaafaac57b8030000000153ffffffff020d9f3b02000000000100ed7008030000000004abac000000000000", "abac", 3, 593793071, "88fdee1c2d4aeead71d62396e28dc4d00e5a23498eea66844b9f5d26d1f21042"], + ["a08ff466049fb7619e25502ec22fedfb229eaa1fe275aa0b5a23154b318441bf547989d0510000000005ab5363636affffffff2b0e335cb5383886751cdbd993dc0720817745a6b1c9b8ab3d15547fc9aafd03000000000965656a536a52656a532b53d10584c290d3ac1ab74ab0a19201a4a039cb59dc58719821c024f6bf2eb26322b33f010000000965ac6aac0053ab6353ffffffff048decba6ebbd2db81e416e39dde1f821ba69329725e702bcdea20c5cc0ecc6402000000086363ab5351ac6551466e377b0468c0fa00000000000651ab53ac6a513461c6010000000008636a636365535100eeb3dc010000000006526a52ac516a43f362010000000005000063536500000000", "0063516a", 1, -1158911348, "f6a1ecb50bd7c2594ebecea5a1aa23c905087553e40486dade793c2f127fdfae"], + ["5ac2f17d03bc902e2bac2469907ec7d01a62b5729340bc58c343b7145b66e6b97d434b30fa000000000163ffffffff44028aa674192caa0d0b4ebfeb969c284cb16b80c312d096efd80c6c6b094cca000000000763acabac516a52ffffffff10c809106e04b10f9b43085855521270fb48ab579266e7474657c6c625062d2d030000000351636595a0a97004a1b69603000000000465ab005352ad68010000000008636a5263acac5100da7105010000000002acab90325200000000000000000000", "6a6aab516a63526353", 2, 1518400956, "f7efb74b1dcc49d316b49c632301bc46f98d333c427e55338be60c7ef0d953be"], + ["aeb2e11902dc3770c218b97f0b1960d6ee70459ecb6a95eff3f05295dc1ef4a0884f10ba460300000005516352526393e9b1b3e6ae834102d699ddd3845a1e159aa7cf7635edb5c02003f7830fee3788b795f20100000009ab006a526553ac006ad8809c570469290e0400000000050000abab00b10fd5040000000008ab655263abac53ab630b180300000000009d9993040000000002516300000000", "5351ababac6a65", 0, 1084852870, "f2286001af0b0170cbdad92693d0a5ebaa8262a4a9d66e002f6d79a8c94026d1"], + ["9860ca9a0294ff4812534def8c3a3e3db35b817e1a2ddb7f0bf673f70eab71bb79e90a2f3100000000086a636551acac5165ffffffffed4d6d3cd9ff9b2d490e0c089739121161a1445844c3e204296816ab06e0a83702000000035100ac88d0db5201c3b59a050000000005ac6a0051ab00000000", "535263ab006a526aab", 1, -962088116, "30df2473e1403e2b8e637e576825f785528d998af127d501556e5f7f5ed89a2a"], + ["4ddaa680026ec4d8060640304b86823f1ac760c260cef81d85bd847952863d629a3002b54b0200000008526365636a656aab65457861fc6c24bdc760c8b2e906b6656edaf9ed22b5f50e1fb29ec076ceadd9e8ebcb6b000000000152ffffffff033ff04f00000000000551526a00657a1d900300000000002153af040000000003006a6300000000", "ab526a53acabab", 0, 1055317633, "7f21b62267ed52462e371a917eb3542569a4049b9dfca2de3c75872b39510b26"], + ["01e76dcd02ad54cbc8c71d68eaf3fa7c883b65d74217b30ba81f1f5144ef80b706c0dc82ca000000000352ab6a078ec18bcd0514825feced2e8b8ea1ccb34429fae41c70cc0b73a2799e85603613c6870002000000086363ab6365536a53ffffffff043acea90000000000016ad20e1803000000000100fa00830200000000056352515351e864ee00000000000865535253ab6a6551d0c46672", "6a6365abacab", 0, -1420559003, "8af0b4cbdbc011be848edf4dbd2cde96f0578d662cfebc42252495387114224a"], + ["fa00b26402670b97906203434aa967ce1559d9bd097d56dbe760469e6032e7ab61accb54160100000006635163630052fffffffffe0d3f4f0f808fd9cfb162e9f0c004601acf725cd7ea5683bbdc9a9a433ef15a0200000005ab52536563d09c7bef049040f305000000000153a7c7b9020000000004ac63ab52847a2503000000000553ab00655390ed80010000000005006553ab52860671d4", "536565ab52", 0, 799022412, "40ed8e7bbbd893e15f3cce210ae02c97669818de5946ca37eefc7541116e2c78"], + ["cb5c06dc01b022ee6105ba410f0eb12b9ce5b5aa185b28532492d839a10cef33d06134b91b010000000153ffffffff02cec0530400000000005e1e4504000000000865656551acacac6a00000000", "ab53", 0, -1514251329, "136beb95459fe6b126cd6cefd54eb5d971524b0e883e41a292a78f78015cb8d5"], + ["f10a0356031cd569d652dbca8e7a4d36c8da33cdff428d003338602b7764fe2c96c505175b010000000465ac516affffffffbb54563c71136fa944ee20452d78dc87073ac2365ba07e638dce29a5d179da600000000003635152ffffffff9a411d8e2d421b1e6085540ee2809901e590940bbb41532fa38bd7a16b68cc350100000007535251635365636195df1603b61c45010000000002ab65bf6a310400000000026352fcbba10200000000016aa30b7ff0", "5351", 0, 1552495929, "9eb8adf2caecb4bf9ac59d7f46bd20e83258472db2f569ee91aba4cf5ee78e29"], + ["c3325c9b012f659466626ca8f3c61dfd36f34670abc054476b7516a1839ec43cd0870aa0c0000000000753525265005351e7e3f04b0112650500000000000363ac6300000000", "acac", 0, -68961433, "5ca70e727d91b1a42b78488af2ed551642c32d3de4712a51679f60f1456a8647"], + ["2333e54c044370a8af16b9750ac949b151522ea6029bacc9a34261599549581c7b4e5ece470000000007510052006563abffffffff80630fc0155c750ce20d0ca4a3d0c8e8d83b014a5b40f0b0be0dd4c63ac28126020000000465000000ffffffff1b5f1433d38cdc494093bb1d62d84b10abbdae57e3d04e82e600857ab3b1dc990300000003515100b76564be13e4890a908ea7508afdad92ec1b200a9a67939fadce6eb7a29eb4550a0a28cb0300000001acffffffff02926c930300000000016373800201000000000153d27ee740", "ab6365ab516a53", 3, 598653797, "2be27a686eb7940dd32c44ff3a97c1b28feb7ab9c5c0b1593b2d762361cfc2db"], + ["b500ca48011ec57c2e5252e5da6432089130603245ffbafb0e4c5ffe6090feb629207eeb0e010000000652ab6a636aab8302c9d2042b44f40500000000015278c05a050000000004ac5251524be080020000000007636aac63ac5252c93a9a04000000000965ab6553636aab5352d91f9ddb", "52005100", 0, -2024394677, "49c8a6940a461cc7225637f1e512cdd174c99f96ec05935a59637ededc77124c"], + ["f52ff64b02ee91adb01f3936cc42e41e1672778962b68cf013293d649536b519bc3271dd2c00000000020065afee11313784849a7c15f44a61cd5fd51ccfcdae707e5896d131b082dc9322a19e12858501000000036aac654e8ca882022deb7c020000000006006a515352abd3defc0000000000016300000000", "63520063", 0, 1130989496, "7f208df9a5507e98c62cebc5c1e2445eb632e95527594929b9577b53363e96f6"], + ["ab7d6f36027a7adc36a5cf7528fe4fb5d94b2c96803a4b38a83a675d7806dda62b380df86a0000000003000000ffffffff5bc00131e29e22057c04be854794b4877dda42e416a7a24706b802ff9da521b20000000007ac6a0065ac52ac957cf45501b9f06501000000000500ac6363ab25f1110b", "00526500536a635253", 0, 911316637, "5fa09d43c8aef6f6fa01c383a69a5a61a609cd06e37dce35a39dc9eae3ddfe6c"], + ["f940888f023dce6360263c850372eb145b864228fdbbb4c1186174fa83aab890ff38f8c9a90300000000ffffffff01e80ccdb081e7bbae1c776531adcbfb77f2e5a7d0e5d0d0e2e6c8758470e85f00000000020053ffffffff03b49088050000000004656a52ab428bd604000000000951630065ab63ac636a0cbacf0400000000070063ac5265ac53d6e16604", "ac63", 0, 39900215, "713ddeeefcfe04929e7b6593c792a4efbae88d2b5280d1f0835d2214eddcbad6"], + ["530ecd0b01ec302d97ef6f1b5a6420b9a239714013e20d39aa3789d191ef623fc215aa8b940200000005ac5351ab6a3823ab8202572eaa04000000000752ab6a51526563fd8a270100000000036a006581a798f0", "525153656a0063", 0, 1784562684, "fe42f73a8742676e640698222b1bd6b9c338ff1ccd766d3d88d7d3c6c6ac987e"], + ["5d781d9303acfcce964f50865ddfddab527ea971aee91234c88e184979985c00b4de15204b0100000003ab6352a009c8ab01f93c8ef2447386c434b4498538f061845862c3f9d5751ad0fce52af442b3a902000000045165ababb909c66b5a3e7c81b3c45396b944be13b8aacfc0204f3f3c105a66fa8fa6402f1b5efddb01000000096a65ac636aacab656ac3c677c402b79fa4050000000004006aab5133e35802000000000751ab635163ab0078c2e025", "6aac51636a6a005265", 0, -882306874, "551ce975d58647f10adefb3e529d9bf9cda34751627ec45e690f135ef0034b95"], + ["25ee54ef0187387564bb86e0af96baec54289ca8d15e81a507a2ed6668dc92683111dfb7a50100000004005263634cecf17d0429aa4d000000000007636a6aabab5263daa75601000000000251ab4df70a01000000000151980a890400000000065253ac6a006377fd24e3", "65ab", 0, 797877378, "069f38fd5d47abff46f04ee3ae27db03275e9aa4737fa0d2f5394779f9654845"], + ["a9c57b1a018551bcbc781b256642532bbc09967f1cbe30a227d352a19365d219d3f11649a3030000000451655352b140942203182894030000000006ab00ac6aab654add350400000000003d379505000000000553abacac00e1739d36", "5363", 0, -1069721025, "6da32416deb45a0d720a1dbe6d357886eabc44029dd5db74d50feaffbe763245"], + ["05c4fb94040f5119dc0b10aa9df054871ed23c98c890f1e931a98ffb0683dac45e98619fdc0200000007acab6a525263513e7495651c9794c4d60da835d303eb4ee6e871f8292f6ad0b32e85ef08c9dc7aa4e03c9c010000000500ab52acacfffffffffee953259cf14ced323fe8d567e4c57ba331021a1ef5ac2fa90f7789340d7c550100000007ac6aacac6a6a53ffffffff08d9dc820d00f18998af247319f9de5c0bbd52a475ea587f16101af3afab7c210100000003535363569bca7c0468e34f00000000000863536353ac51ac6584e319010000000006650052ab6a533debea030000000003ac0053ee7070020000000006ac52005253ac00000000", "6351005253", 2, 1386916157, "76c4013c40bfa1481badd9d342b6d4b8118de5ab497995fafbf73144469e5ff0"], + ["c95ab19104b63986d7303f4363ca8f5d2fa87c21e3c5d462b99f1ebcb7c402fc012f5034780000000009006aac63ac65655265ffffffffbe91afa68af40a8700fd579c86d4b706c24e47f7379dad6133de389f815ef7f501000000046aac00abffffffff1520db0d81be4c631878494668d258369f30b8f2b7a71e257764e9a27f24b48701000000076a515100535300b0a989e1164db9499845bac01d07a3a7d6d2c2a76e4c04abe68f808b6e2ef5068ce6540e0100000009ac53636a63ab65656affffffff0309aac6050000000005ab6563656a6067e8020000000003ac536aec91c8030000000009655251ab65ac6a53acc7a45bc5", "63526a65abac", 1, 512079270, "fb7eca81d816354b6aedec8cafc721d5b107336657acafd0d246049556f9e04b"], + ["ca66ae10049533c2b39f1449791bd6d3f039efe0a121ab7339d39ef05d6dcb200ec3fb2b3b020000000465006a53ffffffff534b8f97f15cc7fb4f4cea9bf798472dc93135cd5b809e4ca7fe4617a61895980100000000ddd83c1dc96f640929dd5e6f1151dab1aa669128591f153310d3993e562cc7725b6ae3d903000000046a52536582f8ccddb8086d8550f09128029e1782c3f2624419abdeaf74ecb24889cc45ac1a64492a0100000002516a4867b41502ee6ccf03000000000752acacab52ab6a4b7ba80000000000075151ab0052536300000000", "6553", 2, -62969257, "8085e904164ab9a8c20f58f0d387f6adb3df85532e11662c03b53c3df8c943cb"], + ["ba646d0b0453999f0c70cb0430d4cab0e2120457bb9128ed002b6e9500e9c7f8d7baa20abe0200000001652a4e42935b21db02b56bf6f08ef4be5adb13c38bc6a0c3187ed7f6197607ba6a2c47bc8a03000000040052516affffffffa55c3cbfc19b1667594ac8681ba5d159514b623d08ed4697f56ce8fcd9ca5b0b00000000096a6a5263ac655263ab66728c2720fdeabdfdf8d9fb2bfe88b295d3b87590e26a1e456bad5991964165f888c03a0200000006630051ac00acffffffff0176fafe0100000000070063acac65515200000000", "63", 1, 2002322280, "9db4e320208185ee70edb4764ee195deca00ba46412d5527d9700c1cf1c3d057"], + ["2ddb8f84039f983b45f64a7a79b74ff939e3b598b38f436def7edd57282d0803c7ef34968d02000000026a537eb00c4187de96e6e397c05f11915270bcc383959877868ba93bac417d9f6ed9f627a7930300000004516551abffffffffacc12f1bb67be3ae9f1d43e55fda8b885340a0df1175392a8bbd9f959ad3605003000000025163ffffffff02ff0f4700000000000070bd99040000000003ac53abf8440b42", "", 2, -393923011, "0133f1a161363b71dfb3a90065c7128c56bd0028b558b610142df79e055ab5c7"], + ["b21fc15403b4bdaa994204444b59323a7b8714dd471bd7f975a4e4b7b48787e720cbd1f5f00000000000ffffffff311533001cb85c98c1d58de0a5fbf27684a69af850d52e22197b0dc941bc6ca9030000000765ab6363ab5351a8ae2c2c7141ece9a4ff75c43b7ea9d94ec79b7e28f63e015ac584d984a526a73fe1e04e0100000007526352536a5365ffffffff02a0a9ea030000000002ab52cfc4f300000000000465525253e8e0f342", "000000", 1, 1305253970, "d1df1f4bba2484cff8a816012bb6ec91c693e8ca69fe85255e0031711081c46a"], + ["d1704d6601acf710b19fa753e307cfcee2735eada0d982b5df768573df690f460281aad12d0000000007656300005100acffffffff0232205505000000000351ab632ca1bc0300000000016300000000", "ac65ab65ab51", 0, 165179664, "40b4f03c68288bdc996011b0f0ddb4b48dc3be6762db7388bdc826113266cd6c"], + ["d2f6c096025cc909952c2400bd83ac3d532bfa8a1f8f3e73c69b1fd7b8913379793f3ce92202000000076a00ab6a53516ade5332d81d58b22ed47b2a249ab3a2cb3a6ce9a6b5a6810e18e3e1283c1a1b3bd73e3ab00300000002acabffffffff01a9b2d40500000000056352abab00dc4b7f69", "ab0065", 0, -78019184, "2ef025e907f0fa454a2b48a4f3b81346ba2b252769b5c35d742d0c8985e0bf5e"], + ["3e6db1a1019444dba461247224ad5933c997256d15c5d37ade3d700506a0ba0a57824930d7010000000852ab6500ab00ac00ffffffff03389242020000000001aba8465a0200000000086a6a636a5100ab52394e6003000000000953ac51526351000053d21d9800", "abababacab53ab65", 0, 1643661850, "1f8a3aca573a609f4aea0c69522a82fcb4e15835449da24a05886ddc601f4f6a"], + ["f821a042036ad43634d29913b77c0fc87b4af593ac86e9a816a9d83fd18dfcfc84e1e1d57102000000076a63ac52006351ffffffffbcdaf490fc75086109e2f832c8985716b3a624a422cf9412fe6227c10585d21203000000095252abab5352ac526affffffff2efed01a4b73ad46c7f7bc7fa3bc480f8e32d741252f389eaca889a2e9d2007e000000000353ac53ffffffff032ac8b3020000000009636300000063516300d3d9f2040000000006510065ac656aafa5de0000000000066352ab5300ac9042b57d", "525365", 1, 667065611, "0d17a92c8d5041ba09b506ddf9fd48993be389d000aad54f9cc2a44fcc70426b"], + ["58e3f0f704a186ef55d3919061459910df5406a9121f375e7502f3be872a449c3f2bb058380100000000f0e858da3ac57b6c973f889ad879ffb2bd645e91b774006dfa366c74e2794aafc8bbc871010000000751ac65516a515131a68f120fd88ca08687ceb4800e1e3fbfea7533d34c84fef70cc5a96b648d580369526d000000000600ac00515363f6191d5b3e460fa541a30a6e83345dedfa3ed31ad8574d46d7bbecd3c9074e6ba5287c24020000000151e3e19d6604162602010000000004005100ac71e17101000000000065b5e90300000000040053ab53f6b7d101000000000200ac00000000", "6563ab", 1, -669018604, "8221d5dfb75fc301a80e919e158e0b1d1e86ffb08870a326c89408d9bc17346b"], + ["efec1cce044a676c1a3d973f810edb5a9706eb4cf888a240f2b5fb08636bd2db482327cf500000000005ab51656a52ffffffff46ef019d7c03d9456e5134eb0a7b5408d274bd8e33e83df44fab94101f7c5b650200000009ac5100006353630051407aadf6f5aaffbd318fdbbc9cae4bd883e67d524df06bb006ce2f7c7e2725744afb76960100000005536aab53acec0d64eae09e2fa1a7c4960354230d51146cf6dc45ee8a51f489e20508a785cbe6ca86fc000000000651536a516300ffffffff014ef598020000000006636aac655265a6ae1b75", "53516a5363526563ab", 2, -1823982010, "13e8b5ab4e5b2ceeff0045c625e19898bda2d39fd7af682e2d1521303cfe1154"], + ["3c436c2501442a5b700cbc0622ee5143b34b1b8021ea7bbc29e4154ab1f5bdfb3dff9d640501000000086aab5251ac5252acffffffff0170b9a20300000000066aab6351525114b13791", "63acabab52ab51ac65", 0, -2140612788, "87ddf1f9acb6640448e955bd1968f738b4b3e073983af7b83394ab7557f5cd61"], + ["d62f183e037e0d52dcf73f9b31f70554bce4f693d36d17552d0e217041e01f15ad3840c838000000000963acac6a6a6a63ab63ffffffffabdfb395b6b4e63e02a763830f536fc09a35ff8a0cf604021c3c751fe4c88f4d0300000006ab63ab65ac53aa4d30de95a2327bccf9039fb1ad976f84e0b4a0936d82e67eafebc108993f1e57d8ae39000000000165ffffffff04364ad30500000000036a005179fd84010000000007ab636aac6363519b9023030000000008510065006563ac6acd2a4a02000000000000000000", "52", 1, 595020383, "da8405db28726dc4e0f82b61b2bfd82b1baa436b4e59300305cc3b090b157504"], + ["44c200a5021238de8de7d80e7cce905606001524e21c8d8627e279335554ca886454d692e6000000000500acac52abbb8d1dc876abb1f514e96b21c6e83f429c66accd961860dc3aed5071e153e556e6cf076d02000000056553526a51870a928d0360a580040000000004516a535290e1e302000000000851ab6a00510065acdd7fc5040000000007515363ab65636abb1ec182", "6363", 0, -785766894, "ed53cc766cf7cb8071cec9752460763b504b2183442328c5a9761eb005c69501"], + ["d682d52d034e9b062544e5f8c60f860c18f029df8b47716cabb6c1b4a4b310a0705e754556020000000400656a0016eeb88eef6924fed207fba7ddd321ff3d84f09902ff958c815a2bf2bb692eb52032c4d803000000076365ac516a520099788831f8c8eb2552389839cfb81a9dc55ecd25367acad4e03cfbb06530f8cccf82802701000000085253655300656a53ffffffff02d543200500000000056a510052ac03978b05000000000700ac51525363acfdc4f784", "", 2, -696035135, "e1a256854099907050cfee7778f2018082e735a1f1a3d91437584850a74c87bb"], + ["e8c0dec5026575ddf31343c20aeeca8770afb33d4e562aa8ee52eeda6b88806fdfd4fe0a97030000000953acabab65ab516552ffffffffdde122c2c3e9708874286465f8105f43019e837746686f442666629088a970e0010000000153ffffffff01f98eee0100000000025251fe87379a", "63", 1, 633826334, "abe441209165d25bc6d8368f2e7e7dc21019056719fef1ace45542aa2ef282e2"], + ["b288c331011c17569293c1e6448e33a64205fc9dc6e35bc756a1ac8b97d18e912ea88dc0770200000007635300ac6aacabfc3c890903a3ccf8040000000004656500ac9c65c9040000000009ab6a6aabab65abac63ac5f7702000000000365005200000000", "526a63", 0, 1574937329, "0dd1bd5c25533bf5f268aa316ce40f97452cca2061f0b126a59094ca5b65f7a0"], + ["fc0a092003cb275fa9a25a72cf85d69c19e4590bfde36c2b91cd2c9c56385f51cc545530210000000004ab530063ffffffff729b006eb6d14d6e5e32b1c376acf1c62830a5d9246da38dbdb4db9f51fd1c74020000000463636500ffffffff0ae695c6d12ab7dcb8d3d4b547b03f178c7268765d1de9af8523d244e3836b12030000000151ffffffff0115c1e20100000000066a6aabac6a6a1ff59aec", "ab0053ac", 0, 931831026, "73fe22099c826c34a74edf45591f5d7b3a888c8178cd08facdfd96a9a681261c"], + ["0fcae7e004a71a4a7c8f66e9450c0c1785268679f5f1a2ee0fb3e72413d70a9049ecff75de020000000452005251ffffffff99c8363c4b95e7ec13b8c017d7bb6e80f7c04b1187d6072961e1c2479b1dc0320200000000ffffffff7cf03b3d66ab53ed740a70c5c392b84f780fff5472aee82971ac3bfeeb09b2df0200000006ab5265636a0058e4fe9257d7c7c7e82ff187757c6eadc14cceb6664dba2de03a018095fd3006682a5b9600000000056353536a636de26b2303ff76de010000000001acdc0a2e020000000001ab0a53ed020000000007530063ab51510088417307", "ac6aacab5165535253", 2, -902160694, "eea96a48ee572aea33d75d0587ce954fcfb425531a7da39df26ef9a6635201be"], + ["612701500414271138e30a46b7a5d95c70c78cc45bf8e40491dac23a6a1b65a51af04e6b94020000000451655153ffffffffeb72dc0e49b2fad3075c19e1e6e4b387f1365dca43d510f6a02136318ddecb7f0200000003536352e115ffc4f9bae25ef5baf534a890d18106fb07055c4d7ec9553ba89ed1ac2101724e507303000000080063006563acabac2ff07f69a080cf61a9d19f868239e6a4817c0eeb6a4f33fe254045d8af2bca289a8695de0300000000430736c404d317840500000000086a00abac5351ab65306e0503000000000963ab0051536aabab6a6c8aca01000000000565516351ab5dcf960100000000016a00000000", "ab", 2, -604581431, "5ec805e74ee934aa815ca5f763425785ae390282d46b5f6ea076b6ad6255a842"], + ["6b68ba00023bb4f446365ea04d68d48539aae66f5b04e31e6b38b594d2723ab82d44512460000000000200acffffffff5dfc6febb484fff69c9eeb7c7eb972e91b6d949295571b8235b1da8955f3137b020000000851ac6352516a535325828c8a03365da801000000000800636aabac6551ab0f594d03000000000963ac536365ac63636a45329e010000000005abac53526a00000000", "005151", 0, 1317038910, "42f5ba6f5fe1e00e652a08c46715871dc4b40d89d9799fd7c0ea758f86eab6a7"], + ["aff5850c0168a67296cc790c1b04a9ed9ad1ba0469263a9432fcb53676d1bb4e0eea8ea1410100000005ac65526a537d5fcb1d01d9c26d0200000000065265ab5153acc0617ca1", "51ab650063", 0, 1712981774, "8449d5247071325e5f8edcc93cb9666c0fecabb130ce0e5bef050575488477eb"], + ["e6d6b9d8042c27aec99af8c12b6c1f7a80453e2252c02515e1f391da185df0874e133696b50300000006ac5165650065ffffffff6a4b60a5bfe7af72b198eaa3cde2e02aa5fa36bdf5f24ebce79f6ecb51f3b554000000000652656aababac2ec4c5a6cebf86866b1fcc4c5bd5f4b19785a8eea2cdfe58851febf87feacf6f355324a80100000001537100145149ac1e287cef62f6f5343579189fad849dd33f25c25bfca841cb696f10c5a34503000000046a636a63df9d7c4c018d96e20100000000015100000000", "53ab", 1, -1924777542, "f98f95d0c5ec3ac3e699d81f6c440d2e7843eab15393eb023bc5a62835d6dcea"], + ["046ac25e030a344116489cc48025659a363da60bc36b3a8784df137a93b9afeab91a04c1ed020000000951ab0000526a65ac51ffffffff6c094a03869fde55b9a8c4942a9906683f0a96e2d3e5a03c73614ea3223b2c29020000000500ab636a6affffffff3da7aa5ecef9071600866267674b54af1740c5aeb88a290c459caa257a2683cb0000000004ab6565ab7e2a1b900301b916030000000005abac63656308f4ed03000000000852ab53ac63ac51ac73d620020000000003ab00008deb1285", "6a", 2, 1299505108, "f79e6b776e2592bad45ca328c54abf14050c241d8f822d982c36ea890fd45757"], + ["bd515acd0130b0ac47c2d87f8d65953ec7d657af8d96af584fc13323d0c182a2e5f9a96573000000000652ac51acac65ffffffff0467aade000000000003655363dc577d050000000006515252ab5300137f60030000000007535163530065004cdc860500000000036a5265241bf53e", "acab", 0, 621090621, "771d4d87f1591a13d77e51858c16d78f1956712fe09a46ff1abcabbc1e7af711"], + ["ff1ae37103397245ac0fa1c115b079fa20930757f5b6623db3579cb7663313c2dc4a3ffdb300000000076353656a000053ffffffff83c59e38e5ad91216ee1a312d15b4267bae2dd2e57d1a3fd5c2f0f809eeb5d46010000000800abab6a6a53ab51ffffffff9d5e706c032c1e0ca75915f8c6686f64ec995ebcd2539508b7dd8abc3e4d7d2a01000000006b2bdcda02a8fe070500000000045253000019e31d04000000000700ab63acab526a00000000", "53656aab6a525251", 0, 881938872, "726bb88cdf3af2f7603a31f33d2612562306d08972a4412a55dbbc0e3363721c"], + ["ff5400dd02fec5beb9a396e1cbedc82bedae09ed44bae60ba9bef2ff375a6858212478844b03000000025253ffffffff01e46c203577a79d1172db715e9cc6316b9cfc59b5e5e4d9199fef201c6f9f0f000000000900ab6552656a5165acffffffff02e8ce62040000000002515312ce3e00000000000251513f119316", "", 0, 1541581667, "1e0da47eedbbb381b0e0debbb76e128d042e02e65b11125e17fd127305fc65cd"], + ["28e3daa603c03626ad91ffd0ff927a126e28d29db5012588b829a06a652ea4a8a5732407030200000004ab6552acffffffff8e643146d3d0568fc2ad854fd7864d43f6f16b84e395db82b739f6f5c84d97b40000000004515165526b01c2dc1469db0198bd884e95d8f29056c48d7e74ff9fd37a9dec53e44b8769a6c99c030200000009ab006a516a53630065eea8738901002398000000000007ac5363516a51abeaef12f5", "52ab52515253ab", 2, 1687390463, "55591346aec652980885a558cc5fc2e3f8d21cbd09f314a798e5a7ead5113ea6"], + ["b54bf5ac043b62e97817abb892892269231b9b220ba08bc8dbc570937cd1ea7cdc13d9676c010000000451ab5365a10adb7b35189e1e8c00b86250f769319668189b7993d6bdac012800f1749150415b2deb0200000003655300ffffffff60b9f4fb9a7e17069fd00416d421f804e2ef2f2c67de4ca04e0241b9f9c1cc5d0200000003ab6aacfffffffff048168461cce1d40601b42fbc5c4f904ace0d35654b7cc1937ccf53fe78505a0100000008526563525265abacffffffff01dbf4e6040000000007acac656553636500000000", "63", 2, 882302077, "f5b38b0f06e246e47ce622e5ee27d5512c509f8ac0e39651b3389815eff2ab93"], + ["ebf628b30360bab3fa4f47ce9e0dcbe9ceaf6675350e638baff0c2c197b2419f8e4fb17e16000000000452516365ac4d909a79be207c6e5fb44fbe348acc42fc7fe7ef1d0baa0e4771a3c4a6efdd7e2c118b0100000003acacacffffffffa6166e9101f03975721a3067f1636cc390d72617be72e5c3c4f73057004ee0ee010000000863636a6a516a5252c1b1e82102d8d54500000000000153324c900400000000015308384913", "0063516a51", 1, -1658428367, "eb2d8dea38e9175d4d33df41f4087c6fea038a71572e3bad1ea166353bf22184"], + ["d6a8500303f1507b1221a91adb6462fb62d741b3052e5e7684ea7cd061a5fc0b0e93549fa50100000004acab65acfffffffffdec79bf7e139c428c7cfd4b35435ae94336367c7b5e1f8e9826fcb0ebaaaea30300000000ffffffffd115fdc00713d52c35ea92805414bd57d1e59d0e6d3b79a77ee18a3228278ada020000000453005151ffffffff040231510300000000085100ac6a6a000063c6041c0400000000080000536a6563acac138a0b04000000000263abd25fbe03000000000900656a00656aac510000000000", "ac526aac6a00", 1, -2007972591, "13d12a51598b34851e7066cd93ab8c5212d60c6ed2dae09d91672c10ccd7f87c"], + ["658cb1c1049564e728291a56fa79987a4ed3146775fce078bd2e875d1a5ca83baf6166a82302000000056a656351ab2170e7d0826cbdb45fda0457ca7689745fd70541e2137bb4f52e7b432dcfe2112807bd720300000007006a0052536351ffffffff8715ca2977696abf86d433d5c920ef26974f50e9f4a20c584fecbb68e530af5101000000009e49d864155bf1d3c757186d29f3388fd89c7f55cc4d9158b4cf74ca27a35a1dd93f945502000000096a535353ac656351510d29fa870230b809040000000006ab6a6a526a633b41da050000000004ab6a6a65ed63bf62", "52acabac", 2, -1774073281, "53ab197fa7e27b8a3f99ff48305e67081eb90e95d89d7e92d80cee25a03a6689"], + ["e92492cc01aec4e62df67ea3bc645e2e3f603645b3c5b353e4ae967b562d23d6e043badecd0100000003acab65ffffffff02c7e5ea040000000002ab52e1e584010000000005536365515195d16047", "6551", 0, -424930556, "93c34627f526d73f4bea044392d1a99776b4409f7d3d835f23b03c358f5a61c2"], + ["02e242db04be2d8ced9179957e98cee395d4767966f71448dd084426844cbc6d15f2182e85030000000200650c8ffce3db9de9c3f9cdb9104c7cb26647a7531ad1ebf7591c259a9c9985503be50f8de30000000007ac6a51636a6353ffffffffa2e33e7ff06fd6469987ddf8a626853dbf30c01719efb259ae768f051f803cd30300000000fffffffffd69d8aead941683ca0b1ee235d09eade960e0b1df3cd99f850afc0af1b73e070300000001ab60bb602a011659670100000000076363526300acac00000000", "6353ab515251", 3, 1451100552, "bbc9069b8615f3a52ac8a77359098dcc6c1ba88c8372d5d5fe080b99eb781e55"], + ["b28d5f5e015a7f24d5f9e7b04a83cd07277d452e898f78b50aae45393dfb87f94a26ef57720200000008ababac630053ac52ffffffff046475ed040000000008ab5100526363ac65c9834a04000000000251abae26b30100000000040000ac65ceefb900000000000000000000", "ac6551ac6a536553", 0, -1756558188, "5848d93491044d7f21884eef7a244fe7d38886f8ae60df49ce0dfb2a342cd51a"], + ["efb8b09801f647553b91922a5874f8e4bb2ed8ddb3536ed2d2ed0698fac5e0e3a298012391030000000952ac005263ac52006affffffff04cdfa0f050000000007ac53ab51abac65b68d1b02000000000553ab65ac00d057d50000000000016a9e1fda010000000007ac63ac536552ac00000000", "6aac", 0, 1947322973, "603a9b61cd30fcea43ef0a5c18b88ca372690b971b379ee9e01909c336280511"], + ["68a59fb901c21946797e7d07a4a3ea86978ce43df0479860d7116ac514ba955460bae78fff0000000001abffffffff03979be80100000000036553639300bc040000000008006552006a656565cfa78d0000000000076552acab63ab5100000000", "ab65ab", 0, 995583673, "3b320dd47f2702452a49a1288bdc74a19a4b849b132b6cad9a1d945d87dfbb23"], + ["67761f2a014a16f3940dcb14a22ba5dc057fcffdcd2cf6150b01d516be00ef55ef7eb07a830100000004636a6a51ffffffff01af67bd050000000008526553526300510000000000", "6a00", 0, 1570943676, "079fa62e9d9d7654da8b74b065da3154f3e63c315f25751b4d896733a1d67807"], + ["e20fe96302496eb436eee98cd5a32e1c49f2a379ceb71ada8a48c5382df7c8cd88bdc47ced03000000016556aa0e180660925a841b457aed0aae47fca2a92fa1d7afeda647abf67198a3902a7c80dd00000000085152ac636a535265bd18335e01803c810100000000046500ac52f371025e", "6363ab", 1, -651254218, "2921a0e5e3ba83c57ba57c25569380c17986bf34c366ec216d4188d5ba8b0b47"], + ["4e1bd9fa011fe7aa14eee8e78f27c9fde5127f99f53d86bc67bdab23ca8901054ee8a8b6eb0300000009ac535153006a6a0063ffffffff044233670500000000000a667205000000000652ab636a51abe5bf35030000000003535351d579e505000000000700630065ab51ac3419ac30", "52abac52", 0, -1807563680, "4aae6648f856994bed252d319932d78db55da50d32b9008216d5366b44bfdf8a"], + ["ec02fbee03120d02fde12574649660c441b40d330439183430c6feb404064d4f507e704f3c0100000000ffffffffe108d99c7a4e5f75cc35c05debb615d52fac6e3240a6964a29c1704d98017fb60200000002ab63fffffffff726ec890038977adfc9dadbeaf5e486d5fcb65dc23acff0dd90b61b8e2773410000000002ac65e9dace55010f881b010000000005ac00ab650000000000", "51ac525152ac6552", 2, -1564046020, "3f988922d8cd11c7adff1a83ce9499019e5ab5f424752d8d361cf1762e04269b"], + ["23dbdcc1039c99bf11938d8e3ccec53b60c6c1d10c8eb6c31197d62c6c4e2af17f52115c3a0300000008636352000063ababffffffff17823880e1df93e63ad98c29bfac12e36efd60254346cac9d3f8ada020afc0620300000003ab63631c26f002ac66e86cd22a25e3ed3cb39d982f47c5118f03253054842daadc88a6c41a2e1500000000096a00ab636a53635163195314de015570fd0100000000096a5263acab5200005300000000", "ababac6a6553", 1, 11586329, "bd36a50e0e0a4ecbf2709e68daef41eddc1c0c9769efaee57910e99c0a1d1343"], + ["33b03bf00222c7ca35c2f8870bbdef2a543b70677e413ce50494ac9b22ea673287b6aa55c50000000005ab00006a52ee4d97b527eb0b427e4514ea4a76c81e68c34900a23838d3e57d0edb5410e62eeb8c92b6000000000553ac6aacac42e59e170326245c000000000009656553536aab516aabb1a10603000000000852ab52ab6a516500cc89c802000000000763ac6a63ac516300000000", "", 0, 557416556, "41bead1b073e1e9fee065dd612a617ca0689e8f9d3fed9d0acfa97398ebb404c"], + ["813eda1103ac8159850b4524ef65e4644e0fc30efe57a5db0c0365a30446d518d9b9aa8fdd0000000003656565c2f1e89448b374b8f12055557927d5b33339c52228f7108228149920e0b77ef0bcd69da60000000006abac00ab63ab82cdb7978d28630c5e1dc630f332c4245581f787936f0b1e84d38d33892141974c75b4750300000004ac53ab65ffffffff0137edfb02000000000000000000", "0063", 1, -1948560575, "71dfcd2eb7f2e6473aed47b16a6d5fcbd0af22813d892e9765023151e07771ec"], + ["9e45d9aa0248c16dbd7f435e8c54ae1ad086de50c7b25795a704f3d8e45e1886386c653fbf01000000025352fb4a1acefdd27747b60d1fb79b96d14fb88770c75e0da941b7803a513e6d4c908c6445c7010000000163ffffffff014069a8010000000001520a794fb3", "51ac005363", 1, -719113284, "0d31a221c69bd322ef7193dd7359ddfefec9e0a1521d4a8740326d46e44a5d6a"], + ["36e42018044652286b19a90e5dd4f8d9f361d0760d080c5c5add1970296ff0f1de630233c8010000000200ac39260c7606017d2246ee14ddb7611586178067e6a4be38e788e33f39a3a95a55a13a6775010000000352ac638bea784f7c2354ed02ea0b93f0240cdfb91796fa77649beee6f7027caa70778b091deee700000000066a65ac656363ffffffff4d9d77ab676d711267ef65363f2d192e1bd55d3cd37f2280a34c72e8b4c559d700000000056a006aab00001764e1020d30220100000000085252516aacab0053472097040000000009635353ab6a636a5100a56407a1", "006a536551ab53ab", 0, 827296034, "daec2af5622bbe220c762da77bab14dc75e7d28aa1ade9b7f100798f7f0fd97a"], + ["5e06159a02762b5f3a5edcdfc91fd88c3bff08b202e69eb5ba74743e9f4291c4059ab008200000000001ac348f5446bb069ef977f89dbe925795d59fb5d98562679bafd61f5f5f3150c3559582992d0000000008ab5165515353abac762fc67703847ec6010000000000e200cf040000000002abaca64b86010000000008520000515363acabb82b491b", "ab53525352ab6a", 0, -61819505, "75a7db0df41485a28bf6a77a37ca15fa8eccc95b5d6014a731fd8adb9ada0f12"], + ["a1948872013b543d6d902ccdeead231c585195214ccf5d39f136023855958436a43266911501000000086aac006a6a6a51514951c9b2038a538a04000000000452526563c0f345050000000007526a5252ac526af9be8e03000000000752acac51ab006306198db2", "ab6353", 0, -326384076, "ced7ef84aad4097e1eb96310e0d1c8e512cfcb392a01d9010713459b23bc0cf4"], + ["c3efabba03cb656f154d1e159aa4a1a4bf9423a50454ebcef07bc3c42a35fb8ad84014864d0000000000d1cc73d260980775650caa272e9103dc6408bdacaddada6b9c67c88ceba6abaa9caa2f7d020000000553536a5265ffffffff9f946e8176d9b11ff854b76efcca0a4c236d29b69fb645ba29d406480427438e01000000066a0065005300ffffffff040419c0010000000003ab6a63cdb5b6010000000009006300ab5352656a63f9fe5e050000000004acac5352611b980100000000086a00acac00006a512d7f0c40", "0053", 0, -59089911, "c503001c16fbff82a99a18d88fe18720af63656fccd8511bca1c3d0d69bd7fc0"], + ["efb55c2e04b21a0c25e0e29f6586be9ef09f2008389e5257ebf2f5251051cdc6a79fce2dac020000000351006affffffffaba73e5b6e6c62048ba5676d18c33ccbcb59866470bb7911ccafb2238cfd493802000000026563ffffffffe62d7cb8658a6eca8a8babeb0f1f4fa535b62f5fc0ec70eb0111174e72bbec5e0300000009abababac516365526affffffffbf568789e681032d3e3be761642f25e46c20322fa80346c1146cb47ac999cf1b0300000000b3dbd55902528828010000000001ab0aac7b0100000000015300000000", "acac52", 3, 1638140535, "e84444d91580da41c8a7dcf6d32229bb106f1be0c811b2292967ead5a96ce9d4"], + ["91d3b21903629209b877b3e1aef09cd59aca6a5a0db9b83e6b3472aceec3bc2109e64ab85a0200000003530065ffffffffca5f92de2f1b7d8478b8261eaf32e5656b9eabbc58dcb2345912e9079a33c4cd010000000700ab65ab00536ad530611da41bbd51a389788c46678a265fe85737b8d317a83a8ff7a839debd18892ae5c80300000007ab6aac65ab51008b86c501038b8a9a05000000000263525b3f7a040000000007ab535353ab00abd4e3ff04000000000665ac51ab65630b7b656f", "6551525151516a00", 2, 499657927, "ef4bd7622eb7b2bbbbdc48663c1bc90e01d5bde90ff4cb946596f781eb420a0c"], + ["5d5c41ad0317aa7e40a513f5141ad5fc6e17d3916eebee4ddb400ddab596175b41a111ead20100000005536a5265acffffffff900ecb5e355c5c9f278c2c6ea15ac1558b041738e4bffe5ae06a9346d66d5b2b00000000080000ab636a65ab6affffffff99f4e08305fa5bd8e38fb9ca18b73f7a33c61ff7b3c68e696b30a04fea87f3ca000000000163d3d1760d019fc13a00000000000000000000", "ab53acabab6aac6a52", 2, 1007461922, "4012f5ff2f1238a0eb84854074670b4703238ebc15bfcdcd47ffa8498105fcd9"], + ["ceecfa6c02b7e3345445b82226b15b7a097563fa7d15f3b0c979232b138124b62c0be007890200000009abac51536a63525253ffffffffbae481ccb4f15d94db5ec0d8854c24c1cc8642bd0c6300ede98a91ca13a4539a0200000001ac50b0813d023110f5020000000006acabac526563e2b0d0040000000009656aac0063516a536300000000", "0063526500", 0, -1862053821, "e1600e6df8a6160a79ac32aa40bb4644daa88b5f76c0d7d13bf003327223f70c"], + ["ae62d5fd0380c4083a26642159f51af24bf55dc69008e6b7769442b6a69a603edd980a33000000000005ab5100ab53ffffffff49d048324d899d4b8ed5e739d604f5806a1104fede4cb9f92cc825a7fa7b4bfe0200000005536a000053ffffffff42e5cea5673c650881d0b4005fa4550fd86de5f21509c4564a379a0b7252ac0e0000000007530000526a53525f26a68a03bfacc3010000000000e2496f000000000009ab5253acac52636563b11cc600000000000700510065526a6a00000000", "abab", 1, -1600104856, "05cf0ec9c61f1a15f651a0b3c5c221aa543553ce6c804593f43bb5c50bb91ffb"], + ["f06f64af04fdcb830464b5efdb3d5ee25869b0744005375481d7b9d7136a0eb8828ad1f0240200000003516563fffffffffd3ba192dabe9c4eb634a1e3079fca4f072ee5ceb4b57deb6ade5527053a92c5000000000165ffffffff39f43401a36ba13a5c6dd7f1190e793933ae32ee3bf3e7bfb967be51e681af760300000009650000536552636a528e34f50b21183952cad945a83d4d56294b55258183e1627d6e8fb3beb8457ec36cadb0630000000005abab530052334a7128014bbfd10100000000085352ab006a63656afc424a7c", "53650051635253ac00", 2, 313255000, "d309da5afd91b7afa257cfd62df3ca9df036b6a9f4b38f5697d1daa1f587312b"], + ["6dfd2f98046b08e7e2ef5fff153e00545faf7076699012993c7a30cb1a50ec528281a9022f030000000152ffffffff1f535e4851920b968e6c437d84d6ecf586984ebddb7d5db6ae035bd02ba222a8010000000651006a53ab51605072acb3e17939fa0737bc3ee43bc393b4acd58451fc4ffeeedc06df9fc649828822d5010000000253525a4955221715f27788d302382112cf60719be9ae159c51f394519bd5f7e70a4f9816c7020200000009526a6a51636aab656a36d3a5ff0445548e0100000000086a6a00516a52655167030b050000000004ac6a63525cfda8030000000000e158200000000000010000000000", "535263ac6a65515153", 3, 585774166, "72b7da10704c3ca7d1deb60c31b718ee12c70dc9dfb9ae3461edce50789fe2ba"], + ["187eafed01389a45e75e9dda526d3acbbd41e6414936b3356473d1f9793d161603efdb45670100000002ab00ffffffff04371c8202000000000563630063523b3bde02000000000753516563006300e9e765010000000005516aac656a373f9805000000000665525352acab08d46763", "ab", 0, 122457992, "393aa6c758e0eed15fa4af6d9e2d7c63f49057246dbb92b4268ec24fc87301ca"], + ["7d50b977035d50411d814d296da9f7965ddc56f3250961ca5ba805cadd0454e7c521e31b0300000000003d0416c2cf115a397bacf615339f0e54f6c35ffec95aa009284d38390bdde1595cc7aa7c0100000005ab52ac5365ffffffff4232c6e796544d5ac848c9dc8d25cfa74e32e847a5fc74c74d8f38ca51188562030000000653ac51006a51ffffffff016bd8bb00000000000465ab5253163526f3", "51ab526a00005353", 1, -1311316785, "60b7544319b42e4159976c35c32c2644f0adf42eff13be1dc2f726fc0b6bb492"], + ["2a45cd1001bf642a2315d4a427eddcc1e2b0209b1c6abd2db81a800c5f1af32812de42032702000000050051525200ffffffff032177db050000000005530051abac49186f000000000004ab6aab00645c0000000000000765655263acabac00000000", "6a65", 0, -1774715722, "6a9ac3f7da4c7735fbc91f728b52ecbd602233208f96ac5592656074a5db118a"], + ["479358c202427f3c8d19e2ea3def6d6d3ef2281b4a93cd76214f0c7d8f040aa042fe19f71f0300000001abffffffffa2709be556cf6ecaa5ef530df9e4d056d0ed57ce96de55a5b1f369fa40d4e74a020000000700006a51635365c426be3f02af578505000000000363ab63fd8f590500000000065153abac53632dfb14b3", "520063ab51", 1, -763226778, "cfe147982afacde044ce66008cbc5b1e9f0fd9b8ed52b59fc7c0fecf95a39b0e"], + ["76179a8e03bec40747ad65ab0f8a21bc0d125b5c3c17ad5565556d5cb03ade7c83b4f32d98030000000151ffffffff99b900504e0c02b97a65e24f3ad8435dfa54e3c368f4e654803b756d011d24150200000003ac5353617a04ac61bb6cf697cfa4726657ba35ed0031432da8c0ffb252a190278830f9bd54f0320100000006656551005153c8e8fc8803677c77020000000007ac6553535253ac70f442030000000001535be0f20200000000026300bf46cb3a", "6aab52", 1, -58495673, "35e94b3776a6729d20aa2f3ddeeb06d3aad1c14cc4cde52fd21a4efc212ea16c"], + ["75ae53c2042f7546223ce5d5f9e00a968ddc68d52e8932ef2013fa40ce4e8c6ed0b6195cde01000000056563ac630079da0452c20697382e3dba6f4fc300da5f52e95a9dca379bb792907db872ba751b8024ee0300000009655151536500005163ffffffffe091b6d43f51ff00eff0ccfbc99b72d3aff208e0f44b44dfa5e1c7322cfc0c5f01000000075200005363ab63ffffffff7e96c3b83443260ac5cfd18258574fbc4225c630d3950df812bf51dceaeb0f9103000000065365655165639a6bf70b01b3e14305000000000563530063ac00000000", "6300ab00ac", 2, 982422189, "ee4ea49d2aae0dbba05f0b9785172da54408eb1ec67d36759ff7ed25bfc28766"], + ["1cdfa01e01e1b8078e9c2b0ca5082249bd18fdb8b629ead659adedf9a0dd5a04031871ba120200000008525351536565ab6affffffff011e28430200000000076a5363636aac52b2febd4a", "abacac63656300", 0, 387396350, "299dcaac2bdaa627eba0dfd74767ee6c6f27c9200b49da8ff6270b1041669e7e"], + ["cc28c1810113dfa6f0fcd9c7d9c9a30fb6f1d774356abeb527a8651f24f4e6b25cf763c4e00300000003ab636affffffff02dfc6050000000000080053636351ab0052afd56903000000000453ab5265f6c90d99", "006551abacacac", 0, 1299280838, "a4c0773204ab418a939e23f493bd4b3e817375d133d307609e9782f2cc38dbcf"], + ["ca816e7802cd43d66b9374cd9bf99a8da09402d69c688d8dcc5283ace8f147e1672b757e020200000005516aabab5240fb06c95c922342279fcd88ba6cd915933e320d7becac03192e0941e0345b79223e89570300000004005151ac353ecb5d0264dfbd010000000005ac6aacababd5d70001000000000752ac53ac6a5151ec257f71", "63ac", 1, 774695685, "cc180c4f797c16a639962e7aec58ec4b209853d842010e4d090895b22e7a7863"], + ["b42b955303942fedd7dc77bbd9040aa0de858afa100f399d63c7f167b7986d6c2377f66a7403000000066aac00525100ffffffff0577d04b64880425a3174055f94191031ad6b4ca6f34f6da9be7c3411d8b51fc000000000300526a6391e1cf0f22e45ef1c44298523b516b3e1249df153590f592fcb5c5fc432dc66f3b57cb03000000046a6aac65ffffffff0393a6c9000000000004516a65aca674ac0400000000046a525352c82c370000000000030053538e577f89", "", 1, -1237094944, "566953eb806d40a9fb684d46c1bf8c69dea86273424d562bd407b9461c8509af"], + ["92c9fe210201e781b72554a0ed5e22507fb02434ddbaa69aff6e74ea8bad656071f1923f3f02000000056a63ac6a514470cef985ba83dcb8eee2044807bedbf0d983ae21286421506ae276142359c8c6a34d68020000000863ac63525265006aa796dd0102ca3f9d05000000000800abab52ab535353cd5c83010000000007ac00525252005322ac75ee", "5165", 0, 97879971, "6e6307cef4f3a9b386f751a6f40acebab12a0e7e17171d2989293cbec7fd45c2"], + ["ccca1d5b01e40fe2c6b3ee24c660252134601dab785b8f55bd6201ffaf2fddc7b3e2192325030000000365535100496d4703b4b66603000000000665535253ac633013240000000000015212d2a502000000000951abac636353636a5337b82426", "0052", 0, -1691630172, "577bf2b3520b40aef44899a20d37833f1cded6b167e4d648fc5abe203e43b649"], + ["bc1a7a3c01691e2d0c4266136f12e391422f93655c71831d90935fbda7e840e50770c61da20000000008635253abac516353ffffffff031f32aa020000000003636563786dbc0200000000003e950f00000000000563516a655184b8a1de", "51536a", 0, -1627072905, "730bc25699b46703d7718fd5f5c34c4b5f00f594a9968ddc247fa7d5175124ed"], + ["076d209e02d904a6c40713c7225d23e7c25d4133c3c3477828f98c7d6dbd68744023dbb66b030000000753ab00536565acffffffff10975f1b8db8861ca94c8cc7c7cff086ddcd83e10b5fffd4fc8f2bdb03f9463c0100000000ffffffff029dff76010000000006526365530051a3be6004000000000000000000", "515253ac65acacac", 1, -1207502445, "66c488603b2bc53f0d22994a1f0f66fb2958203102eba30fe1d37b27a55de7a5"], + ["690fd1f80476db1f9eebe91317f2f130a60cbc1f4feadd9d6474d438e9cb7f91e4994600af0300000004ab536a63a15ce9fa6622d0c4171d895b42bff884dc6e8a7452f827fdc68a29c3c88e6fdee364eaf50000000002ab52ffffffff022dc39d3c0956b24d7f410b1e387859e7a72955f45d6ffb1e884d77888d18fe0300000005ac6a63656afffffffff10b06bce1800f5c49153d24748fdefb0bf514c12863247d1042d56018c3e25c03000000086a63ac6365536a52ffffffff031f162f0500000000060000655265abffbcd40500000000045151ac001a9c8c05000000000652ac53656a6300000000", "ac51ab63acac", 0, -67986012, "051c0df7ac688c2c930808dabde1f50300aea115f2bb3334f4753d5169b51e46"], + ["49ac2af00216c0307a29e83aa5de19770e6b20845de329290bd69cf0e0db7aed61ae41b39002000000035163ac8b2558ef84635bfc59635150e90b61fc753d34acfd10d97531043053e229cd720133cd95000000000463516a51ffffffff02458471040000000008abab636a51ac0065545aa80000000000096a6553516a5263ac6a00000000", "51526300ab5363", 1, 1449668540, "ddfd902bba312a06197810da96a0ddccb595f96670b28ded7dba88d8cd0469b8"], + ["fa4d868b024b010bd5dce46576c2fb489aa60bb797dac3c72a4836f49812c5c564c258414f03000000007a9b3a585e05027bdd89edbadf3c85ac61f8c3a04c773fa746517ae600ff1a9d6b6c02fb0200000004515163abffffffff01b17d020500000000046a65520000000000", "536565ab65635363", 0, -1718953372, "96c2b32f0a00a5925db7ba72d0b5d39922f30ea0f7443b22bc1b734808513c47"], + ["cac6382d0462375e83b67c7a86c922b569a7473bfced67f17afd96c3cd2d896cf113febf9e0300000003006a53ffffffffaa4913b7eae6821487dd3ca43a514e94dcbbf350f8cc4cafff9c1a88720711b800000000096a6a525300acac6353ffffffff184fc4109c34ea27014cc2c1536ef7ed1821951797a7141ddacdd6e429fae6ff01000000055251655200ffffffff9e7b79b4e6836e290d7b489ead931cba65d1030ccc06f20bd4ca46a40195b33c030000000008f6bc8304a09a2704000000000563655353511dbc73050000000000cf34c500000000000091f76e0000000000085200ab00005100abd07208cb", "0063656a", 2, -1488731031, "bf078519fa87b79f40abc38f1831731422722c59f88d86775535f209cb41b9b1"], + ["1711146502c1a0b82eaa7893976fefe0fb758c3f0e560447cef6e1bde11e42de91a125f71c030000000015bd8c04703b4030496c7461482481f290c623be3e76ad23d57a955807c9e851aaaa20270300000000d04abaf20326dcb7030000000001632225350400000000075263ac00520063dddad9020000000000af23d148", "52520053510063", 0, 1852122830, "e33d5ee08c0f3c130a44d7ce29606450271b676f4a80c52ab9ffab00cecf67f8"], + ["8d5b124d0231fbfc640c706ddb1d57bb49a18ba8ca0e1101e32c7e6e65a0d4c7971d93ea360100000008acabac0000abac65ffffffff8fe0fd7696597b845c079c3e7b87d4a44110c445a330d70342a5501955e17dd70100000004ab525363ef22e8a90346629f030000000009516a00ac63acac51657bd57b05000000000200acfd4288050000000009acab5352ab00ab636300000000", "53ac526553ab65", 0, 1253152975, "8b57a7c3170c6c02dd14ae1d392ce3d828197b20e9145c89c1cfd5de050e1562"], + ["38146dc502c7430e92b6708e9e107b61cd38e5e773d9395e5c8ad8986e7e4c03ee1c1e1e760100000000c8962ce2ac1bb3b1285c0b9ba07f4d2e5ce87c738c42ac0548cd8cec1100e6928cd6b0b6010000000763ab636aab52527cccefbd04e5f6f8020000000006006aabacac65ab2c4a00000000000351635209a6f40100000000026aacce57dc040000000008ab5353ab516a516a00000000", "ab", 0, -1205978252, "3cb5b030e7da0b60ccce5b4a7f3793e6ca56f03e3799fe2d6c3cc22d6d841dcb"], + ["22d81c740469695a6a83a9a4824f77ecff8804d020df23713990afce2b72591ed7de98500502000000065352526a6a6affffffff90dc85e118379b1005d7bbc7d2b8b0bab104dad7eaa49ff5bead892f17d8c3ba010000000665656300ab51ffffffff965193879e1d5628b52005d8560a35a2ba57a7f19201a4045b7cbab85133311d0200000003ac005348af21a13f9b4e0ad90ed20bf84e4740c8a9d7129632590349afc03799414b76fd6e826200000000025353ffffffff04a0d40d04000000000060702700000000000652655151516ad31f1502000000000365ac0069a1ac0500000000095100655300ab53525100000000", "51636a52ac", 0, -1644680765, "add7f5da27262f13da6a1e2cc2feafdc809bd66a67fb8ae2a6f5e6be95373b6f"], + ["a27dcbc801e3475174a183586082e0914c314bc9d79d1570f29b54591e5e0dff07fbb45a7f0000000004ac53ab51ffffffff027347f5020000000005535351ab63d0e5c9030000000009ac65ab6a63515200ab7cd632ed", "ac63636553", 0, -686435306, "883a6ea3b2cc53fe8a803c229106366ca14d25ffbab9fef8367340f65b201da6"], + ["b123ed2204410d4e8aaaa8cdb95234ca86dad9ff77fb4ae0fd4c06ebed36794f0215ede0040100000002ac63ffffffff3b58b81b19b90d8f402701389b238c3a84ff9ba9aeea298bbf15b41a6766d27a01000000056a6553ab00151824d401786153b819831fb15926ff1944ea7b03d884935a8bde01ed069d5fd80220310200000000ffffffffa9c9d246f1eb8b7b382a9032b55567e9a93f86c77f4e32c092aa1738f7f756c30100000002ab65ffffffff011a2b48000000000000ed44d1fb", "630051ab63", 2, -1118263883, "b5dab912bcabedff5f63f6dd395fc2cf030d83eb4dd28214baba68a45b4bfff0"], + ["1339051503e196f730955c5a39acd6ed28dec89b4dadc3f7c79b203b344511270e5747fa9900000000045151636affffffff378c6090e08a3895cedf1d25453bbe955a274657172491fd2887ed5c9aceca7b0100000000ffffffffcf7cc3c36ddf9d4749edfa9cefed496d2f86e870deb814bfcd3b5637a5496461030000000451006300ffffffff04dcf3fa010000000008526a63005263acabb41d84040000000004abac5153800eff020000000005656a535365106c5e00000000000000000000", "abac5300", 2, 2013719928, "7fc74de39ce6ca46ca25d760d3cec7bb21fd14f7efe1c443b5aa294f2cb5f546"], + ["0728c606014c1fd6005ccf878196ba71a54e86cc8c53d6db500c3cc0ac369a26fac6fcbc210000000005ab53ac5365ba9668290182d7870100000000066a000053655100000000", "65", 0, 1789961588, "ab6baa6da3b2bc853868d166f8996ad31d63ef981179f9104f49968fd61c8427"], + ["a1134397034bf4067b6c81c581e2b73fb63835a08819ba24e4e92df73074bf773c94577df7000000000465525251ffffffff8b6608feaa3c1f35f49c6330a769716fa01c5c6f6e0cdc2eb10dfc99bbc21e77010000000952656aac005352655180a0bda4bc72002c2ea8262e26e03391536ec36867258cab968a6fd6ec7523b64fa1d8c001000000056a53ac6353ffffffff04dbeeed05000000000553650052abcd5d0e01000000000463abab51104b2e0500000000066aac53ac5165283ca7010000000004535252ab00000000", "ab515151516552ab", 1, -324598676, "91178482112f94d1c8e929de443e4b9c893e18682998d393ca9ca77950412586"], + ["bcdafbae04aa18eb75855aeb1f5124f30044741351b33794254a80070940cb10552fa4fa8e0300000001acd0423fe6e3f3f88ae606f2e8cfab7a5ef87caa2a8f0401765ff9a47d718afcfb40c0099b0000000008ac6565ab53ac6aac645308009d680202d600e492b31ee0ab77c7c5883ebad5065f1ce87e4dfe6453e54023a0010000000151ffffffffb9d818b14245899e1d440152827c95268a676f14c3389fc47f5a11a7b38b1bde03000000026300ffffffff03cda22102000000000751ac535263005100a4d20400000000045200536ac8bef405000000000700ab51ab6563ac00000000", "6553516a526aab", 1, -2111409753, "5e1849e7368cf4f042718586d9bd831d61479b775bab97aba9f450042bd9876a"], + ["ed3bb93802ddbd08cb030ef60a2247f715a0226de390c9c1a81d52e83f8674879065b5f87d0300000003ab6552ffffffff04d2c5e60a21fb6da8de20bf206db43b720e2a24ce26779bca25584c3f765d1e0200000008ab656a6aacab00ab6e946ded025a811d04000000000951abac6352ac00ab5143cfa3030000000005635200636a00000000", "5352ac650065535300", 1, -668727133, "e9995065e1fddef72a796eef5274de62012249660dc9d233a4f24e02a2979c87"], + ["59f4629d030fa5d115c33e8d55a79ea3cba8c209821f979ed0e285299a9c72a73c5bba00150200000002636affffffffd8aca2176df3f7a96d0dc4ee3d24e6cecde1582323eec2ebef9a11f8162f17ac0000000007ab6565acab6553ffffffffeebc10af4f99c7a21cbc1d1074bd9f0ee032482a71800f44f26ee67491208e0403000000065352ac656351ffffffff0434e955040000000004ab515152caf2b305000000000365ac007b1473030000000003ab530033da970500000000060051536a5253bb08ab51", "", 2, 396340944, "0e9c47973ef2c292b2252c623f465bbb92046fe0b893eebf4e1c9e02cb01c397"], + ["286e3eb7043902bae5173ac3b39b44c5950bc363f474386a50b98c7bdab26f98dc83449c4a020000000752ac6a00510051ffffffff4339cd6a07f5a5a2cb5815e5845da70300f5c7833788363bf7fe67595d3225520100000000fffffffff9c2dd8b06ad910365ffdee1a966f124378a2b8021065c8764f6138bb1e951380200000005ab5153ac6affffffff0370202aba7a68df85436ea7c945139513384ef391fa33d16020420b8ad40e9a000000000900ab5165526353abacffffffff020c1907000000000004abac526a1b490b040000000000df1528f7", "5353ab", 3, -1407529517, "32154c09174a9906183abf26538c39e78468344ca0848bbd0785e24a3565d932"], + ["2e245cf80179e2e95cd1b34995c2aff49fe4519cd7cee93ad7587f7f7e8105fc2dff206cd30200000009006a63516a6553ab52350435a201d5ed2d02000000000352ab6558552c89", "00ab53", 0, -233917810, "4605ae5fd3d50f9c45d37db7118a81a9ef6eb475d2333f59df5d3e216f150d49"], + ["33a98004029d262f951881b20a8d746c8c707ea802cd2c8b02a33b7e907c58699f97e42be80100000007ac53536552abacdee04cc01d205fd8a3687fdf265b064d42ab38046d76c736aad8865ca210824b7c622ecf02000000070065006a536a6affffffff01431c5d010000000000270d48ee", "", 1, 921554116, "ff9d7394002f3f196ea25472ea6c46f753bd879a7244795157bb7235c9322902"], + ["aac18f2b02b144ed481557c53f2146ae523f24fcde40f3445ab0193b6b276c315dc2894d2300000000075165650000636a233526947dbffc76aec7db1e1baa6868ad4799c76e14794dcbaaec9e713a83967f6a65170200000005abac6551ab27d518be01b652a30000000000015300000000", "52ac5353", 1, 1559377136, "59fc2959bb7bb24576cc8a237961ed95bbb900679d94da6567734c4390cb6ef5"], + ["5ab79881033555b65fe58c928883f70ce7057426fbdd5c67d7260da0fe8b1b9e6a2674cb850300000009ac516aac6aac006a6affffffffa5be9223b43c2b1a4d120b5c5b6ec0484f637952a3252181d0f8e813e76e11580200000000e4b5ceb8118cb77215bbeedc9a076a4d087bb9cd1473ea32368b71daeeeacc451ec209010000000005acac5153aced7dc34e02bc5d11030000000005ac5363006a54185803000000000552ab00636a00000000", "5100", 1, 1927062711, "e9f53d531c12cce1c50abed4ac521a372b4449b6a12f9327c80020df6bff66c0"], + ["6c2c8fac0124b0b7d4b610c3c5b91dee32b7c927ac71abdf2d008990ca1ac40de0dfd530660300000006ababac5253656bd7eada01d847ec000000000004ac52006af4232ec8", "6a6a6a0051", 0, -340809707, "fb51eb9d7e47d32ff2086205214f90c7c139e08c257a64829ae4d2b301071c6a"], + ["6e3880af031735a0059c0bb5180574a7dcc88e522c8b56746d130f8d45a52184045f96793e0100000008acabac6a526a6553fffffffffe05f14cdef7d12a9169ec0fd37524b5fcd3295f73f48ca35a36e671da4a2f560000000008006a526a6351ab63ffffffffdfbd869ac9e472640a84caf28bdd82e8c6797f42d03b99817a705a24fde2736600000000010090a090a503db956b04000000000952ac53ab6a536a63ab358390010000000009656a5200525153ac65353ee204000000000763530052526aaba6ad83fb", "535151ab6300", 2, 222014018, "57a34ddeb1bf36d28c7294dda0432e9228a9c9e5cc5c692db98b6ed2e218d825"], + ["8df1cd19027db4240718dcaf70cdee33b26ea3dece49ae6917331a028c85c5a1fb7ee3e475020000000865ab6a00510063636157988bc84d8d55a8ba93cdea001b9bf9d0fa65b5db42be6084b5b1e1556f3602f65d4d0100000005ac00ab0052206c852902b2fb54030000000008ac5252536aacac5378c4a5050000000007acabac535163532784439e", "acab6a", 0, 1105620132, "edb7c74223d1f10f9b3b9c1db8064bc487321ff7bb346f287c6bc2fad83682de"], + ["0e803682024f79337b25c98f276d412bc27e56a300aa422c42994004790cee213008ff1b8303000000080051ac65ac655165f421a331892b19a44c9f88413d057fea03c3c4a6c7de4911fe6fe79cf2e9b3b10184b1910200000005525163630096cb1c670398277204000000000253acf7d5d502000000000963536a6a636a5363ab381092020000000002ac6a911ccf32", "6565", 1, -1492094009, "f0672638a0e568a919e9d8a9cbd7c0189a3e132940beeb52f111a89dcc2daa2c"], + ["7d71669d03022f9dd90edac323cde9e56354c6804c6b8e687e9ae699f46805aafb8bcaa636000000000253abffffffff698a5fdd3d7f2b8b000c68333e4dd58fa8045b3e2f689b889beeb3156cecdb490300000009525353abab0051acabc53f0aa821cdd69b473ec6e6cf45cf9b38996e1c8f52c27878a01ec8bb02e8cb31ad24e500000000055353ab0052ffffffff0447a23401000000000565ab53ab5133aaa0030000000006515163656563057d110300000000056a6aacac52cf13b5000000000003526a5100000000", "6a6a51", 1, -1349253507, "722efdd69a7d51d3d77bed0ac5544502da67e475ea5857cd5af6bdf640a69945"], + ["9ff618e60136f8e6bb7eabaaac7d6e2535f5fba95854be6d2726f986eaa9537cb283c701ff02000000026a65ffffffff012d1c0905000000000865ab00ac6a516a652f9ad240", "51515253635351ac", 0, 1571304387, "659cd3203095d4a8672646add7d77831a1926fc5b66128801979939383695a79"], + ["9fbd43ac025e1462ecd10b1a9182a8e0c542f6d1089322a41822ab94361e214ed7e1dfdd8a020000000263519d0437581538e8e0b6aea765beff5b4f3a4a202fca6e5d19b34c141078c6688f71ba5b8e0100000003ac6552ffffffff02077774050000000009655153655263acab6a0ae4e10100000000035152524c97136b", "635152ab", 0, 1969622955, "d82d4ccd9b67810f26a378ad9592eb7a30935cbbd27e859b00981aefd0a72e08"], + ["0117c92004314b84ed228fc11e2999e657f953b6de3b233331b5f0d0cf40d5cc149b93c7b30300000005515263516a083e8af1bd540e54bf5b309d36ba80ed361d77bbf4a1805c7aa73667ad9df4f97e2da410020000000600ab6351ab524d04f2179455e794b2fcb3d214670001c885f0802e4b5e015ed13a917514a7618f5f332203000000086a536aab51000063ecf029e65a4a009a5d67796c9f1eb358b0d4bd2620c8ad7330fb98f5a802ab92d0038b1002000000036a6551a184a88804b04490000000000009ab6a5152535165526a33d1ab020000000001518e92320000000000002913df04000000000952abac6353525353ac8b19bfdf", "000051ab0000", 0, 489433059, "8eebac87e60da524bbccaf285a44043e2c9232868dda6c6271a53c153e7f3a55"], + ["e7f5482903f98f0299e0984b361efb2fddcd9979869102281e705d3001a9d283fe9f3f3a1e02000000025365ffffffffcc5c7fe82feebad32a22715fc30bc584efc9cd9cadd57e5bc4b6a265547e676e0000000001ab579d21235bc2281e08bf5e7f8f64d3afb552839b9aa5c77cf762ba2366fffd7ebb74e49400000000055263ab63633df82cf40100982e05000000000453ac535300000000", "acacab", 2, -1362931214, "046de666545330e50d53083eb78c9336416902f9b96c77cc8d8e543da6dfc7e4"], + ["09adb2e90175ca0e816326ae2dce7750c1b27941b16f6278023dbc294632ab97977852a09d030000000465ab006affffffff027739cf0100000000075151ab63ac65ab8a5bb601000000000653ac5151520011313cdc", "ac", 0, -76831756, "478ee06501b4965b40bdba6cbaad9b779b38555a970912bb791b86b7191c54bc"], + ["f973867602e30f857855cd0364b5bbb894c049f44abbfd661d7ae5dbfeaafca89fac8959c20100000005ab52536a51ffffffffbeceb68a4715f99ba50e131884d8d20f4a179313691150adf0ebf29d05f8770303000000066352ab00ac63ffffffff021fddb90000000000036a656322a177000000000008526500ac5100acac84839083", "52acab53ac", 0, 1407879325, "db0329439490efc64b7104d6d009b03fbc6fac597cf54fd786fbbb5fd73b92b4"], + ["fd22ebaa03bd588ad16795bea7d4aa7f7d48df163d75ea3afebe7017ce2f350f6a0c1cb0bb00000000086aabac5153526363ffffffff488e0bb22e26a565d77ba07178d17d8f85702630ee665ec35d152fa05af3bda10200000004515163abffffffffeb21035849e85ad84b2805e1069a91bb36c425dc9c212d9bae50a95b6bfde1200300000001ab5df262fd02b69848040000000008ab6363636a6363ace23bf2010000000007655263635253534348c1da", "006353526563516a00", 0, -1491036196, "92364ba3c7a85d4e88885b8cb9b520dd81fc29e9d2b750d0790690e9c1246673"], + ["130b462d01dd49fac019dc4442d0fb54eaa6b1c2d1ad0197590b7df26969a67abd7f3fbb4f0100000008ac65abac53ab6563ffffffff0345f825000000000004ac53acac9d5816020000000002ababeff8e90500000000086aab006552ac6a53a892dc55", "ab0065ac530052", 0, 944483412, "1f4209fd4ce7f13d175fdd522474ae9b34776fe11a5f17a27d0796c77a2a7a9d"], + ["f8e50c2604609be2a95f6d0f31553081f4e1a49a0a30777fe51eb1c596c1a9a92c053cf28c0300000009656a51ac5252630052fffffffff792ed0132ae2bd2f11d4a2aab9d0c4fbdf9a66d9ae2dc4108afccdc14d2b1700100000007ab6a6563ac636a7bfb2fa116122b539dd6a2ab089f88f3bc5923e5050c8262c112ff9ce0a3cd51c6e3e84f02000000066551ac5352650d5e687ddf4cc9a497087cabecf74d236aa4fc3081c3f67b6d323cba795e10e7a171b725000000000852635351ab635100ffffffff02df5409020000000008ac6a53acab5151004156990200000000045163655200000000", "ac53abac65005300", 0, -173065000, "b596f206d7eba22b7e2d1b7a4f4cf69c7c541b6c84dcc943f84e19a99a923310"], + ["18020dd1017f149eec65b2ec23300d8df0a7dd64fc8558b36907723c03cd1ba672bbb0f51d0300000005ab65ab6a63ffffffff037cd7ae000000000009ab516a65005352ac65f1e4360400000000056353530053f118f0040000000009536363ab006500abac00000000", "63ab51acab52ac", 0, -550412404, "e19b796c14a0373674968e342f2741d8b51092a5f8409e9bff7dcd52e56fcbcb"], + ["b04154610363fdade55ceb6942d5e5a723323863b48a0cb04fdcf56210717955763f56b08d0300000009ac526a525151635151ffffffff93a176e76151a9eabdd7af00ef2af72f9e7af5ecb0aa4d45d00618f394cdd03c030000000074d818b332ebe05dc24c44d776cf9d275c61f471cc01efce12fd5a16464157f1842c65cb00000000066a0000ac6352d3c4134f01d8a1c0030000000005520000005200000000", "5200656a656351", 2, -9757957, "6e3e5ba77f760b6b5b5557b13043f1262418f3dd2ce7f0298b012811fc8ad5bc"], + ["9794b3ce033df7b1e32db62d2f0906b589eacdacf5743963dc2255b6b9a6cba211fadd0d41020000000600ab00650065ffffffffaae00687a6a4131152bbcaafedfaed461c86754b0bde39e2bef720e6d1860a0302000000070065516aac6552ffffffff50e4ef784d6230df7486e972e8918d919f005025bc2d9aacba130f58bed7056703000000075265ab52656a52ffffffff02c6f1a9000000000006005251006363cf450c040000000008abab63510053abac00000000", "ac0063ababab515353", 1, 2063905082, "fad092fc98f17c2c20e10ba9a8eb44cc2bcc964b006f4da45cb9ceb249c69698"], + ["94533db7015e70e8df715066efa69dbb9c3a42ff733367c18c22ff070392f988f3b93920820000000006535363636300ce4dac3e03169af80300000000080065ac6a53ac65ac39c050020000000006abacab6aacac708a02050000000005ac5251520000000000", "6553", 0, -360458507, "5418cf059b5f15774836edd93571e0eed3855ba67b2b08c99dccab69dc87d3e9"], + ["c8597ada04f59836f06c224a2640b79f3a8a7b41ef3efa2602592ddda38e7597da6c639fee0300000009005251635351acabacffffffff4c518f347ee694884b9d4072c9e916b1a1f0a7fc74a1c90c63fdf8e5a185b6ae02000000007113af55afb41af7518ea6146786c7c726641c68c8829a52925e8d4afd07d8945f68e7230300000008ab00ab65ab650063ffffffffc28e46d7598312c420e11dfaae12add68b4d85adb182ae5b28f8340185394b63000000000165ffffffff04dbabb7010000000000ee2f6000000000000852ab6500ab6a51acb62a27000000000009ac53515300ac006a6345fb7505000000000752516a0051636a00000000", "", 3, 15199787, "0d66003aff5bf78cf492ecbc8fd40c92891acd58d0a271be9062e035897f317e"], + ["1a28c4f702c8efaad96d879b38ec65c5283b5c084b819ad7db1c086e85e32446c7818dc7a90300000008656351536a525165fa78cef86c982f1aac9c5eb8b707aee8366f74574c8f42ef240599c955ef4401cf578be30200000002ab518893292204c430eb0100000000016503138a0300000000040053abac60e0eb010000000005525200ab63567c2d030000000004abab52006cf81e85", "ab51525152", 1, 2118315905, "4e4c9a781f626b59b1d3ad8f2c488eb6dee8bb19b9bc138bf0dc33e7799210d4"], + ["c6c7a87003f772bcae9f3a0ac5e499000b68703e1804b9ddc3e73099663564d53ddc4e1c6e01000000076a536a6aac63636e3102122f4c30056ef8711a6bf11f641ddfa6984c25ac38c3b3e286e74e839198a80a34010000000165867195cd425821dfa2f279cb1390029834c06f018b1e6af73823c867bf3a0524d1d6923b0300000005acab53ab65ffffffff02fa4c49010000000008ab656a0052650053e001100400000000008836d972", "ac526351acab", 1, 978122815, "a869c18a0edf563d6e5eddd5d5ae8686f41d07f394f95c9feb8b7e52761531ca"], + ["0ea580ac04c9495ab6af3b8d59108bb4194fcb9af90b3511c83f7bb046d87aedbf8423218e02000000085152acac006363ab9063d7dc25704e0caa5edde1c6f2dd137ded379ff597e055b2977b9c559b07a7134fcef2000000000200aca89e50181f86e9854ae3b453f239e2847cf67300fff802707c8e3867ae421df69274449402000000056365abababffffffff47a4760c881a4d7e51c69b69977707bd2fb3bcdc300f0efc61f5840e1ac72cee0000000000ffffffff0460179a020000000004ab53ab52a5250c0500000000096565acac6365ab52ab6c281e02000000000952635100ac006563654e55070400000000046552526500000000", "ab526563acac53ab", 2, 1426964167, "b1c50d58b753e8f6c7513752158e9802cf0a729ebe432b99acc0fe5d9b4e9980"], + ["c33028b301d5093e1e8397270d75a0b009b2a6509a01861061ab022ca122a6ba935b8513320200000000ffffffff013bcf5a0500000000015200000000", "", 0, -513413204, "6b1459536f51482f5dbf42d7e561896557461e1e3b6bf67871e2b51faae2832c"], + ["43b2727901a7dd06dd2abf690a1ccedc0b0739cb551200796669d9a25f24f71d8d101379f50300000000ffffffff0418e031040000000000863d770000000000085352ac526563ac5174929e040000000004ac65ac00ec31ac0100000000066a51ababab5300000000", "65", 0, -492874289, "154ff7a9f0875edcfb9f8657a0b98dd9600fabee3c43eb88af37cf99286d516c"], + ["4763ed4401c3e6ab204bed280528e84d5288f9cac5fb8a2e7bd699c7b98d4df4ac0c40e55303000000066a6aacab5165ffffffff015b57f80400000000046a63535100000000", "ac51abab53", 0, -592611747, "849033a2321b5755e56ef4527ae6f51e30e3bca50149d5707368479723d744f8"], + ["d24f647b02f71708a880e6819a1dc929c1a50b16447e158f8ff62f9ccd644e0ca3c592593702000000050053536a00ffffffff67868cd5414b6ca792030b18d649de5450a456407242b296d936bcf3db79e07b02000000005af6319c016022f50100000000036a516300000000", "6aab526353516a6a", 0, 1350782301, "8556fe52d1d0782361dc28baaf8774b13f3ce5ed486ae0f124b665111e08e3e3"], + ["fe6ddf3a02657e42a7496ef170b4a8caf245b925b91c7840fd28e4a22c03cb459cb498b8d603000000065263656a650071ce6bf8d905106f9f1faf6488164f3decac65bf3c5afe1dcee20e6bc3cb6d052561985a030000000163295b117601343dbb0000000000026563dba521df", "", 1, -1696179931, "d9684685c99ce48f398fb467a91a1a59629a850c429046fb3071f1fa9a5fe816"], + ["c61523ef0129bb3952533cbf22ed797fa2088f307837dd0be1849f20decf709cf98c6f032f03000000026563c0f1d378044338310400000000066363516a5165a14fcb0400000000095163536a6a00ab53657271d60200000000001d953f0500000000010000000000", "53516353005153", 0, 1141615707, "7e975a72db5adaa3c48d525d9c28ac11cf116d0f8b16ce08f735ad75a80aec66"], + ["ba3dac6c0182562b0a26d475fe1e36315f0913b6869bdad0ecf21f1339a5fcbccd32056c840200000000ffffffff04300351050000000000220ed405000000000851abac636565ac53dbbd19020000000007636363ac6a52acbb005a0500000000016abd0c78a8", "63006a635151005352", 0, 1359658828, "47bc8ab070273e1f4a0789c37b45569a6e16f3f3092d1ce94dddc3c34a28f9f4"], + ["ac27e7f5025fc877d1d99f7fc18dd4cadbafa50e34e1676748cc89c202f93abf36ed46362101000000036300abffffffff958cd5381962b765e14d87fc9524d751e4752dd66471f973ed38b9d562e525620100000003006500ffffffff02b67120050000000004ac51516adc330c0300000000015200000000", "656352", 1, 15049991, "f3374253d64ac264055bdbcc32e27426416bd595b7c7915936c70f839e504010"], + ["edb30140029182b80c8c3255b888f7c7f061c4174d1db45879dca98c9aab8c8fed647a6ffc03000000086a53510052ab6300ffffffff82f65f261db62d517362c886c429c8fbbea250bcaad93356be6f86ba573e9d930100000000ffffffff04daaf150400000000016a86d1300100000000096a6353535252ac5165d4ddaf000000000002abab5f1c6201000000000000000000", "ab6a6a00ac", 0, -2058017816, "8d7794703dad18e2e40d83f3e65269834bb293e2d2b8525932d6921884b8f368"], + ["7e50207303146d1f7ad62843ae8017737a698498d4b9118c7a89bb02e8370307fa4fada41d000000000753006300005152b7afefc85674b1104ba33ef2bf37c6ed26316badbc0b4aa6cb8b00722da4f82ff3555a6c020000000900ac656363ac51ac52ffffffff93fab89973bd322c5d7ad7e2b929315453e5f7ada3072a36d8e33ca8bebee6e0020000000300acab930da52b04384b04000000000004650052ac435e380200000000076a6a515263ab6aa9494705000000000600ab6a525252af8ba90100000000096565acab526353536a279b17ad", "acac005263536aac63", 1, -34754133, "4e6357da0057fb7ff79da2cc0f20c5df27ff8b2f8af4c1709e6530459f7972b0"], + ["c05764f40244fb4ebe4c54f2c5298c7c798aa90e62c29709acca0b4c2c6ec08430b26167440100000008acab6a6565005253ffffffffc02c2418f398318e7f34a3cf669d034eef2111ea95b9f0978b01493293293a870100000000e563e2e00238ee8d040000000002acab03fb060200000000076500ac656a516aa37f5534", "52ab6a0065", 1, -2033176648, "83deef4a698b62a79d4877dd9afebc3011a5275dbe06e89567e9ef84e8a4ee19"], + ["5a59e0b9040654a3596d6dab8146462363cd6549898c26e2476b1f6ae42915f73fd9aedfda00000000036363abffffffff9ac9e9ca90be0187be2214251ff08ba118e6bf5e2fd1ba55229d24e50a510d53010000000165ffffffff41d42d799ac4104644969937522873c0834cc2fcdab7cdbecd84d213c0e96fd60000000000ffffffffd838db2c1a4f30e2eaa7876ef778470f8729fcf258ad228b388df2488709f8410300000000fdf2ace002ceb6d903000000000265654c1310040000000003ac00657e91c0ec", "536a63ac", 0, 82144555, "98ccde2dc14d14f5d8b1eeea5364bd18fc84560fec2fcea8de4d88b49c00695e"], + ["156ebc8202065d0b114984ee98c097600c75c859bfee13af75dc93f57c313a877efb09f230010000000463536a51ffffffff81114e8a697be3ead948b43b5005770dd87ffb1d5ccd4089fa6c8b33d3029e9c03000000066a5251656351ffffffff01a87f140000000000050000ac51ac00000000", "00", 0, -362221092, "a903c84d8c5e71134d1ab6dc1e21ac307c4c1a32c90c90f556f257b8a0ec1bf5"], + ["15e37793023c7cbf46e073428908fce0331e49550f2a42b92468827852693f0532a01c29f70200000007005353636351acffffffff38426d9cec036f00eb56ec1dcd193647e56a7577278417b8a86a78ac53199bc403000000056353006a53ffffffff04a25ce103000000000900ab5365656a526a63c8eff7030000000004526353537ab6db0200000000016a11a3fa02000000000651acacab526500000000", "53ac6aab6a6551", 0, 1117532791, "83c68b3c5a89260ce16ce8b4dbf02e1f573c532d9a72f5ea57ab419fa2630214"], + ["f7a09f10027250fc1b70398fb5c6bffd2be9718d3da727e841a73596fdd63810c9e4520a6a010000000963ac516a636a65acac1d2e2c57ab28d311edc4f858c1663972eebc3bbc93ed774801227fda65020a7ec1965f780200000005ac5252516a8299fddc01dcbf7200000000000463ac6551960fda03", "65acab51", 1, 2017321737, "9c5fa02abfd34d0f9dec32bf3edb1089fca70016debdb41f4f54affcb13a2a2a"], + ["6d97a9a5029220e04f4ccc342d8394c751282c328bf1c132167fc05551d4ca4da4795f6d4e02000000076a0052ab525165ffffffff9516a205e555fa2a16b73e6db6c223a9e759a7e09c9a149a8f376c0a7233fa1b0100000007acab51ab63ac6affffffff04868aed04000000000652ac65ac536a396edf01000000000044386c0000000000076aab5363655200894d48010000000001ab8ebefc23", "6351526aac51", 1, 1943666485, "f0bd4ca8e97203b9b4e86bc24bdc8a1a726db5e99b91000a14519dc83fc55c29"], + ["8e3fddfb028d9e566dfdda251cd874cd3ce72e9dde837f95343e90bd2a93fe21c5daeb5eed01000000045151525140517dc818181f1e7564b8b1013fd68a2f9a56bd89469686367a0e72c06be435cf99db750000000003635251ffffffff01c051780300000000096552ababac6a65acab099766eb", "5163ab6a52ababab51", 1, 1296295812, "5509eba029cc11d7dd2808b8c9eb47a19022b8d8b7778893459bbc19ab7ea820"], + ["a603f37b02a35e5f25aae73d0adc0b4b479e68a734cf722723fd4e0267a26644c36faefdab0200000000ffffffff43374ad26838bf733f8302585b0f9c22e5b8179888030de9bdda180160d770650200000001004c7309ce01379099040000000005526552536500000000", "abababab005153", 0, 1409936559, "4ca73da4fcd5f1b10da07998706ffe16408aa5dff7cec40b52081a6514e3827e"], + ["9eeedaa8034471a3a0e3165620d1743237986f060c4434f095c226114dcb4b4ec78274729f03000000086a5365510052ac6afb505af3736e347e3f299a58b1b968fce0d78f7457f4eab69240cbc40872fd61b5bf8b120200000002ac52df8247cf979b95a4c97ecb8edf26b3833f967020cd2fb25146a70e60f82c9ee4b14e88b103000000008459e2fa0125cbcd05000000000000000000", "52ab5352006353516a", 0, -1832576682, "fb018ae54206fdd20c83ae5873ec82b8e320a27ed0d0662db09cda8a071f9852"], + ["05921d7c048cf26f76c1219d0237c226454c2a713c18bf152acc83c8b0647a94b13477c07f0300000003ac526afffffffff2f494453afa0cabffd1ba0a626c56f90681087a5c1bd81d6adeb89184b27b7402000000036a6352ffffffff0ad10e2d3ce355481d1b215030820da411d3f571c3f15e8daf22fe15342fed04000000000095f29f7b93ff814a9836f54dc6852ec414e9c4e16a506636715f569151559100ccfec1d100000000055263656a53ffffffff04f4ffef010000000008ac6a6aabacabab6a0e6689040000000006ab536a5352abe364d005000000000965536363655251ab53807e00010000000004526aab63f18003e3", "6363ac51", 3, -375891099, "001b0b176f0451dfe2d9787b42097ceb62c70d324e925ead4c58b09eebdf7f67"], + ["b9b44d9f04b9f15e787d7704e6797d51bc46382190c36d8845ec68dfd63ee64cf7a467b21e00000000096aac00530052ab636aba1bcb110a80c5cbe073f12c739e3b20836aa217a4507648d133a8eedd3f02cb55c132b203000000076a000063526352b1c288e3a9ff1f2da603f230b32ef7c0d402bdcf652545e2322ac01d725d75f5024048ad0100000000ffffffffffd882d963be559569c94febc0ef241801d09dc69527c9490210f098ed8203c700000000056a006300ab9109298d01719d9a0300000000066a52ab006365d7894c5b", "ac6351650063636a", 3, -622355349, "ac87b1b93a6baab6b2c6624f10e8ebf6849b0378ef9660a3329073e8f5553c8d"], + ["ff60473b02574f46d3e49814c484081d1adb9b15367ba8487291fc6714fd6e3383d5b335f001000000026a6ae0b82da3dc77e5030db23d77b58c3c20fa0b70aa7d341a0f95f3f72912165d751afd57230300000008ac536563516a6363ffffffff04f86c0200000000000553acab636ab13111000000000003510065f0d3f305000000000951ab516a65516aabab730a3a010000000002515200000000", "ac6a", 1, 1895032314, "0767e09bba8cd66d55915677a1c781acd5054f530d5cf6de2d34320d6c467d80"], + ["f218026204f4f4fc3d3bd0eada07c57b88570d544a0436ae9f8b753792c0c239810bb30fbc0200000002536affffffff8a468928d6ec4cc10aa0f73047697970e99fa64ae8a3b4dca7551deb0b639149010000000851ab520052650051ffffffffa98dc5df357289c9f6873d0f5afcb5b030d629e8f23aa082cf06ec9a95f3b0cf0000000000ffffffffea2c2850c5107705fd380d6f29b03f533482fd036db88739122aac9eff04e0aa010000000365536a03bd37db034ac4c4020000000007515152655200ac33b27705000000000151efb71e0000000000007b65425b", "515151", 3, -1772252043, "de35c84a58f2458c33f564b9e58bc57c3e028d629f961ad1b3c10ee020166e5a"], + ["48e7d42103b260b27577b70530d1ac2fed2551e9dd607cbcf66dca34bb8c03862cf8f5fd5401000000075151526aacab00ffffffff1e3d3b841552f7c6a83ee379d9d66636836673ce0b0eda95af8f2d2523c91813030000000665acac006365ffffffff388b3c386cd8c9ef67c83f3eaddc79f1ff910342602c9152ffe8003bce51b28b0100000008636363006a636a52ffffffff04b8f67703000000000852005353ac6552520cef720200000000085151ab6352ab00ab5096d6030000000005516a005100662582020000000001ac6c137280", "6a65", 1, 1513618429, "e2fa3e1976aed82c0987ab30d4542da2cb1cffc2f73be13480132da8c8558d5c"], + ["91ebc4cf01bc1e068d958d72ee6e954b196f1d85b3faf75a521b88a78021c543a06e056279000000000265ab7c12df0503832121030000000000cc41a6010000000005ab5263516540a951050000000006ab63ab65acac00000000", "526a0065636a6a6aac", 0, -614046478, "7de4ba875b2e584a7b658818c112e51ee5e86226f5a80e5f6b15528c86400573"], + ["3cd4474201be7a6c25403bf00ca62e2aa8f8f4f700154e1bb4d18c66f7bb7f9b975649f0dc0100000006535151535153ffffffff01febbeb000000000006005151006aac00000000", "", 0, -1674687131, "6b77ca70cc452cc89acb83b69857cda98efbfc221688fe816ef4cb4faf152f86"], + ["92fc95f00307a6b3e2572e228011b9c9ed41e58ddbaefe3b139343dbfb3b34182e9fcdc3f50200000002acab847bf1935fde8bcfe41c7dd99683289292770e7f163ad09deff0e0665ed473cd2b56b0f40300000006516551ab6351294dab312dd87b9327ce2e95eb44b712cfae0e50fda15b07816c8282e8365b643390eaab01000000026aacffffffff016e0b6b040000000001ac00000000", "650065acac005300", 2, -1885164012, "bd7d26bb3a98fc8c90c972500618bf894cb1b4fe37bf5481ff60eef439d3b970"], + ["4db591ab018adcef5f4f3f2060e41f7829ce3a07ea41d681e8cb70a0e37685561e4767ac3b0000000005000052acabd280e63601ae6ef20000000000036a636326c908f7", "ac6a51526300630052", 0, 862877446, "355ccaf30697c9c5b966e619a554d3323d7494c3ea280a9b0dfb73f953f5c1cb"], + ["503fd5ef029e1beb7b242d10032ac2768f9a1aca0b0faffe51cec24770664ec707ef7ede4f01000000045253ac53375e350cc77741b8e96eb1ce2d3ca91858c052e5f5830a0193200ae2a45b413dda31541f0000000003516553ffffffff0175a5ba0500000000015200000000", "6aab65510053ab65", 1, 1603081205, "353ca9619ccb0210ae18b24d0e57efa7abf8e58fa6f7102738e51e8e72c9f0c4"], + ["c80abebd042cfec3f5c1958ee6970d2b4586e0abec8305e1d99eb9ee69ecc6c2cbd76374380000000007ac53006300ac510acee933b44817db79320df8094af039fd82111c7726da3b33269d3820123694d849ee5001000000056a65ab526562699bea8530dc916f5d61f0babea709dac578774e8a4dcd9c640ec3aceb6cb2443f24f302000000020063ea780e9e57d1e4245c1e5df19b4582f1bf704049c5654f426d783069bcc039f2d8fa659f030000000851ab53635200006a8d00de0b03654e8500000000000463ab635178ebbb0400000000055100636aab239f1d030000000006ab006300536500000000", "6565ac515100", 3, 1460851377, "b35bb1b72d02fab866ed6bbbea9726ab32d968d33a776686df3ac16aa445871e"], + ["0337b2d5043eb6949a76d6632b8bb393efc7fe26130d7409ef248576708e2d7f9d0ced9d3102000000075352636a5163007034384dfa200f52160690fea6ce6c82a475c0ef1caf5c9e5a39f8f9ddc1c8297a5aa0eb02000000026a51ffffffff38e536298799631550f793357795d432fb2d4231f4effa183c4e2f61a816bcf0030000000463ac5300706f1cd3454344e521fde05b59b96e875c8295294da5d81d6cc7efcfe8128f150aa54d6503000000008f4a98c704c1561600000000000072cfa6000000000000e43def01000000000100cf31cc0500000000066365526a6500cbaa8e2e", "", 3, 2029506437, "7615b4a7b3be865633a31e346bc3db0bcc410502c8358a65b8127089d81b01f8"], + ["59f6cffd034733f4616a20fe19ea6aaf6abddb30b408a3a6bd86cd343ab6fe90dc58300cc90200000000ffffffffc835430a04c3882066abe7deeb0fa1fdaef035d3233460c67d9eabdb05e95e5a02000000080065ac535353ab00ffffffff4b9a043e89ad1b4a129c8777b0e8d87a014a0ab6a3d03e131c27337bbdcb43b402000000066a5100abac6ad9e9bf62014bb118010000000001526cbe484f", "ab526352ab65", 0, 2103515652, "4f2ccf981598639bec57f885b4c3d8ea8db445ea6e61cfd45789c69374862e5e"], + ["cbc79b10020b15d605680a24ee11d8098ad94ae5203cb6b0589e432832e20c27b72a926af20300000006ab65516a53acbb854f3146e55c508ece25fa3d99dbfde641a58ed88c051a8a51f3dacdffb1afb827814b02000000026352c43e6ef30302410a020000000000ff4bd90100000000065100ab63000008aa8e0400000000095265526565ac5365abc52c8a77", "53526aac0051", 0, 202662340, "984efe0d8d12e43827b9e4b27e97b3777ece930fd1f589d616c6f9b71dab710e"], + ["7c07419202fa756d29288c57b5c2b83f3c847a807f4a9a651a3f6cd6c46034ae0aa3a7446b0200000004ab6a6365ffffffff9da83cf4219bb96c76f2d77d5df31c1411a421171d9b59ec02e5c1218f29935403000000008c13879002f8b1ac0400000000086a63536a636553653c584f02000000000000000000", "abac53ab656363", 1, -1038419525, "4a74f365a161bc6c9bddd249cbd70f5dadbe3de70ef4bd745dcb6ee1cd299fbd"], + ["351cbb57021346e076d2a2889d491e9bfa28c54388c91b46ee8695874ad9aa576f1241874d0200000008ab6563525300516affffffffe13e61b8880b8cd52be4a59e00f9723a4722ea58013ec579f5b3693b9e115b1100000000096363abac5252635351ffffffff027fee02040000000008ab6a5200ab006a65b85f130200000000086a52630053ab52ab00000000", "ab6aab65", 1, 586415826, "08bbb746a596991ab7f53a76e19acad087f19cf3e1db54054aab403c43682d09"], + ["a8252ea903f1e8ff953adb16c1d1455a5036222c6ea98207fc21818f0ece2e1fac310f9a0100000000095163ac635363ac0000be6619e9fffcde50a0413078821283ce3340b3993ad00b59950bae7a9f931a9b0a3a035f010000000463005300b8b0583fbd6049a1715e7adacf770162811989f2be20af33f5f60f26eba653dc26b024a00000000006525351636552ffffffff046d2acc030000000002636a9a2d430500000000080065005165ab53abecf63204000000000052b9ed050000000008acacac53ab65656500000000", "65ab53635253636a51", 2, 1442639059, "8ca11838775822f9a5beee57bdb352f4ee548f122de4a5ca61c21b01a1d50325"], + ["2f1a425c0471a5239068c4f38f9df135b1d24bf52d730d4461144b97ea637504495aec360801000000055300515365c71801dd1f49f376dd134a9f523e0b4ae611a4bb122d8b26de66d95203f181d09037974300000000025152ffffffff9bdcea7bc72b6e5262e242c94851e3a5bf8f314b3e5de0e389fc9e5b3eadac030000000009525265655151005153ffffffffdbb53ce99b5a2320a4e6e2d13b01e88ed885a0957d222e508e9ec8e4f83496cb0200000007635200abac63ac04c96237020cc5490100000000080000516a51ac6553074a360200000000025152225520ca", "6551ab65ac65516a", 1, -489869549, "9bc5bb772c553831fb40abe466074e59a469154679c7dee042b8ea3001c20393"], + ["ef3acfd4024defb48def411b8f8ba2dc408dc9ee97a4e8bde4d6cb8e10280f29c98a6e8e9103000000035100513d5389e3d67e075469dfd9f204a7d16175653a149bd7851619610d7ca6eece85a516b2df0300000005516aac6552ca678bdf02f477f003000000000057e45b0300000000055252525252af35c20a", "5165ac53ab", 1, -1900839569, "78eb6b24365ac1edc386aa4ffd15772f601059581c8776c34f92f8a7763c9ccf"], + ["ff4468dc0108475fc8d4959a9562879ce4ab4867a419664bf6e065f17ae25043e6016c70480100000000ffffffff02133c6f0400000000000bd0a8020000000004006a520035afa4f6", "51ac65ab", 0, -537664660, "f6da59b9deac63e83728850ac791de61f5dfcaeed384ebcbb20e44afcd8c8910"], + ["4e8594d803b1d0a26911a2bcdd46d7cbc987b7095a763885b1a97ca9cbb747d32c5ab9aa91030000000353ac53a0cc4b215e07f1d648b6eeb5cdbe9fa32b07400aa773b9696f582cebfd9930ade067b2b200000000060065abab6500fc99833216b8e27a02defd9be47fafae4e4a97f52a9d2a210d08148d2a4e5d02730bcd460100000004516351ac37ce3ae1033baa55040000000006006a636a63acc63c990400000000025265eb1919030000000005656a6a516a00000000", "", 1, -75217178, "04c5ee48514cd033b82a28e336c4d051074f477ef2675ce0ce4bafe565ee9049"], + ["a88830a7023f13ed19ab14fd757358eb6af10d6520f9a54923a6d613ac4f2c11e249cda8aa030000000851630065abababacffffffff8f5fe0bc04a33504c4b47e3991d25118947a0261a9fa520356731eeabd561dd3020000000363ababffffffff038404bd010000000008ab5153516aab6a63d33a5601000000000263004642dc020000000009655152acac636352004be6f3af", "5253536565006aab6a", 0, 1174417836, "2e42ead953c9f4f81b72c27557e6dc7d48c37ff2f5c46c1dbe9778fb0d79f5b2"], + ["44e1a2b4010762af23d2027864c784e34ef322b6e24c70308a28c8f2157d90d17b99cd94a401000000085163656565006300ffffffff0198233d020000000002000000000000", "52525153656365", 0, 1119696980, "d9096de94d70c6337da6202e6e588166f31bff5d51bb5adc9468594559d65695"], + ["44ca65b901259245abd50a745037b17eb51d9ce1f41aa7056b4888285f48c6f26cb97b7a25020000000552636363abffffffff047820350400000000040053acab14f3e603000000000652635100ab630ce66c03000000000001bdc704000000000765650065ac51ac3e886381", "51", 0, -263340864, "ed5622ac642d11f90e68c0feea6a2fe36d880ecae6b8c0d89c4ea4b3d162bd90"], + ["cfa147d2017fe84122122b4dda2f0d6318e59e60a7207a2d00737b5d89694d480a2c26324b0000000006006351526552ffffffff0456b5b804000000000800516aab525363ab166633000000000004655363ab254c0e02000000000952ab6a6a00ab525151097c1b020000000009656a52ac6300530065ad0d6e50", "6a535165ac6a536500", 0, -574683184, "f926d4036eac7f019a2b0b65356c4ee2fe50e089dd7a70f1843a9f7bc6997b35"], + ["91c5d5f6022fea6f230cc4ae446ce040d8313071c5ac1749c82982cc1988c94cb1738aa48503000000016a19e204f30cb45dd29e68ff4ae160da037e5fc93538e21a11b92d9dd51cf0b5efacba4dd70000000005656a6aac51ffffffff03db126905000000000953006a53ab6563636a36a273030000000006656a52656552b03ede00000000000352516500000000", "530052526a00", 1, 1437328441, "255c125b60ee85f4718b2972174c83588ee214958c3627f51f13b5fb56c8c317"], + ["03f20dc202c886907b607e278731ebc5d7373c348c8c66cac167560f19b341b782dfb634cb03000000076a51ac6aab63abea3e8de7adb9f599c9caba95aa3fa852e947fc88ed97ee50e0a0ec0d14d164f44c0115c10100000004ab5153516fdd679e0414edbd000000000005ac636a53512021f2040000000007006a0051536a52c73db2050000000005525265ac5369046e000000000003ab006a1ef7bd1e", "52656a", 0, 1360223035, "5a0a05e32ce4cd0558aabd5d79cd5fcbffa95c07137506e875a9afcba4bef5a2"], + ["d9611140036881b61e01627078512bc3378386e1d4761f959d480fdb9d9710bebddba2079d020000000763536aab5153ab819271b41e228f5b04daa1d4e72c8e1955230accd790640b81783cfc165116a9f535a74c000000000163ffffffffa2e7bb9a28e810624c251ff5ba6b0f07a356ac082048cf9f39ec036bba3d431a02000000076a000000ac65acffffffff01678a820000000000085363515153ac635100000000", "535353", 2, -82213851, "52b9e0778206af68998cbc4ebdaad5a9469e04d0a0a6cef251abfdbb74e2f031"], + ["98b3a0bf034233afdcf0df9d46ac65be84ef839e58ee9fa59f32daaa7d684b6bdac30081c60200000007636351acabababffffffffc71cf82ded4d1593e5825618dc1d5752ae30560ecfaa07f192731d68ea768d0f0100000006650052636563f3a2888deb5ddd161430177ce298242c1a86844619bc60ca2590d98243b5385bc52a5b8f00000000095365acacab520052ac50d4722801c3b8a60300000000035165517e563b65", "51", 1, -168940690, "b6b684e2d2ecec8a8dce4ed3fc1147f8b2e45732444222aa8f52d860c2a27a9d"], + ["97be4f7702dc20b087a1fdd533c7de762a3f2867a8f439bddf0dcec9a374dfd0276f9c55cc0300000000cdfb1dbe6582499569127bda6ca4aaff02c132dc73e15dcd91d73da77e92a32a13d1a0ba0200000002ab51ffffffff048cfbe202000000000900516351515363ac535128ce0100000000076aac5365ab6aabc84e8302000000000863536a53ab6a6552f051230500000000066aac535153510848d813", "ac51", 0, 229541474, "e5da9a416ea883be1f8b8b2d178463633f19de3fa82ae25d44ffb531e35bdbc8"], + ["085b6e04040b5bff81e29b646f0ed4a45e05890a8d32780c49d09643e69cdccb5bd81357670100000001abffffffffa5c981fe758307648e783217e3b4349e31a557602225e237f62b636ec26df1a80300000004650052ab4792e1da2930cc90822a8d2a0a91ea343317bce5356b6aa8aae6c3956076aa33a5351a9c0300000004abac5265e27ddbcd472a2f13325cc6be40049d53f3e266ac082172f17f6df817db1936d9ff48c02b000000000152ffffffff021aa7670500000000085353635163ab51ac14d584000000000001aca4d136cc", "6a525300536352536a", 0, -1398925877, "41ecca1e8152ec55074f4c39f8f2a7204dda48e9ec1e7f99d5e7e4044d159d43"], + ["eec32fff03c6a18b12cd7b60b7bdc2dd74a08977e53fdd756000af221228fe736bd9c42d870100000007005353ac515265ffffffff037929791a188e9980e8b9cc154ad1b0d05fb322932501698195ab5b219488fc02000000070063510065ab6a0bfc176aa7e84f771ea3d45a6b9c24887ceea715a0ff10ede63db8f089e97d927075b4f1000000000551abab63abffffffff02eb933c000000000000262c420000000000036563632549c2b6", "6352", 2, 1480445874, "ff8a4016dfdd918f53a45d3a1f62b12c407cd147d68ca5c92b7520e12c353ff5"], + ["98ea7eac0313d9fb03573fb2b8e718180c70ce647bebcf49b97a8403837a2556cb8c9377f30000000004ac53ac65ffffffff8caac77a5e52f0d8213ef6ce998bedbb50cfdf108954771031c0e0cd2a78423900000000010066e99a44937ebb37015be3693761078ad5c73aa73ec623ac7300b45375cc8eef36087eb80000000007515352acac5100ffffffff0114a51b02000000000000000000", "6aacab", 0, 243527074, "bad77967f98941af4dd52a8517d5ad1e32307c0d511e15461e86465e1b8b5273"], + ["3ab70f4604e8fc7f9de395ec3e4c3de0d560212e84a63f8d75333b604237aa52a10da17196000000000763526a6553ac63a25de6fd66563d71471716fe59087be0dde98e969e2b359282cf11f82f14b00f1c0ac70f02000000050052516aacdffed6bb6889a13e46956f4b8af20752f10185838fd4654e3191bf49579c961f5597c36c0100000005ac636363abc3a1785bae5b8a1b4be5d0cbfadc240b4f7acaa7dfed6a66e852835df5eb9ac3c553766801000000036a65630733b7530218569602000000000952006a6a6a51acab52777f06030000000007ac0063530052abc08267c9", "000000536aac0000", 1, 1919096509, "df1c87cf3ba70e754d19618a39fdbd2970def0c1bfc4576260cba5f025b87532"], + ["bdb6b4d704af0b7234ced671c04ba57421aba7ead0a117d925d7ebd6ca078ec6e7b93eea6600000000026565ffffffff3270f5ad8f46495d69b9d71d4ab0238cbf86cc4908927fbb70a71fa3043108e6010000000700516a65655152ffffffff6085a0fdc03ae8567d0562c584e8bfe13a1bd1094c518690ebcb2b7c6ce5f04502000000095251530052536a53aba576a37f2c516aad9911f687fe83d0ae7983686b6269b4dd54701cb5ce9ec91f0e6828390300000000ffffffff04cc76cc020000000002656a01ffb702000000000253ab534610040000000009acab006565516a00521f55f5040000000000389dfee9", "6a525165", 0, 1336204763, "71c294523c48fd7747eebefbf3ca06e25db7b36bff6d95b41c522fecb264a919"], + ["54258edd017d22b274fbf0317555aaf11318affef5a5f0ae45a43d9ca4aa652c6e85f8a040010000000953ac65ab5251656500ffffffff03321d450000000000085265526a51526a529ede8b030000000003635151ce6065020000000001534c56ec1b", "acac", 0, 2094130012, "110d90fea9470dfe6c5048f45c3af5e8cc0cb77dd58fd13d338268e1c24b1ccc"], + ["ce0d322e04f0ffc7774218b251530a7b64ebefca55c90db3d0624c0ff4b3f03f918e8cf6f60300000003656500ffffffff9cce943872da8d8af29022d0b6321af5fefc004a281d07b598b95f6dcc07b1830200000007abab515351acab8d926410e69d76b7e584aad1470a97b14b9c879c8b43f9a9238e52a2c2fefc2001c56af8010000000400ab5253cd2cd1fe192ce3a93b5478af82fa250c27064df82ba416dfb0debf4f0eb307a746b6928901000000096500abacac6a0063514214524502947efc0200000000035251652c40340100000000096a6aab52000052656a5231c54c", "51", 2, -2090320538, "0322ca570446869ec7ec6ad66d9838cff95405002d474c0d3c17708c7ee039c6"], + ["47ac54940313430712ebb32004679d3a512242c2b33d549bf5bbc8420ec1fd0850ed50eb6d0300000009536aac6a65acacab51ffffffffb843e44266ce2462f92e6bff54316661048c8c17ecb092cb493b39bfca9117850000000001519ab348c05e74ebc3f67423724a3371dd99e3bceb4f098f8860148f48ad70000313c4c223000000000653006565656512c2d8dc033f3c97010000000002636aa993aa010000000006526365ab526ab7cf560300000000076a0065ac6a526500000000", "005352535300ab6a", 2, 59531991, "8b5b3d00d9c658f062fe6c5298e54b1fe4ed3a3eab2a87af4f3119edc47b1691"], + ["233cd90b043916fc41eb870c64543f0111fb31f3c486dc72457689dea58f75c16ae59e9eb2000000000500536a6a6affffffff9ae30de76be7cd57fb81220fce78d74a13b2dbcad4d023f3cadb3c9a0e45a3ce000000000965ac6353ac5165515130834512dfb293f87cb1879d8d1b20ebad9d7d3d5c3e399a291ce86a3b4d30e4e32368a9020000000453005165ffffffff26d84ae93eb58c81158c9b3c3cbc24a84614d731094f38d0eea8686dec02824d0300000005636a65abacf02c784001a0bd5d03000000000900655351ab65ac516a416ef503", "", 1, -295106477, "b79f31c289e95d9dadec48ebf88e27c1d920661e50d090e422957f90ff94cb6e"], + ["9200e26b03ff36bc4bf908143de5f97d4d02358db642bd5a8541e6ff709c420d1482d471b70000000008abab65536a636553ffffffff61ba6d15f5453b5079fb494af4c48de713a0c3e7f6454d7450074a2a80cb6d880300000007ac6a00ab5165515dfb7574fbce822892c2acb5d978188b1d65f969e4fe874b08db4c791d176113272a5cc10100000000ffffffff0420958d000000000009ac63516a0063516353dd885505000000000465ac00007b79e901000000000066d8bf010000000005525252006a00000000", "ac5152", 0, 2089531339, "89ec7fab7cfe7d8d7d96956613c49dc48bf295269cfb4ea44f7333d88c170e62"], + ["45f335ba01ce2073a8b0273884eb5b48f56df474fc3dff310d9706a8ac7202cf5ac188272103000000025363ffffffff049d859502000000000365ab6a8e98b1030000000002ac51f3a80603000000000752535151ac00000306e30300000000020051b58b2b3a", "", 0, 1899564574, "78e01310a228f645c23a2ad0acbb8d91cedff4ecdf7ca997662c6031eb702b11"], + ["d8f652a6043b4faeada05e14b81756cd6920cfcf332e97f4086961d49232ad6ffb6bc6c097000000000453526563ffffffff1ea4d60e5e91193fbbc1a476c8785a79a4c11ec5e5d6c9950c668ceacfe07a15020000000352ab51fffffffffe029a374595c4edd382875a8dd3f20b9820abb3e93f877b622598d11d0b09e503000000095351000052ac515152ffffffff9d65fea491b979699ceb13caf2479cd42a354bd674ded3925e760758e85a756803000000046365acabffffffff0169001d00000000000651636a65656300000000", "ab0063630000ac", 3, 1050965951, "4cc85cbc2863ee7dbce15490d8ca2c5ded61998257b9eeaff968fe38e9f009ae"], + ["718662be026e1dcf672869ac658fd0c87d6835cfbb34bd854c44e577d5708a7faecda96e260300000004526a636a489493073353b678549adc7640281b9cbcb225037f84007c57e55b874366bb7b0fa03bdc00000000095165ababac65ac00008ab7f2a802eaa53d000000000007acac516aac526ae92f380100000000056aac00536500000000", "ab00", 1, 43296088, "2d642ceee910abff0af2116af75b2e117ffb7469b2f19ad8fef08f558416d8f7"], + ["94083c840288d40a6983faca876d452f7c52a07de9268ad892e70a81e150d602a773c175ad03000000007ec3637d7e1103e2e7e0c61896cbbf8d7e205b2ecc93dd0d6d7527d39cdbf6d335789f660300000000ffffffff019e1f7b03000000000800ac0051acac0053539cb363", "", 1, -183614058, "a17b66d6bb427f42653d08207a22b02353dd19ccf2c7de6a9a3a2bdb7c49c9e7"], + ["30e0d4d20493d0cd0e640b757c9c47a823120e012b3b64c9c1890f9a087ae4f2001ca22a61010000000152f8f05468303b8fcfaad1fb60534a08fe90daa79bff51675472528ebe1438b6f60e7f60c10100000009526aab6551ac510053ffffffffaaab73957ea2133e32329795221ed44548a0d3a54d1cf9c96827e7cffd1706df0200000009ab00526a005265526affffffffd19a6fe54352015bf170119742821696f64083b5f14fb5c7d1b5a721a3d7786801000000085265abababac53abffffffff020f39bd030000000004ab6aac52049f6c050000000004ab52516aba5b4c60", "6a6365516a6a655253", 0, -624256405, "8e221a6c4bf81ca0d8a0464562674dcd14a76a32a4b7baf99450dd9195d411e6"], + ["f9c69d940276ec00f65f9fe08120fc89385d7350388508fd80f4a6ba2b5d4597a9e21c884f010000000663ab63ababab15473ae6d82c744c07fc876ecd53bd0f3018b2dbedad77d757d5bdf3811b23d294e8c0170000000001abafababe00157ede2050000000006ac6a5263635300000000", "ab53", 1, 606547088, "714d8b14699835b26b2f94c58b6ea4c53da3f7adf0c62ea9966b1e1758272c47"], + ["5c0ac112032d6885b7a9071d3c5f493aa16c610a4a57228b2491258c38de8302014276e8be030000000300ab6a17468315215262ad5c7393bb5e0c5a6429fd1911f78f6f72dafbbbb78f3149a5073e24740300000003ac5100ffffffff33c7a14a062bdea1be3c9c8e973f54ade53fe4a69dcb5ab019df5f3345050be00100000008ac63655163526aab428defc0033ec36203000000000765516365536a00ae55b2000000000002ab53f4c0080400000000095265516a536563536a00000000", "6a005151006a", 2, 272749594, "91082410630337a5d89ff19145097090f25d4a20bdd657b4b953927b2f62c73b"], + ["e3683329026720010b08d4bec0faa244f159ae10aa582252dd0f3f80046a4e145207d54d31000000000852acac52656aacac3aaf2a5017438ad6adfa3f9d05f53ebed9ceb1b10d809d507bcf75e0604254a8259fc29c020000000653526552ab51f926e52c04b44918030000000000f7679c0100000000090000525152005365539e3f48050000000009516500ab635363ab008396c905000000000253650591024f", "6a6365", 0, 908746924, "458aec3b5089a585b6bad9f99fd37a2b443dc5a2eefac2b7e8c5b06705efc9db"], + ["48c4afb204204209e1df6805f0697edaa42c0450bbbd767941fe125b9bc40614d63d757e2203000000066a5363005152dc8b6a605a6d1088e631af3c94b8164e36e61445e2c60130292d81dabd30d15f54b355a802000000036a6353ffffffff1d05dcec4f3dedcfd02c042ce5d230587ee92cb22b52b1e59863f3717df2362f0300000005536552ac52ffffffffd4d71c4f0a7d53ba47bb0289ca79b1e33d4c569c1e951dd611fc9c9c1ca8bc6c030000000865536a65ab51abacffffffff042f9aa905000000000753655153656351ab93d8010000000002655337440e0300000000005d4c690000000000015278587acb", "ab006565526a51", 0, 1502064227, "bbed77ff0f808aa8abd946ba9e7ec1ddb003a969fa223dee0af779643cb841a9"], + ["00b20fd104dd59705b84d67441019fa26c4c3dec5fd3b50eca1aa549e750ef9ddb774dcabe000000000651ac656aac65ffffffff52d4246f2db568fc9eea143e4d260c698a319f0d0670f84c9c83341204fde48b0200000000ffffffffb8aeabb85d3bcbc67b132f1fd815b451ea12dcf7fc169c1bc2e2cf433eb6777a03000000086a51ac6aab6563acd510d209f413da2cf036a31b0def1e4dcd8115abf2e511afbcccb5ddf41d9702f28c52900100000006ac52ab6a0065ffffffff039c8276000000000008ab53655200656a52401561010000000003acab0082b7160100000000035100ab00000000", "535265", 1, -947367579, "3212c6d6dd8d9d3b2ac959dec11f4638ccde9be6ed5d36955769294e23343da0"], + ["455131860220abbaa72015519090a666faf137a0febce7edd49da1eada41feab1505a0028b02000000036365ab453ead4225724eb69beb590f2ec56a7693a608871e0ab0c34f5e96157f90e0a96148f3c502000000085251ab51535163acffffffff022d1249040000000009abac00acac6565630088b310040000000000e3920e59", "5152ab6a52ac5152", 0, 294375737, "c40fd7dfa72321ac79516502500478d09a35cc22cc264d652c7d18b14400b739"], + ["624d28cb02c8747915e9af2b13c79b417eb34d2fa2a73547897770ace08c6dd9de528848d3030000000651ab63abab533c69d3f9b75b6ef8ed2df50c2210fd0bf4e889c42477d58682f711cbaece1a626194bb85030000000765acab53ac5353ffffffff018cc280040000000009abacabac52636352ac6859409e", "ac51ac", 1, 1005144875, "919144aada50db8675b7f9a6849c9d263b86450570293a03c245bd1e3095e292"], + ["8f28471d02f7d41b2e70e9b4c804f2d90d23fb24d53426fa746bcdcfffea864925bdeabe3e0200000001acffffffff76d1d35d04db0e64d65810c808fe40168f8d1f2143902a1cc551034fd193be0e0000000001acffffffff048a5565000000000005005151516afafb610400000000045263ac53648bb30500000000086363516a6a5165513245de01000000000000000000", "6a0053510053", 1, -1525137460, "305fc8ff5dc04ebd9b6448b03c9a3d945a11567206c8d5214666b30ec6d0d6cc"], + ["10ec50d7046b8b40e4222a3c6449490ebe41513aad2eca7848284a08f3069f3352c2a9954f0000000009526aac656352acac53ffffffff0d979f236155aa972472d43ee6f8ce22a2d052c740f10b59211454ff22cb7fd00200000007acacacab63ab53ffffffffbbf97ebde8969b35725b2e240092a986a2cbfd58de48c4475fe077bdd493a20c010000000663ab5365ababffffffff4600722d33b8dba300d3ad037bcfc6038b1db8abfe8008a15a1de2da2264007302000000035351ac6dbdafaf020d0ccf04000000000663ab6a51ab6ae06e5e0200000000036aabab00000000", "", 0, -1658960232, "2420dd722e229eccafae8508e7b8d75c6920bfdb3b5bac7cb8e23419480637c2"], + ["fef98b7101bf99277b08a6eff17d08f3fcb862e20e13138a77d66fba55d54f26304143e5360100000006515365abab00ffffffff04265965030000000004655252ace2c775010000000001002b23b4040000000007516a5153ab53ac456a7a00000000000753ab525251acacba521291", "526aacacab00abab53", 0, -1614097109, "4370d05c07e231d6515c7e454a4e401000b99329d22ed7def323976fa1d2eeb5"], + ["34a2b8830253661b373b519546552a2c3bff7414ea0060df183b1052683d78d8f54e842442000000000152ffffffffd961a8e34cf374151058dfcddc86509b33832bc57267c63489f69ff01199697c0300000002abacba856cfb01b17c2f050000000008515365ac53ab000000000000", "5263ab656a", 1, -2104480987, "2f9993e0a84a6ca560d6d1cc2b63ffe7fd71236d9cfe7d809491cef62bbfad84"], + ["43559290038f32fda86580dd8a4bc4422db88dd22a626b8bd4f10f1c9dd325c8dc49bf479f01000000026351ffffffff401339530e1ed3ffe996578a17c3ec9d6fccb0723dd63e7b3f39e2c44b976b7b0300000006ab6a65656a51ffffffff6fb9ba041c96b886482009f56c09c22e7b0d33091f2ac5418d05708951816ce7000000000551ac525100ffffffff020921e40500000000035365533986f40500000000016a00000000", "52ac51", 0, 1769771809, "02040283ef2291d8e1f79bb71bdabe7c1546c40d7ed615c375643000a8b9600d"], + ["6878a6bd02e7e1c8082d5e3ee1b746cfebfac9e8b97e61caa9e0759d8a8ecb3743e36a30de0100000002ab532a911b0f12b73e0071f5d50b6bdaf783f4b9a6ce90ec0cad9eecca27d5abae188241ddec0200000001651c7758d803f7457b0500000000036551515f4e90000000000001007022080200000000035365acc86b6946", "6351ab", 0, -1929374995, "f24be499c58295f3a07f5f1c6e5084496ae160450bd61fdb2934e615289448f1"], + ["35b6fc06047ebad04783a5167ab5fc9878a00c4eb5e7d70ef297c33d5abd5137a2dea9912402000000036aacacffffffff21dc291763419a584bdb3ed4f6f8c60b218aaa5b99784e4ba8acfec04993e50c03000000046a00ac6affffffff69e04d77e4b662a82db71a68dd72ef0af48ca5bebdcb40f5edf0caf591bb41020200000000b5db78a16d93f5f24d7d932f93a29bb4b784febd0cbb1943f90216dc80bba15a0567684b000000000853ab52ab5100006a1be2208a02f6bdc103000000000265ab8550ea04000000000365636a00000000", "", 0, -1114114836, "1c8655969b241e717b841526f87e6bd68b2329905ba3fc9e9f72526c0b3ea20c"], + ["bebb90c302bf91fd4501d33555a5fc5f2e1be281d9b7743680979b65c3c919108cc2f517510100000003abab00ffffffff969c30053f1276550532d0aa33cfe80ca63758cd215b740448a9c08a84826f3303000000056565ab5153ffffffff04bf6f2a04000000000565ab5265ab903e760100000000026a6a7103fa020000000006526553525365b05b2c000000000006ab000000535300000000", "51510053ab63635153", 1, 1081291172, "94338cd47a4639be30a71e21a7103cee4c99ef7297e0edd56aaf57a068b004de"], + ["af48319f031b4eeb4319714a285f44244f283cbff30dcb9275b06f2348ccd0d7f015b54f8500000000066363ac65ac6affffffff2560a9817ebbc738ad01d0c9b9cf657b8f9179b1a7f073eb0b67517409d108180200000005ac6365ab52ffffffff0bdd67cd4ecae96249a2e2a96db1490ee645f042fd9d5579de945e22b799f4d003000000086552ab515153ab00cf187c8202e51abf0300000000066552006a00abadf37d000000000004ac6a535100000000", "63ab65", 1, -1855554446, "60caf46a7625f303c04706cec515a44b68ec319ee92273acb566cca4f66861c1"], + ["f35befbc03faf8c25cc4bc0b92f6239f477e663b44b83065c9cb7cf231243032cf367ce3130000000005ab65526a517c4c334149a9c9edc39e29276a4b3ffbbab337de7908ea6f88af331228bd90086a6900ba020000000151279d19950d2fe81979b72ce3a33c6d82ebb92f9a2e164b6471ac857f3bbd3c0ea213b542010000000953ab51635363520065052657c20300a9ba04000000000452636a6a0516ea020000000008535253656365ababcfdd3f01000000000865ac516aac00530000000000", "", 2, -99793521, "c834a5485e68dc13edb6c79948784712122440d7fa5bbaa5cd2fc3d4dac8185d"], + ["d3da18520216601acf885414538ce2fb4d910997eeb91582cac42eb6982c9381589587794f0300000000fffffffff1b1c9880356852e10cf41c02e928748dd8fae2e988be4e1c4cb32d0bfaea6f7000000000465ab6aabffffffff02fb0d69050000000002ababeda8580500000000085163526565ac52522b913c95", "ac", 1, -1247973017, "99b32b5679d91e0f9cdd6737afeb07459806e5acd7630c6a3b9ab5d550d0c003"], + ["8218eb740229c695c252e3630fc6257c42624f974bc856b7af8208df643a6c520ef681bfd00000000002510066f30f270a09b2b420e274c14d07430008e7886ec621ba45665057120afce58befca96010300000004525153ab84c380a9015d96100000000000076a5300acac526500000000", "ac005263", 0, -1855679695, "5071f8acf96aea41c7518bd1b5b6bbe16258b529df0c03f9e374b83c66b742c6"], + ["1123e7010240310013c74e5def60d8e14dd67aedff5a57d07a24abc84d933483431b8cf8ea0300000003530051fc6775ff1a23c627a2e605dd2560e84e27f4208300071e90f4589e762ad9c9fe8d0da95e020000000465655200ffffffff04251598030000000004ab65ab639d28d90400000000096563636aacac525153474df801000000000851525165ac51006a75e23b040000000000e5bd3a4a", "6363636565", 0, -467124448, "9cb0dd04e9fe287b112e94a1647590d27e8b164ca13c4fe70c610fd13f82c2fd"], + ["fd92fe1003083c5179f97e77bf7d71975788138147adbdb283306802e261c0aee080fa22630200000000860c643ba9a1816b9badf36077b4554d11720e284e395a1121bc45279e148b2064c65e49020000000651ab6a53636a2c713088d20f4bc4001264d972cce05b9fe004dc33376ad24d0d013e417b91a5f1b6734e000000000100ffffffff02e3064c0500000000066552006a5165b86e8705000000000665ab65ab53522052eadb", "00ab53525265", 0, 776203277, "47207b48777727532f62e09afcd4104ea6687e723c7657c30504fa2081331cc8"], + ["d1b6a703038f14d41fcc5cc45455faa135a5322be4bf0f5cbcd526578fc270a236cacb853f0200000001abffffffff135aeff902fa38f202ccf5bd34437ff89c9dc57a028b62447a0a38579383e8ef0000000000ffffffffadf398d2c818d0b90bc474f540c3618a4a643482eeab73d36101987e2ec0335900000000004bd3323504e69fc10000000000055151535251790ada02000000000563ab6aab521337a704000000000963ac63abacac52656a1e9862010000000007656500ac51ab6a8f4ee672", "ab5251656565ac63", 2, 82008394, "b8f3d255549909c07588ecba10a02e55a2d6f2206d831af9da1a7dae64cfbc8b"], + ["81dadaa7011556683db3fe95262f4fdb20391b7e75b7ffcee51b176af64d83c06f85545d620200000005ab5151ab52ffffffff044805ef0300000000065353516352639702c802000000000900516351515252ab5270db08040000000009ac516aab526553abac4aabc90500000000096365ab0052636a525100000000", "6565ab6a5152", 0, -2126294159, "ad01ec9d6dbae325ec3a8e1fd98e2d03b1188378210efef093dd8b0b0ef3f19d"], + ["3b937e05032b8895d2f4945cb7e3679be2fbd15311e2414f4184706dbfc0558cf7de7b4d000000000001638b91a12668a3c3ce349788c961c26aa893c862f1e630f18d80e7843686b6e1e6fc396310000000000852635353ab65ac51eeb09dd1c9605391258ee6f74b9ae17b5e8c2ef010dc721c5433dcdc6e93a1593e3b6d1700000000085365ac6553526351ffffffff0308b18e04000000000253acb6dd00040000000008536aac5153ac516ab0a88201000000000500ac006500804e3ff2", "", 0, 416167343, "595a3c02254564634e8085283ec4ea7c23808da97ce9c5da7aecd7b553e7fd7f"], + ["a48f27ca047997470da74c8ee086ddad82f36d9c22e790bd6f8603ee6e27ad4d3174ea875403000000095153ac636aab6aacabffffffffefc936294e468d2c9a99e09909ba599978a8c0891ad47dc00ba424761627cef202000000056a51630053ffffffff304cae7ed2d3dbb4f2fbd679da442aed06221ffda9aee460a28ceec5a9399f4e0200000000f5bddf82c9c25fc29c5729274c1ff0b43934303e5f595ce86316fc66ad263b96ca46ab8d0100000003536500d7cf226b0146b00c04000000000200ac5c2014ce", "515100636563", 0, 1991799059, "9c051a7092fe17fa62b1720bc2c4cb2ffc1527d9fb0b006d2e142bb8fe07bf3c"], + ["180cd53101c5074cf0b7f089d139e837fe49932791f73fa2342bd823c6df6a2f72fe6dba1303000000076a6a63ac53acabffffffff03853bc1020000000007ac526a6a6a6a003c4a8903000000000453515163a0fbbd030000000005ab656a5253253d64cf", "ac65", 0, -1548453970, "4d8efb3b99b9064d2f6be33b194a903ffabb9d0e7baa97a48fcec038072aac06"], + ["c21ec8b60376c47e057f2c71caa90269888d0ffd5c46a471649144a920d0b409e56f190b700000000008acac6a526a536365ffffffff5d315d9da8bf643a9ba11299450b1f87272e6030fdb0c8adc04e6c1bfc87de9a0000000000ea43a9a142e5830c96b0ce827663af36b23b0277244658f8f606e95384574b91750b8e940000000007516a63ac0063acffffffff023c61be0400000000055165ab5263313cc8020000000006006a53526551ed8c3d56", "6a", 1, 1160627414, "a638cc17fd91f4b1e77877e8d82448c84b2a4e100df1373f779de7ad32695112"], + ["128cd90f04b66a4cbc78bf48748f6eec0f08d5193ee8d0a6f2e8d3e5f138ed12c2c87d01a301000000085200ab6aac00ab00ffffffff09fc88bb1851e3dfb3d30179c38e15aeb1b39929c7c74f6acd071994ed4806490300000000e7fc5ea12ec56f56c0d758ecf4bb88aa95f3b08176b336db3b9bec2f6e27336dce28adbe030000000400530051fffffffffd6ff1adcf1fbe0d883451ee46904f1b7e8820243d395559b2d4ee8190a6e891000000000080fb1ae702f85b400000000000035200ab8d9651010000000006ab6a52536aab00000000", "ab", 1, 1667598199, "c10ccc9db8a92d7d4b133a2980782dab9d9d1d633d0dde9f9612ada57771fd89"], + ["da9695a403493d3511c10e1fe1286f954db0366b7667c91ef18ae4578056c1bf752114ac5901000000035351519788d91dd1f9c62dc005d80ea54eb13f7131ca5aace3d5d29f9b58ccc5fbc9a27e779950010000000453ac6a00ffffffffe2556ff29ebe83eb42a32c7a8d93bc598043578f491b5935805a33608538845a030000000252ab65d21b3b018f26c4030000000006acab51535352e1cbcb10", "006565ab52", 2, -1550927794, "0ca673a1ee66f9625ceb9ab278ebef772c113c188112b02824570c17fdf48194"], + ["b240517501334021240427adb0b413433641555424f6d24647211e3e6bfbb22a8045cbda2f000000000071bac8630112717802000000000000000000", "6a5165abac52656551", 0, 1790414254, "2c8be597620d95abd88f9c1cf4967c1ae3ca2309f3afec8928058c9598660e9e"], + ["96bac43903044a199b4b3efeeec5d196ee23fb05495541fa2cd6fb6405a9432d1723363660010000000151ffffffffe6ce2b66ce1488918a3e880bebb0e750123f007c7bcbac8fcd67ce75cb6fbae80300000000ffffffff9c0955aa07f506455834895c0c56be5a095398f47c62a3d431fe125b161d666a0200000005520000abac7ffdbc540216f2f004000000000165a26dce010000000001ab00000000", "5151ab656a656a6a63", 0, -707123065, "26b22e18d5d9081fde9631594a4f7c49069ed2e429f3d08caf9d834f685ccab2"], + ["b8fd394001ed255f49ad491fecc990b7f38688e9c837ccbc7714ddbbf5404f42524e68c18f0000000007ab6353535363ab081e15ee02706f7d050000000008515200535351526364c7ec040000000005636a53acac9206cbe1", "655352ac", 0, -1251578838, "8e0697d8cd8a9ccea837fd798cc6c5ed29f6fbd1892ee9bcb6c944772778af19"], + ["e42a76740264677829e30ed610864160c7f97232c16528fe5610fc08814b21c34eefcea69d010000000653006a6a0052ffffffff647046cf44f217d040e6a8ff3f295312ab4dd5a0df231c66968ad1c6d8f4428000000000025352ffffffff0199a7f900000000000000000000", "655263006a005163", 1, 1122505713, "7cda43f1ff9191c646c56a4e29b1a8c6cb3f7b331da6883ef2f0480a515d0861"], + ["0f034f32027a8e094119443aa9cfe11737c6d7dda9a52b839bc073dcc0235b847b28e0fab60200000006ac53ac536a63eee63447dfdad80476994b68706e916df1bd9d7cb4f3a4f6b14369de84564bea2e8688bd030000000565636a65acf8434663020b35fe01000000000800abab655163acabb3d6a103000000000353acab345eeda0", "526a51ac63ab51", 1, 66020215, "4435e62ff6531ac73529aac9cf878a7219e0b6e6cac79af8487c5355d1ad6d43"], + ["a2dfa4690214c1ab25331815a5128f143219de51a47abdc7ce2d367e683eeb93960a31af9f010000000363636affffffff8be0628abb1861b078fcc19c236bc4cc726fa49068b88ad170adb2a97862e7460200000004ac655363ffffffff0441f11103000000000153dbab0c000000000009ab53ac5365526aab63abbb95050000000004ab52516a29a029040000000003ac526a00000000", "6a52ac63", 1, -1302210567, "913060c7454e6c80f5ba3835454b54db2188e37dc4ce72a16b37d11a430b3d23"], + ["9dbc591f04521670af83fb3bb591c5d4da99206f5d38e020289f7db95414390dddbbeb56680100000004ac5100acffffffffb6a40b5e29d5e459f8e72d39f800089529f0889006cad3d734011991da8ef09d0100000009526a5100acab536a515fc427436df97cc51dc8497642ffc868857ee245314d28b356bd70adba671bd6071301fc0000000000ffffffff487efde2f620566a9b017b2e6e6d42525e4070f73a602f85c6dfd58304518db30000000005516353006a8d8090180244904a0200000000046a65656ab1e9c203000000000451ab63aba06a5449", "", 0, -1414953913, "bae189eb3d64aedbc28a6c28f6c0ccbd58472caaf0cf45a5aabae3e031dd1fea"], + ["1345fb2c04bb21a35ae33a3f9f295bece34650308a9d8984a989dfe4c977790b0c21ff9a7f0000000006ac52ac6a0053ffffffff7baee9e8717d81d375a43b691e91579be53875350dfe23ba0058ea950029fcb7020000000753ab53ab63ab52ffffffff684b6b3828dfb4c8a92043b49b8cb15dd3a7c98b978da1d314dce5b9570dadd202000000086353ab6a5200ac63d1a8647bf667ceb2eae7ec75569ca249fbfd5d1b582acfbd7e1fcf5886121fca699c011d0100000003ac006affffffff049b1eb00300000000001e46dc0100000000080065ab6a6a630065ca95b40300000000030051520c8499010000000006ab6aac526a6500000000", "53526aac636300", 2, 1809978100, "cfeaa36790bc398783d4ca45e6354e1ea52ee74e005df7f9ebd10a680e9607bf"], + ["7d75dc8f011e5f9f7313ba6aedef8dbe10d0a471aca88bbfc0c4a448ce424a2c5580cda1560300000003ab5152ffffffff01997f8e0200000000096552ac6a65656563530d93bbcc", "00656a6563", 0, 1414485913, "ec91eda1149f75bffb97612569a78855498c5d5386d473752a2c81454f297fa7"], + ["1459179504b69f01c066e8ade5e124c748ae5652566b34ed673eea38568c483a5a4c4836ca0100000008ac5352006563656affffffff5d4e037880ab1975ce95ea378d2874dcd49d5e01e1cdbfae3343a01f383fa35800000000095251ac52ac6aac6500ffffffff7de3ae7d97373b7f2aeb4c55137b5e947b2d5fb325e892530cb589bc4f92abd503000000086563ac53ab520052ffffffffb4db36a32d6e543ef49f4bafde46053cb85b2a6c4f0e19fa0860d9083901a1190300000003ab51531bbcfe5504a6dbda040000000008536a5365abac6500d660c80300000000096565abab6a53536a6a54e84e010000000003acac52df2ccf0500000000025351220c857e", "", 2, 1879181631, "3aad18a209fab8db44954eb55fd3cc7689b5ec9c77373a4d5f4dae8f7ae58d14"], + ["d98b777f04b1b3f4de16b07a05c31d79965579d0edda05600c118908d7cf642c9cd670093f020000000953005351ac65ab5363a268caad6733b7d1718008997f249e1375eb3ab9fe68ab0fe170d8e745ea24f54ce67f9b00000000066500516a5151ffffffff7ef8040dfcc86a0651f5907e8bfd1017c940f51cf8d57e3d3fe78d57e40b1e610200000003535263ffffffff39846cfed4babc098ff465256ba3820c30d710581316afcb67cd31c623b703360300000001acffffffff03d405120100000000056300006a5201a73d050000000004ab636a6a294c8c000000000006ac65536553ac00000000", "63525351abac", 1, 2018694761, "86970af23c89b72a4f9d6281e46b9ef5220816bed71ebf1ae20df53f38fe16ff"], + ["cabb1b06045a895e6dcfc0c1e971e94130c46feace286759f69a16d298c8b0f6fd0afef8f20300000004ac006352ffffffffa299f5edac903072bfb7d29b663c1dd1345c2a33546a508ba5cf17aab911234602000000056a65515365ffffffff89a20dc2ee0524b361231092a070ace03343b162e7162479c96b757739c8394a0300000002abab92ec524daf73fabee63f95c1b79fa8b84e92d0e8bac57295e1d0adc55dc7af5534ebea410200000001534d70e79b04674f6f00000000000600abacab53517d60cc0200000000035265ab96c51d040000000004ac6300ac62a787050000000008006a516563ab63639e2e7ff7", "6551ac6351ac", 3, 1942663262, "d0c4a780e4e0bc22e2f231e23f01c9d536b09f6e5be51c123d218e906ec518be"], + ["8b96d7a30132f6005b5bd33ea82aa325e2bcb441f46f63b5fca159ac7094499f380f6b7e2e00000000076aacabac6300acffffffff0158056700000000000465005100c319e6d0", "52006a", 0, -1100733473, "fb4bd26a91b5cf225dd3f170eb09bad0eac314bc1e74503cc2a3f376833f183e"], + ["112191b7013cfbe18a175eaf09af7a43cbac2c396f3695bbe050e1e5f4250603056d60910e02000000001c8a5bba03738a22010000000005525352656a77a149010000000002510003b52302000000000351ac52722be8e6", "65ac6565", 0, -1847972737, "8e795aeef18f510d117dfa2b9f4a2bd2e2847a343205276cedd2ba14548fd63f"], + ["ce6e1a9e04b4c746318424705ea69517e5e0343357d131ad55d071562d0b6ebfedafd6cb840100000003656553ffffffff67bd2fa78e2f52d9f8900c58b84c27ef9d7679f67a0a6f78645ce61b883fb8de000000000100d699a56b9861d99be2838e8504884af4d30b909b1911639dd0c5ad47c557a0773155d4d303000000046a5151abffffffff9fdb84b77c326921a8266854f7bbd5a71305b54385e747fe41af8a397e78b7fa010000000863acac6a51ab00ac0d2e9b9d049b8173010000000007ac53526a650063ba9b7e010000000008526a00525263acac0ab3fd030000000000ea8a0303000000000200aca61a97b9", "", 1, -1276952681, "b6ed4a3721be3c3c7305a5128c9d418efa58e419580cec0d83f133a93e3a22c5"], + ["a7721d94021652d90c79aaf5022d98219337d50f836382403ed313adb1116ba507ac28b0b0010000000551ac6300ab89e6d64a7aa81fb9595368f04d1b36d7020e7adf5807535c80d015f994cce29554fe869b01000000065353ab636500ffffffff024944c90100000000046300635369df9f01000000000000000000", "656a536551ab", 0, -1740151687, "935892c6f02948f3b08bcd463b6acb769b02c1912be4450126768b055e8f183a"], + ["2f7353dd02e395b0a4d16da0f7472db618857cd3de5b9e2789232952a9b154d249102245fd030000000151617fd88f103280b85b0a198198e438e7cab1a4c92ba58409709997cc7a65a619eb9eec3c0200000003636aabffffffff0397481c0200000000045300636a0dc97803000000000009d389030000000003ac6a53134007bb", "0000536552526a", 0, -1912746174, "30c4cd4bd6b291f7e9489cc4b4440a083f93a7664ea1f93e77a9597dab8ded9c"], + ["7d95473604fd5267d0e1bb8c9b8be06d7e83ff18ad597e7a568a0aa033fa5b4e1e2b6f1007020000000465006a6affffffffaee008503bfc5708bd557c7e78d2eab4878216a9f19daa87555f175490c40aaf000000000263abffffffffabd74f0cff6e7ceb9acc2ee25e65af1abcebb50c08306e6c78fa8171c37613dd010000000552acacababffffffff54a3069393f7930fa1b331cdff0cb945ec21c11d4605d8eedba1d3e094c6ae1f01000000026300ffffffff0182edeb050000000009526353ab5153530065a247e8cd", "51516aab00", 2, -426210430, "2707ca714af09494bb4cf0794abe33c6cba5f29891d619e76070269d1fa8e690"], + ["221d4718023d9ca9fe1af178dbfce02b2b369bf823ea3f43f00891b7fef98e215c06b94fdd000000000951005153ab000051acffffffffb1c7ad1c64b7441bf5e70cd0f6eb4ec96821d67fc4997d9e6dfdceadecd36dde01000000070051536a635153ffffffff04e883cd00000000000851ab536553ab0052bbb2f70400000000002f1b2e03000000000165259fcb00000000000010dbde99", "ab", 1, 665721280, "4abce77432a86dfe608e7c1646c18b5253a373392ff962e288e3ab96bba1ba1d"], + ["6f66c0b3013e6ae6aabae9382a4326df31c981eac169b6bc4f746edaa7fc1f8c796ef4e374000000000665ab6aabac6affffffff0191c8d6030000000002525300000000", "6a5352516a635352ab", 0, -1299629906, "48411efeb133c6b7fec4e7bdbe613f827093cb06ea0dbcc2ffcfde3a9ac4356c"], + ["89e7928c04363cb520eff4465251fd8e41550cbd0d2cdf18c456a0be3d634382abcfd4a2130200000006ac516a6a656355042a796061ed72db52ae47d1607b1ceef6ca6aea3b7eea48e7e02429f382b378c4e51901000000085351ab6352ab5252ffffffff53631cbda79b40183000d6ede011c778f70147dc6fa1aed3395d4ce9f7a8e69701000000096a6553ab52516a52abad0de418d80afe059aab5da73237e0beb60af4ac490c3394c12d66665d1bac13bdf29aa8000000000153f2b59ab6027a33eb040000000007005351ac5100ac88b941030000000003ab0052e1e8a143", "63656a", 0, 1258533326, "b575a04b0bb56e38bbf26e1a396a76b99fb09db01527651673a073a75f0a7a34"], + ["ca356e2004bea08ec2dd2df203dc275765dc3f6073f55c46513a588a7abcc4cbde2ff011c7020000000553525100003aefec4860ef5d6c1c6be93e13bd2d2a40c6fb7361694136a7620b020ecbaca9413bcd2a030000000965ac00536352535100ace4289e00e97caaea741f2b89c1143060011a1f93090dc230bee3f05e34fbd8d8b6c399010000000365526affffffff48fc444238bda7a757cb6a98cb89fb44338829d3e24e46a60a36d4e24ba05d9002000000026a53ffffffff03d70b440200000000056a6a526aac853c97010000000002515335552202000000000351635300000000", "0052", 3, -528192467, "fc93cc056c70d5e033933d730965f36ad81ef64f1762e57f0bc5506c5b507e24"], + ["82d4fa65017958d53e562fac073df233ab154bd0cf6e5a18f57f4badea8200b217975e31030200000004636aab51ac0891a204227cc9050000000006635200655365bfef8802000000000865650051635252acfc2d09050000000006ab65ac51516380195e030000000007ac52525352510063d50572", "53", 0, -713567171, "e095003ca82af89738c1863f0f5488ec56a96fb81ea7df334f9344fcb1d0cf40"], + ["75f6949503e0e47dd70426ef32002d6cdb564a45abedc1575425a18a8828bf385fa8e808e600000000036aabab82f9fd14e9647d7a1b5284e6c55169c8bd228a7ea335987cef0195841e83da45ec28aa2e0300000002516350dc6fe239d150efdb1b51aa288fe85f9b9f741c72956c11d9dcd176889963d699abd63f0000000001ab429a63f502777d20010000000007abac52ac516a53d081d9020000000003acac630c3cc3a8", "535152516551510000", 1, 973814968, "c6ec1b7cb5c16a1bfd8a3790db227d2acc836300534564252b57bd66acf95092"], + ["24f24cd90132b2162f938f1c22d3ca5e7daa83515883f31a61a5177aebf99d7db6bdfc398c010000000163ffffffff01d5562d0100000000016300000000", "5265ac5165ac5252ab", 0, 1055129103, "5eeb03e03806cd7bfd44bbba69c30f84c2c5120df9e68cd8facc605fcfbc9693"], + ["5ff2cac201423064a4d87a96b88f1669b33adddc6fa9acdc840c0d8a243671e0e6de49a5b00300000005ac6353655353b91db50180db5a03000000000663535151006a047a3aff", "52ab51ab5365005163", 0, -1336626596, "b8db8d57fe40ab3a99cf2f8ed57da7a65050fcc1d34d4280e25faf10108d3110"], + ["10011f150220ad76a50ccc7bb1a015eda0ff987e64cd447f84b0afb8dc3060bdae5b36a6900200000000ffffffff1e92dd814dfafa830187bc8e5b9258de2445ec07b02c420ee5181d0b203bb334000000000565ab536a65ffffffff0124e65401000000000800ab636553ab53ac00000000", "53abab0051", 0, 440222748, "c6675bf229737e005b5c8ffa6f81d9e2c4396840921b6151316f67c4315a4270"], + ["8b95ec900456648d820a9b8df1d8f816db647df8a8dc9f6e7151ebf6079d90ee3f6861352a02000000085200ab00ac535151ffffffff039b10b845f961225ac0bcaac4f5fe1991029a051aa3d06a3811b5762977a67403000000035252abffffffff8559d65f40d5e261f45aec8aad3d2c56c6114b22b26f7ee54a06f0881be3a7f5010000000765635252536363ffffffff38f8b003b50f6412feb2322b06b270197f81ad69c36af02ca5008b94eee5f650020000000165ffffffff01ae2b00010000000001638eb153a2", "0053ab5300ac53", 2, 1266056769, "205f3653f0142b35ce3ef39625442efebae98cde8cbf0516b97b51073bb0479f"], + ["babbb7ea01ab5d584727cb44393b17cf66521606dc81e25d85273be0d57bad43e8f6b6d43501000000036a656aba83a68803fb0f4a000000000005536353ab633fcfe4020000000009ac00acab6351006a65182a0c03000000000453ac5363bee74f44", "536a6a6a6365ac51ab", 0, -799187625, "3275e98dca37243b977525a07b5d8e369d6c3bdc08cb948029a635547d0d1a4e"], + ["e86a24bc03e4fae784cdf81b24d120348cb5e52d937cd9055402fdba7e43281e482e77a1c100000000046363006affffffffa5447e9bdcdab22bd20d88b19795d4c8fb263fbbf7ce8f4f9a85f865953a6325020000000663ac53535253ffffffff9f8b693bc84e0101fc73748e0513a8cecdc264270d8a4ee1a1b6717607ee1eaa00000000026a513417bf980158d82c020000000009005253005351acac5200000000", "6353516365536a6a", 2, -563792735, "508129278ef07b43112ac32faf00170ad38a500eed97615a860fd58baaad174b"], + ["53bd749603798ed78798ef0f1861b498fc61dcee2ee0f2b37cddb115b118e73bc6a5a47a0201000000096a63656a6aab6a000007ff674a0d74f8b4be9d2e8e654840e99d533263adbdd0cf083fa1d5dd38e44d2d163d900100000007abab5251ac6a51c8b6b63f744a9b9273ccfdd47ceb05d3be6400c1ed0f7283d32b34a7f4f0889cccf06be30000000009516a52636551ab516a9ac1fe63030c677e05000000000027bc610000000000086565636a635100526e2dc60200000000015300000000", "6552536a515351ab", 1, -1617066878, "fe516df92299e995b8e6489be824c6839543071ec5e9286060b2600935bf1f20"], + ["691bf9fc028ca3099020b79184e70039cf53b3c7b3fe695d661fd62d7b433e65feda2150610000000003ac63abffffffff2c814c15b142bc944192bddccb90a392cd05b968b599c1d8cd99a55a28a243fd0100000009ab5300526a5200abac98516a5803dfd3540500000000046552ac522838120100000000040053ab6a4409a903000000000665636a5300658759621b", "65ac5165ab", 0, -359941441, "d582c442e0ecc400c7ba33a56c93ad9c8cfd45af820350a13623594b793486f0"], + ["536bc5e60232eb60954587667d6bcdd19a49048d67a027383cc0c2a29a48b960dc38c5a0370300000005ac636300abffffffff8f1cfc102f39b1c9348a2195d496e602c77d9f57e0769dabde7eaaedf9c69e250100000006acabab6a6351ffffffff0432f56f0400000000046a5365517fd54b0400000000035265539484e4050000000003536a5376dc25020000000008ac536aab6aab536ab978e686", "ac0051006a006a006a", 0, -273074082, "f151f1ec305f698d9fdce18ea292b145a58d931f1518cf2a4c83484d9a429638"], + ["74606eba01c2f98b86c29ba5a32dc7a7807c2abe6ed8d89435b3da875d87c12ae05329e6070200000003510052ffffffff02a1e2c4020000000006516563526a63c68bae04000000000952ab6363ab00006363fe19ae4f", "63ababacac5365", 0, 112323400, "d1b1d79001b4a0324962607b739972d6f39c1493c4500ce814fd3bd72d32a5a0"], + ["2ed805e20399e52b5bcc9dc075dad5cf19049ff5d7f3de1a77aee9288e59c5f4986751483f020000000165ffffffff967531a5726e7a653a9db75bd3d5208fa3e2c5e6cd5970c4d3aba84eb644c72c0300000000ffffffffd79030d20c65e5f8d3c55b5692e5bdaa2ae78cfa1935a0282efb97515feac43f030000000400006365261ab88c02bdf66a000000000003ab6351d6ad8b000000000005525152abac00000000", "630053ab5265", 0, 2072814938, "1d25d16d84d5793be1ad5cda2de9c9cf70e04a66c3dae618f1a7ca4026198e7f"], + ["fab796ee03f737f07669160d1f1c8bf0800041157e3ac7961fea33a293f976d79ce49c02ab0200000003ac5252eb097ea1a6d1a7ae9dace338505ba559e579a1ee98a2e9ad96f30696d6337adcda5a85f403000000096500abab656a6a656396d5d41a9b11f571d91e4242ddc0cf2420eca796ad4882ef1251e84e42b930398ec69dd80100000005526551ac6a8e5d0de804f763bb0400000000015288271a010000000001acf2bf2905000000000300ab51c9641500000000000952655363636365ac5100000000", "00ac536552", 0, -1854521113, "f3bbab70b759fe6cfae1bf349ce10716dbc64f6e9b32916904be4386eb461f1f"], + ["f2b539a401e4e8402869d5e1502dbc3156dbce93583f516a4947b333260d5af1a34810c6a00200000003525363ffffffff01d305e2000000000005acab535200a265fe77", "", 0, -1435650456, "41617b27321a830c712638dbb156dae23d4ef181c7a06728ccbf3153ec53d7dd"], + ["9f10b1d8033aee81ac04d84ceee0c03416a784d1017a2af8f8a34d2f56b767aea28ff88c8f02000000025352ffffffff748cb29843bea8e9c44ed5ff258df1faf55fbb9146870b8d76454786c4549de100000000016a5ba089417305424d05112c0ca445bc7107339083e7da15e430050d578f034ec0c589223b0200000007abac53ac6565abffffffff025a4ecd010000000006636563ab65ab40d2700000000000056a6553526333fa296c", "", 0, -395044364, "20fd0eee5b5716d6cbc0ddf852614b686e7a1534693570809f6719b6fcb0a626"], + ["ab81755f02b325cbd2377acd416374806aa51482f9cc5c3b72991e64f459a25d0ddb52e66703000000036a00ab8727056d48c00cc6e6222be6608c721bc2b1e69d0ffbadd51d131f05ec54bcd83003aac5000000000003f2cdb60454630e020000000007526aac63000000e9e25c040000000003516a0088c97e0000000000076a535265655263771b5805000000000851ab00ac6565515100000000", "5151ab00ac", 0, -230931127, "ba0a2c987fcdd74b6915f6462f62c3f126a0750aa70048f7aa20f70726e6a20b"], + ["7a17e0ef0378dab4c601240639139335da3b7d684600fa682f59b7346ef39386fe9abd69350000000004ac5252ab807f26fb3249326813e18260a603b9ad66f41f05eaa8146f66bcca452162a502aac4aa8b02000000026a534ea460faa7e3d7854ec6c70d7e797025697b547ec500b2c09c873b4d5517767d3f3720660300000000ffffffff01b12e7a02000000000900ab006aab65656a63991c03e2", "6aab6a", 1, -1577994103, "62cd3413d9d819fb7355336365cf8a2a997f7436cc050a7143972044343b3281"], + ["ff2ecc09041b4cf5abb7b760e910b775268abee2792c7f21cc5301dd3fecc1b4233ee70a2c0200000009acac5300006a51526affffffffeb39c195a5426afff38379fc85369771e4933587218ef4968f3f05c51d6b7c92000000000165453a5f039b8dbef7c1ffdc70ac383b481f72f99f52b0b3a5903c825c45cfa5d2c0642cd50200000001654b5038e6c49daea8c0a9ac8611cfe904fc206dad03a41fb4e5b1d6d85b1ecad73ecd4c0102000000096a51000053ab656565bdb5548302cc719200000000000452655265214a3603000000000300ab6a00000000", "52516a006a63", 1, -2113289251, "37ed6fae36fcb3360c69cac8b359daa62230fc1419b2cf992a32d8f3e079dcff"], + ["70a8577804e553e462a859375957db68cfdf724d68caeacf08995e80d7fa93db7ebc04519d02000000045352ab53619f4f2a428109c5fcf9fee634a2ab92f4a09dc01a5015e8ecb3fc0d9279c4a77fb27e900000000006ab6a51006a6affffffff3ed1a0a0d03f25c5e8d279bb5d931b7eb7e99c8203306a6c310db113419a69ad010000000565516300abffffffff6bf668d4ff5005ef73a1b0c51f32e8235e67ab31fe019bf131e1382050b39a630000000004536a6563ffffffff02faf0bb00000000000163cf2b4b05000000000752ac635363acac15ab369f", "ac", 0, -1175809030, "1c9d6816c20865849078f9777544b5ddf37c8620fe7bd1618e4b72fb72dddca1"], + ["a3604e5304caa5a6ba3c257c20b45dcd468f2c732a8ca59016e77b6476ac741ce8b16ca8360200000004acac6553ffffffff695e7006495517e0b79bd4770f955040610e74d35f01e41c9932ab8ccfa3b55d0300000007ac5253515365acffffffff6153120efc5d73cd959d72566fc829a4eb00b3ef1a5bd3559677fb5aae116e38000000000400abab52c29e7abd06ff98372a3a06227386609adc7665a602e511cadcb06377cc6ac0b8f63d4fdb03000000055100acabacffffffff04209073050000000009ab5163ac525253ab6514462e05000000000952abacab636300656a20672c0400000000025153b276990000000000056565ab6a5300000000", "5351", 0, 1460890590, "249c4513a49076c6618aabf736dfd5ae2172be4311844a62cf313950b4ba94be"], + ["c6a72ed403313b7d027f6864e705ec6b5fa52eb99169f8ea7cd884f5cdb830a150cebade870100000009ac63ab516565ab6a51ffffffff398d5838735ff43c390ca418593dbe43f3445ba69394a6d665b5dc3b4769b5d700000000075265acab515365ffffffff7ee5616a1ee105fd18189806a477300e2a9cf836bf8035464e8192a0d785eea3030000000700ac6a51516a52ffffffff018075fd0000000000015100000000", "005251acac5252", 2, -656067295, "2cc1c7514fdc512fd45ca7ba4f7be8a9fe6d3318328bc1a61ae6e7675047e654"], + ["93c12cc30270fc4370c960665b8f774e07942a627c83e58e860e38bd6b0aa2cb7a2c1e060901000000036300abffffffff4d9b618035f9175f564837f733a2b108c0f462f28818093372eec070d9f0a5440300000001acffffffff039c2137020000000001525500990100000000055265ab636a07980e0300000000005ba0e9d1", "656a5100", 1, 18954182, "6beca0e0388f824ca33bf3589087a3c8ad0857f9fe7b7609ae3704bef0eb83e2"], + ["97bddc63015f1767619d56598ad0eb5c7e9f880b24a928fea1e040e95429c930c1dc653bdb0100000008ac53acac00005152aaa94eb90235ed10040000000000287bdd0400000000016a8077673a", "acac6a536352655252", 0, -813649781, "5990b139451847343c9bb89cdba0e6daee6850b60e5b7ea505b04efba15f5d92"], + ["cc3c9dd303637839fb727270261d8e9ddb8a21b7f6cbdcf07015ba1e5cf01dc3c3a327745d0300000000d2d7804fe20a9fca9659a0e49f258800304580499e8753046276062f69dbbde85d17cd2201000000096352536a520000acabffffffffbc75dfa9b5f81f3552e4143e08f485dfb97ae6187330e6cd6752de6c21bdfd21030000000600ab53650063ffffffff0313d0140400000000096565515253526aacac167f0a040000000008acab00535263536a9a52f8030000000006abab5151ab63f75b66f2", "6a635353636a65ac65", 1, 377286607, "dbc7935d718328d23d73f8a6dc4f53a267b8d4d9816d0091f33823bd1f0233e9"], + ["236f91b702b8ffea3b890700b6f91af713480769dda5a085ae219c8737ebae90ff25915a3203000000056300ac6300811a6a10230f12c9faa28dae5be2ebe93f37c06a79e76214feba49bb017fb25305ff84eb020000000100ffffffff041e351703000000000351ac004ff53e050000000003ab53636c1460010000000000cb55f701000000000651520051ab0000000000", "acac636a6aac5300", 0, 406448919, "793a3d3c37f6494fab79ff10c16702de002f63e34be25dd8561f424b0ea938c4"], + ["22e10d2003ab4ea9849a2801921113583b7c35c3710ff49a6003489395789a7cfb1e6051900100000006526a65535151ffffffff82f21e249ec60db33831d33b9ead0d56f6496db64337dcb7f1c3327c47729c4a020000000253abffffffff138f098f0e6a4cf51dc3e7a3b749f487d1ebde71b73b731d1d02ad1180ac7b8c02000000036563acda215011027a9484020000000007635165530000ac4bf6cb0400000000066aacabab65ab3ce3f32c", "ab0052ab", 2, 1136359457, "b5bd080bbcb8cd652f440484311d7a3cb6a973cd48f03c5c00fd6beb52dfc061"], + ["c47d5ad60485cb2f7a825587b95ea665a593769191382852f3514a486d7a7a11d220b62c54000000000663655253acab8c3cf32b0285b040e50dcf6987ddf7c385b3665048ad2f9317b9e0c5ba0405d8fde4129b00000000095251ab00ac65635300ffffffff549fe963ee410d6435bb2ed3042a7c294d0c7382a83edefba8582a2064af3265000000000152fffffffff7737a85e0e94c2d19cd1cde47328ece04b3e33cd60f24a8a345da7f2a96a6d0000000000865ab6a0051656aab28ff30d5049613ea020000000005ac51000063f06df1050000000008ac63516aabac5153afef5901000000000700656500655253688bc00000000000086aab5352526a53521ff1d5ff", "51ac52", 2, -1296011911, "0c1fd44476ff28bf603ad4f306e8b6c7f0135a441dc3194a6f227cb54598642a"], + ["0b43f122032f182366541e7ee18562eb5f39bc7a8e5e0d3c398f7e306e551cdef773941918030000000863006351ac51acabffffffffae586660c8ff43355b685dfa8676a370799865fbc4b641c5a962f0849a13d8250100000005abab63acabffffffff0b2b6b800d8e77807cf130de6286b237717957658443674df047a2ab18e413860100000008ab6aac655200ab63ffffffff04f1dbca03000000000800635253ab656a52a6eefd0300000000036365655d8ca90200000000005a0d530400000000015300000000", "65ac65acac", 0, 351448685, "86f26e23822afd1bdfc9fff92840fc1e60089f12f54439e3ab9e5167d0361dcf"], + ["4b0ecc0c03ba35700d2a30a71f28e432ff6ac7e357533b49f4e97cf28f1071119ad6b97f3e0300000008acab516363ac63acffffffffcd6a2019d99b5c2d639ddca0b1aa5ea7c1326a071255ea226960bd88f45ca57d00000000085253655363005353ffffffffba257635191c9f216de3277be548cb5a2313114cb1a4c563b03b4ef6c0f4f7040300000001abda542edf0495cdc40100000000026353c049e903000000000752516a53ab65512b0f9304000000000963ab516aac65516552fa9ece050000000009acab6500005152530000000000", "65ab51525352510052", 1, -1355414590, "3cd85f84aae6d702436f3f9b8980adcc1f8f202e957759540a27da0a32fc6c87"], + ["adaac0a803f66811346271c733036d6e0d45e15a9b602092e2e04ad93564f196e7f020b088000000000600526a636a00700ec3f9db07a3a6ce910bf318c7ec87a876e1f2a3366cc69f20cde09203b99c1cb9d15800000000050000ac636a4d0de554ebe95c6cc14faf5ff6361d1deba9474b8b0fd3b93c011cd96aec783abb3f36830200000005ab65005251ffffffff0464eb10050000000007520000ab6a65ab1beaa80300000000005a2f31050000000006526aab65ac52ba7db10000000000045251ab6a0cfb46e7", "ab0051ac52636a", 1, -184733716, "961ff413850336d3987c550404fc1d923266ca36cc9ffee7113edb3a9fea7f30"], + ["af1c4ab301ec462f76ee69ba419b1b2557b7ded639f3442a3522d4f9170b2d6859765c3df402000000016affffffff01a5ca6c000000000008ab52536aab00005300000000", "6a6351", 0, 110304602, "e88ed2eea9143f2517b15c03db00767eb01a5ce12193b99b964a35700607e5f4"], + ["0bfd34210451c92cdfa02125a62ba365448e11ff1db3fb8bc84f1c7e5615da40233a8cd368010000000252ac9a070cd88dec5cf9aed1eab10d19529720e12c52d3a21b92c6fdb589d056908e43ea910e0200000009ac516a52656a6a5165ffffffffc3edcca8d2f61f34a5296c405c5f6bc58276416c720c956ff277f1fb81541ddd00000000030063abffffffff811247905cdfc973d179c03014c01e37d44e78f087233444dfdce1d1389d97c302000000065163000063ab1724a26e02ca37c902000000000851ab53525352ac529012a90100000000085200525253535353fa32575b", "5352ac6351", 1, -1087700448, "b8f1e1f35e3e1368bd17008c756e59cced216b3c699bcd7bebdb5b6c8eec4697"], + ["2c84c0640487a4a695751d3e4be48019dbaea85a6e854f796881697383ea455347d2b2769001000000055265526500ffffffff6aac176d8aa00778d496a7231eeb7d3334f20c512d3db1683276402100d98de5030000000700536a5263526ac1ee9ceb171c0c984ebaf12c234fd1487fbf3b3d73aa0756907f26837efba78d1bed33200300000001ab4d9e8ec0bed837cb929bbed76ee848959cec59de44bd7667b7631a744f880d5c71a20cfd0100000007005363515300abffffffff023753fb0000000000036565532d3873050000000009005152ab6a63acab5200000000", "ab650053ab", 0, -877941183, "c49af297dffe2d80deddf10ceea84b99f8554bd2d55bbdc34e449728c31f0835"], + ["1f7e4b1b045d3efa6cd7a11d7873a8bab886c19bd11fcb6712f0948f2db3a7be76ff76c8f100000000095265ab6a0065ac5363ffffffffdaafcfa6029336c997680a541725190f09a6f6da21e54560eca4b5b8ae987da1000000000952ac52acac52515165ffffffff825a38d3b1e5bb4d10f33653ab3ab6882c7abdaec74460257d1528ce7be3f98e0100000007526a006a656a63c14adc8f04953a5d3d3f89237f38b857dd357713896d36215f7e8b77b11d98ea3cdc93df02000000015212484f6104bfafae0300000000025263a2b0120000000000056563ab00516c4d2605000000000653ac6500655301cc93030000000002acab14643b1f", "63acac53ab", 0, 333824258, "18da6ceb011cd36f15ad7dd6c55ef07e6f6ed48881ce3bb31416d3c290d9a0e9"], + ["467a3e7602e6d1a7a531106791845ec3908a29b833598e41f610ef83d02a7da3a1900bf2960000000005ab6a636353ffffffff031db6dac6f0bafafe723b9199420217ad2c94221b6880654f2b35114f44b1df010000000965ab52636a63ac6352ffffffff02b3b95c0100000000026300703216030000000001ab3261c0aa", "6a", 0, 2110869267, "3078b1d1a7713c6d101c64afe35adfae0977a5ab4c7e07a0b170b041258adbf2"], + ["8713bc4f01b411149d575ebae575f5dd7e456198d61d238695df459dd9b86c4e3b2734b62e0300000004abac6363ffffffff03b58049050000000002ac653c714c04000000000953656a005151526a527b5a9e03000000000652ac5100525300000000", "52", 0, -647281251, "0e0bed1bf2ff255aef6e5c587f879ae0be6222ab33bd75ee365ec6fbb8acbe38"], + ["f2ba8a8701b9c401efe3dd0695d655e20532b90ac0142768cee4a3bb0a89646758f544aa8102000000036a52527899f4e4040c6f0b030000000008636565ab530051ab52b60c000000000009515200ab630053ac53a49c5f040000000008ab53ab516300ab63fa27340300000000015100000000", "ac63abab5251", 0, -1328936437, "ab61497afd39e61fe06bc5677326919716f9b20083c9f3417dcea905090e0411"], + ["b5a7df6102107beded33ae7f1dec0531d4829dff7477260925aa2cba54119b7a07d92d5a1d02000000046a516a52803b625c334c1d2107a326538a3db92c6c6ae3f7c3516cd90a09b619ec6f58d10e77bd6703000000056563006a63ffffffff0117484b03000000000853acab52526a65abc1b548a1", "ac006a525100", 0, 2074359913, "680336db57347d8183b8898cd27a83f1ba5884155aeae5ce20b4840b75e12871"], + ["278cb16204b9dadf400266106392c4aa9df01ba03af988c8139dae4c1818ac009f13fc5f1a00000000065200ac656a52ffffffffd006bbebd8cbd7bdead24cddc9badfcc6bc0c2e63c037e5c29aa858f5d0f3e7d01000000046a0051acffffffffbc62a5f57e58da0b67956003ae81ac97cb4cbd1d694c914fc41515c008c4d8fd020000000165e329c844bcc16164be64b64a81cbf4ffd41ed2934e0daa0040ccb8365bab0b2a9e401c180300000003ab52abffffffff02588460030000000000a25a12030000000005535100005300000000", "6553ab6a5300acab51", 3, 989407546, "1c29f110576f4a3b257f67454d99dfc0dee62ef5517ca702848ce4bd2ea1a1d7"], + ["49eb2178020a04fca08612c34959fd41447319c190fb7ffed9f71c235aa77bec28703aa1820200000003ac6353abaff326071f07ec6b77fb651af06e8e8bd171068ec96b52ed584de1d71437fed186aecf0300000001acffffffff03da3dbe02000000000652ac63ac6aab8f3b680400000000096a536a65636a53516a5175470100000000016500000000", "6a536365", 0, 1283691249, "c670219a93234929f662ecb9aa148a85a2d281e83f4e53d10509461cdea47979"], + ["0f96cea9019b4b3233c0485d5b1bad770c246fe8d4a58fb24c3b7dfdb3b0fd90ea4e8e947f0300000006006a5163515303571e1e01906956030000000005ab635353abadc0fbbe", "acac", 0, -1491469027, "716a8180e417228f769dcb49e0491e3fda63badf3d5ea0ceeac7970d483dd7e2"], + ["9a7d858604577171f5fe3f3fd3e5e039c4b0a06717a5381e9977d80e9f53e025e0f16d2877020000000752636565536353ffffffff5862bd028e8276e63f044be1dddcbb8d0c3fa097678308abf2b0f45104a93dbd0100000001531200667ba8fdd3b28e98a35da73d3ddfe51e210303d8eb580f923de988ee632d77793892030000000752526363526563ffffffffe9744eb44db2658f120847c77f47786d268c302120d269e6004455aa3ea5f5e20200000009ab6300636aab656551ffffffff03c61a3c020000000009ab516a6aab6aab53ab737f1a05000000000853acabab655365ab92a4a00400000000016367edf6c8", "535352ab", 3, 659348595, "d36ee79fc80db2e63e05cdc50357d186181b40ae20e3720878284228a13ee8b3"], + ["148e68480196eb52529af8e83e14127cbfdbd4a174e60a86ac2d86eac9665f46f4447cf7aa01000000045200ac538f8f871401cf240c0300000000065252ab52656a5266cf61", "", 0, -344314825, "eacc47c5a53734d6ae3aedbc6a7c0a75a1565310851b29ef0342dc4745ceb607"], + ["e2bc29d4013660631ba14ecf75c60ec5e9bed7237524d8c10f66d0675daa66d1492cb834530200000004ac510065e42d0c9e04f2b26c01000000000951525152acac65ababa35b7504000000000953ac6aac00650053ab94688c0400000000056365526553a1bced0300000000016a00000000", "65ab0063655353", 0, -888431789, "59a34b3ed3a1cce0b104de8f7d733f2d386ffc7445efae67680cd90bc915f7e0"], + ["0c8a70d70494dca6ab05b2bc941b5b431c43a292bd8f2f02eab5e240a408ca73a676044a4103000000056a51ab006affffffff84496004e54836c035821f14439149f22e1db834f315b24588ba2f031511926c0100000000ffffffffbbc5e70ed1c3060ba1bfe99c1656a3158a7307c3ce8eb362ec32c668596d2bd30000000009636563635351abab00b039344c6fc4f9bec24322e45407af271b2d3dfec5f259ee2fc7227bc5285e22b3be85b40100000009ac00ab53abac6a5352e5ddfcff02d50231020000000005006a51536ab086d9020000000006ababac51ac6a00000000", "abab636565acac6a", 3, 241546088, "643a7b4c8d832e14d5c10762e74ec84f2c3f7ed96c03053157f1bed226614911"], + ["f98f79cf0274b745e1d6f36da7cbe205a79132a7ad462bdc434cfb1dcd62a6977c3d2a5dbc010000000553516a5365ffffffff4f89f485b53cdad7fb80cc1b7e314b9735b9383bc92c1248bb0e5c6173a55c0d010000000353655293f9b014045ad96d02000000000963ac526a53ac636365f4c27904000000000952536563635152526a2788f0030000000002516aff5add01000000000863530051655351abd04716ba", "ab6552536a53", 1, -2128899945, "56d29f5e300ddfed2cd8dcce5d79826e193981d0b70dc7487772c8a0b3b8d7b1"], + ["6c7913f902aa3f5f939dd1615114ce961beda7c1e0dd195be36a2f0d9d047c28ac62738c3a020000000453abac00ffffffff477bf2c5b5c6733881447ac1ecaff3a6f80d7016eee3513f382ad7f554015b970100000007ab6563acab5152ffffffff04e58fe1040000000009ab00526aabab526553e59790010000000002ab525a834b03000000000035fdaf0200000000086551ac65515200ab00000000", "63ac53", 1, 1285478169, "1536da582a0b6de017862445e91ba14181bd6bf953f4de2f46b040d351a747c9"], + ["4624aa9204584f06a8a325c84e3b108cafb97a387af62dc9eab9afd85ae5e2c71e593a3b690200000003636a005eb2b44eabbaeca6257c442fea00107c80e32e8715a1293cc164a42e62ce14fea146220c020000000090b9ee38106e3310037bfc519fd209bdbd21c588522a0e96df5fba4e979392bc993bfe9f01000000086363636a635353ab6f1907d218ef6f3c729d9200e23c1dbff2df58b8b1282c6717b26cf760ee4c880d23f4d100000000086a516a536a525163ffffffff01d6f162050000000000ebbab208", "525365ab0053", 1, -1515409325, "6cf9cd409b7185b1f118171f0a34217af5b612ea54195ea186505b667c19337f"], + ["16562fc503f1cf9113987040c408bfd4523f1512da699a2ca6ba122dc65677a4c9bf7763830000000003636552ffffffff1ec1fab5ff099d1c8e6b068156f4e39b5543286bab53c6d61e2582d1e07c96cf02000000045163656affffffffd0ef40003524d54c08cb4d13a5ee61c84fbb28cde9eca7a6d11ba3a9335d8c620100000007635153536a6300fbb84fc2012003a601000000000363ab6a00000000", "63636a006a6aab", 0, -1310262675, "1efbf3d37a92bc03d9eb950b792f307e95504f7c4998f668aa250707ebb752ac"], + ["531665d701f86bacbdb881c317ef60d9cd1baeffb2475e57d3b282cd9225e2a3bf9cbe0ded01000000086300ac515263acabffffffff0453a8500100000000086353acab516a6565e5e9200500000000026a52a44caa00000000000453ac000065e41b0500000000076500ac0065526ab4476f4d", "006563006aab00636a", 0, 1770013777, "0898b26dd3ca08632a5131fa48eb55b44386d0c5070c24d6e329673d5e3693b8"], + ["0f1227a20140655a3da36e413b9b5d108a866f6f147eb4940f032f5a89854eae6d7c3a91600100000009525363515153515253e37a79480161ab61020000000001ab00000000", "ab65005200", 0, -1996383599, "979782dc3f36d908d37d7e4046a38d306b4b08ddc60a5eba355fe3d6da1b29a9"], + ["063ff6eb01aff98d0d2a6db224475010edb634c2f3b46257084676adeb84165a4ff8558d7601000000066353006a5165deb3262c042d109c0000000000076363ab52ac005200b9c4050000000007516300ac510063cfffc800000000000200639e815501000000000700526a52ac6365ac7b07b8", "656552abac6500", 0, -1559847112, "674a4bcb04247f8dc98780f1792cac86b8aee41a800fc1e6f5032f6e1dccde65"], + ["3320f6730132f830c4681d0cae542188e4177cad5d526fae84565c60ceb5c0118e844f90bd030000000163ffffffff0257ec5a040000000005525251ac6538344d000000000002515200000000", "5352656a53ac516a65", 0, 788050308, "3afacaca0ef6be9d39e71d7b1b118994f99e4ea5973c9107ca687d28d8eba485"], + ["c13aa4b702eedd7cde09d0416e649a890d40e675aa9b5b6d6912686e20e9b9e10dbd40abb1000000000863ab6353515351ac11d24dc4cc22ded7cdbc13edd3f87bd4b226eda3e4408853a57bcd1becf2df2a1671fd1600000000045165516affffffff01baea300100000000076aab52ab53005300000000", "0065", 0, -1195908377, "241a23e7b1982d5f78917ed97a8678087acbbffe7f624b81df78a5fe5e41e754"], + ["d9a6f20e019dd1b5fae897fb472843903f9c3c2293a0ffb59cff2b413bae6eceab574aaf9d030000000663ab006a515102f54939032df5100100000000056a51ab65530ec28f010000000004ac5100007e874905000000000651005265ac6a00000000", "abacab63acacabab", 0, 271463254, "1326a46f4c21e7619f30a992719a905aa1632aaf481a57e1cbd7d7c22139b41e"], + ["157c81bf0490432b3fcb3f9a5b79e5f91f67f05efb89fa1c8740a3fe7e9bdc18d7cb6acd2203000000026351ffffffff912e48e72bbcf8a540b693cf8b028e532a950e6e63a28801f6eaad1afcc52ad00000000000b1a4b170a2b9e60e0cad88a0085137309f6807d25d5afb5c1e1d32aa10ba1cdf7df596dd0000000009525165656a51ab65ab3674fba32a76fe09b273618d5f14124465933f4190ba4e0fd09d838daafc6223b31642ac00000000086a53536551ac6565ffffffff01fe9fb6030000000008ab51656a5165636a00000000", "ab00ab6a6551", 3, -64357617, "1ddaab7f973551d71f16bd70c4c4edbf7225e64e784a6da0ee7f7a9fe4f12a0b"], + ["a2692fff03b2387f5bacd5640c86ba7df574a0ee9ed7f66f22c73cccaef3907eae791cbd230200000004536363abffffffff4d9fe7e5b375de88ba48925d9b2005447a69ea2e00495a96eafb2f144ad475b40000000008000053000052636537259bee3cedd3dcc07c8f423739690c590dc195274a7d398fa196af37f3e9b4a1413f810000000006ac63acac52abffffffff04c65fe60200000000075151536365ab657236fc020000000009005263ab00656a6a5195b8b6030000000007ac5165636aac6a7d7b66010000000002acab00000000", "51", 2, -826546582, "925037c7dc7625f3f12dc83904755a37016560de8e1cdd153c88270a7201cf15"], + ["2c5b003201b88654ac2d02ff6762446cb5a4af77586f05e65ee5d54680cea13291efcf930d0100000005ab536a006a37423d2504100367000000000004536a515335149800000000000152166aeb03000000000452510063226c8e03000000000000000000", "635251", 0, 1060344799, "7e058ca5dd07640e4aae7dea731cfb7d7fef1bfd0d6d7b6ce109d041f4ca2a31"], + ["f981b9e104acb93b9a7e2375080f3ea0e7a94ce54cd8fb25c57992fa8042bdf4378572859f0100000002630008604febba7e4837da77084d5d1b81965e0ea0deb6d61278b6be8627b0d9a2ecd7aeb06a0300000005ac5353536a42af3ef15ce7a2cd60482fc0d191c4236e66b4b48c9018d7dbe4db820f5925aad0e8b52a0300000008ab0063510052516301863715efc8608bf69c0343f18fb81a8b0c720898a3563eca8fe630736c0440a179129d03000000086aac6a52ac6a63ac44fec4c00408320a03000000000062c21c030000000007ac6a655263006553835f0100000000015303cd60000000000005535263536558b596e0", "00", 0, -2140385880, "49870a961263354c9baf108c6979b28261f99b374e97605baa532d9fa3848797"], + ["e7416df901269b7af14a13d9d0507709b3cd751f586ce9d5da8d16a121e1bd481f5a086e1103000000056aab005200ffffffff01aa269c040000000006acac6a6a5263ee718de6", "ab525363", 0, 1309186551, "eea7d2212bda2d408fff146f9ae5e85e6b640a93b9362622bb9d5e6e36798389"], + ["402a815902193073625ab13d876190d1bbb72aecb0ea733c3330f2a4c2fe6146f322d8843a0300000008656aab0000535363fffffffff9dccdec5d8509d9297d26dfcb1e789cf02236c77dc4b90ebccbf94d1b5821150300000001510bf1f96a03c5c145000000000002ac6ae11b1c0100000000055163516a5239c8a600000000000365636300000000", "63536aacab", 0, -1811424955, "0090803a20102a778ab967a74532faee13e03b702083b090b1497bc2267ee2fe"], + ["c4b702e502f1a54f235224f0e6de961d2e53b506ab45b9a40805d1dacd35148f0acf24ca5e00000000085200ac65ac53acabf34ba6099135658460de9d9b433b84a8562032723635baf21ca1db561dce1c13a06f4407000000000851ac006a63516aabffffffff02a853a603000000000163d17a67030000000005ab63006a5200000000", "ac5363515153", 1, 480734903, "5c46f7ac3d6460af0da28468fcc5b3c87f2b9093d0f837954b7c8174b4d7b6e7"], + ["9b83f78704f492b9b353a3faad8d93f688e885030c274856e4037818848b99e490afef27770200000000ffffffff36b60675a5888c0ef4d9e11744ecd90d9fe9e6d8abb4cff5666c898fdce98d9e00000000056aab656352596370fca7a7c139752971e169a1af3e67d7656fc4fc7fd3b98408e607c2f2c836c9f27c030000000653ac51ab6300a0761de7e158947f401b3595b7dc0fe7b75fa9c833d13f1af57b9206e4012de0c41b8124030000000953656a53ab53510052242e5f5601bf83b301000000000465516a6300000000", "63515200ac656365", 3, -150879312, "9cf05990421ea853782e4a2c67118e03434629e7d52ab3f1d55c37cf7d72cdc4"], + ["f492a9da04f80b679708c01224f68203d5ea2668b1f442ebba16b1aa4301d2fe5b4e2568f3010000000953005351525263ab65ffffffff93b34c3f37d4a66df255b514419105b56d7d60c24bf395415eda3d3d8aa5cd0101000000020065ffffffff9dba34dabdc4f1643b372b6b77fdf2b482b33ed425914bb4b1a61e4fad33cf390000000002ab52ffffffffbbf3dc82f397ef3ee902c5146c8a80d9a1344fa6e38b7abce0f157be7adaefae0000000009515351005365006a51ffffffff021359ba010000000000403fea0200000000095200ac6353abac635300000000", "00ac51acacac", 0, -2115078404, "fd44fc98639ca32c927929196fc3f3594578f4c4bd248156a25c04a65bf3a9f3"], + ["2f73e0b304f154d3a00fde2fdd40e791295e28d6cb76af9c0fd8547acf3771a02e3a92ba37030000000852ac6351ab6565639aa95467b065cec61b6e7dc4d6192b5536a7c569315fb43f470078b31ed22a55dab8265f02000000080065636a6aab6a53ffffffff9e3addbff52b2aaf9fe49c67017395198a9b71f0aa668c5cb354d06c295a691a0100000000ffffffff45c2b4019abaf05c5e484df982a4a07459204d1343a6ee5badade358141f8f990300000007ac516a6aacac6308655cd601f3bc2f0000000000015200000000", "", 0, -2082053939, "9a95e692e1f78efd3e46bb98f178a1e3a0ef60bd0301d9f064c0e5703dc879c2"], + ["5a60b9b503553f3c099f775db56af3456330f1e44e67355c4ab290d22764b9144a7b5f959003000000030052acbd63e0564decc8659aa53868be48c1bfcda0a8c9857b0db32a217bc8b46d9e7323fe9649020000000553ac6551abd0ecf806211db989bead96c09c7f3ec5f73c1411d3329d47d12f9e46678f09bac0dc383e0200000000ffffffff01494bb202000000000500516551ac00000000", "ac", 0, 1169947809, "62a36c6e8da037202fa8aeae03e533665376d5a4e0a854fc4624a75ec52e4eb1"], + ["7e98d353045569c52347ca0ff2fdba608829e744f61eb779ffdb5830aae0e6d6857ab2690e03000000075365acab656352ffffffffa890dd37818776d12da8dca53d02d243ef23b4535c67016f4c58103eed85360f030000000093dbacdc25ca65d2951e047d6102c4a7da5e37f3d5e3c8b87c29b489360725dcd117ee2003000000056a6300ac53c7e99fa1dc2b8b51733034e6555f6d6de47dbbf1026effac7db80cb2080678687380dc1e02000000075352005263516affffffff04423272040000000008ab6353ab65510051e0f53b0500000000086300516552635152f74a5f04000000000853acab0053ab52ab0e8e5f00000000000951ac5363516a6aabab00000000", "6a5163ab52", 3, 890006103, "476868cecd1763c91dade98f17defa42d31049547df45acffa1cc5ae5c3d75d6"], + ["e3649aa40405e6ffe377dbb1bbbb672a40d8424c430fa6512c6165273a2b9b6afa9949ec430200000007630052ab655153a365f62f2792fa90c784efe3f0981134d72aac0b1e1578097132c7f0406671457c332b84020000000353ab6ad780f40cf51be22bb4ff755434779c7f1def4999e4f289d2bd23d142f36b66fbe5cfbb4b01000000076a5252abac52ab1430ffdc67127c9c0fc97dcd4b578dab64f4fb9550d2b59d599773962077a563e8b6732c02000000016affffffff04cb2687000000000002ab636e320904000000000252acf70e9401000000000100dc3393050000000006ab0063536aacbc231765", "65520053", 3, -2016196547, "f64f805f0ff7f237359fa6b0e58085f3c766d1859003332223444fd29144112a"], + ["1d033569040700441686672832b531ab55db89b50dc1f9fc00fb72218b652da9dcfbc83be901000000066551ac526a632b390f9ad068e5fdee6563e88e2a8e4e09763c861072713dc069893dc6bbc9db3f00e26502000000096a5363526565525252ffffffff8a36bdd0aaf38f6707592d203e14476ca9f259021e487135c7e8324244057ed90300000000ed3fb2a3dfd4d46b5f3603fe0148653911988457bd0ed7f742b07c452f5476c228ff9f600200000007526aac00525152ffffffff04b88e48030000000000c753d602000000000853510000006553518fda2603000000000853ac52acac5263534839f1030000000006ac006aacac5300000000", "516553635300ab0052", 1, 2075958316, "c2cefaec2293134acbcf6d2a8bf2b3eb42e4ec04ee8f8bf30ff23e65680677c1"], + ["4c4be7540344050e3044f0f1d628039a334a7c1f7b4573469cfea46101d6888bb6161fe9710200000000ffffffffac85a4fdad641d8e28523f78cf5b0f4dc74e6c5d903c10b358dd13a5a1fd8a06000000000163e0ae75d05616b72467b691dc207fe2e65ea35e2eadb7e06ea442b2adb9715f212c0924f10200000000ffffffff0194ddfe02000000000265ac00000000", "00006500", 1, -479922562, "d66924d49f03a6960d3ca479f3415d638c45889ce9ab05e25b65ac260b51d634"], + ["202c18eb012bc0a987e69e205aea63f0f0c089f96dd8f0e9fcde199f2f37892b1d4e6da90302000000055352ac6565ffffffff0257e5450100000000025300ad257203000000000000000000", "520052ac6a005265", 0, 168054797, "502967a6f999f7ee25610a443caf8653dda288e6d644a77537bcc115a8a29894"], + ["32fa0b0804e6ea101e137665a041cc2350b794e59bf42d9b09088b01cde806ec1bbea077df0200000008515153650000006506a11c55904258fa418e57b88b12724b81153260d3f4c9f080439789a391ab147aabb0fa0000000007000052ac51ab510986f2a15c0d5e05d20dc876dd2dafa435276d53da7b47c393f20900e55f163b97ce0b800000000008ab526a520065636a8087df7d4d9c985fb42308fb09dce704650719140aa6050e8955fa5d2ea46b464a333f870000000009636300636a6565006affffffff01994a0d040000000002536500000000", "516563530065", 2, -163068286, "f58637277d2bc42e18358dc55f7e87e7043f5e33f4ce1fc974e715ef0d3d1c2a"], + ["ae23424d040cd884ebfb9a815d8f17176980ab8015285e03fdde899449f4ae71e04275e9a80100000007ab006553530053ffffffff018e06db6af519dadc5280c07791c0fd33251500955e43fe4ac747a4df5c54df020000000251ac330e977c0fec6149a1768e0d312fdb53ed9953a3737d7b5d06aad4d86e9970346a4feeb5030000000951ab51ac6563ab526a67cabc431ee3d8111224d5ecdbb7d717aa8fe82ce4a63842c9bd1aa848f111910e5ae1eb0100000004ac515300bfb7e0d7048acddc030000000009636a5253636a655363a3428e040000000001525b99c6050000000004655265ab717e6e020000000000d99011eb", "ac6a6a516565", 1, -716251549, "b098eb9aff1bbd375c70a0cbb9497882ab51f3abfebbf4e1f8d74c0739dc7717"], + ["030f44fc01b4a9267335a95677bd190c1c12655e64df74addc53b753641259af1a54146baa020000000152e004b56c04ba11780300000000026a53f125f001000000000251acd2cc7c03000000000763536563655363c9b9e50500000000015200000000", "ac", 0, -1351818298, "19dd32190ed2a37be22f0224a9b55b91e37290577c6c346d36d32774db0219a3"], + ["c05f448f02817740b30652c5681a3b128322f9dc97d166bd4402d39c37c0b14506d8adb5890300000003536353ffffffffa188b430357055ba291c648f951cd2f9b28a2e76353bef391b71a889ba68d5fc02000000056565526a6affffffff02745f73010000000001ab3ec34c0400000000036aac5200000000", "516551510053", 0, -267877178, "3a1c6742d4c374f061b1ebe330b1e169a113a19792a1fdde979b53e094cc4a3c"], + ["163ba45703dd8c2c5a1c1f8b806afdc710a2a8fc40c0138e2d83e329e0e02a9b6c837ff6b8000000000700655151ab6a522b48b8f134eb1a7e6f5a6fa319ce9d11b36327ba427b7d65ead3b4a6a69f85cda8bbcd22030000000563656552acffffffffdbcf4955232bd11eef0cc6954f3f6279675b2956b9bcc24f08c360894027a60201000000066500006500abffffffff04d0ce9d0200000000008380650000000000015233f360040000000003006aabedcf0801000000000000000000", "000065006500ac", 0, 216965323, "9afe3f4978df6a86e9a8ebd62ef6a9d48a2203f02629349f1864ef2b8b92fd55"], + ["07f7f5530453a12ad0c7eb8fbc3f140c7ab6818144d67d2d8752600ca5d9a9358e2dff87d4000000000663526aab526a9e599c379d455e2da36d0cde88d931a863a3e97e01e93b9edb65856f3d958dc08b92b720000000000165bbc8d66dae3b1b170a6e2457f5b161465cb8706e0e6ffc6af55deb918365f14c5f40d4890100000000a7bd77c069ee4b48638e2363fcf2a86b02bea022047bd9fcb16d2b94ad068308d19b31cb00000000066aab5300ab529672aa8f01dbd8a205000000000663536353006a02e99901", "ac006351006a63ab63", 1, 119789359, "6629a1e75c6ae8f4f9d5f734246b6a71682a5ea57246040ef0584f6b97916175"], + ["fe647f950311bf8f3a4d90afd7517df306e04a344d2b2a2fea368935faf11fa6882505890d0000000005ab5100516affffffff43c140947d9778718919c49c0535667fc6cc727f5876851cb8f7b6460710c7f60100000000ffffffffce4aa5d90d7ab93cbec2e9626a435afcf2a68dd693c15b0e1ece81a9fcbe025e0300000000ffffffff02f34806020000000002515262e54403000000000965635151ac655363636de5ce24", "6a005100ac516351", 2, 989643518, "818a7ceaf963f52b5c48a7f01681ac6653c26b63a9f491856f090d9d60f2ffe3"], + ["a1050f8604d0f9d2feefcdb5051ae0052f38e21bf39daf583fd0c3900faa3eab5d431c0bbe030000000653536a005151683d27e5c6e0da8f22125823f32d5d98477d8098ef36263b9694d61d4d85d3f2ac02b7570200000007000052005165abffffffff0cad981542bcb54a87d9400aa63e514c7c6fab7158c2b1fb37821ea755eb162a0200000000b94feb5100e5ef3bf8ed8d43356c8a8d5ac6c7e80d7ff6040f4f0aa19abbe783f4f461240200000007636500000052655686fd70042be3ad02000000000465ab636a15680b000000000004acac53511277c705000000000452635252d27a0102000000000000000000", "6a6aacab65655251", 1, -982144648, "dfcf484111801989eb6df8dc2bafb944d7365ffeb36a575a08f3270d3ef24c9f"], + ["cef7316804c3e77fe67fc6207a1ea6ae6eb06b3bf1b3a4010a45ae5c7ad677bb8a4ebd16d90200000009ac536a5152ac5263005301ab8a0da2b3e0654d31a30264f9356ba1851c820a403be2948d35cafc7f9fe67a06960300000006526a63636a53ffffffffbada0d85465199fa4232c6e4222df790470c5b7afd54704595a48eedd7a4916b030000000865ab63ac006a006ab28dba4ad55e58b5375053f78b8cdf4879f723ea4068aed3dd4138766cb4d80aab0aff3d0300000003ac6a00ffffffff010f5dd6010000000006ab006aab51ab00000000", "", 1, 889284257, "d0f32a6db43378af84b063a6706d614e2d647031cf066997c48c04de3b493a94"], + ["7b3ff28004ba3c7590ed6e36f45453ebb3f16636fe716acb2418bb2963df596a50ed954d2e03000000065251515265abffffffff706ee16e32e22179400c9841013971645dabf63a3a6d2d5feb42f83aa468983e030000000653ac51ac5152ffffffffa03a16e5e5de65dfa848b9a64ee8bf8656cc1f96b06a15d35bd5f3d32629876e020000000043c1a3965448b3b46f0f0689f1368f3b2981208a368ec5c30defb35595ef9cf95ffd10e902000000036aac65253a5bbe042e907204000000000800006565656352634203b4020000000002656336b3b7010000000001ab7a063f0100000000026500a233cb76", "006551636a53ac5251", 1, -1144216171, "68c7bd717b399b1ee33a6562a916825a2fed3019cdf4920418bb72ffd7403c8c"], + ["d5c1b16f0248c60a3ddccf7ebd1b3f260360bbdf2230577d1c236891a1993725e262e1b6cb000000000363636affffffff0a32362cfe68d25b243a015fc9aa172ea9c6b087c9e231474bb01824fd6bd8bc0300000005ab52ab516affffffff0420d9a70200000000045152656a45765d0000000000055252536a5277bad100000000000252ab3f3f3803000000000463acac5200000000", "52636a52ab65", 1, 1305123906, "978dc178ecd03d403b048213d904653979d11c51730381c96c4208e3ea24243a"], + ["1be8ee5604a9937ebecffc832155d9ba7860d0ca451eaced58ca3688945a31d93420c27c460100000006abac5300535288b65458af2f17cbbf7c5fbcdcfb334ffd84c1510d5500dc7d25a43c36679b702e850f7c0200000003005300ffffffff7c237281cb859653eb5bb0a66dbb7aeb2ac11d99ba9ed0f12c766a8ae2a2157203000000086aabac526365acabfffffffff09d3d6639849f442a6a52ad10a5d0e4cb1f4a6b22a98a8f442f60280c9e5be80200000007ab00ab6565ab52ffffffff0398fe83030000000005526aababacbdd6ec010000000005535252ab6a82c1e6040000000001652b71c40c", "6563526353656351", 2, -853634888, "0d936cceda2f56c7bb87d90a7b508f6208577014ff280910a710580357df25f3"], + ["9e0f99c504fbca858c209c6d9371ddd78985be1ab52845db0720af9ae5e2664d352f5037d4010000000552ac53636affffffff0e0ce866bc3f5b0a49748f597c18fa47a2483b8a94cef1d7295d9a5d36d31ae7030000000663515263ac635bb5d1698325164cdd3f7f3f7831635a3588f26d47cc30bf0fefd56cd87dc4e84f162ab702000000036a6365ffffffff85c2b1a61de4bcbd1d5332d5f59f338dd5e8accbc466fd860f96eef1f54c28ec030000000165ffffffff04f5cabd010000000007000052ac526563c18f1502000000000465510051dc9157050000000008655363ac525253ac506bb600000000000865656a53ab63006a00000000", "006a6a0052", 0, 1186324483, "2f9b7348600336512686e7271c53015d1cb096ab1a5e0bce49acd35bceb42bc8"], + ["11ce51f90164b4b54b9278f0337d95c50d16f6828fcb641df9c7a041a2b274aa70b1250f2b0000000008ab6a6a65006551524c9fe7f604af44be050000000005525365006521f79a0300000000015306bb4e04000000000265ac99611a05000000000765acab656500006dc866d0", "", 0, -1710478768, "cfa4b7573559b3b199478880c8013fa713ca81ca8754a3fd68a6d7ee6147dc5a"], + ["86bc233e02ba3c647e356558e7252481a7769491fb46e883dd547a4ce9898fc9a1ca1b77790000000006ab5351abab51f0c1d09c37696d5c7c257788f5dff5583f4700687bcb7d4acfb48521dc953659e325fa390300000003acac5280f29523027225af03000000000963abac0065ab65acab7e59d90400000000016549dac846", "53006aac52acac", 0, 711159875, "880330ccde00991503ea598a6dfd81135c6cda9d317820352781417f89134d85"], + ["beac155d03a853bf18cd5c490bb2a245b3b2a501a3ce5967945b0bf388fec2ba9f04c03d68030000000012fe96283aec4d3aafed8f888b0f1534bd903f9cd1af86a7e64006a2fa0d2d30711af770010000000163ffffffffd963a19d19a292104b9021c535d3e302925543fb3b5ed39fb2124ee23a9db00302000000056500ac63acffffffff01ad67f503000000000300ac5189f78db2", "53536a636500", 2, 748992863, "bde3dd0575164d7ece3b5783ce0783ffddb7df98f178fe6468683230314f285a"], + ["81dab34a039c9e225ba8ef421ec8e0e9d46b5172e892058a9ade579fe0eb239f7d9c97d45b0300000009ac65655351ab526363ffffffff10c0faaf7f597fc8b00bbc67c3fd4c6b70ca6b22718d15946bf6b032e62dae570000000005536a00ab6a02cddec3acf985bbe62c96fccf17012a87026ed63fc6756fa39e286eb4c2dd79b59d37400300000002516affffffff04f18b8d03000000000753abab5152636564411c02000000000400ab6300e965750300000000001bd2cf02000000000565ab526aab00000000", "006551ab", 0, -1488174485, "a3d65a8cd0c1eea8558d01396b929520a2221c29d9f25f29035b8abae874447f"], + ["489ebbf10478e260ba88c0168bd7509a651b36aaee983e400c7063da39c93bf28100011f280100000004abab63ab2fc856f05f59b257a4445253e0d91b6dffe32302d520ac8e7f6f2467f7f6b4b65f2f59e903000000096353abacab6351656affffffff0122d9480db6c45a2c6fd68b7bc57246edffbf6330c39ccd36aa3aa45ec108fc030000000265ab9a7e78a69aadd6b030b12602dff0739bbc346b466c7c0129b34f50ae1f61e634e11e9f3d0000000006516a53525100ffffffff011271070000000000086563ab6353536352c4dd0e2c", "", 0, -293358504, "4eba3055bc2b58765593ec6e11775cea4b6493d8f785e28d01e2d5470ea71575"], + ["6911195d04f449e8eade3bc49fd09b6fb4b7b7ec86529918b8593a9f6c34c2f2d301ec378b000000000263ab49162266af054643505b572c24ff6f8e4c920e601b23b3c42095881857d00caf56b28acd030000000565525200ac3ac4d24cb59ee8cfec0950312dcdcc14d1b360ab343e834004a5628d629642422f3c5acc02000000035100accf99b663e3c74787aba1272129a34130668a877cc6516bfb7574af9fa6d07f9b4197303400000000085351ab5152635252ffffffff042b3c95000000000000ff92330200000000046a5252ab884a2402000000000853530065520063000d78be03000000000953abab52ab53ac65aba72cb34b", "6a", 2, -637739405, "6b80d74eb0e7ee59d14f06f30ba7d72a48d3a8ff2d68d3b99e770dec23e9284f"], + ["746347cf03faa548f4c0b9d2bd96504d2e780292730f690bf0475b188493fb67ca58dcca4f0000000002005336e3521bfb94c254058e852a32fc4cf50d99f9cc7215f7c632b251922104f638aa0b9d080100000008656aac5351635251ffffffff4da22a678bb5bb3ad1a29f97f6f7e5b5de11bb80bcf2f7bb96b67b9f1ac44d09030000000365ababffffffff036f02b30000000000076353ab6aac63ac50b72a050000000002acaba8abf804000000000663006a6a6353797eb999", "acac5100", 1, -1484493812, "164c32a263f357e385bd744619b91c3f9e3ce6c256d6a827d6defcbdff38fa75"], + ["e17149010239dd33f847bf1f57896db60e955117d8cf013e7553fae6baa9acd3d0f1412ad90200000006516500516500cb7b32a8a67d58dddfb6ceb5897e75ef1c1ff812d8cd73875856487826dec4a4e2d2422a0100000004ac525365196dbb69039229270400000000070000535351636a8b7596020000000006ab51ac52655131e99d040000000003516551ee437f5c", "ac656a53", 1, 1102662601, "8858bb47a042243f369f27d9ab4a9cd6216adeac1c1ac413ed0890e46f23d3f3"], + ["144971940223597a2d1dec49c7d4ec557e4f4bd207428618bafa3c96c411752d494249e1fb0100000004526a5151ffffffff340a545b1080d4f7e2225ff1c9831f283a7d4ca4d3d0a29d12e07d86d6826f7f0200000003006553ffffffff03c36965000000000000dfa9af00000000000451636aac7f7d140300000000016300000000", "", 1, -108117779, "c84fcaf9d779df736a26cc3cabd04d0e61150d4d5472dd5358d6626e610be57f"], + ["b11b6752044e650b9c4744fb9c930819227d2ac4040d8c91a133080e090b042a142e93906e0000000003650053ffffffff6b9ce7e29550d3c1676b702e5e1537567354b002c8b7bb3d3535e63ad03b50ea01000000055100516300fffffffffcf7b252fea3ad5a108af3640a9bc2cd724a7a3ce22a760fba95496e88e2f2e801000000036a00ac7c58df5efba193d33d9549547f6ca839f93e14fa0e111f780c28c60cc938f785b363941b000000000863ab51516552ac5265e51fcd0308e9830400000000036a00abab72190300000000016a63d0710000000000050051ab6a6300000000", "53005165ac51ab65", 0, 229563932, "e562579d1a2b10d1c5e45c06513456002a6bec157d7eb42511d30b118103c052"], + ["2aee6b9a02172a8288e02fac654520c9dd9ab93cf514d73163701f4788b4caeeb9297d2e250300000004ab6363008fb36695528d7482710ea2926412f877a3b20acae31e9d3091406bfa6b62ebf9d9d2a6470100000009535165536a63520065ffffffff03f7b560050000000003acab6a9a8338050000000000206ce90000000000056552516a5100000000", "5252", 1, -1102319963, "fa4676c374ae3a417124b4c970d1ed3319dc3ac91fb36efca1aa9ed981a8aa1b"], + ["9554595203ad5d687f34474685425c1919e3d2cd05cf2dac89d5f33cd3963e5bb43f8706480100000000ffffffff9de2539c2fe3000d59afbd376cb46cefa8bd01dbc43938ff6089b63d68acdc2b02000000096553655251536a6500fffffffff9695e4016cd4dfeb5f7dadf00968e6a409ef048f81922cec231efed4ac78f5d010000000763abab6a5365006caaf0070162cc640200000000045163ab5100000000", "", 0, -1105256289, "e8e10ed162b1a43bfd23bd06b74a6c2f138b8dc1ab094ffb2fa11d5b22869bee"], + ["04f51f2a0484cba53d63de1cb0efdcb222999cdf2dd9d19b3542a896ca96e23a643dfc45f00200000007acac53510063002b091fd0bfc0cfb386edf7b9e694f1927d7a3cf4e1d2ce937c1e01610313729ef6419ae7030000000165a3372a913c59b8b3da458335dc1714805c0db98992fd0d93f16a7f28c55dc747fe66a5b503000000095351ab65ab52536351ffffffff5650b318b3e236802a4e41ed9bc0a19c32b7aa3f9b2cda1178f84499963a0cde000000000165ffffffff0383954f04000000000553ac536363a8fc90030000000000a2e315000000000005acab00ab5100000000", "0053", 2, -1424653648, "a5bc0356f56b2b41a2314ec05bee7b91ef57f1074bcd2efc4da442222269d1a3"], + ["5e4fab42024a27f0544fe11abc781f46596f75086730be9d16ce948b04cc36f86db7ad50fd01000000026a00613330f4916285b5305cc2d3de6f0293946aa6362fc087727e5203e558c676b314ef8dd401000000001af590d202ba496f040000000001009e3c9604000000000351ac51943d64d3", "51acabab5100ab52", 1, -129301207, "556c3f90aa81f9b4df5b92a23399fe6432cf8fecf7bba66fd8fdb0246440036c"], + ["a115284704b88b45a5f060af429a3a8eab10b26b7c15ed421258f5320fa22f4882817d6c2b0300000003005300ffffffff4162f4d738e973e5d26991452769b2e1be4b2b5b7e8cbeab79b9cf9df2882c040000000006636aac63ac5194abc8aa22f8ddc8a7ab102a58e39671683d1891799d19bd1308d24ea6d365e571172f1e030000000700515352515153ffffffff4da7ad75ce6d8541acbb0226e9818a1784e9c97c54b7d1ff82f791df1c6578f60000000000ffffffff01b1f265040000000009ab0051ac656a516a5300000000", "51abab6352535265", 0, -1269106800, "0ef7b6e87c782fa33fe109aab157a2d9cddc4472864f629510a1c92fa1fe7fc1"], + ["f3f771ae02939752bfe309d6c652c0d271b7cab14107e98032f269d92b2a8c8853ab057da8010000000563ab6a6365670c305c38f458e30a7c0ab45ee9abd9a8dc03bae1860f965ffced879cb2e5d0bb156821020000000153ffffffff025dc619050000000002ac51ec0d250100000000076a5200636a6363333aecd8", "650053ac515100ab", 1, 1812404608, "a7aa34bf8a5644f03c6dd8801f9b15ba2e07e07256dbf1e02dad59f0d3e17ea9"], + ["fd3e267203ae7d6d3975e738ca84f12540229bb237dd228d5f688e9d5ba53fce4302b0334d01000000026353ffffffff602a3ab75af7aa951d93093e345ef0037a2863f3f580a9b1a575fffe68e677450300000000239e476d1e8f81e8b6313880d8a49b27c1b00af467f29756e76f675f084a5676539636ab030000000765ab6351acac52d9217747044d773204000000000752ac51526353acc33e45050000000005516500005115d889040000000004ab5163510cbbbd0200000000016500000000", "65ac526aac6a53ab52", 2, -886179388, "bc46f3f83058ddf5bebd9e1f2c117a673847c4dc5e31cfb24bac91adf30877cf"], + ["f380ae23033646af5dfc186f6599098015139e961919aea28502ea2d69474413d94a555ea2000000000853635265abacac5314da394b99b07733341ddba9e86022637be3b76492992fb0f58f23c915098979250a96620300000003ab6300ffffffff4bb6d1c0a0d84eac7f770d3ad0fdc5369ae42a21bbe4c06e0b5060d5990776220300000000ffffffff0486fd70020000000007ac6500635252acf3fd72010000000005656a6a6551212de90500000000096365006a63635153000fa33100000000000600535151656300000000", "ab52", 2, -740890152, "f804fc4d81f039009ed1f2cccb5c91da797543f235ac71b214c20e763a6d86d7"], + ["5c45d09801bb4d8e7679d857b86b97697472d514f8b76d862460e7421e8617b15a2df217c6010000000863acacab6565006affffffff01156dbc03000000000952ac63516551ac6aac00000000", "6aabac", 0, 1310125891, "270445ab77258ced2e5e22a6d0d8c36ac7c30fff9beefa4b3e981867b03fa0ad"], + ["4ecc6bde030ca0f83c0ed3d4b777f94c0c88708c6c933fe1df6874f296d425cac95355c23d0000000006ac6a51536a52f286a0969d6170e20f2a8000193807f5bc556770e9d82341ef8e17b0035eace89c76edd50200000007ac65525100656affffffff5bade6e462fac1927f078d69d3a981f5b4c1e59311a38efcb9a910aa436afaa80000000007ac6a006352ab52ffffffff0331e58902000000000763ac53636352abb8b3ca000000000001637a1d26040000000009535263ac6a5352ab655ae34a39", "6a65ab", 2, 2142728517, "4a3415eb1677ae4e0c939644a4cfd5dc6299780b55cd0dc735967057b6b1526a"], + ["a59484b501eb50114be0fc79e72ab9bc9f4a5f7acdf274a56d6b68684eb68cf8b07ec5d1c2000000000765abab00ab00639e09aa940141e3530200000000046500ac6500000000", "00516565ab", 0, -1561622405, "d60bbadd2cc0674100baa08d0e0493ee4248f0304b3eb778da942041f503a896"], + ["53dc1a88046531c7b57a35f4d9adf101d068bf8d63fbbedaf4741dba8bc5e92c8725def571030000000453655251fcdf116a226b3ec240739c4c7493800e4edfe67275234e371a227721eac43d3d9ecaf1b50300000003ac0052ffffffff2c9279ffeea4718d167e9499bd067600715c14484e373ef93ae4a31d2f5671ab0000000009516553ac636a6a65001977752eeba95a8f16b88c571a459c2f2a204e23d48cc7090e4f4cc35846ca7fc0a455ce00000000055165ac0063188143f80205972902000000000765ac63ac516353c7b6a50000000000036a510000000000", "655351536a", 0, 103806788, "b276584d3514e5b4e058167c41dc02915b9d97f6795936a51f40e894ed8508bc"], + ["53f8959f01ddb36afdcd20167edcbb75a63d18654fdcf10bc0004c761ab450fe236d79cb2702000000065151650063653435003a033a5e34050000000009ac52516a630000516ab86db3030000000002006344ac090500000000046363ab00f3644537", "5263abab63ac656353", 0, -218513553, "f1f2a489682e42a6fc20025dfc89584d17f150b2d7ae3ddedd2bf43d5e24f37f"], + ["5a06cb4602dcfc85f49b8d14513f33c48f67146f2ee44959bbca092788e6823b2719f3160b0200000001ab3c013f2518035b9ea635f9a1c74ec1a3fb7496a160f46aae2e09bfc5cd5111a0f20969e003000000015158c89ab7049f20d6010000000008ac6a52abac53515349765e00000000000300ab638292630100000000045351ab0086da09010000000006656a6365525300000000", "526a63", 1, 1502936586, "bdfaff8a4e775379c5dc26e024968efa805f923de53fa8272dd53ec582afa0c5"], + ["ca9d84fa0129011e1bf27d7cb71819650b59fb292b053d625c6f02b0339249b498ff7fd4b601000000025352ffffffff032173a0040000000008525253abab5152639473bb030000000009005153526a53535151d085bd0000000000086a5365ab5165655300000000", "005152ac51", 0, 580353445, "c629d93b02037f40aa110e46d903edb34107f64806aa0c418d435926feef68b8"], + ["e3cdbfb4014d90ae6a4401e85f7ac717adc2c035858bf6ff48979dd399d155bce1f150daea0300000002ac51a67a0d39017f6c71040000000005535200535200000000", "", 0, -1899950911, "c1c7df8206e661d593f6455db1d61a364a249407f88e99ecad05346e495b38d7"], + ["b2b6b9ab0283d9d73eeae3d847f41439cd88279c166aa805e44f8243adeb3b09e584efb1df00000000026300ffffffff7dfe653bd67ca094f8dab51007c6adaced09de2af745e175b9714ca1f5c68d050000000003ac6500aa8e596903fd3f3204000000000553ac6a6a533a2e210500000000075253acabab526392d0ee020000000008520065635200ab5200000000", "65acacac65005365", 0, 28298553, "39c2aaa2496212b3ab120ab7d7f37c5e852bfe38d20f5226413a2268663eeae8"], + ["f30c5c3d01a6edb9e10fafaf7e85db14e7fec558b9dca4a80b05d7c3a2944d282c5018f4680200000003005263ffffffff04aac3530300000000026551bc2419010000000009005163acab6a5100658e7085050000000000c5e4ec050000000007656a6a635365ab2d8e8882", "abac53ab005251ac52", 0, -490287546, "877e347ec7487497769e2581142276d1a8d813b652e4483cf9cc993d16354417"], + ["4314339e01de40faabcb1b970245a7f19eedbc17c507dac86cf986c2973715035cf95736ae0200000007abababababab65bde67b900151510b04000000000853ac00655200535300000000", "52", 0, 399070095, "47585dc25469d04ff3a60939d0a03779e3e81a411bf0ca18b91bb925ebd30718"], + ["2d4cf4e9031b3e175b2ff18cd933151379d9cfac4713d8bd0e63b70bd4a92277aa7af901ab000000000565515353abffffffff557666c7f3be9cdecdad44c3df206eb63a2da4ed1f159d21193882a9f0340081020000000963ab53ab5252ac63abffffffff8a8c897bdb87e93886aad5ded9d82a13101d5476554386373646ca5e23612e450300000009006a526552abab6a635ac03fc00198bb02040000000009525100526a6563636a1d052834", "ab52ac00acac6a", 0, -1469882480, "09ed6563a454814ab7e3b4c28d56d8751162b77df1825b37ba66c6147750b2a3"], + ["f063171b03e1830fdc1d685a30a377537363ccafdc68b42bf2e3acb908dac61ee24b37595c020000000765ac5100ab6aacf447bc8e037b89d6cadd62d960cc442d5ced901d188867b5122b42a862929ce45e7b628d010000000253aba009a1ba42b00f1490b0b857052820976c675f335491cda838fb7934d5eea0257684a2a202000000001e83cf2401a7f777030000000008ab6553526a53526a00000000", "", 2, 1984790332, "c19caada8e71535e29a86fa29cfd9b74a0c7412003fc722a121005e461e01636"], + ["cf7bdc250249e22cbe23baf6b648328d31773ea0e771b3b76a48b4748d7fbd390e88a004d30000000003ac536a4ab8cce0e097136c90b2037f231b7fde2063017facd40ed4e5896da7ad00e9c71dd70ae600000000096a0063516352525365ffffffff01b71e3e00000000000300536a00000000", "", 1, 546970113, "6a815ba155270af102322c882f26d22da11c5330a751f520807936b320b9af5d"], + ["ac7a125a0269d35f5dbdab9948c48674616e7507413cd10e1acebeaf85b369cd8c88301b7c030000000963656aac6a530053abffffffffed94c39a582e1a46ce4c6bffda2ccdb16cda485f3a0d94b06206066da12aecfe010000000752abab63536363ef71dcfb02ee07fa0400000000016a6908c802000000000751656a6551abac688c2c2d", "6a6351526551", 0, 858400684, "552ff97d7924f51cda6d1b94be53483153ef725cc0a3a107adbef220c753f9a6"], + ["3a1f454a03a4591e46cf1f7605a3a130b631bf4dfd81bd2443dc4fac1e0a224e74112884fe0000000005516aac6a53a87e78b55548601ffc941f91d75eab263aa79cd498c88c37fdf275a64feff89fc1710efe03000000016a39d7ef6f2a52c00378b4f8f8301853b61c54792c0f1c4e2cd18a08cb97a7668caa008d970200000002656affffffff017642b20100000000096a63535253abac6a6528271998", "51", 2, 1459585400, "e9a7f21fc2d38be7be47095fbc8f1bf8923660aa4d71df6d797ae0ba5ca4d5b0"], + ["f59366cc0114c2a18e6bd1347ed9470f2522284e9e835dd5c5f7ef243639ebea95d9b232b6020000000153474b62eb045c00170500000000096352ab516352ab5200038a520400000000086aab5253656a63005b968904000000000963536353ac0053635387106002000000000000000000", "ab52526300ab51", 0, 1834116153, "cdf51f6e3a9dc2be5a59ea4c00f5aac1e1426a5202c325e6cf2567d07d8d8de4"], + ["6269e0fa0173e76e89657ca495913f1b86af5b8f1c1586bcd6c960aede9bc759718dfd5044000000000352ac530e2c7bd90219849b000000000007ab00ab6a53006319f281000000000007ab00515165ac5200000000", "6a", 0, -2039568300, "62094f98234a05bf1b9c7078c5275ed085656856fb5bdfd1b48090e86b53dd85"], + ["eb2bc00604815b9ced1c604960d54beea4a3a74b5c0035d4a8b6bfec5d0c9108f143c0e99a0000000000ffffffff22645b6e8da5f11d90e5130fd0a0df8cf79829b2647957471d881c2372c527d8010000000263acffffffff1179dbaf17404109f706ae27ad7ba61e860346f63f0c81cb235d2b05d14f2c1003000000025300264cb23aaffdc4d6fa8ec0bb94eff3a2e50a83418a8e9473a16aaa4ef8b855625ed77ef40100000003ac51acf8414ad404dd328901000000000652526500006ab6261c000000000002526a72a4c9020000000006ac526500656586d2e7000000000006656aac00ac5279cd8908", "51", 1, -399279379, "d37532e7b2b8e7db5c7c534197600397ebcc15a750e3af07a3e2d2e4f84b024f"], + ["dc9fe6a8038b84209bbdae5d848e8c040433237f415437592907aa798bf30d9dbbddf0ff85010000000153ffffffff23269a7ea29fcf788db483b8d4c4b35669e582608644259e950ce152b0fa6e050000000003acababffffffff65de94857897ae9ea3aa0b938ba6e5adf374d48469922d2b36dbb83d3b8c8261010000000452ac5200ffffffff02856e9b0300000000026a51980c8e02000000000365ab63d2648db4", "00ab0051ac526565", 2, 1562581941, "5cef9d8e18a2d5a70448f17b465d411a19dab78f0ddf1672ffd518b188f52433"], + ["eba8b0de04ac276293c272d0d3636e81400b1aaa60db5f11561480592f99e6f6fa13ad387002000000070053acab536563bebb23d66fd17d98271b182019864a90e60a54f5a615e40b643a54f8408fa8512cfac927030000000963ac6a6aabac65ababffffffff890a72192bc01255058314f376bab1dc72b5fea104c154a15d6faee75dfa5dba020000000100592b3559b0085387ac7575c05b29b1f35d9a2c26a0c27903cc0f43e7e6e37d5a60d8305a030000000252abffffffff0126518f05000000000000000000", "005300635252635351", 1, 664344756, "26dc2cba4bd5334e5c0b3a520b44cc1640c6b923d10e576062f1197171724097"], + ["91bd040802c92f6fe97411b159df2cd60fb9571764b001f31657f2d616964637605875c2a901000000055263006a65ffffffff3651df372645f50cf4e32fdf6e61c766e912e16335db2b40c5d52fe89eefe7cd00000000040065ab65ffffffff03ca8625030000000009ab51ac63530052ab52c6bf14020000000006ab00ab52005167d270000000000007ab53525351636a00000000", "5151ab63005252ac", 1, 1983087664, "3e5aa0200248d8d86ede3b315ca1b857018b89184a4bd023bd88ab12e499f6e1"], + ["185cda1a01ecf7a8a8c28466725b60431545fc7a3367ab68e34d486e8ea85ee3128e0d8384000000000465ac63abec88b7bb031c56eb04000000000965636a51005252006a7c78d5040000000007acac63abac51ac3024a40500000000086300526a51abac51464c0e8c", "0065535265515352", 0, 1594558917, "b5280b9610c0625a65b36a8c2402a95019a7bbb9dd3de77f7c3cb1d82c3263ba"], + ["a9531f07034091668b65fea8b1a79700d586ac9e2f42ca0455a26abe41f9e1805d009a0f5702000000096365516365ac5263ab3619bac643a9e28ee47855118cf80c3a74531cdf198835d206d0fe41804e325a4f9f105e03000000016a58e3ab0d46375d98994daf0fa7c600d2bb4669e726fca0e3a3f21ea0d9e777396740328f0100000008636a5363ab526a538d3ea7700304cb66030000000007515163ab52ab510184030500000000085353636565ac0051d9cff402000000000751ab52ab5352abf0e36254", "ab5353ac5365acab", 2, 1633101834, "04c9ef72f33668ca449c0415becf62cc0b8e0c75f9c8813852d42a58acf107c8"], + ["6b5ecc7903fe0ba37ea551df92a59e12bad0a3065846ba69179a8f4a741a2b4fcf679aac810200000004535263529a3d343293b99ab425e7ef8529549d84f480bcd92472bab972ea380a302128ae14dfcd0200000000025163ffffffff24636e4545cab9bf87009119b7fc3ec4d5ee9e206b90f35d1df8a563b6cd097a010000000852abac53005153abc64467860406e832020000000009526300006a53ac6352ac1395010000000002ac53b117f300000000000863655351acab00651edf02030000000008ab51ac6353535252628ef71d", "ab63ab6a52ac526563", 2, -1559697626, "8f07ece7d65e509f1e0780584ef8d271c1c61a13b10335d5faafc7afc8b5b8ec"], + ["92c9fb780138abc472e589d5b59489303f234acc838ca66ffcdf0164517a8679bb622a4267020000000153468e373d04de03fa020000000009ac006a5265ab5163006af649050000000007515153006a00658ceb59030000000001ac36afa0020000000009ab53006351ab51000000000000", "6a", 0, 2059357502, "e2358dfb51831ee81d7b0bc602a65287d6cd2dbfacf55106e2bf597e22a4b573"], + ["6f62138301436f33a00b84a26a0457ccbfc0f82403288b9cbae39986b34357cb2ff9b889b302000000045253655335a7ff6701bac9960400000000086552ab656352635200000000", "6aac51", 0, 1444414211, "502a2435fd02898d2ff3ab08a3c19078414b32ec9b73d64a944834efc9dae10c"], + ["9981143a040a88c2484ac3abe053849e72d04862120f424f373753161997dd40505dcb4783030000000700536365536565a2e10da3f4b1c1ad049d97b33f0ae0ea48c5d7c30cc8810e144ad93be97789706a5ead180100000003636a00ffffffffbdcbac84c4bcc87f03d0ad83fbe13b369d7e42ddb3aecf40870a37e814ad8bb5010000000963536a5100636a53abffffffff883609905a80e34202101544f69b58a0b4576fb7391e12a769f890eef90ffb72020000000651656352526affffffff04243660000000000004ab5352534a9ce001000000000863656363ab6a53652df19d030000000003ac65acedc51700000000000000000000", "ac6300acac", 2, 293672388, "7ba99b289c04718a7283f150d831175ed6303081e191a0608ea81f78926c5bdf"], + ["a2bb630b01989bc5d643f2da4fb9b55c0cdf846ba06d1dbe372893024dbbe5b9b8a1900af802000000055265ac63aca7a68d2f04916c74010000000003abac007077f0040000000001007d4127010000000005ac516aac000f31e8030000000000571079c9", "65ab0051ac", 0, -1103627693, "92d53b4390262e6b288e8a32e0cfc36cd5adfdfabfe96c7bfd4a19d65e233761"], + ["49f7d0b6037bba276e910ad3cd74966c7b3bc197ffbcfefd6108d6587006947e97789835ea0300000008526a52006a650053ffffffff8d7b6c07cd10f4c4010eac7946f61aff7fb5f3920bdf3467e939e58a1d4100ab03000000076aac63ac535351ffffffff8f48c3ba2d52ad67fbcdc90d8778f3c8a3894e3c35b9730562d7176b81af23c80100000003ab5265ffffffff0301e3ef0300000000046a525353e899ac0500000000075153ab6a65abac259bea0400000000007b739972", "53516aacac6aac", 1, 955403557, "5d366a7f4346ae18aeb7c9fc4dab5af71173184aa20ed22fcb4ea8511ad25449"], + ["58a4fed801fbd8d92db9dfcb2e26b6ff10b120204243fee954d7dcb3b4b9b53380e7bb8fb60100000003006351ffffffff02a0795b050000000006536351ac6aac2718d00200000000075151acabac515354d21ba1", "005363515351", 0, -1322430665, "bbee941bbad950424bf40e3623457db47f60ed29deaa43c99dec702317cb3326"], + ["32765a0b02e455793d9ce530e9f6a44bcbc612e893a875b5da61d822dc56d8245166c398b403000000085353abac6300006a6bdee2a78d0d0b6a5ea666eed70b9bfea99d1d612ba3878f615c4da10d4a521cba27155002000000035363abffffffff043cd42401000000000551656a53653685320100000000030000511881bc0500000000065165abab636a20169f010000000007acab656aac63acdb0706a8", "65ac53ab53", 0, 1936499176, "5c5a9c3a5de7dc7a82bc171c9d3505913b8bcc450bc8b2d11772c1a1d781210b"], + ["17fad0d303da0d764fedf9f2887a91ea625331b28704940f41e39adf3903d8e75683ef6d46020000000151ffffffffff376eea4e880bcf0f03d33999104aafed2b3daf4907950bb06496af6b51720a020000000900636a63525253525196521684f3b08497bad2c660b00b43a6a517edc58217876eb5e478aa3b5fda0f29ee1bea00000000046aacab6affffffff03dde8e2050000000007ac5365ac51516a14772e000000000005630000abacbbb360010000000006ab5251ab656a50f180f0", "0053", 0, -1043701251, "a3bdf8771c8990971bff9b4e7d59b7829b067ed0b8d3ac1ec203429811384668"], + ["236c32850300045e292c84ede2b9ab5733ba08315a2bb09ab234c4b4e8894808edbdac0d3b020000000653635363abacffffffffd3f696bb31fdd18a72f3fc2bb9ae54b416a253fc37c1a0f0180b52d35bad49440100000004650053abffffffffa85c75a2406d82a93b12e555b66641c1896a4e83ae41ef1038218311e38ace060200000006abab006a51ac104b5e6701e2842c04000000000800630051ac0000ab00000000", "ab63ac6a516a", 1, -1709887524, "8c29ea8ef60c5a927fccdba8ea385db6b6b84d98e891db45f5d4ee3148d3f5a7"], + ["b78d5fd601345f3100af494cdf447e7d4076179f940035b0ebe8962587d4d0c9c6c9fc34ee0300000003516a6affffffff03dc5c890100000000085353ac53ac6a52534ac941040000000007ac63656a51ab51d4266b0100000000036aacac70731f2d", "005351ab0053", 0, -1789071265, "d5f1c1cb35956a5711d67bfb4cedbc67e77c089b912d688ad440ff735adb390d"], + ["5a2257df03554550b774e677f348939b37f8e765a212e566ce6b60b4ea8fed4c9504b7f7d1000000000653655265ab5258b67bb931df15b041177cf9599b0604160b79e30f3d7a594e7826bae2c29700f6d8f8f40300000005515300ac6a159cf8808a41f504eb5c2e0e8a9279f3801a5b5d7bc6a70515fbf1c5edc875bb4c9ffac500000000050063510052ffffffff0422a90105000000000965006a650000516a006417d2020000000006526363ab00524d969d0100000000035153acc4f077040000000005ac5200636500000000", "6a52", 1, -1482463464, "37b794b05d0687c9b93d5917ab068f6b2f0e38406ff04e7154d104fc1fb14cdc"], + ["e0032ad601269154b3fa72d3888a3151da0aed32fb2e1a15b3ae7bee57c3ddcffff76a1321010000000100110d93ae03f5bd080100000000075263516a6551002871e60100000000046a005252eaa753040000000004ab6aab526e325c71", "630052", 0, -1857873018, "ea117348e94de86381bb8ad1c7f93b8c623f0272104341701bb54e6cb433596c"], + ["014b2a5304d46764817aca180dca50f5ab25f2e0d5749f21bb74a2f8bf6b8b7b3fa8189cb7030000000965ac5165ab6a51ac6360ecd91e8abc7e700a4c36c1a708a494c94bb20cbe695c408543146566ab22be43beae9103000000045163ab00ffffffffffa48066012829629a9ec06ccd4905a05df0e2b745b966f6a269c9c8e13451fc00000000026565ffffffffc40ccadc21e65fe8a4b1e072f4994738ccaf4881ae6fede2a2844d7da4d199ab02000000065152ab536aabffffffff01b6e054030000000004515352ab3e063432", "", 0, 1056459916, "a7aff48f3b8aeb7a4bfe2e6017c80a84168487a69b69e46681e0d0d8e63a84b6"], + ["c4ef04c103c5dde65410fced19bf6a569549ecf01ceb0db4867db11f2a3a3eef0320c9e8e001000000085100536a53516aabffffffff2a0354fa5bd96f1e28835ffe30f52e19bd7d5150c687d255021a6bec03cf4cfd03000000056a006300514900c5b01d3d4ae1b97370ff1155b9dd0510e198d266c356d6168109c54c11b4c283dca00300000002ababffffffff02e19e3003000000000451655351fa5c0003000000000163ef1fc64b", "51636a51ab630065", 1, -1754709177, "0a281172d306b6a32e166e6fb2a2cc52c505c5d60ea448e9ba7029aa0a2211e1"], + ["29083fe00398bd2bb76ceb178f22c51b49b5c029336a51357442ed1bac35b67e1ae6fdf13100000000066a6500acab51ffffffffe4ca45c9dc84fd2c9c47c7281575c2ba4bf33b0b45c7eca8a2a483f9e3ebe4b3010000000200abffffffffdf47ad2b8c263fafb1e3908158b18146357c3a6e0832f718cd464518a219d18303000000096352ac656351ac0052daddfb3b0231c36f00000000000400526a5275c7e0020000000001ab00000000", "acab536aac52", 2, 300802386, "82ebc07b16cff0077e9c1a279373185b3494e39d08fd3194aae6a4a019377509"], + ["1201ab5d04f89f07c0077abd009762e59db4bb0d86048383ba9e1dad2c9c2ad96ef660e6d00200000007ab6a65ac5200652466fa5143ab13d55886b6cdc3d0f226f47ec1c3020c1c6e32602cd3428aceab544ef43e00000000086a6a6a526a6a5263ffffffffd5be0b0be13ab75001243749c839d779716f46687e2e9978bd6c9e2fe457ee48020000000365abab1e1bac0f72005cf638f71a3df2e3bbc0fa35bf00f32d9c7dc9c39a5e8909f7d53170c8ae0200000008ab6a51516363516affffffff02f0a6210500000000036300ac867356010000000009acab65ac6353536a659356d367", "ac53535252", 0, 917543338, "418acc156c2bc76a5d7baa58db29f1b4cf6c266c9222ed167ef5b4d47f0e0f41"], + ["344fa11e01c19c4dd232c77742f0dd0aeb3695f18f76da627628741d0ee362b0ea1fb3a2180200000007635151005100529bab25af01937c1f0500000000055153ab53656e7630af", "6351005163ac51", 0, -629732125, "228ca52a0a376fe0527a61cfa8da6d7baf87486bba92d49dfd3899cac8a1034f"], + ["b2fda1950191358a2b855f5626a0ebc830ab625bea7480f09f9cd3b388102e35c0f303124c030000000565ac65ab53ffffffff03f9c5ec04000000000765ab51516551650e2b9f0500000000045365525284e8f6040000000001ac00000000", "ac51655253", 0, 1433027632, "d2fa7e13c34cecda5105156bd2424c9b84ee0a07162642b0706f83243ff811a8"], + ["a4a6bbd201aa5d882957ac94f2c74d4747ae32d69fdc765add4acc2b68abd1bdb8ee333d6e0300000008516a6552515152abffffffff02c353cb040000000007ac6351ab51536588bd320500000000066552525253ac00000000", "", 0, 1702060459, "499da7d74032388f820645191ac3c8d20f9dba8e8ded7fa3a5401ea2942392a1"], + ["584e8d6c035a6b2f9dac2791b980a485994bf38e876d9dda9b77ad156eee02fa39e19224a60300000003ab636529db326cc8686a339b79ab6b6e82794a18e0aabc19d9ad13f31dee9d7aad8eff38288588020000000452530052ffffffff09a41f07755c16cea1c7e193c765807d18cadddca6ec1c2ed7f5dcdca99e90e80000000001acffffffff01cba62305000000000451ac63acccdf1f67", "ab536a6363", 2, -27393461, "1125645b49202dca2df2d76dae51877387903a096a9d3f66b5ac80e042c95788"], + ["83a583d204d926f2ee587a83dd526cf1e25a44bb668e45370798f91a2907d184f7cddcbbc7030000000700ab6565536a539f71d3776300dffdfa0cdd1c3784c9a1f773e34041ca400193612341a9c42df64e3f550e01000000050052515251ffffffff52dab2034ab0648553a1bb8fc4e924b2c89ed97c18dfc8a63e248b454035564b01000000015139ab54708c7d4d2c2886290f08a5221cf69592a810fd1979d7b63d35c271961e710424fd0300000005ac65ac5251ffffffff01168f7c030000000000a85e5fb0", "6a536353656a00", 0, 179595345, "5350a31ac954a0b49931239d0ecafbf34d035a537fd0c545816b8fdc355e9961"], + ["ffd35d51042f290108fcb6ea49a560ba0a6560f9181da7453a55dfdbdfe672dc800b39e7320200000006630065516a65f2166db2e3827f44457e86dddfd27a8af3a19074e216348daa0204717d61825f198ec0030100000006ab51abab00abffffffffdf41807adb7dff7db9f14d95fd6dc4e65f8402c002d009a3f1ddedf6f4895fc8030000000500ab006a65a5a848345052f860620abd5fcd074195548ce3bd0839fa9ad8642ed80627bf43a0d47dbd010000000765ab006a656a53b38cdd6502a186da05000000000765ab00ab006a53527c0e0100000000085365ab51acacac52534bd1b1", "6a635253ac0000", 0, 1095082149, "3c05473a816621a3613f0e903faa1a1e44891dd40862b029e41fc520776350fa"], + ["6c9a4b98013c8f1cae1b1df9f0f2de518d0c50206a0ab871603ac682155504c0e0ce946f460100000000ffffffff04e9266305000000000753535100ac6aacded39e04000000000365ac6ab93ccd010000000002515397bf3d050000000003ab636300000000", "63520052ac656353", 0, -352633155, "936eff8cdfd771be24124da87c7b24feb48da7cbc2c25fb5ba13d1a23255d902"], + ["e01dc7f0021dc07928906b2946ca3e9ac95f14ad4026887101e2d722c26982c27dc2b59fdb0000000005ac5200516ab5a31ffadcbe74957a5a3f97d7f1475cc6423fc6dbc4f96471bd44c70cc736e7dec0d1ea020000000951636a526a52abac53ffffffff04bc2edd05000000000252ab528c7b02000000000952ac51526500525353324820040000000002005380c713000000000009630065ab00ac525252451bbb48", "53ab65ac", 0, -552384418, "69c0b30f4c630a6c878fde6ea6b74dae94f4eb3bcfbde2dc3649e1a9ada00757"], + ["009046a1023f266d0113556d604931374d7932b4d6a7952d08fbd9c9b87cbd83f4f4c178b4030000000452ac526346e73b438c4516c60edd5488023131f07acb5f9ea1540b3e84de92f4e3c432289781ea4900000000046500655357dfd6da02baef910100000000026a007d101703000000000800516500abacac5100000000", "6aab6553ac", 0, -802456605, "f8757fbb4448ca34e0cd41b997685b37238d331e70316659a9cc9087d116169d"], + ["df76ec0801a3fcf3d18862c5f686b878266dd5083f16cf655facab888b4cb3123b3ce5db7e01000000010010e7ac6a0233c83803000000000365ac51faf14a040000000004ac51655100000000", "6353acab", 0, 15705861, "e7d873aa079a19ec712b269a37d2670f60d8cb334c4f97e2e3fd10eeb8ee5f5e"], + ["828fd3e0031084051ccef9cfdd97fae4d9cc50c0dae36bd22a3ff332881f17e9756c3e288e0200000004ab535363961a2ccccaf0218ec6a16ba0c1d8b5e93cfd025c95b6e72bc629ec0a3f47da7a4c396dad01000000025353ffffffff19ad28747fb32b4caf7b5dbd9b2da5a264bedb6c86d3a4805cd294ae53a86ac40200000009ab53535351ab6551abffffffff04a41650030000000005656aab6aab8331a304000000000700516365ac516a0d2a47010000000007abac516353abacdebc19040000000006ab5300636a6300000000", "51ab52ab53ac52", 0, 1866105980, "311094b4d73e31aefc77e97859ef07ca2f07a7b7e4d7def80c69d3f5d58527e5"], + ["c4b80f850323022205b3e1582f1ed097911a81be593471a8dce93d5c3a7bded92ef6c7c1260100000002006affffffff70294d62f37c3da7c5eae5d67dce6e1b28fedd7316d03f4f48e1829f78a88ae801000000096a5200530000516351f6b7b544f7c39189d3a2106ca58ce4130605328ce7795204be592a90acd81bef517d6f170200000000ffffffff012ab8080000000000075100006365006335454c1e", "53ac6a536aacac", 0, -1124103895, "06277201504e6bf8b8c94136fad81b6e3dadacb9d4a2c21a8e10017bfa929e0e"], + ["8ab69ed50351b47b6e04ac05e12320984a63801716739ed7a940b3429c9c9fed44d3398ad40300000006536a516a52638171ef3a46a2adb8025a4884b453889bc457d63499971307a7e834b0e76eec69c943038a0300000000ffffffff566bb96f94904ed8d43d9d44a4a6301073cef2c011bf5a12a89bedbaa03e4724030000000265acb606affd01edea38050000000008515252516aacac6300000000", "65000000006365ac53", 0, -1338942849, "7912573937824058103cb921a59a7f910a854bf2682f4116a393a2045045a8c3"], + ["2484991e047f1cf3cfe38eab071f915fe86ebd45d111463b315217bf9481daf0e0d10902a402000000006e71a424eb1347ffa638363604c0d5eccbc90447ff371e000bf52fc743ec832851bb564a0100000001abffffffffef7d014fad3ae7927948edbbb3afe247c1bcbe7c4c8f5d6cf97c799696412612020000000851536a5353006a001dfee0d7a0dd46ada63b925709e141863f7338f34f7aebde85d39268ae21b77c3068c01d0000000008535151ab00636563ffffffff018478070200000000095200635365ac52ab5341b08cd3", "", 3, 265623923, "24cb420a53b4f8bb477f7cbb293caabfd2fc47cc400ce37dbbab07f92d3a9575"], + ["54839ef9026f65db30fc9cfcb71f5f84d7bb3c48731ab9d63351a1b3c7bc1e7da22bbd508e0300000000442ad138f170e446d427d1f64040016032f36d8325c3b2f7a4078766bdd8fb106e52e8d20000000003656500ffffffff02219aa101000000000851ababac52ab00659646bd02000000000552acacabac24c394a5", "ac", 0, 906807497, "69264faadcd1a581f7000570a239a0a26b82f2ad40374c5b9c1f58730514de96"], + ["5036d7080434eb4eef93efda86b9131b0b4c6a0c421e1e5feb099a28ff9dd8477728639f77030000000951516aab535152ab5391429be9cce85d9f3d358c5605cf8c3666f034af42740e94d495e28b9aaa1001ba0c87580300000008006552ab00ab006affffffffd838978e10c0c78f1cd0a0830d6815f38cdcc631408649c32a25170099669daa0000000002acab8984227e804ad268b5b367285edcdf102d382d027789250a2c0641892b480c21bf84e3fb0100000000b518041e023d8653010000000001004040fb0100000000080051ac5200636a6300000000", "52ac", 0, 366357656, "bd0e88829afa6bdc1e192bb8b2d9d14db69298a4d81d464cbd34df0302c634c6"], + ["9ad5ccf503fa4facf6a27b538bc910cce83c118d6dfd82f3fb1b8ae364a1aff4dcefabd38f03000000096365655263ac655300807c48130c5937190a996105a69a8eba585e0bd32fadfc57d24029cbed6446d30ebc1f100100000004000053650f0ccfca1356768df7f9210cbf078a53c72e0712736d9a7a238e0115faac0ca383f219d0010000000600ab536552002799982b0221b8280000000000000c41320000000000086552ac6365636a6595f233a3", "6a5152", 2, 553208588, "f99c29a79f1d73d2a69c59abbb5798e987639e36d4c44125d8dc78a94ddcfb13"], + ["669538a204047214ce058aed6a07ca5ad4866c821c41ac1642c7d63ed0054f84677077a84f030000000853abacab6a655353ffffffff70c2a071c115282924e3cb678b13800c1d29b6a028b3c989a598c491bc7c76c5030000000752ac52ac5163ac80420e8a6e43d39af0163271580df6b936237f15de998e9589ec39fe717553d415ac02a4030000000463635153184ad8a5a4e69a8969f71288c331aff3c2b7d1b677d2ebafad47234840454b624bf7ac1d03000000056a63abab63df38c24a02fbc63a040000000002ab535ec3dc050000000002536500000000", "635153", 3, -190399351, "9615541884dfb1feeb08073a6a6aa73ef694bc5076e52187fdf4138a369f94d9"], + ["a7f139e502af5894be88158853b7cbea49ba08417fbbca876ca6614b5a41432be34499987b000000000765635165abac63ffffffff8b8d70e96c7f54eb70da0229b548ced438e1ca2ba5ddd648a027f72277ee1efc0100000001abffffffff044f2c4204000000000165e93f550100000000050000526a6a94550304000000000365536aadc21c0300000000016300000000", "6aacac6363ab5265ac", 1, 2143189425, "6e3f97955490d93d6a107c18d7fe402f1cada79993bb0ff0d096357261b3a724"], + ["3b94438f0366f9f53579a9989b86a95d134256ce271da63ca7cd16f7dd5e4bffa17d35133f010000000100ffffffff1aaad0c721e06ec00d07e61a84fb6dc840b9a968002ce7e142f943f06fd143a10100000008535151ac51ab0053b68b8e9c672daf66041332163e04db3f6048534bd718e1940b3fc3811c4eef5b7a56888b01000000001d58e38c012e38e700000000000852ab53ac6365536a00000000", "ab655352", 1, -935223304, "b3b336de141d4f071313a2207b2a0c7cf54a070dd8d234a511b7f1d13e23b0c4"], + ["e5dca8a20456de0a67e185fa6ea94085ceae478d2c15c73cb931a500db3a1b6735dd1649ec0200000005ab536aabab32d11bbdcb81361202681df06a6b824b12b5cb40bb1a672cf9af8f2a836e4d95b7839327030000000951005365ab65abacabb345085932939eef0c724adef8a57f9e1bf5813852d957c039b6a12d9c2f201ea520fb030000000009ac5352005165acac6a5efc6072f1a421dc7dc714fc6368f6d763a5d76d0278b95fc0503b9268ccfadb48213a2500000000026a53ffffffff039ee1c4020000000009ac5353ab6353535163184018000000000005655265526a9a4a8a050000000001ac00000000", "65ab53ab6a00ab6553", 2, 1902561212, "7928ae8e86c0b0cad1b2c120ea313087437974382ee6d46443ca5ac3f5878b88"], + ["972128b904e7b673517e96e98d80c0c8ceceae76e2f5c126d63da77ffd7893fb53308bb2da0300000006ac6552ab52acffffffff4cac767c797d297c079a93d06dc8569f016b4bf7a7d79b605c526e1d36a40e2202000000095365ab636aac6a6a6a69928d2eddc836133a690cfb72ec2d3115bf50fb3b0d10708fa5d2ebb09b4810c426a1db01000000060052526300001e8e89585da7e77b2dd2e30625887f0660accdf29e53a614d23cf698e6fc8ab03310e87700000000076a520051acac6555231ddb0330ec2d03000000000200abfaf457040000000004ab6a6352bdc42400000000000153d6dd2f04", "", 0, 209234698, "4a92fec1eb03f5bd754ee9bfd70707dc4420cc13737374f4675f48529be518e4"], + ["1fb4085b022c6cfb848f8af7ba3ba8d21bd23ffa9f0bfd181cb68bcaaf2074e66d4974a31602000000090000006a6a6500acab6c12c07d9f3dbd2d93295c3a49e3757119767097e7fd5371f7d1ba9ba32f1a67a5a426f00000000000ffffffff018fd2fc04000000000363ac5100000000", "65ab006a6aab526a", 0, 1431502299, "8b7dd0ff12ca0d8f4dbf9abf0abba00e897c2f6fd3b92c79f5f6a534e0b33b32"], + ["5374f0c603d727f63006078bd6c3dce48bd5d0a4b6ea00a47e5832292d86af258ea0825c260000000009655353636352526a6af2221067297d42a9f8933dfe07f61a574048ff9d3a44a3535cd8eb7de79fb7c45b6f47320200000003ac006affffffff153d917c447d367e75693c5591e0abf4c94bbdd88a98ab8ad7f75bfe69a08c470200000005ac65516365ffffffff037b5b7b000000000001515dc4d904000000000004bb26010000000004536a6aac00000000", "516552516352ac", 2, 328538756, "8bb7a0129eaf4b8fc23e911c531b9b7637a21ab11a246352c6c053ff6e93fcb6"], + ["c441132102cc82101b6f31c1025066ab089f28108c95f18fa67db179610247086350c163bd010000000651525263ab00ffffffff9b8d56b1f16746f075249b215bdb3516cbbe190fef6292c75b1ad8a8988897c3000000000751ab6553abab00ffffffff02f9078b000000000009ab0053ac51ac00ab51c0422105000000000651006563525200000000", "ac51", 0, -197051790, "55acd8293ed0be6792150a3d7ced6c5ccd153ca7daf09cee035c1b0dac92bb96"], + ["ab82ad3b04545bd86b3bb937eb1af304d3ef1a6d1343ed809b4346cafb79b7297c09e1648202000000086351ac5200535353ffffffff95d32795bbaaf5977a81c2128a9ec0b3c7551b9b1c3d952876fcb423b2dfb9e80000000005515363acac47a7d050ec1a603627ce6cd606b3af314fa7964abcc579d92e19c7aba00cf6c3090d6d4601000000056a516551633e794768bfe39277ebc0db18b5afb5f0c8117dde9b4dfd5697e9027210eca76a9be20d63000000000700520063ab6aacffffffff01ec2ddc050000000008ac52ac65ac65ac5100000000", "536300abab", 1, -2070209841, "b362da5634f20be7267de78b545d81773d711b82fe9310f23cd0414a8280801d"], + ["8bff9d170419fa6d556c65fa227a185fe066efc1decf8a1c490bc5cbb9f742d68da2ab7f320100000007ab000053525365a7a43a80ab9593b9e8b6130a7849603b14b5c9397a190008d89d362250c3a2257504eb810200000007acabacac00ab51ee141be418f003e75b127fd3883dbf4e8c3f6cd05ca4afcaac52edd25dd3027ae70a62a00000000008ac52526a5200536affffffffb8058f4e1d7f220a1d1fa17e96d81dfb9a304a2de4e004250c9a576963a586ae0300000005abacac5363b9bc856c039c01d804000000000951656aac53005365acb0724e00000000000565abab63acea7c7a0000000000036a00ac00000000", "6565", 1, -1349282084, "2b822737c2affeefae13451d7c9db22ff98e06490005aba57013f6b9bbc97250"], + ["0e1633b4041c50f656e882a53fde964e7f0c853b0ada0964fc89ae124a2b7ffc5bc97ea6230100000006ac6aacacabacffffffff2e35f4dfcad2d53ea1c8ada8041d13ea6c65880860d96a14835b025f76b1fbd9000000000351515121270867ef6bf63a91adbaf790a43465c61a096acc5a776b8e5215d4e5cd1492e611f761000000000600ac6aab5265ffffffff63b5fc39bcac83ca80ac36124abafc5caee608f9f63a12479b68473bd4bae769000000000965ac52acac5263acabffffffff0163153e020000000008ab005165ab65515300000000", "6a6aac00", 0, -968477862, "20732d5073805419f275c53784e78db45e53332ee618a9fcf60a3417a6e2ca69"], + ["2b052c24022369e956a8d318e38780ef73b487ba6a8f674a56bdb80a9a63634c6110fb5154010000000251acffffffff48fe138fb7fdaa014d67044bc05940f4127e70c113c6744fbd13f8d51d45143e01000000005710db3804e01aa9030000000008acac6a516a5152abfd55aa01000000000751ab510000ac636d6026010000000000b97da9000000000000fddf3b53", "006552", 0, 595461670, "685d67d84755906d67a007a7d4fa311519467b9bdc6a351913246a41e082a29f"], + ["073bc856015245f03b2ea2da62ccedc44ecb99e4250c7042f596bcb23b294c9dc92cfceb6b02000000095163abab52abab636afe292fb303b7c3f001000000000352636af3c49502000000000400ac6a535851850100000000066aac6553ab6500000000", "ab6aab53006aab52", 0, 247114317, "123916c6485cf23bfea95654a8815fbf04ce4d21a3b7f862805c241472906658"], + ["7888b71403f6d522e414d4ca2e12786247acf3e78f1918f6d727d081a79813d129ee8befce0100000009ab516a6353ab6365abffffffff4a882791bf6400fda7a8209fb2c83c6eef51831bdf0f5dacde648859090797ec030000000153ffffffffbb08957d59fa15303b681bad19ccf670d7d913697a2f4f51584bf85fcf91f1f30200000008526565ac52ac63acffffffff0227c0e8050000000001ac361dc801000000000800515165ab00ab0000000000", "656a", 2, 1869281295, "f43378a0b7822ad672773944884e866d7a46579ee34f9afc17b20afc1f6cf197"], + ["cc4dda57047bd0ca6806243a6a4b108f7ced43d8042a1acaa28083c9160911cf47eab910c40200000007526a0000ab6a63e4154e581fcf52567836c9a455e8b41b162a78c85906ccc1c2b2b300b4c69caaaa2ba0230300000008ab5152ac5100ab65ffffffff69696b523ed4bd41ecd4d65b4af73c9cf77edf0e066138712a8e60a04614ea1c0300000004ab6a000016c9045c7df7836e05ac4b2e397e2dd72a5708f4a8bf6d2bc36adc5af3cacefcf074b8b403000000065352ac5252acffffffff01d7e380050000000000cf4e699a", "525163656351", 1, -776533694, "ff18c5bffd086e00917c2234f880034d24e7ea2d1e1933a28973d134ca9e35d2"], + ["b7877f82019c832707a60cf14fba44cfa254d787501fdd676bd58c744f6e951dbba0b3b77f0200000009ac515263ac53525300a5a36e500148f89c0500000000085265ac6a6a65acab00000000", "6563", 0, -1785108415, "cb6e4322955af12eb29613c70e1a00ddbb559c887ba844df0bcdebed736dffbd"], + ["aeb14046045a28cc59f244c2347134d3434faaf980961019a084f7547218785a2bd03916f3000000000165f852e6104304955bda5fa0b75826ee176211acc4a78209816bbb4419feff984377b2352200000000003a94a5032df1e0d60390715b4b188c330e4bb7b995f07cdef11ced9d17ee0f60bb7ffc8e0100000002516513e343a5c1dc1c80cd4561e9dddad22391a2dbf9c8d2b6048e519343ca1925a9c6f0800a020000000665516365ac513180144a0290db27000000000006ab655151ab5138b187010000000007ab5363abac516a9e5cd98a", "53ac", 0, 478591320, "e8d89a302ae626898d4775d103867a8d9e81f4fd387af07212adab99946311ef"], + ["c9270fe004c7911b791a00999d108ce42f9f1b19ec59143f7b7b04a67400888808487bd59103000000066a0052ac6565b905e76687be2dd7723b22c5e8269bc0f2000a332a289cfc40bc0d617cfe3214a61a85a30300000007ac63ac00635251560871209f21eb0268f175b8b4a06edd0b04162a974cf8b5dada43e499a1f22380d35ede0300000000792213fc58b6342cc8100079f9f5f046fb89f2d92cf0a2cb6d07304d32d9da858757037c0000000008abab51636565516affffffff02c72a8b03000000000452acac530dfb9f05000000000096f94307", "5253ab536351", 3, 543688436, "0278adbcc476d135493ae9bdcd7b3c2002df17f2d81c17d631c50c73e546c264"], + ["57a5a04c0278c8c8e243d2df4bb716f81d41ac41e2df153e7096f5682380c4f441888d9d260300000004ab63ab6afdbe4203525dff42a7b1e628fe22bccaa5edbb34d8ab02faff198e085580ea5fcdb0c61b0000000002ac6affffffff03375e6c05000000000663ab516a6a513cb6260400000000007ca328020000000006516a636a52ab94701cc7", "0053ac5152", 0, -550925626, "b7ca991ab2e20d0158168df2d3dd842a57ab4a3b67cca8f45b07c4b7d1d11126"], + ["072b75a504ad2550c2e9a02614bc9b2a2f50b5b553af7b87c0ef07c64ddc8d8934c96d216401000000036aabaca1387242a5bcd21099b016ad6045bed7dce603472757d9822cc5f602caa4ae20414d378b02000000026a63e4ac816734acdc969538d6f70b8ab43a2589f55e0177a4dc471bdd0eb61d59f0f46f6bb801000000065351526aab52d9f2977be76a492c3a7617b7a16dc29a3b0a7618f328c2f7d4fd9bafe760dc427a5066ef000000000465635165ffffffff02c5793600000000000165296820050000000002ac6300000000", "53006a6aac0052ab", 2, 66084636, "437e89bb6f70fd2ed2feef33350b6f6483b891305e574da03e580b3efd81ae13"], + ["7e27c42d0279c1a05eeb9b9faedcc9be0cab6303bde351a19e5cbb26dd0d594b9d74f40d2b020000000200518c8689a08a01e862d5c4dcb294a2331912ff11c13785be7dce3092f154a005624970f84e0200000000500cf5a601e74c1f0000000000076aab52636a6a5200000000", "6500006a5351", 0, 449533391, "535ba819d74770d4d613ee19369001576f98837e18e1777b8246238ff2381dd0"], + ["11414de403d7f6c0135a9df01cb108c1359b8d4e105be50a3dcba5e6be595c8817217490b20000000003005263ffffffff0c6becb9c3ad301c8dcd92f5cbc07c8bed7973573806d1489316fc77a829da03030000000700005253535352ffffffff2346d74ff9e12e5111aa8779a2025981850d4bf788a48de72baa2e321e4bc9ca00000000056352acab63cc585b64045e0385050000000009ab5253ab516aacac00efa9cf0300000000065200635151acbe80330400000000070063635100ab000be159050000000007525300655300ac00000000", "51656a0051ab", 0, 683137826, "d4737f3b58f3e5081b35f36f91acde89dda00a6a09d447e516b523e7a99264d5"], + ["1c6b5f29033fc139338658237a42456123727c8430019ca25bd71c6168a9e35a2bf54538d80100000008536aac52ac6a6a52ffffffff3fb36be74036ff0c940a0247c451d923c65f826793d0ac2bb3f01ecbec8033290100000007ab000051ab6363ffffffff5d9eca0cf711685105bd060bf7a67321eaef95367acffab36ce8dedddd632ee2000000000652ac6a63ac517167319e032d26de040000000003516363dc38fb010000000000b37b00000000000006ab520051ac534baba51f", "636300ababac6563", 0, -2049129935, "3282a2ec6b8c87c9303e6060c17b421687db1bd35fbfa0345b48f2490e15b6cc"], + ["978b9dad0214cfc7ce392d74d9dcc507350dc34007d72e4125861c63071ebf2cc0a6fd4856020000000651ac6a6aab52ffffffff47f20734e3370e733f87a6edab95a7a268ae44db7a8974e255614836b22938720200000008635265ac51516553ffffffff0137b2560100000000035252ac2f3363e9", "006aab6352", 1, 2014249801, "55611a5fb1483bce4c14c33ed15198130e788b72cd8929b2ceef4dd68b1806bf"], + ["442f1c8703ab39876153c241ab3d69f432ba6db4732bea5002be45c8ca10c3a2356fe0e9590300000001accb2b679cab7c58a660cb6d4b3452c21cd7251a1b77a52c300f655f5baeb6fa27ff5b79880300000003005252e5ccf55712bc8ed6179f6726f8a78f3018a7a0391594b7e286ef5ee99efdcde302a102cc0200000009006352526351536a63ffffffff04443f63030000000006536a63ab63651405fb020000000009ac535351525300ab6a9f172b000000000004ab535263ad5c50050000000008656a65ab630000ac00000000", "65636aab006552", 2, 2125838294, "b3ff10f21e71ebc8b25fe058c4074c42f08617e0dcc03f9e75d20539d3242644"], + ["2b3470dd028083910117f86614cdcfb459ee56d876572510be4df24c72e8f58c70d5f5948b03000000066aab65635265da2c3aac9d42c9baafd4b655c2f3efc181784d8cba5418e053482132ee798408ba43ccf90300000000ffffffff047dda4703000000000765516a52ac53009384a603000000000651636a63ab6a8cf57a03000000000352ab6a8cf6a405000000000952636a6a6565525100661e09cb", "ac520063ac6a6a52", 1, 1405647183, "9b360c3310d55c845ef537125662b9fe56840c72136891274e9fedfef56f9bb5"], + ["d74282b501be95d3c19a5d9da3d49c8a88a7049c573f3788f2c42fc6fa594f59715560b9b00000000009655353525265ac52ac9772121f028f8303030000000003510065af5f47040000000007ac516a6551630000000000", "acab53006363ac", 0, -1113209770, "2f482b97178f17286f693796a756f4d7bd2dfcdbecd4142528eec1c7a3e5101a"], + ["3a5644a9010f199f253f858d65782d3caec0ac64c3262b56893022b9796086275c9d4d097b02000000009d168f7603a67b30050000000007ac51536a0053acd9d88a050000000007655363535263ab3cf1f403000000000352ac6a00000000", "005363536565acac6a", 0, -1383947195, "6390ab0963cf611e0cea35a71dc958b494b084e6fd71d22217fdc5524787ade6"], + ["67b3cc43049d13007485a8133b90d94648bcf30e83ba174f5486ab42c9107c69c5530c5e1f0000000003005100ffffffff9870ebb65c14263282ea8d41e4f4f40df16b565c2cf86f1d22a9494cad03a67f01000000016a5a121bee5e359da548e808ae1ad6dfccae7c67cbb8898d811638a1f455a671e822f228ef030000000151c1fcc9f9825f27c0dde27ea709da62a80a2ff9f6b1b86a5874c50d6c37d39ae31fb6c8a0030000000163553b8786020ca74a00000000000665635153ab5275c0760000000000020052e659b05d", "636aab6a6a", 0, -342795451, "f77c3322c97b1681c17b1eba461fa27b07e04c1534e8aaf735a49cab72c7c2e2"], + ["bda1ff6804a3c228b7a12799a4c20917301dd501c67847d35da497533a606701ad31bf9d5e0300000001ac16a6c5d03cf516cd7364e4cbbf5aeccd62f8fd03cb6675883a0636a7daeb650423cb1291010000000500656553ac4a63c30b6a835606909c9efbae1b2597e9db020c5ecfc0642da6dc583fba4e84167539a8020000000865525353515200acffffffff990807720a5803c305b7da08a9f24b92abe343c42ac9e917a84e1f335aad785d00000000026a52ffffffff04981f20030000000001ab8c762200000000000253ab690b9605000000000151ce88b301000000000753526a6a51006500000000", "000052ac52530000", 1, -1809193140, "5299b0fb7fc16f40a5d6b337e71fcd1eb04d2600aefd22c06fe9c71fe0b0ba54"], + ["2ead28ff0243b3ab285e5d1067f0ec8724224402b21b9cef9be962a8b0d153d401be99bbee0000000004ac635153ffffffff6985987b7c1360c9fa8406dd6e0a61141709f0d5195f946da55ed83be4e3895301000000020053ffffffff016503d20500000000085251ac6a65656a6a00000000", "51abab", 1, 1723793403, "67483ee62516be17a2431a163e96fd88a08ff2ce8634a52e42c1bc04e30f3f8a"], + ["db4904e6026b6dd8d898f278c6428a176410d1ffbde75a4fa37cda12263108ccd4ca6137440100000007656a0000515263ffffffff1db7d5005c1c40da0ed17b74cf6b2a6ee2c33c9e0bacda76c0da2017dcac2fc70200000004abab6a53ffffffff0454cf2103000000000153463aef000000000009ab6a630065ab52636387e0ed050000000000e8d16f05000000000352ac63e4521b22", "", 1, 1027042424, "48315a95e49277ab6a2d561ee4626820b7bab919eea372b6bf4e9931ab221d04"], + ["dca31ad10461ead74751e83d9a81dcee08db778d3d79ad9a6d079cfdb93919ac1b0b61871102000000086500525365ab51ac7f7e9aed78e1ef8d213d40a1c50145403d196019985c837ffe83836222fe3e5955e177e70100000006525152525300ffffffff5e98482883cc08a6fe946f674cca479822f0576a43bf4113de9cbf414ca628060100000006ac53516a5253ffffffff07490b0b898198ec16c23b75d606e14fa16aa3107ef9818594f72d5776805ec502000000036a0052ffffffff01932a2803000000000865ab6551ac6a516a2687aa06", "635300ac", 2, -1880362326, "74d6a2fa7866fd8b74b2e34693e2d6fd690410384b7afdcd6461b1ae71d265ce"], + ["e14e1a9f0442ab44dfc5f6d945ad1ff8a376bc966aad5515421e96ddbe49e529614995cafc03000000055165515165fffffffff97582b8290e5a5cfeb2b0f018882dbe1b43f60b7f45e4dd21dbd3a8b0cfca3b0200000000daa267726fe075db282d694b9fee7d6216d17a8c1f00b2229085495c5dc5b260c8f8cd5d000000000363ac6affffffffaab083d22d0465471c896a438c6ac3abf4d383ae79420617a8e0ba8b9baa872b010000000963526563ac5363ababd948b5ce022113440200000000076a636552006a53229017040000000000e6f62ac8", "526353636a65", 3, -485265025, "1bc8ad76f9b7c366c5d052dc479d6a8a2015566d3a42e93ab12f727692c89d65"], + ["720d4693025ca3d347360e219e9bc746ef8f7bc88e8795162e5e2f0b0fc99dc17116fc937100000000046353520045cb1fd79824a100d30b6946eab9b219daea2b0cdca6c86367c0c36af98f19ac64f3575002000000008a1c881003ed16f3050000000008536a63630000abac45e0e704000000000151f6551a05000000000963536565515363abab00000000", "6553ab6a6a510000ab", 1, 1249091393, "a575fa4f59a8e90cd07de012c78fe8f981183bb170b9c50fcc292b8c164cbc3b"], + ["69df842a04c1410bfca10896467ce664cfa31c681a5dac10106b34d4b9d4d6d0dc1eac01c1000000000551536a5165269835ca4ad7268667b16d0a2df154ec81e304290d5ed69e0069b43f8c89e673328005e200000000076a5153006aacabffffffffc9314bd80b176488f3d634360fcba90c3a659e74a52e100ac91d3897072e3509010000000765abac51636363ffffffff0e0768b13f10f0fbd2fa3f68e4b4841809b3b5ba0e53987c3aaffcf09eee12bf0300000008ac535263526a53ac514f4c2402da8fab0400000000001ef15201000000000451526a52d0ec9aca", "525365ac52", 1, 313967049, "a72a760b361af41832d2c667c7488dc9702091918d11e344afc234a4aea3ec44"], + ["adf2340d03af5c589cb5d28c06635ac07dd0757b884d4777ba85a6a7c410408ad5efa8b19001000000045100ab00ffffffff808dc0231c96e6667c04786865727013922bcb7db20739b686f0c17f5ba70e8f0300000000fd2332a654b580881a5e2bfec8313f5aa878ae94312f37441bf2d226e7fc953dcf0c77ab000000000163aa73dc580412f8c2050000000005636aacac63da02d502000000000153e74b52020000000001536b293d030000000009636552ababacab526500000000", "000052ab52ababab", 0, -568651175, "2c45d021db545df7167ac03c9ee56473f2398d9b2b739cf3ff3e074501d324f8"], + ["e4fec9f10378a95199c1dd23c6228732c9de0d7997bf1c83918a5cfd36012476c0c3cba24002000000085165536500ac0000ad08ab93fb49d77d12a7ccdbb596bc5110876451b53a79fdce43104ff1c316ad63501de801000000046a6352ab76af9908463444aeecd32516a04dd5803e02680ed7f16307242a794024d93287595250f4000000000089807279041a82e603000000000200521429100200000000055253636a63f20b940400000000004049ed04000000000500ab5265ab43dfaf7d", "6563526aac", 2, -1923470368, "32f3c012eca9a823bebb9b282240aec40ca65df9f38da43b1dcfa0cac0c0df7e"], + ["4000d3600100b7a3ff5b41ec8d6ccdc8b2775ad034765bad505192f05d1f55d2bc39d0cbe10100000007ab5165ac6a5163ffffffff034949150100000000026a6a92c9f6000000000008ab6553ab6aab635200e697040000000007636a5353525365237ae7d2", "52000063", 0, -880046683, "c76146f68f43037289aaeb2bacf47408cddc0fb326b350eb4f5ef6f0f8564793"], + ["eabc0aa701fe489c0e4e6222d72b52f083166b49d63ad1410fb98caed027b6a71c02ab830c03000000075253ab63530065ffffffff01a5dc0b05000000000253533e820177", "", 0, 954499283, "1d849b92eedb9bf26bd4ced52ce9cb0595164295b0526842ab1096001fcd31b1"], + ["d48d55d304aad0139783b44789a771539d052db565379f668def5084daba0dfd348f7dcf6b00000000006826f59e5ffba0dd0ccbac89c1e2d69a346531d7f995dea2ca6d7e6d9225d81aec257c6003000000096a655200ac656552acffffffffa188ffbd5365cae844c8e0dea6213c4d1b2407274ae287b769ab0bf293e049eb0300000005ac6a6aab51ad1c407c5b116ca8f65ed496b476183f85f072c5f8a0193a4273e2015b1cc288bf03e9e2030000000252abffffffff04076f44040000000006655353abab53be6500050000000003ac65ac3c15040500000000095100ab536353516a52ed3aba04000000000900ac53ab53636aabac00000000", "5253526563acac", 2, -1506108646, "bbee17c8582514744bab5df50012c94b0db4aff5984d2e13a8d09421674404e2"], + ["9746f45b039bfe723258fdb6be77eb85917af808211eb9d43b15475ee0b01253d33fc3bfc502000000065163006a655312b12562dc9c54e11299210266428632a7d0ee31d04dfc7375dcad2da6e9c11947ced0e000000000009074095a5ac4df057554566dd04740c61490e1d3826000ad9d8f777a93373c8dddc4918a00000000025351ffffffff01287564030000000004636a00ab00000000", "52", 2, -1380411075, "84af1623366c4db68d81f452b86346832344734492b9c23fbb89015e516c60b2"], + ["8731b64903d735ba16da64af537eaf487b57d73977f390baac57c7b567cb2770dfa2ef65870100000001635aedd990c42645482340eacb0bfa4a0a9e888057389c728b5b6a8691cdeb1a6a67b45e140200000008ac53526a52516551ffffffff45c4f567c47b8d999916fd49642cbc5d10d43c304b99e32d044d35091679cb860100000003006a51ffffffff0176d6c200000000000000000000", "ab6a65ab53", 2, -1221546710, "ccfdba36d9445f4451fb7cbf0752cc89c23d4fc6fff0f3930d20e116f9db0b95"], + ["f5cfc52f016209ab1385e890c2865a74e93076595d1ca77cbe8fbf2022a2f2061a90fb0f3e010000000253acffffffff027de73f0200000000085252ac510052acac49cd6a020000000000e6c2cb56", "516552535300ab63", 0, -1195302704, "5532717402a2da01a1da912d824964024185ca7e8d4ad1748659dc393a14182b"], + ["df0a32ae01c4672fd1abd0b2623aae0a1a8256028df57e532f9a472d1a9ceb194267b6ee190200000009536a6a51516a525251b545f9e803469a2302000000000465526500810631040000000000441f5b050000000006530051006aaceb183c76", "536a635252ac6a", 0, 1601138113, "9a0435996cc58bdba09643927fe48c1fc908d491a050abbef8daec87f323c58f"], + ["d102d10c028b9c721abb259fe70bc68962f6cae384dabd77477c59cbeb1fb26266e091ba3e0100000002516affffffffe8d7305a74f43e30c772109849f4cd6fb867c7216e6d92e27605e69a0818899700000000026a65ecf82d58027db4620500000000026552c28ed3010000000001ab00000000", "0051ab515365", 1, -131815460, "1d1757a782cb5860302128bcbe9398243124a2f82d671a113f74f8e582c7a182"], + ["cef930ed01c36fcb1d62ceef931bef57098f27a77a4299904cc0cbb44504802d535fb11557010000000153ffffffff02c8657403000000000863ac655253520063d593380400000000046aab536a00000000", "656a0051ab6365ab53", 0, -351313308, "e69dba3efb5c02af2ab1087d0a990678784671f4744d01ca097d71aec14dd8e9"], + ["b1c0b71804dff30812b92eefb533ac77c4b9fdb9ab2f77120a76128d7da43ad70c20bbfb990200000002536392693e6001bc59411aebf15a3dc62a6566ec71a302141b0c730a3ecc8de5d76538b30f55010000000665535252ac514b740c6271fb9fe69fdf82bf98b459a7faa8a3b62f3af34943ad55df4881e0d93d3ce0ac0200000000c4158866eb9fb73da252102d1e64a3ce611b52e873533be43e6883137d0aaa0f63966f060000000001abffffffff04a605b604000000000851006a656a630052f49a0300000000000252515a94e1050000000009abac65ab0052abab00fd8dd002000000000651535163526a2566852d", "ac5363", 0, -1718831517, "b0dc030661783dd9939e4bf1a6dfcba809da2017e1b315a6312e5942d714cf05"], + ["6a270ee404ebc8d137cfd4bb6b92aa3702213a3139a579c1fc6f56fbc7edd9574ef17b13f30100000009ab00ab656565ababacffffffffaa65b1ab6c6d87260d9e27a472edceb7dd212483e72d90f08857abf1dbfd46d10100000000fffffffff93c4c9c84c4dbbe8a912b99a2830cfe3401aebc919041de063d660e585fc9f002000000096aabacab52ac6a53acfa6dcef3f28355a8d98eee53839455445eeee83eecd2c854e784efa53cee699dbfecaebd0100000003ab6a51ffffffff04f7d71b050000000009ac6a536aac6a6365513c37650500000000065265abab6a53fa742002000000000039ed82030000000009516aac635165ab51ab2fdabd17", "ab535252526563", 1, -1326210506, "1dec0d5eb921bf5b2df39c8576e19c38d0c17254a4a0b78ac4b5422bcc426258"], + ["3657e4260304ccdc19936e47bdf058d36167ee3d4eb145c52b224eff04c9eb5d1b4e434dfc0000000001ab58aefe57707c66328d3cceef2e6f56ab6b7465e587410c5f73555a513ace2b232793a74400000000036a006522e69d3a785b61ad41a635d59b3a06b2780a92173f85f8ed428491d0aaa436619baa9c4501000000046351abab2609629902eb7793050000000000a1b967040000000003525353a34d6192", "516a", 0, -1761874713, "0a2ff41f6d155d8d0e37cd9438f3b270df9f9214cda8e95c76d5a239ca189df2"], + ["a0eb6dc402994e493c787b45d1f946d267b09c596c5edde043e620ce3d59e95b2b5b93d43002000000096a5252526aac63ab6555694287a279e29ee491c177a801cd685b8744a2eab83824255a3bcd08fc0e3ea13fb8820000000009abab6365ab52ab0063ffffffff029e424a040000000008acab53ab516a636a23830f0400000000016adf49c1f9", "ac0065ac6500005252", 1, 669294500, "e05e3d383631a7ed1b78210c13c2eb26564e5577db7ddfcea2583c7c014091d4"], + ["6e67c0d3027701ef71082204c85ed63c700ef1400c65efb62ce3580d187fb348376a23e9710200000001655b91369d3155ba916a0bc6fe4f5d94cad461d899bb8aaac3699a755838bfc229d6828920010000000765536353526a52ffffffff04c0c792000000000005650052535372f79e000000000001527fc0ee010000000005ac5300ab65d1b3e902000000000251aba942b278", "6a5151", 0, 1741407676, "e657e2c8ec4ebc769ddd3198a83267b47d4f2a419fc737e813812acefad92ff7"], + ["8f53639901f1d643e01fc631f632b7a16e831d846a0184cdcda289b8fa7767f0c292eb221a00000000046a53abacffffffff037a2daa01000000000553ac6a6a51eac349020000000005ac526552638421b3040000000007006a005100ac63048a1492", "ac65", 0, 1033685559, "da86c260d42a692358f46893d6f91563985d86eeb9ea9e21cd38c2d8ffcfcc4d"], + ["491f99cb01bdfba1aa235e5538dac081fae9ce55f9622de483afe7e65105c2b0db75d360d200000000045251636340b60f0f041421330300000000096351ac000051636553ce2822040000000005516a00ac5180c8e40300000000025100caa8570400000000020000cfdc8da6", "6a5100516aab655365", 0, -953727341, "397c68803b7ce953666830b0221a5e2bcf897aa2ded8e36a6b76c497dcb1a2e1"], + ["b3cad3a7041c2c17d90a2cd994f6c37307753fa3635e9ef05ab8b1ff121ca11239a0902e700300000009ab635300006aac5163ffffffffcec91722c7468156dce4664f3c783afef147f0e6f80739c83b5f09d5a09a57040200000004516a6552ffffffff969d1c6daf8ef53a70b7cdf1b4102fb3240055a8eaeaed2489617cd84cfd56cf020000000352ab53ffffffff46598b6579494a77b593681c33422a99559b9993d77ca2fa97833508b0c169f80200000009655300655365516351ffffffff04d7ddf800000000000853536a65ac6351ab09f3420300000000056aab65abac33589d04000000000952656a65655151acac944d6f0400000000006a8004ba", "005165", 1, 1035865506, "fe1dc9e8554deecf8f50c417c670b839cc9d650722ebaaf36572418756075d58"], + ["e1cfd73b0125add9e9d699f5a45dca458355af175a7bd4486ebef28f1928d87864384d02df02000000036a0051ffffffff0357df030100000000036a5365777e2d04000000000763ab6a00005265f434a601000000000351655100000000", "ab53ab", 0, -1936500914, "950f4b4f72ccdf8a6a0f381265d6c8842fdb7e8b3df3e9742905f643b2432b69"], + ["cf781855040a755f5ba85eef93837236b34a5d3daeb2dbbdcf58bb811828d806ed05754ab8010000000351ac53ffffffffda1e264727cf55c67f06ebcc56dfe7fa12ac2a994fecd0180ce09ee15c480f7d00000000096351516a51acac00ab53dd49ff9f334befd6d6f87f1a832cddfd826a90b78fd8cf19a52cb8287788af94e939d6020000000700525251ac526310d54a7e8900ed633f0f6f0841145aae7ee0cbbb1e2a0cae724ee4558dbabfdc58ba6855010000000552536a53abfd1b101102c51f910500000000096300656a525252656a300bee010000000009ac52005263635151abe19235c9", "53005365", 2, 1422854188, "d5981bd4467817c1330da72ddb8760d6c2556cd809264b2d85e6d274609fc3a3"], + ["fea256ce01272d125e577c0a09570a71366898280dda279b021000db1325f27edda41a53460100000002ab53c752c21c013c2b3a01000000000000000000", "65", 0, 1145543262, "076b9f844f6ae429de228a2c337c704df1652c292b6c6494882190638dad9efd"] +] diff --git a/src/test/data/tx_invalid.json b/src/test/data/tx_invalid.json index a26f4a87..faf40ef2 100644 --- a/src/test/data/tx_invalid.json +++ b/src/test/data/tx_invalid.json @@ -65,5 +65,16 @@ ["Same as the transactions in valid with one input SIGHASH_ALL and one SIGHASH_ANYONECANPAY, but we set the _ANYONECANPAY sequence number, invalidating the SIGHASH_ALL signature"], [[["0000000000000000000000000000000000000000000000000000000000000100", 0, "0x21 0x035e7f0d4d0841bcd56c39337ed086b1a633ee770c1ffdd94ac552a95ac2ce0efc CHECKSIG"], ["0000000000000000000000000000000000000000000000000000000000000200", 0, "0x21 0x035e7f0d4d0841bcd56c39337ed086b1a633ee770c1ffdd94ac552a95ac2ce0efc CHECKSIG"]], - "01000000020001000000000000000000000000000000000000000000000000000000000000000000004948304502203a0f5f0e1f2bdbcd04db3061d18f3af70e07f4f467cbc1b8116f267025f5360b022100c792b6e215afc5afc721a351ec413e714305cb749aae3d7fee76621313418df10101000000000200000000000000000000000000000000000000000000000000000000000000000000484730440220201dc2d030e380e8f9cfb41b442d930fa5a685bb2c8db5906671f865507d0670022018d9e7a8d4c8d86a73c2a724ee38ef983ec249827e0e464841735955c707ece98101000000010100000000000000015100000000", true] + "01000000020001000000000000000000000000000000000000000000000000000000000000000000004948304502203a0f5f0e1f2bdbcd04db3061d18f3af70e07f4f467cbc1b8116f267025f5360b022100c792b6e215afc5afc721a351ec413e714305cb749aae3d7fee76621313418df10101000000000200000000000000000000000000000000000000000000000000000000000000000000484730440220201dc2d030e380e8f9cfb41b442d930fa5a685bb2c8db5906671f865507d0670022018d9e7a8d4c8d86a73c2a724ee38ef983ec249827e0e464841735955c707ece98101000000010100000000000000015100000000", true], + +["Incorrect signature order"], +["Note the input is just required to make the tester happy"], +[[["b3da01dd4aae683c7aee4d5d8b52a540a508e1115f77cd7fa9a291243f501223", 0, "HASH160 0x14 0xb1ce99298d5f07364b57b1e5c9cc00be0b04a954 EQUAL"]], +"01000000012312503f2491a2a97fcd775f11e108a540a5528b5d4dee7a3c68ae4add01dab300000000fdfe000048304502207aacee820e08b0b174e248abd8d7a34ed63b5da3abedb99934df9fddd65c05c4022100dfe87896ab5ee3df476c2655f9fbe5bd089dccbef3e4ea05b5d121169fe7f5f401483045022100f6649b0eddfdfd4ad55426663385090d51ee86c3481bdc6b0c18ea6c0ece2c0b0220561c315b07cffa6f7dd9df96dbae9200c2dee09bf93cc35ca05e6cdf613340aa014c695221031d11db38972b712a9fe1fc023577c7ae3ddb4a3004187d41c45121eecfdbb5b7210207ec36911b6ad2382860d32989c7b8728e9489d7bbc94a6b5509ef0029be128821024ea9fac06f666a4adc3fc1357b7bec1fd0bdece2b9d08579226a8ebde53058e453aeffffffff0180380100000000001976a914c9b99cddf847d10685a4fabaa0baf505f7c3dfab88ac00000000", true], + +["Empty stack when we try to run CHECKSIG"], +[[["ad503f72c18df5801ee64d76090afe4c607fb2b822e9b7b63c5826c50e22fc3b", 0, "0x21 0x027c3a97665bf283a102a587a62a30a0c102d4d3b141015e2cae6f64e2543113e5 CHECKSIG NOT"]], +"01000000013bfc220ec526583cb6b7e922b8b27f604cfe0a09764de61e80f58dc1723f50ad0000000000ffffffff0101000000000000002321027c3a97665bf283a102a587a62a30a0c102d4d3b141015e2cae6f64e2543113e5ac00000000", true], + +["Make diffs cleaner by leaving a comment here without comma at the end"] ] diff --git a/src/test/data/tx_valid.json b/src/test/data/tx_valid.json index faf911a9..c206f7a7 100644 --- a/src/test/data/tx_valid.json +++ b/src/test/data/tx_valid.json @@ -83,5 +83,40 @@ [[["63cfa5a09dc540bf63e53713b82d9ea3692ca97cd608c384f2aa88e51a0aac70", 0, "DUP HASH160 0x14 0xdcf72c4fd02f5a987cf9b02f2fabfcac3341a87d EQUALVERIFY CHECKSIG"], ["04e8d0fcf3846c6734477b98f0f3d4badfb78f020ee097a0be5fe347645b817d", 1, "DUP HASH160 0x14 0xdcf72c4fd02f5a987cf9b02f2fabfcac3341a87d EQUALVERIFY CHECKSIG"], ["ee1377aff5d0579909e11782e1d2f5f7b84d26537be7f5516dd4e43373091f3f", 1, "DUP HASH160 0x14 0xdcf72c4fd02f5a987cf9b02f2fabfcac3341a87d EQUALVERIFY CHECKSIG"]], - "010000000370ac0a1ae588aaf284c308d67ca92c69a39e2db81337e563bf40c59da0a5cf63000000006a4730440220360d20baff382059040ba9be98947fd678fb08aab2bb0c172efa996fd8ece9b702201b4fb0de67f015c90e7ac8a193aeab486a1f587e0f54d0fb9552ef7f5ce6caec032103579ca2e6d107522f012cd00b52b9a65fb46f0c57b9b8b6e377c48f526a44741affffffff7d815b6447e35fbea097e00e028fb7dfbad4f3f0987b4734676c84f3fcd0e804010000006b483045022100c714310be1e3a9ff1c5f7cacc65c2d8e781fc3a88ceb063c6153bf950650802102200b2d0979c76e12bb480da635f192cc8dc6f905380dd4ac1ff35a4f68f462fffd032103579ca2e6d107522f012cd00b52b9a65fb46f0c57b9b8b6e377c48f526a44741affffffff3f1f097333e4d46d51f5e77b53264db8f7f5d2e18217e1099957d0f5af7713ee010000006c493046022100b663499ef73273a3788dea342717c2640ac43c5a1cf862c9e09b206fcb3f6bb8022100b09972e75972d9148f2bdd462e5cb69b57c1214b88fc55ca638676c07cfc10d8032103579ca2e6d107522f012cd00b52b9a65fb46f0c57b9b8b6e377c48f526a44741affffffff0380841e00000000001976a914bfb282c70c4191f45b5a6665cad1682f2c9cfdfb88ac80841e00000000001976a9149857cc07bed33a5cf12b9c5e0500b675d500c81188ace0fd1c00000000001976a91443c52850606c872403c0601e69fa34b26f62db4a88ac00000000", true] + "010000000370ac0a1ae588aaf284c308d67ca92c69a39e2db81337e563bf40c59da0a5cf63000000006a4730440220360d20baff382059040ba9be98947fd678fb08aab2bb0c172efa996fd8ece9b702201b4fb0de67f015c90e7ac8a193aeab486a1f587e0f54d0fb9552ef7f5ce6caec032103579ca2e6d107522f012cd00b52b9a65fb46f0c57b9b8b6e377c48f526a44741affffffff7d815b6447e35fbea097e00e028fb7dfbad4f3f0987b4734676c84f3fcd0e804010000006b483045022100c714310be1e3a9ff1c5f7cacc65c2d8e781fc3a88ceb063c6153bf950650802102200b2d0979c76e12bb480da635f192cc8dc6f905380dd4ac1ff35a4f68f462fffd032103579ca2e6d107522f012cd00b52b9a65fb46f0c57b9b8b6e377c48f526a44741affffffff3f1f097333e4d46d51f5e77b53264db8f7f5d2e18217e1099957d0f5af7713ee010000006c493046022100b663499ef73273a3788dea342717c2640ac43c5a1cf862c9e09b206fcb3f6bb8022100b09972e75972d9148f2bdd462e5cb69b57c1214b88fc55ca638676c07cfc10d8032103579ca2e6d107522f012cd00b52b9a65fb46f0c57b9b8b6e377c48f526a44741affffffff0380841e00000000001976a914bfb282c70c4191f45b5a6665cad1682f2c9cfdfb88ac80841e00000000001976a9149857cc07bed33a5cf12b9c5e0500b675d500c81188ace0fd1c00000000001976a91443c52850606c872403c0601e69fa34b26f62db4a88ac00000000", true], + + ["ddc454a1c0c35c188c98976b17670f69e586d9c0f3593ea879928332f0a069e7, which spends an input that pushes using a PUSHDATA1 that is negative when read as signed"], + [[["c5510a5dd97a25f43175af1fe649b707b1df8e1a41489bac33a23087027a2f48", 0, "0x4c 0xae 0x606563686f2022553246736447566b58312b5a536e587574356542793066794778625456415675534a6c376a6a334878416945325364667657734f53474f36633338584d7439435c6e543249584967306a486956304f376e775236644546673d3d22203e20743b206f70656e73736c20656e63202d7061737320706173733a5b314a564d7751432d707269766b65792d6865785d202d64202d6165732d3235362d636263202d61202d696e207460 DROP DUP HASH160 0x14 0xbfd7436b6265aa9de506f8a994f881ff08cc2872 EQUALVERIFY CHECKSIG"]], + "0100000001482f7a028730a233ac9b48411a8edfb107b749e61faf7531f4257ad95d0a51c5000000008b483045022100bf0bbae9bde51ad2b222e87fbf67530fbafc25c903519a1e5dcc52a32ff5844e022028c4d9ad49b006dd59974372a54291d5764be541574bb0c4dc208ec51f80b7190141049dd4aad62741dc27d5f267f7b70682eee22e7e9c1923b9c0957bdae0b96374569b460eb8d5b40d972e8c7c0ad441de3d94c4a29864b212d56050acb980b72b2bffffffff0180969800000000001976a914e336d0017a9d28de99d16472f6ca6d5a3a8ebc9988ac00000000", true], + +["Correct signature order"], +["Note the input is just required to make the tester happy"], +[[["b3da01dd4aae683c7aee4d5d8b52a540a508e1115f77cd7fa9a291243f501223", 0, "HASH160 0x14 0xb1ce99298d5f07364b57b1e5c9cc00be0b04a954 EQUAL"]], +"01000000012312503f2491a2a97fcd775f11e108a540a5528b5d4dee7a3c68ae4add01dab300000000fdfe0000483045022100f6649b0eddfdfd4ad55426663385090d51ee86c3481bdc6b0c18ea6c0ece2c0b0220561c315b07cffa6f7dd9df96dbae9200c2dee09bf93cc35ca05e6cdf613340aa0148304502207aacee820e08b0b174e248abd8d7a34ed63b5da3abedb99934df9fddd65c05c4022100dfe87896ab5ee3df476c2655f9fbe5bd089dccbef3e4ea05b5d121169fe7f5f4014c695221031d11db38972b712a9fe1fc023577c7ae3ddb4a3004187d41c45121eecfdbb5b7210207ec36911b6ad2382860d32989c7b8728e9489d7bbc94a6b5509ef0029be128821024ea9fac06f666a4adc3fc1357b7bec1fd0bdece2b9d08579226a8ebde53058e453aeffffffff0180380100000000001976a914c9b99cddf847d10685a4fabaa0baf505f7c3dfab88ac00000000", true], + +["cc60b1f899ec0a69b7c3f25ddf32c4524096a9c5b01cbd84c6d0312a0c478984, which is a fairly strange transaction which relies on OP_CHECKSIG returning 0 when checking a completely invalid sig of length 0"], +[[["cbebc4da731e8995fe97f6fadcd731b36ad40e5ecb31e38e904f6e5982fa09f7", 0, "0x2102085c6600657566acc2d6382a47bc3f324008d2aa10940dd7705a48aa2a5a5e33ac7c2103f5d0fb955f95dd6be6115ce85661db412ec6a08abcbfce7da0ba8297c6cc0ec4ac7c5379a820d68df9e32a147cffa36193c6f7c43a1c8c69cda530e1c6db354bfabdcfefaf3c875379a820f531f3041d3136701ea09067c53e7159c8f9b2746a56c3d82966c54bbc553226879a5479827701200122a59a5379827701200122a59a6353798277537982778779679a68"]], +"0100000001f709fa82596e4f908ee331cb5e0ed46ab331d7dcfaf697fe95891e73dac4ebcb000000008c20ca42095840735e89283fec298e62ac2ddea9b5f34a8cbb7097ad965b87568100201b1b01dc829177da4a14551d2fc96a9db00c6501edfa12f22cd9cefd335c227f483045022100a9df60536df5733dd0de6bc921fab0b3eee6426501b43a228afa2c90072eb5ca02201c78b74266fac7d1db5deff080d8a403743203f109fbcabf6d5a760bf87386d20100ffffffff01c075790000000000232103611f9a45c18f28f06f19076ad571c344c82ce8fcfe34464cf8085217a2d294a6ac00000000", true], + +["Empty pubkey"], +[[["229257c295e7f555421c1bfec8538dd30a4b5c37c1c8810bbe83cafa7811652c", 0, "0x00 CHECKSIG NOT"]], +"01000000012c651178faca83be0b81c8c1375c4b0ad38d53c8fe1b1c4255f5e795c25792220000000049483045022100d6044562284ac76c985018fc4a90127847708c9edb280996c507b28babdc4b2a02203d74eca3f1a4d1eea7ff77b528fde6d5dc324ec2dbfdb964ba885f643b9704cd01ffffffff010100000000000000232102c2410f8891ae918cab4ffc4bb4a3b0881be67c7a1e7faa8b5acf9ab8932ec30cac00000000", true], + +["Empty signature"], +[[["9ca93cfd8e3806b9d9e2ba1cf64e3cc6946ee0119670b1796a09928d14ea25f7", 0, "0x21 0x028a1d66975dbdf97897e3a4aef450ebeb5b5293e4a0b4a6d3a2daaa0b2b110e02 CHECKSIG NOT"]], +"0100000001f725ea148d92096a79b1709611e06e94c63c4ef61cbae2d9b906388efd3ca99c000000000100ffffffff0101000000000000002321028a1d66975dbdf97897e3a4aef450ebeb5b5293e4a0b4a6d3a2daaa0b2b110e02ac00000000", true], + +[[["444e00ed7840d41f20ecd9c11d3f91982326c731a02f3c05748414a4fa9e59be", 0, "1 0x00 0x21 0x02136b04758b0b6e363e7a6fbe83aaf527a153db2b060d36cc29f7f8309ba6e458 2 CHECKMULTISIG"]], +"0100000001be599efaa4148474053c2fa031c7262398913f1dc1d9ec201fd44078ed004e44000000004900473044022022b29706cb2ed9ef0cb3c97b72677ca2dfd7b4160f7b4beb3ba806aa856c401502202d1e52582412eba2ed474f1f437a427640306fd3838725fab173ade7fe4eae4a01ffffffff010100000000000000232103ac4bba7e7ca3e873eea49e08132ad30c7f03640b6539e9b59903cf14fd016bbbac00000000", true], + +[[["e16abbe80bf30c080f63830c8dbf669deaef08957446e95940227d8c5e6db612", 0, "1 0x21 0x03905380c7013e36e6e19d305311c1b81fce6581f5ee1c86ef0627c68c9362fc9f 0x00 2 CHECKMULTISIG"]], +"010000000112b66d5e8c7d224059e946749508efea9d66bf8d0c83630f080cf30be8bb6ae100000000490047304402206ffe3f14caf38ad5c1544428e99da76ffa5455675ec8d9780fac215ca17953520220779502985e194d84baa36b9bd40a0dbd981163fa191eb884ae83fc5bd1c86b1101ffffffff010100000000000000232103905380c7013e36e6e19d305311c1b81fce6581f5ee1c86ef0627c68c9362fc9fac00000000", true], + +[[["ebbcf4bfce13292bd791d6a65a2a858d59adbf737e387e40370d4e64cc70efb0", 0, "2 0x21 0x033bcaa0a602f0d44cc9d5637c6e515b0471db514c020883830b7cefd73af04194 0x21 0x03a88b326f8767f4f192ce252afe33c94d25ab1d24f27f159b3cb3aa691ffe1423 2 CHECKMULTISIG NOT"]], +"0100000001b0ef70cc644e0d37407e387e73bfad598d852a5aa6d691d72b2913cebff4bceb000000004a00473044022068cd4851fc7f9a892ab910df7a24e616f293bcb5c5fbdfbc304a194b26b60fba022078e6da13d8cb881a22939b952c24f88b97afd06b4c47a47d7f804c9a352a6d6d0100ffffffff0101000000000000002321033bcaa0a602f0d44cc9d5637c6e515b0471db514c020883830b7cefd73af04194ac00000000", true], + +[[["ba4cd7ae2ad4d4d13ebfc8ab1d93a63e4a6563f25089a18bf0fc68f282aa88c1", 0, "2 0x21 0x037c615d761e71d38903609bf4f46847266edc2fb37532047d747ba47eaae5ffe1 0x21 0x02edc823cd634f2c4033d94f5755207cb6b60c4b1f1f056ad7471c47de5f2e4d50 2 CHECKMULTISIG NOT"]], +"0100000001c188aa82f268fcf08ba18950f263654a3ea6931dabc8bf3ed1d4d42aaed74cba000000004b0000483045022100940378576e069aca261a6b26fb38344e4497ca6751bb10905c76bb689f4222b002204833806b014c26fd801727b792b1260003c55710f87c5adbd7a9cb57446dbc9801ffffffff0101000000000000002321037c615d761e71d38903609bf4f46847266edc2fb37532047d747ba47eaae5ffe1ac00000000", true], + +["Make diffs cleaner by leaving a comment here without comma at the end"] ] diff --git a/src/test/getarg_tests.cpp b/src/test/getarg_tests.cpp index c89d218f..8cadcdd7 100644 --- a/src/test/getarg_tests.cpp +++ b/src/test/getarg_tests.cpp @@ -1,9 +1,16 @@ +// Copyright (c) 2012-2013 The Bitcoin Core developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "util.h" + +#include +#include + #include #include #include -#include "util.h" - BOOST_AUTO_TEST_SUITE(getarg_tests) static void ResetArgs(const std::string& strArg) diff --git a/src/test/hash_tests.cpp b/src/test/hash_tests.cpp new file mode 100644 index 00000000..4568c876 --- /dev/null +++ b/src/test/hash_tests.cpp @@ -0,0 +1,49 @@ +// Copyright (c) 2013 The Bitcoin Core developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "hash.h" +#include "util.h" + +#include + +#include + +using namespace std; + +BOOST_AUTO_TEST_SUITE(hash_tests) + +BOOST_AUTO_TEST_CASE(murmurhash3) +{ + +#define T(expected, seed, data) BOOST_CHECK_EQUAL(MurmurHash3(seed, ParseHex(data)), expected) + + // Test MurmurHash3 with various inputs. Of course this is retested in the + // bloom filter tests - they would fail if MurmurHash3() had any problems - + // but is useful for those trying to implement Bitcoin libraries as a + // source of test data for their MurmurHash3() primitive during + // development. + // + // The magic number 0xFBA4C795 comes from CBloomFilter::Hash() + + T(0x00000000, 0x00000000, ""); + T(0x6a396f08, 0xFBA4C795, ""); + T(0x81f16f39, 0xffffffff, ""); + + T(0x514e28b7, 0x00000000, "00"); + T(0xea3f0b17, 0xFBA4C795, "00"); + T(0xfd6cf10d, 0x00000000, "ff"); + + T(0x16c6b7ab, 0x00000000, "0011"); + T(0x8eb51c3d, 0x00000000, "001122"); + T(0xb4471bf8, 0x00000000, "00112233"); + T(0xe2301fa8, 0x00000000, "0011223344"); + T(0xfc2e4a15, 0x00000000, "001122334455"); + T(0xb074502c, 0x00000000, "00112233445566"); + T(0x8034d2a0, 0x00000000, "0011223344556677"); + T(0xb4698def, 0x00000000, "001122334455667788"); + +#undef T +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/hmac_tests.cpp b/src/test/hmac_tests.cpp new file mode 100644 index 00000000..780ce480 --- /dev/null +++ b/src/test/hmac_tests.cpp @@ -0,0 +1,129 @@ +// Copyright (c) 2013 The Bitcoin Core developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "hash.h" +#include "util.h" + +#include + +using namespace std; + +BOOST_AUTO_TEST_SUITE(hmac_tests) + +typedef struct { + const char *pszKey; + const char *pszData; + const char *pszMAC; +} testvec_t; + +// test cases 1, 2, 3, 4, 6 and 7 of RFC 4231 +static const testvec_t vtest[] = { + { + "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b" + "0b0b0b0b", + "4869205468657265", + "87aa7cdea5ef619d4ff0b4241a1d6cb0" + "2379f4e2ce4ec2787ad0b30545e17cde" + "daa833b7d6b8a702038b274eaea3f4e4" + "be9d914eeb61f1702e696c203a126854" + }, + { + "4a656665", + "7768617420646f2079612077616e7420" + "666f72206e6f7468696e673f", + "164b7a7bfcf819e2e395fbe73b56e0a3" + "87bd64222e831fd610270cd7ea250554" + "9758bf75c05a994a6d034f65f8f0e6fd" + "caeab1a34d4a6b4b636e070a38bce737" + }, + { + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "aaaaaaaa", + "dddddddddddddddddddddddddddddddd" + "dddddddddddddddddddddddddddddddd" + "dddddddddddddddddddddddddddddddd" + "dddd", + "fa73b0089d56a284efb0f0756c890be9" + "b1b5dbdd8ee81a3655f83e33b2279d39" + "bf3e848279a722c806b485a47e67c807" + "b946a337bee8942674278859e13292fb" + }, + { + "0102030405060708090a0b0c0d0e0f10" + "111213141516171819", + "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd" + "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd" + "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd" + "cdcd", + "b0ba465637458c6990e5a8c5f61d4af7" + "e576d97ff94b872de76f8050361ee3db" + "a91ca5c11aa25eb4d679275cc5788063" + "a5f19741120c4f2de2adebeb10a298dd" + }, + { + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "aaaaaa", + "54657374205573696e67204c61726765" + "72205468616e20426c6f636b2d53697a" + "65204b6579202d2048617368204b6579" + "204669727374", + "80b24263c7c1a3ebb71493c1dd7be8b4" + "9b46d1f41b4aeec1121b013783f8f352" + "6b56d037e05f2598bd0fd2215d6a1e52" + "95e64f73f63f0aec8b915a985d786598" + }, + { + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "aaaaaa", + "54686973206973206120746573742075" + "73696e672061206c6172676572207468" + "616e20626c6f636b2d73697a65206b65" + "7920616e642061206c61726765722074" + "68616e20626c6f636b2d73697a652064" + "6174612e20546865206b6579206e6565" + "647320746f2062652068617368656420" + "6265666f7265206265696e6720757365" + "642062792074686520484d414320616c" + "676f726974686d2e", + "e37b6a775dc87dbaa4dfa9f96e5e3ffd" + "debd71f8867289865df5a32d20cdc944" + "b6022cac3c4982b10d5eeb55c3e4de15" + "134676fb6de0446065c97440fa8c6a58" + } +}; + +BOOST_AUTO_TEST_CASE(hmacsha512_testvectors) +{ + for (unsigned int n=0; n vchKey = ParseHex(vtest[n].pszKey); + vector vchData = ParseHex(vtest[n].pszData); + vector vchMAC = ParseHex(vtest[n].pszMAC); + unsigned char vchTemp[64]; + + HMAC_SHA512_CTX ctx; + HMAC_SHA512_Init(&ctx, &vchKey[0], vchKey.size()); + HMAC_SHA512_Update(&ctx, &vchData[0], vchData.size()); + HMAC_SHA512_Final(&vchTemp[0], &ctx); + + BOOST_CHECK(memcmp(&vchTemp[0], &vchMAC[0], 64) == 0); + + } +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/key_tests.cpp b/src/test/key_tests.cpp index c004521d..864d9012 100644 --- a/src/test/key_tests.cpp +++ b/src/test/key_tests.cpp @@ -1,12 +1,18 @@ -#include +// Copyright (c) 2012-2013 The Bitcoin Core developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "key.h" + +#include "base58.h" +#include "script.h" +#include "uint256.h" +#include "util.h" #include #include -#include "key.h" -#include "base58.h" -#include "uint256.h" -#include "util.h" +#include using namespace std; diff --git a/src/test/main_tests.cpp b/src/test/main_tests.cpp new file mode 100644 index 00000000..8863ba40 --- /dev/null +++ b/src/test/main_tests.cpp @@ -0,0 +1,24 @@ +// Copyright (c) 2014 The Bitcoin Core developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "core.h" +#include "main.h" + +#include + +BOOST_AUTO_TEST_SUITE(main_tests) + +BOOST_AUTO_TEST_CASE(subsidy_limit_test) +{ + uint64_t nSum = 0; + for (int nHeight = 0; nHeight < 14000000; nHeight += 1000) { + uint64_t nSubsidy = GetBlockValue(nHeight, 0); + BOOST_CHECK(nSubsidy <= 50 * COIN); + nSum += nSubsidy * 1000; + BOOST_CHECK(MoneyRange(nSum)); + } + BOOST_CHECK(nSum == 2099999997690000ULL); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/miner_tests.cpp b/src/test/miner_tests.cpp index bd1d998c..1b19871d 100644 --- a/src/test/miner_tests.cpp +++ b/src/test/miner_tests.cpp @@ -1,11 +1,13 @@ -#include +// Copyright (c) 2011-2014 The Bitcoin Core developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include "init.h" #include "main.h" +#include "miner.h" #include "uint256.h" #include "util.h" -#include "miner.h" -#include "wallet.h" + +#include extern void SHA256Transform(void* pstate, void* pinput, const void* pinit); @@ -49,14 +51,16 @@ struct { // NOTE: These tests rely on CreateNewBlock doing its own self-validation! BOOST_AUTO_TEST_CASE(CreateNewBlock_validity) { - CReserveKey reservekey(pwalletMain); + CScript scriptPubKey = CScript() << ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f") << OP_CHECKSIG; CBlockTemplate *pblocktemplate; - CTransaction tx; + CTransaction tx,tx2; CScript script; uint256 hash; + LOCK(cs_main); + // Simple block creation, nothing special yet: - BOOST_CHECK(pblocktemplate = CreateNewBlock(reservekey)); + BOOST_CHECK(pblocktemplate = CreateNewBlock(scriptPubKey, ALGO_SHA256D)); // We can't make transactions until we have inputs // Therefore, load 100 blocks :) @@ -65,10 +69,10 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity) { CBlock *pblock = &pblocktemplate->block; // pointer for convenience pblock->nVersion = 1; - pblock->nTime = pindexBest->GetMedianTimePast()+1; + pblock->nTime = chainActive.Tip()->GetMedianTimePast()+1; pblock->vtx[0].vin[0].scriptSig = CScript(); pblock->vtx[0].vin[0].scriptSig.push_back(blockinfo[i].extranonce); - pblock->vtx[0].vin[0].scriptSig.push_back(pindexBest->nHeight); + pblock->vtx[0].vin[0].scriptSig.push_back(chainActive.Height()); pblock->vtx[0].vout[0].scriptPubKey = CScript(); if (txFirst.size() < 2) txFirst.push_back(new CTransaction(pblock->vtx[0])); @@ -82,7 +86,8 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity) delete pblocktemplate; // Just to make sure we can still make simple blocks - BOOST_CHECK(pblocktemplate = CreateNewBlock(reservekey)); + BOOST_CHECK(pblocktemplate = CreateNewBlock(scriptPubKey, ALGO_SHA256D)); + delete pblocktemplate; // block sigops > limit: 1000 CHECKMULTISIG + 1 tx.vin.resize(1); @@ -96,10 +101,10 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity) { tx.vout[0].nValue -= 1000000; hash = tx.GetHash(); - mempool.addUnchecked(hash, tx); + mempool.addUnchecked(hash, CTxMemPoolEntry(tx, 11, GetTime(), 111.0, 11)); tx.vin[0].prevout.hash = hash; } - BOOST_CHECK(pblocktemplate = CreateNewBlock(reservekey)); + BOOST_CHECK(pblocktemplate = CreateNewBlock(scriptPubKey, ALGO_SHA256D)); delete pblocktemplate; mempool.clear(); @@ -116,17 +121,17 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity) { tx.vout[0].nValue -= 10000000; hash = tx.GetHash(); - mempool.addUnchecked(hash, tx); + mempool.addUnchecked(hash, CTxMemPoolEntry(tx, 11, GetTime(), 111.0, 11)); tx.vin[0].prevout.hash = hash; } - BOOST_CHECK(pblocktemplate = CreateNewBlock(reservekey)); + BOOST_CHECK(pblocktemplate = CreateNewBlock(scriptPubKey, ALGO_SHA256D)); delete pblocktemplate; mempool.clear(); // orphan in mempool hash = tx.GetHash(); - mempool.addUnchecked(hash, tx); - BOOST_CHECK(pblocktemplate = CreateNewBlock(reservekey)); + mempool.addUnchecked(hash, CTxMemPoolEntry(tx, 11, GetTime(), 111.0, 11)); + BOOST_CHECK(pblocktemplate = CreateNewBlock(scriptPubKey, ALGO_SHA256D)); delete pblocktemplate; mempool.clear(); @@ -135,7 +140,7 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity) tx.vin[0].prevout.hash = txFirst[1]->GetHash(); tx.vout[0].nValue = 4900000000LL; hash = tx.GetHash(); - mempool.addUnchecked(hash, tx); + mempool.addUnchecked(hash, CTxMemPoolEntry(tx, 11, GetTime(), 111.0, 11)); tx.vin[0].prevout.hash = hash; tx.vin.resize(2); tx.vin[1].scriptSig = CScript() << OP_1; @@ -143,8 +148,8 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity) tx.vin[1].prevout.n = 0; tx.vout[0].nValue = 5900000000LL; hash = tx.GetHash(); - mempool.addUnchecked(hash, tx); - BOOST_CHECK(pblocktemplate = CreateNewBlock(reservekey)); + mempool.addUnchecked(hash, CTxMemPoolEntry(tx, 11, GetTime(), 111.0, 11)); + BOOST_CHECK(pblocktemplate = CreateNewBlock(scriptPubKey, ALGO_SHA256D)); delete pblocktemplate; mempool.clear(); @@ -154,8 +159,8 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity) tx.vin[0].scriptSig = CScript() << OP_0 << OP_1; tx.vout[0].nValue = 0; hash = tx.GetHash(); - mempool.addUnchecked(hash, tx); - BOOST_CHECK(pblocktemplate = CreateNewBlock(reservekey)); + mempool.addUnchecked(hash, CTxMemPoolEntry(tx, 11, GetTime(), 111.0, 11)); + BOOST_CHECK(pblocktemplate = CreateNewBlock(scriptPubKey, ALGO_SHA256D)); delete pblocktemplate; mempool.clear(); @@ -167,13 +172,13 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity) script = CScript() << OP_0; tx.vout[0].scriptPubKey.SetDestination(script.GetID()); hash = tx.GetHash(); - mempool.addUnchecked(hash, tx); + mempool.addUnchecked(hash, CTxMemPoolEntry(tx, 11, GetTime(), 111.0, 11)); tx.vin[0].prevout.hash = hash; tx.vin[0].scriptSig = CScript() << (std::vector)script; tx.vout[0].nValue -= 1000000; hash = tx.GetHash(); - mempool.addUnchecked(hash,tx); - BOOST_CHECK(pblocktemplate = CreateNewBlock(reservekey)); + mempool.addUnchecked(hash, CTxMemPoolEntry(tx, 11, GetTime(), 111.0, 11)); + BOOST_CHECK(pblocktemplate = CreateNewBlock(scriptPubKey, ALGO_SHA256D)); delete pblocktemplate; mempool.clear(); @@ -183,23 +188,75 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity) tx.vout[0].nValue = 4900000000LL; tx.vout[0].scriptPubKey = CScript() << OP_1; hash = tx.GetHash(); - mempool.addUnchecked(hash, tx); + mempool.addUnchecked(hash, CTxMemPoolEntry(tx, 11, GetTime(), 111.0, 11)); tx.vout[0].scriptPubKey = CScript() << OP_2; hash = tx.GetHash(); - mempool.addUnchecked(hash, tx); - BOOST_CHECK(pblocktemplate = CreateNewBlock(reservekey)); + mempool.addUnchecked(hash, CTxMemPoolEntry(tx, 11, GetTime(), 111.0, 11)); + BOOST_CHECK(pblocktemplate = CreateNewBlock(scriptPubKey, ALGO_SHA256D)); delete pblocktemplate; mempool.clear(); // subsidy changing - int nHeight = pindexBest->nHeight; - pindexBest->nHeight = 209999; - BOOST_CHECK(pblocktemplate = CreateNewBlock(reservekey)); + int nHeight = chainActive.Height(); + chainActive.Tip()->nHeight = 209999; + BOOST_CHECK(pblocktemplate = CreateNewBlock(scriptPubKey, ALGO_SHA256D)); delete pblocktemplate; - pindexBest->nHeight = 210000; - BOOST_CHECK(pblocktemplate = CreateNewBlock(reservekey)); + chainActive.Tip()->nHeight = 210000; + BOOST_CHECK(pblocktemplate = CreateNewBlock(scriptPubKey, ALGO_SHA256D)); delete pblocktemplate; - pindexBest->nHeight = nHeight; + chainActive.Tip()->nHeight = nHeight; + + // non-final txs in mempool + SetMockTime(chainActive.Tip()->GetMedianTimePast()+1); + + // height locked + tx.vin[0].prevout.hash = txFirst[0]->GetHash(); + tx.vin[0].scriptSig = CScript() << OP_1; + tx.vin[0].nSequence = 0; + tx.vout[0].nValue = 4900000000LL; + tx.vout[0].scriptPubKey = CScript() << OP_1; + tx.nLockTime = chainActive.Tip()->nHeight+1; + hash = tx.GetHash(); + mempool.addUnchecked(hash, CTxMemPoolEntry(tx, 11, GetTime(), 111.0, 11)); + BOOST_CHECK(!IsFinalTx(tx, chainActive.Tip()->nHeight + 1)); + + // time locked + tx2.vin.resize(1); + tx2.vin[0].prevout.hash = txFirst[1]->GetHash(); + tx2.vin[0].prevout.n = 0; + tx2.vin[0].scriptSig = CScript() << OP_1; + tx2.vin[0].nSequence = 0; + tx2.vout.resize(1); + tx2.vout[0].nValue = 4900000000LL; + tx2.vout[0].scriptPubKey = CScript() << OP_1; + tx2.nLockTime = chainActive.Tip()->GetMedianTimePast()+1; + hash = tx2.GetHash(); + mempool.addUnchecked(hash, CTxMemPoolEntry(tx2, 11, GetTime(), 111.0, 11)); + BOOST_CHECK(!IsFinalTx(tx2)); + + BOOST_CHECK(pblocktemplate = CreateNewBlock(scriptPubKey, ALGO_SHA256D)); + + // Neither tx should have make it into the template. + BOOST_CHECK_EQUAL(pblocktemplate->block.vtx.size(), 1); + delete pblocktemplate; + + // However if we advance height and time by one, both will. + chainActive.Tip()->nHeight++; + SetMockTime(chainActive.Tip()->GetMedianTimePast()+2); + + BOOST_CHECK(IsFinalTx(tx, chainActive.Tip()->nHeight + 1)); + BOOST_CHECK(IsFinalTx(tx2)); + + BOOST_CHECK(pblocktemplate = CreateNewBlock(scriptPubKey, ALGO_SHA256D)); + BOOST_CHECK_EQUAL(pblocktemplate->block.vtx.size(), 3); + delete pblocktemplate; + + chainActive.Tip()->nHeight--; + SetMockTime(0); + + BOOST_FOREACH(CTransaction *tx, txFirst) + delete tx; + } BOOST_AUTO_TEST_CASE(sha256transform_equality) diff --git a/src/test/mruset_tests.cpp b/src/test/mruset_tests.cpp index 64a6678a..60f11c14 100644 --- a/src/test/mruset_tests.cpp +++ b/src/test/mruset_tests.cpp @@ -1,13 +1,20 @@ -#include - -using namespace std; +// Copyright (c) 2012-2013 The Bitcoin Core developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "mruset.h" + #include "util.h" +#include + +#include + #define NUM_TESTS 16 #define MAX_SIZE 100 +using namespace std; + class mrutester { private: diff --git a/src/test/multisig_tests.cpp b/src/test/multisig_tests.cpp index 9ef932b5..3775abd6 100644 --- a/src/test/multisig_tests.cpp +++ b/src/test/multisig_tests.cpp @@ -1,25 +1,23 @@ -#include -#include -#include -#include -#include -#include -#include - -#include -#include +// Copyright (c) 2011-2013 The Bitcoin Core developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. +#include "key.h" #include "keystore.h" #include "main.h" #include "script.h" -#include "wallet.h" +#include "uint256.h" + +#include +#include +#include using namespace std; using namespace boost::assign; typedef vector valtype; -extern uint256 SignatureHash(CScript scriptCode, const CTransaction& txTo, unsigned int nIn, int nHashType); +extern uint256 SignatureHash(const CScript &scriptCode, const CTransaction& txTo, unsigned int nIn, int nHashType); BOOST_AUTO_TEST_SUITE(multisig_tests) @@ -133,21 +131,23 @@ BOOST_AUTO_TEST_CASE(multisig_IsStandard) for (int i = 0; i < 4; i++) key[i].MakeNewKey(true); + txnouttype whichType; + CScript a_and_b; a_and_b << OP_2 << key[0].GetPubKey() << key[1].GetPubKey() << OP_2 << OP_CHECKMULTISIG; - BOOST_CHECK(::IsStandard(a_and_b)); + BOOST_CHECK(::IsStandard(a_and_b, whichType)); CScript a_or_b; a_or_b << OP_1 << key[0].GetPubKey() << key[1].GetPubKey() << OP_2 << OP_CHECKMULTISIG; - BOOST_CHECK(::IsStandard(a_or_b)); + BOOST_CHECK(::IsStandard(a_or_b, whichType)); CScript escrow; escrow << OP_2 << key[0].GetPubKey() << key[1].GetPubKey() << key[2].GetPubKey() << OP_3 << OP_CHECKMULTISIG; - BOOST_CHECK(::IsStandard(escrow)); + BOOST_CHECK(::IsStandard(escrow, whichType)); CScript one_of_four; one_of_four << OP_1 << key[0].GetPubKey() << key[1].GetPubKey() << key[2].GetPubKey() << key[3].GetPubKey() << OP_4 << OP_CHECKMULTISIG; - BOOST_CHECK(!::IsStandard(one_of_four)); + BOOST_CHECK(!::IsStandard(one_of_four, whichType)); CScript malformed[6]; malformed[0] << OP_3 << key[0].GetPubKey() << key[1].GetPubKey() << OP_2 << OP_CHECKMULTISIG; @@ -158,7 +158,7 @@ BOOST_AUTO_TEST_CASE(multisig_IsStandard) malformed[5] << OP_1 << key[0].GetPubKey() << key[1].GetPubKey(); for (int i = 0; i < 6; i++) - BOOST_CHECK(!::IsStandard(malformed[i])); + BOOST_CHECK(!::IsStandard(malformed[i], whichType)); } BOOST_AUTO_TEST_CASE(multisig_Solver1) diff --git a/src/test/netbase_tests.cpp b/src/test/netbase_tests.cpp index e5a7562d..4321852d 100644 --- a/src/test/netbase_tests.cpp +++ b/src/test/netbase_tests.cpp @@ -1,10 +1,13 @@ -#include - -#include -#include +// Copyright (c) 2012-2013 The Bitcoin Core developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "netbase.h" +#include + +#include + using namespace std; BOOST_AUTO_TEST_SUITE(netbase_tests) @@ -90,7 +93,7 @@ BOOST_AUTO_TEST_CASE(netbase_lookupnumeric) BOOST_AUTO_TEST_CASE(onioncat_test) { - // values from http://www.cypherpunk.at/onioncat/wiki/OnionCat + // values from https://web.archive.org/web/20121122003543/http://www.cypherpunk.at/onioncat/wiki/OnionCat CNetAddr addr1("5wyqrzbvrdsumnok.onion"); CNetAddr addr2("FD87:D87E:EB43:edb1:8e4:3588:e546:35ca"); BOOST_CHECK(addr1 == addr2); diff --git a/src/test/pmt_tests.cpp b/src/test/pmt_tests.cpp index cf094216..7d7e6681 100644 --- a/src/test/pmt_tests.cpp +++ b/src/test/pmt_tests.cpp @@ -1,7 +1,14 @@ -#include +// Copyright (c) 2012-2013 The Bitcoin Core developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include "uint256.h" #include "main.h" +#include "serialize.h" +#include "uint256.h" + +#include + +#include using namespace std; diff --git a/src/test/rpc_tests.cpp b/src/test/rpc_tests.cpp index 35eabed0..5bc38ce2 100644 --- a/src/test/rpc_tests.cpp +++ b/src/test/rpc_tests.cpp @@ -1,17 +1,19 @@ -#include -#include -#include +// Copyright (c) 2012-2013 The Bitcoin Core developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "rpcserver.h" +#include "rpcclient.h" #include "base58.h" -#include "util.h" -#include "bitcoinrpc.h" + +#include +#include using namespace std; using namespace json_spirit; -BOOST_AUTO_TEST_SUITE(rpc_tests) - -static Array +Array createArgs(int nRequired, const char* address1=NULL, const char* address2=NULL) { Array result; @@ -23,44 +25,7 @@ createArgs(int nRequired, const char* address1=NULL, const char* address2=NULL) return result; } -BOOST_AUTO_TEST_CASE(rpc_addmultisig) -{ - rpcfn_type addmultisig = tableRPC["addmultisigaddress"]->actor; - - // old, 65-byte-long: - const char address1Hex[] = "0434e3e09f49ea168c5bbf53f877ff4206923858aab7c7e1df25bc263978107c95e35065a27ef6f1b27222db0ec97e0e895eaca603d3ee0d4c060ce3d8a00286c8"; - // new, compressed: - const char address2Hex[] = "0388c2037017c62240b6b72ac1a2a5f94da790596ebd06177c8572752922165cb4"; - - Value v; - CBitcoinAddress address; - BOOST_CHECK_NO_THROW(v = addmultisig(createArgs(1, address1Hex), false)); - address.SetString(v.get_str()); - BOOST_CHECK(address.IsValid() && address.IsScript()); - - BOOST_CHECK_NO_THROW(v = addmultisig(createArgs(1, address1Hex, address2Hex), false)); - address.SetString(v.get_str()); - BOOST_CHECK(address.IsValid() && address.IsScript()); - - BOOST_CHECK_NO_THROW(v = addmultisig(createArgs(2, address1Hex, address2Hex), false)); - address.SetString(v.get_str()); - BOOST_CHECK(address.IsValid() && address.IsScript()); - - BOOST_CHECK_THROW(addmultisig(createArgs(0), false), runtime_error); - BOOST_CHECK_THROW(addmultisig(createArgs(1), false), runtime_error); - BOOST_CHECK_THROW(addmultisig(createArgs(2, address1Hex), false), runtime_error); - - BOOST_CHECK_THROW(addmultisig(createArgs(1, ""), false), runtime_error); - BOOST_CHECK_THROW(addmultisig(createArgs(1, "NotAValidPubkey"), false), runtime_error); - - string short1(address1Hex, address1Hex+sizeof(address1Hex)-2); // last byte missing - BOOST_CHECK_THROW(addmultisig(createArgs(2, short1.c_str()), false), runtime_error); - - string short2(address1Hex+1, address1Hex+sizeof(address1Hex)); // first byte missing - BOOST_CHECK_THROW(addmultisig(createArgs(2, short2.c_str()), false), runtime_error); -} - -static Value CallRPC(string args) +Value CallRPC(string args) { vector vArgs; boost::split(vArgs, args, boost::is_any_of(" \t")); @@ -79,34 +44,8 @@ static Value CallRPC(string args) } } -BOOST_AUTO_TEST_CASE(rpc_wallet) -{ - // Test RPC calls for various wallet statistics - Value r; - - BOOST_CHECK_NO_THROW(CallRPC("listunspent")); - BOOST_CHECK_THROW(CallRPC("listunspent string"), runtime_error); - BOOST_CHECK_THROW(CallRPC("listunspent 0 string"), runtime_error); - BOOST_CHECK_THROW(CallRPC("listunspent 0 1 not_array"), runtime_error); - BOOST_CHECK_THROW(CallRPC("listunspent 0 1 [] extra"), runtime_error); - BOOST_CHECK_NO_THROW(r=CallRPC("listunspent 0 1 []")); - BOOST_CHECK(r.get_array().empty()); - - BOOST_CHECK_NO_THROW(CallRPC("listreceivedbyaddress")); - BOOST_CHECK_NO_THROW(CallRPC("listreceivedbyaddress 0")); - BOOST_CHECK_THROW(CallRPC("listreceivedbyaddress not_int"), runtime_error); - BOOST_CHECK_THROW(CallRPC("listreceivedbyaddress 0 not_bool"), runtime_error); - BOOST_CHECK_NO_THROW(CallRPC("listreceivedbyaddress 0 true")); - BOOST_CHECK_THROW(CallRPC("listreceivedbyaddress 0 true extra"), runtime_error); - - BOOST_CHECK_NO_THROW(CallRPC("listreceivedbyaccount")); - BOOST_CHECK_NO_THROW(CallRPC("listreceivedbyaccount 0")); - BOOST_CHECK_THROW(CallRPC("listreceivedbyaccount not_int"), runtime_error); - BOOST_CHECK_THROW(CallRPC("listreceivedbyaccount 0 not_bool"), runtime_error); - BOOST_CHECK_NO_THROW(CallRPC("listreceivedbyaccount 0 true")); - BOOST_CHECK_THROW(CallRPC("listreceivedbyaccount 0 true extra"), runtime_error); -} +BOOST_AUTO_TEST_SUITE(rpc_tests) BOOST_AUTO_TEST_CASE(rpc_rawparams) { @@ -168,4 +107,35 @@ BOOST_AUTO_TEST_CASE(rpc_rawsign) BOOST_CHECK(find_value(r.get_obj(), "complete").get_bool() == true); } +BOOST_AUTO_TEST_CASE(rpc_format_monetary_values) +{ + BOOST_CHECK(write_string(ValueFromAmount(0LL), false) == "0.00000000"); + BOOST_CHECK(write_string(ValueFromAmount(1LL), false) == "0.00000001"); + BOOST_CHECK(write_string(ValueFromAmount(17622195LL), false) == "0.17622195"); + BOOST_CHECK(write_string(ValueFromAmount(50000000LL), false) == "0.50000000"); + BOOST_CHECK(write_string(ValueFromAmount(89898989LL), false) == "0.89898989"); + BOOST_CHECK(write_string(ValueFromAmount(100000000LL), false) == "1.00000000"); + BOOST_CHECK(write_string(ValueFromAmount(2099999999999990LL), false) == "20999999.99999990"); + BOOST_CHECK(write_string(ValueFromAmount(2099999999999999LL), false) == "20999999.99999999"); +} + +static Value ValueFromString(const std::string &str) +{ + Value value; + BOOST_CHECK(read_string(str, value)); + return value; +} + +BOOST_AUTO_TEST_CASE(rpc_parse_monetary_values) +{ + BOOST_CHECK(AmountFromValue(ValueFromString("0.00000001")) == 1LL); + BOOST_CHECK(AmountFromValue(ValueFromString("0.17622195")) == 17622195LL); + BOOST_CHECK(AmountFromValue(ValueFromString("0.5")) == 50000000LL); + BOOST_CHECK(AmountFromValue(ValueFromString("0.50000000")) == 50000000LL); + BOOST_CHECK(AmountFromValue(ValueFromString("0.89898989")) == 89898989LL); + BOOST_CHECK(AmountFromValue(ValueFromString("1.00000000")) == 100000000LL); + BOOST_CHECK(AmountFromValue(ValueFromString("20999999.9999999")) == 2099999999999990LL); + BOOST_CHECK(AmountFromValue(ValueFromString("20999999.99999999")) == 2099999999999999LL); +} + BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/rpc_wallet_tests.cpp b/src/test/rpc_wallet_tests.cpp new file mode 100644 index 00000000..eea249b1 --- /dev/null +++ b/src/test/rpc_wallet_tests.cpp @@ -0,0 +1,93 @@ +// Copyright (c) 2013-2014 The Bitcoin Core developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "rpcserver.h" +#include "rpcclient.h" + +#include "base58.h" +#include "wallet.h" + +#include +#include + +using namespace std; +using namespace json_spirit; + +extern Array createArgs(int nRequired, const char* address1=NULL, const char* address2=NULL); +extern Value CallRPC(string args); + +extern CWallet* pwalletMain; + +BOOST_AUTO_TEST_SUITE(rpc_wallet_tests) + +BOOST_AUTO_TEST_CASE(rpc_addmultisig) +{ + LOCK(pwalletMain->cs_wallet); + + rpcfn_type addmultisig = tableRPC["addmultisigaddress"]->actor; + + // old, 65-byte-long: + const char address1Hex[] = "0434e3e09f49ea168c5bbf53f877ff4206923858aab7c7e1df25bc263978107c95e35065a27ef6f1b27222db0ec97e0e895eaca603d3ee0d4c060ce3d8a00286c8"; + // new, compressed: + const char address2Hex[] = "0388c2037017c62240b6b72ac1a2a5f94da790596ebd06177c8572752922165cb4"; + + Value v; + CBitcoinAddress address; + BOOST_CHECK_NO_THROW(v = addmultisig(createArgs(1, address1Hex), false)); + address.SetString(v.get_str()); + BOOST_CHECK(address.IsValid() && address.IsScript()); + + BOOST_CHECK_NO_THROW(v = addmultisig(createArgs(1, address1Hex, address2Hex), false)); + address.SetString(v.get_str()); + BOOST_CHECK(address.IsValid() && address.IsScript()); + + BOOST_CHECK_NO_THROW(v = addmultisig(createArgs(2, address1Hex, address2Hex), false)); + address.SetString(v.get_str()); + BOOST_CHECK(address.IsValid() && address.IsScript()); + + BOOST_CHECK_THROW(addmultisig(createArgs(0), false), runtime_error); + BOOST_CHECK_THROW(addmultisig(createArgs(1), false), runtime_error); + BOOST_CHECK_THROW(addmultisig(createArgs(2, address1Hex), false), runtime_error); + + BOOST_CHECK_THROW(addmultisig(createArgs(1, ""), false), runtime_error); + BOOST_CHECK_THROW(addmultisig(createArgs(1, "NotAValidPubkey"), false), runtime_error); + + string short1(address1Hex, address1Hex+sizeof(address1Hex)-2); // last byte missing + BOOST_CHECK_THROW(addmultisig(createArgs(2, short1.c_str()), false), runtime_error); + + string short2(address1Hex+1, address1Hex+sizeof(address1Hex)); // first byte missing + BOOST_CHECK_THROW(addmultisig(createArgs(2, short2.c_str()), false), runtime_error); +} + +BOOST_AUTO_TEST_CASE(rpc_wallet) +{ + // Test RPC calls for various wallet statistics + Value r; + + LOCK2(cs_main, pwalletMain->cs_wallet); + + BOOST_CHECK_NO_THROW(CallRPC("listunspent")); + BOOST_CHECK_THROW(CallRPC("listunspent string"), runtime_error); + BOOST_CHECK_THROW(CallRPC("listunspent 0 string"), runtime_error); + BOOST_CHECK_THROW(CallRPC("listunspent 0 1 not_array"), runtime_error); + BOOST_CHECK_THROW(CallRPC("listunspent 0 1 [] extra"), runtime_error); + BOOST_CHECK_NO_THROW(r=CallRPC("listunspent 0 1 []")); + BOOST_CHECK(r.get_array().empty()); + + BOOST_CHECK_NO_THROW(CallRPC("listreceivedbyaddress")); + BOOST_CHECK_NO_THROW(CallRPC("listreceivedbyaddress 0")); + BOOST_CHECK_THROW(CallRPC("listreceivedbyaddress not_int"), runtime_error); + BOOST_CHECK_THROW(CallRPC("listreceivedbyaddress 0 not_bool"), runtime_error); + BOOST_CHECK_NO_THROW(CallRPC("listreceivedbyaddress 0 true")); + BOOST_CHECK_THROW(CallRPC("listreceivedbyaddress 0 true extra"), runtime_error); + + BOOST_CHECK_NO_THROW(CallRPC("listreceivedbyaccount")); + BOOST_CHECK_NO_THROW(CallRPC("listreceivedbyaccount 0")); + BOOST_CHECK_THROW(CallRPC("listreceivedbyaccount not_int"), runtime_error); + BOOST_CHECK_THROW(CallRPC("listreceivedbyaccount 0 not_bool"), runtime_error); + BOOST_CHECK_NO_THROW(CallRPC("listreceivedbyaccount 0 true")); + BOOST_CHECK_THROW(CallRPC("listreceivedbyaccount 0 true extra"), runtime_error); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/script_P2SH_tests.cpp b/src/test/script_P2SH_tests.cpp index 3c666d28..9b1290e0 100644 --- a/src/test/script_P2SH_tests.cpp +++ b/src/test/script_P2SH_tests.cpp @@ -1,13 +1,17 @@ -#include -#include -#include -#include -#include -#include +// Copyright (c) 2012-2013 The Bitcoin Core developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include "../main.h" -#include "../script.h" -#include "../wallet.h" +#include "script.h" + +#include "key.h" +#include "keystore.h" +#include "main.h" +#include "script.h" + +#include + +#include using namespace std; @@ -46,6 +50,7 @@ BOOST_AUTO_TEST_SUITE(script_P2SH_tests) BOOST_AUTO_TEST_CASE(sign) { + LOCK(cs_main); // Pay-to-script-hash looks like this: // scriptSig: // scriptPubKey: HASH160 EQUAL @@ -143,6 +148,7 @@ BOOST_AUTO_TEST_CASE(norecurse) BOOST_AUTO_TEST_CASE(set) { + LOCK(cs_main); // Test the CScript::Set* methods CBasicKeyStore keystore; CKey key[4]; @@ -246,6 +252,7 @@ BOOST_AUTO_TEST_CASE(switchover) BOOST_AUTO_TEST_CASE(AreInputsStandard) { + LOCK(cs_main); CCoinsView coinsDummy; CCoinsViewCache coins(coinsDummy); CBasicKeyStore keystore; diff --git a/src/test/script_tests.cpp b/src/test/script_tests.cpp index e7ad5262..7bc2bfb6 100644 --- a/src/test/script_tests.cpp +++ b/src/test/script_tests.cpp @@ -1,25 +1,38 @@ -#include +// Copyright (c) 2011-2013 The Bitcoin Core developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "script.h" + +#include "data/script_invalid.json.h" +#include "data/script_valid.json.h" + +#include "key.h" +#include "keystore.h" +#include "main.h" + #include +#include +#include #include + #include #include #include #include +#include +#include #include -#include #include #include "json/json_spirit_reader_template.h" -#include "json/json_spirit_writer_template.h" #include "json/json_spirit_utils.h" - -#include "main.h" -#include "wallet.h" +#include "json/json_spirit_writer_template.h" using namespace std; using namespace json_spirit; using namespace boost::algorithm; -extern uint256 SignatureHash(CScript scriptCode, const CTransaction& txTo, unsigned int nIn, int nHashType); +extern uint256 SignatureHash(const CScript &scriptCode, const CTransaction& txTo, unsigned int nIn, int nHashType); static const unsigned int flags = SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_STRICTENC; @@ -32,8 +45,12 @@ ParseScript(string s) if (mapOpNames.size() == 0) { - for (int op = OP_NOP; op <= OP_NOP10; op++) + for (int op = 0; op <= OP_NOP10; op++) { + // Allow OP_RESERVED to get into mapOpNames + if (op < OP_NOP && op != OP_RESERVED) + continue; + const char* name = GetOpName((opcodetype)op); if (strcmp(name, "OP_UNKNOWN") == 0) continue; @@ -54,7 +71,7 @@ ParseScript(string s) (starts_with(w, "-") && all(string(w.begin()+1, w.end()), is_digit()))) { // Number - int64 n = atoi64(w); + int64_t n = atoi64(w); result << n; } else if (starts_with(w, "0x") && IsHex(string(w.begin()+2, w.end()))) @@ -72,7 +89,7 @@ ParseScript(string s) } else if (mapOpNames.count(w)) { - // opcode, e.g. OP_ADD or OP_1: + // opcode, e.g. OP_ADD or ADD: result << mapOpNames[w]; } else @@ -86,34 +103,15 @@ ParseScript(string s) } Array -read_json(const std::string& filename) +read_json(const std::string& jsondata) { - namespace fs = boost::filesystem; - fs::path testFile = fs::current_path() / "test" / "data" / filename; - -#ifdef TEST_DATA_DIR - if (!fs::exists(testFile)) - { - testFile = fs::path(BOOST_PP_STRINGIZE(TEST_DATA_DIR)) / filename; - } -#endif - - ifstream ifs(testFile.string().c_str(), ifstream::in); Value v; - if (!read_stream(ifs, v)) - { - if (ifs.fail()) - BOOST_ERROR("Cound not find/open " << filename); - else - BOOST_ERROR("JSON syntax error in " << filename); - return Array(); - } - if (v.type() != array_type) - { - BOOST_ERROR(filename << " does not contain a json array"); - return Array(); - } + if (!read_string(jsondata, v) || v.type() != array_type) + { + BOOST_ERROR("Parse error."); + return Array(); + } return v.get_array(); } @@ -126,7 +124,7 @@ BOOST_AUTO_TEST_CASE(script_valid) // Inner arrays are [ "scriptSig", "scriptPubKey" ] // ... where scriptSig and scriptPubKey are stringified // scripts. - Array tests = read_json("script_valid.json"); + Array tests = read_json(std::string(json_tests::script_valid, json_tests::script_valid + sizeof(json_tests::script_valid))); BOOST_FOREACH(Value& tv, tests) { @@ -150,7 +148,7 @@ BOOST_AUTO_TEST_CASE(script_valid) BOOST_AUTO_TEST_CASE(script_invalid) { // Scripts that should evaluate as invalid - Array tests = read_json("script_invalid.json"); + Array tests = read_json(std::string(json_tests::script_invalid, json_tests::script_invalid + sizeof(json_tests::script_invalid))); BOOST_FOREACH(Value& tv, tests) { @@ -444,4 +442,22 @@ BOOST_AUTO_TEST_CASE(script_combineSigs) BOOST_CHECK(combined == partial3c); } +BOOST_AUTO_TEST_CASE(script_standard_push) +{ + for (int i=0; i<1000; i++) { + CScript script; + script << i; + BOOST_CHECK_MESSAGE(script.IsPushOnly(), "Number " << i << " is not pure push."); + BOOST_CHECK_MESSAGE(script.HasCanonicalPushes(), "Number " << i << " push is not canonical."); + } + + for (int i=0; i<1000; i++) { + std::vector data(i, '\111'); + CScript script; + script << data; + BOOST_CHECK_MESSAGE(script.IsPushOnly(), "Length " << i << " is not pure push."); + BOOST_CHECK_MESSAGE(script.HasCanonicalPushes(), "Length " << i << " push is not canonical."); + } +} + BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/serialize_tests.cpp b/src/test/serialize_tests.cpp index 19ffdcab..867a7df8 100644 --- a/src/test/serialize_tests.cpp +++ b/src/test/serialize_tests.cpp @@ -1,10 +1,13 @@ -#include - -#include -#include +// Copyright (c) 2012-2013 The Bitcoin Core developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "serialize.h" +#include + +#include + using namespace std; BOOST_AUTO_TEST_SUITE(serialize_tests) @@ -21,7 +24,7 @@ BOOST_AUTO_TEST_CASE(varints) BOOST_CHECK(size == ss.size()); } - for (uint64 i = 0; i < 100000000000ULL; i += 999999937) { + for (uint64_t i = 0; i < 100000000000ULL; i += 999999937) { ss << VARINT(i); size += ::GetSerializeSize(VARINT(i), 0, 0); BOOST_CHECK(size == ss.size()); @@ -34,12 +37,127 @@ BOOST_AUTO_TEST_CASE(varints) BOOST_CHECK_MESSAGE(i == j, "decoded:" << j << " expected:" << i); } - for (uint64 i = 0; i < 100000000000ULL; i += 999999937) { - uint64 j = -1; + for (uint64_t i = 0; i < 100000000000ULL; i += 999999937) { + uint64_t j = -1; ss >> VARINT(j); BOOST_CHECK_MESSAGE(i == j, "decoded:" << j << " expected:" << i); } +} +BOOST_AUTO_TEST_CASE(compactsize) +{ + CDataStream ss(SER_DISK, 0); + vector::size_type i, j; + + for (i = 1; i <= MAX_SIZE; i *= 2) + { + WriteCompactSize(ss, i-1); + WriteCompactSize(ss, i); + } + for (i = 1; i <= MAX_SIZE; i *= 2) + { + j = ReadCompactSize(ss); + BOOST_CHECK_MESSAGE((i-1) == j, "decoded:" << j << " expected:" << (i-1)); + j = ReadCompactSize(ss); + BOOST_CHECK_MESSAGE(i == j, "decoded:" << j << " expected:" << i); + } +} + +static bool isCanonicalException(const std::ios_base::failure& ex) +{ + std::ios_base::failure expectedException("non-canonical ReadCompactSize()"); + + // The string returned by what() can be different for different platforms. + // Instead of directly comparing the ex.what() with an expected string, + // create an instance of exception to see if ex.what() matches + // the expected explanatory string returned by the exception instance. + return strcmp(expectedException.what(), ex.what()) == 0; +} + + +BOOST_AUTO_TEST_CASE(noncanonical) +{ + // Write some non-canonical CompactSize encodings, and + // make sure an exception is thrown when read back. + CDataStream ss(SER_DISK, 0); + vector::size_type n; + + // zero encoded with three bytes: + ss.write("\xfd\x00\x00", 3); + BOOST_CHECK_EXCEPTION(ReadCompactSize(ss), std::ios_base::failure, isCanonicalException); + + // 0xfc encoded with three bytes: + ss.write("\xfd\xfc\x00", 3); + BOOST_CHECK_EXCEPTION(ReadCompactSize(ss), std::ios_base::failure, isCanonicalException); + + // 0xfd encoded with three bytes is OK: + ss.write("\xfd\xfd\x00", 3); + n = ReadCompactSize(ss); + BOOST_CHECK(n == 0xfd); + + // zero encoded with five bytes: + ss.write("\xfe\x00\x00\x00\x00", 5); + BOOST_CHECK_EXCEPTION(ReadCompactSize(ss), std::ios_base::failure, isCanonicalException); + + // 0xffff encoded with five bytes: + ss.write("\xfe\xff\xff\x00\x00", 5); + BOOST_CHECK_EXCEPTION(ReadCompactSize(ss), std::ios_base::failure, isCanonicalException); + + // zero encoded with nine bytes: + ss.write("\xff\x00\x00\x00\x00\x00\x00\x00\x00", 9); + BOOST_CHECK_EXCEPTION(ReadCompactSize(ss), std::ios_base::failure, isCanonicalException); + + // 0x01ffffff encoded with nine bytes: + ss.write("\xff\xff\xff\xff\x01\x00\x00\x00\x00", 9); + BOOST_CHECK_EXCEPTION(ReadCompactSize(ss), std::ios_base::failure, isCanonicalException); +} + +BOOST_AUTO_TEST_CASE(insert_delete) +{ + // Test inserting/deleting bytes. + CDataStream ss(SER_DISK, 0); + BOOST_CHECK_EQUAL(ss.size(), 0); + + ss.write("\x00\x01\x02\xff", 4); + BOOST_CHECK_EQUAL(ss.size(), 4); + + char c = (char)11; + + // Inserting at beginning/end/middle: + ss.insert(ss.begin(), c); + BOOST_CHECK_EQUAL(ss.size(), 5); + BOOST_CHECK_EQUAL(ss[0], c); + BOOST_CHECK_EQUAL(ss[1], 0); + + ss.insert(ss.end(), c); + BOOST_CHECK_EQUAL(ss.size(), 6); + BOOST_CHECK_EQUAL(ss[4], (char)0xff); + BOOST_CHECK_EQUAL(ss[5], c); + + ss.insert(ss.begin()+2, c); + BOOST_CHECK_EQUAL(ss.size(), 7); + BOOST_CHECK_EQUAL(ss[2], c); + + // Delete at beginning/end/middle + ss.erase(ss.begin()); + BOOST_CHECK_EQUAL(ss.size(), 6); + BOOST_CHECK_EQUAL(ss[0], 0); + + ss.erase(ss.begin()+ss.size()-1); + BOOST_CHECK_EQUAL(ss.size(), 5); + BOOST_CHECK_EQUAL(ss[4], (char)0xff); + + ss.erase(ss.begin()+1); + BOOST_CHECK_EQUAL(ss.size(), 4); + BOOST_CHECK_EQUAL(ss[0], 0); + BOOST_CHECK_EQUAL(ss[1], 1); + BOOST_CHECK_EQUAL(ss[2], 2); + BOOST_CHECK_EQUAL(ss[3], (char)0xff); + + // Make sure GetAndClear does the right thing: + CSerializeData d; + ss.GetAndClear(d); + BOOST_CHECK_EQUAL(ss.size(), 0); } BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/sighash_tests.cpp b/src/test/sighash_tests.cpp new file mode 100644 index 00000000..353fd60f --- /dev/null +++ b/src/test/sighash_tests.cpp @@ -0,0 +1,214 @@ +// Copyright (c) 2013 The Bitcoin Core developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include +#include + +#include "main.h" +#include "util.h" +#include "serialize.h" +#include "version.h" +#include "data/sighash.json.h" + +#include "json/json_spirit_reader_template.h" +#include "json/json_spirit_utils.h" +#include "json/json_spirit_writer_template.h" + +using namespace json_spirit; +extern Array read_json(const std::string& jsondata); + +extern uint256 SignatureHash(const CScript &scriptCode, const CTransaction& txTo, unsigned int nIn, int nHashType); + +// Old script.cpp SignatureHash function +uint256 static SignatureHashOld(CScript scriptCode, const CTransaction& txTo, unsigned int nIn, int nHashType) +{ + if (nIn >= txTo.vin.size()) + { + printf("ERROR: SignatureHash() : nIn=%d out of range\n", nIn); + return 1; + } + CTransaction txTmp(txTo); + + // In case concatenating two scripts ends up with two codeseparators, + // or an extra one at the end, this prevents all those possible incompatibilities. + scriptCode.FindAndDelete(CScript(OP_CODESEPARATOR)); + + // Blank out other inputs' signatures + for (unsigned int i = 0; i < txTmp.vin.size(); i++) + txTmp.vin[i].scriptSig = CScript(); + txTmp.vin[nIn].scriptSig = scriptCode; + + // Blank out some of the outputs + if ((nHashType & 0x1f) == SIGHASH_NONE) + { + // Wildcard payee + txTmp.vout.clear(); + + // Let the others update at will + for (unsigned int i = 0; i < txTmp.vin.size(); i++) + if (i != nIn) + txTmp.vin[i].nSequence = 0; + } + else if ((nHashType & 0x1f) == SIGHASH_SINGLE) + { + // Only lock-in the txout payee at same index as txin + unsigned int nOut = nIn; + if (nOut >= txTmp.vout.size()) + { + printf("ERROR: SignatureHash() : nOut=%d out of range\n", nOut); + return 1; + } + txTmp.vout.resize(nOut+1); + for (unsigned int i = 0; i < nOut; i++) + txTmp.vout[i].SetNull(); + + // Let the others update at will + for (unsigned int i = 0; i < txTmp.vin.size(); i++) + if (i != nIn) + txTmp.vin[i].nSequence = 0; + } + + // Blank out other inputs completely, not recommended for open transactions + if (nHashType & SIGHASH_ANYONECANPAY) + { + txTmp.vin[0] = txTmp.vin[nIn]; + txTmp.vin.resize(1); + } + + // Serialize and hash + CHashWriter ss(SER_GETHASH, 0); + ss << txTmp << nHashType; + return ss.GetHash(); +} + +void static RandomScript(CScript &script) { + static const opcodetype oplist[] = {OP_FALSE, OP_1, OP_2, OP_3, OP_CHECKSIG, OP_IF, OP_VERIF, OP_RETURN, OP_CODESEPARATOR}; + script = CScript(); + int ops = (insecure_rand() % 10); + for (int i=0; i> tx; + + CValidationState state; + BOOST_CHECK_MESSAGE(CheckTransaction(tx, state), strTest); + BOOST_CHECK(state.IsValid()); + + std::vector raw = ParseHex(raw_script); + scriptCode.insert(scriptCode.end(), raw.begin(), raw.end()); + } catch (...) { + BOOST_ERROR("Bad test, couldn't deserialize data: " << strTest); + continue; + } + + sh = SignatureHash(scriptCode, tx, nIn, nHashType); + BOOST_CHECK_MESSAGE(sh.GetHex() == sigHashHex, strTest); + } +} +BOOST_AUTO_TEST_SUITE_END() + diff --git a/src/test/sigopcount_tests.cpp b/src/test/sigopcount_tests.cpp index 5a87f176..722f14a9 100644 --- a/src/test/sigopcount_tests.cpp +++ b/src/test/sigopcount_tests.cpp @@ -1,9 +1,15 @@ -#include -#include -#include +// Copyright (c) 2012-2013 The Bitcoin Core developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include "script.h" #include "key.h" +#include "script.h" +#include "uint256.h" + +#include + +#include +#include using namespace std; diff --git a/src/test/test_bitcoin.cpp b/src/test/test_bitcoin.cpp index 1bf9a28a..2d993e24 100644 --- a/src/test/test_bitcoin.cpp +++ b/src/test/test_bitcoin.cpp @@ -1,15 +1,25 @@ -#define BOOST_TEST_MODULE Bitcoin Test Suite -#include -#include +// Copyright (c) 2011-2013 The Bitcoin Core developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#define BOOST_TEST_MODULE Bitcoin Test Suite + + -#include "db.h" -#include "txdb.h" #include "main.h" -#include "wallet.h" +#include "txdb.h" +#include "ui_interface.h" #include "util.h" +#ifdef ENABLE_WALLET +#include "db.h" +#include "wallet.h" +#endif + +#include +#include + CWallet* pwalletMain; -CClientUIInterface uiInterface; extern bool fPrintToConsole; extern void noui_connect(); @@ -20,9 +30,11 @@ struct TestingSetup { boost::thread_group threadGroup; TestingSetup() { - fPrintToDebugger = true; // don't want to write to debug.log file + fPrintToDebugLog = false; // don't want to write to debug.log file noui_connect(); +#ifdef ENABLE_WALLET bitdb.MakeMock(); +#endif pathTemp = GetTempPath() / strprintf("test_bitcoin_%lu_%i", (unsigned long)GetTime(), (int)(GetRand(100000))); boost::filesystem::create_directories(pathTemp); mapArgs["-datadir"] = pathTemp.string(); @@ -30,24 +42,32 @@ struct TestingSetup { pcoinsdbview = new CCoinsViewDB(1 << 23, true); pcoinsTip = new CCoinsViewCache(*pcoinsdbview); InitBlockIndex(); +#ifdef ENABLE_WALLET bool fFirstRun; pwalletMain = new CWallet("wallet.dat"); pwalletMain->LoadWallet(fFirstRun); RegisterWallet(pwalletMain); +#endif nScriptCheckThreads = 3; for (int i=0; i < nScriptCheckThreads-1; i++) threadGroup.create_thread(&ThreadScriptCheck); + RegisterNodeSignals(GetNodeSignals()); } ~TestingSetup() { threadGroup.interrupt_all(); threadGroup.join_all(); + UnregisterNodeSignals(GetNodeSignals()); +#ifdef ENABLE_WALLET delete pwalletMain; pwalletMain = NULL; +#endif delete pcoinsTip; delete pcoinsdbview; delete pblocktree; +#ifdef ENABLE_WALLET bitdb.Flush(true); +#endif boost::filesystem::remove_all(pathTemp); } }; @@ -64,3 +84,8 @@ void StartShutdown() exit(0); } +bool ShutdownRequested() +{ + return false; +} + diff --git a/src/test/transaction_tests.cpp b/src/test/transaction_tests.cpp index 0c7475b4..24647950 100644 --- a/src/test/transaction_tests.cpp +++ b/src/test/transaction_tests.cpp @@ -1,16 +1,26 @@ +// Copyright (c) 2011-2014 The Bitcoin Core developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "data/tx_invalid.json.h" +#include "data/tx_valid.json.h" + +#include "key.h" +#include "keystore.h" +#include "main.h" +#include "script.h" + #include #include + #include #include "json/json_spirit_writer_template.h" -#include "main.h" -#include "wallet.h" - using namespace std; using namespace json_spirit; // In script_tests.cpp -extern Array read_json(const std::string& filename); +extern Array read_json(const std::string& jsondata); extern CScript ParseScript(string s); BOOST_AUTO_TEST_SUITE(transaction_tests) @@ -22,7 +32,7 @@ BOOST_AUTO_TEST_CASE(tx_valid) // Inner arrays are either [ "comment" ] // or [[[prevout hash, prevout index, prevout scriptPubKey], [input 2], ...],"], serializedTransaction, enforceP2SH // ... where all scripts are stringified scripts. - Array tests = read_json("tx_valid.json"); + Array tests = read_json(std::string(json_tests::tx_valid, json_tests::tx_valid + sizeof(json_tests::tx_valid))); BOOST_FOREACH(Value& tv, tests) { @@ -91,7 +101,7 @@ BOOST_AUTO_TEST_CASE(tx_invalid) // Inner arrays are either [ "comment" ] // or [[[prevout hash, prevout index, prevout scriptPubKey], [input 2], ...],"], serializedTransaction, enforceP2SH // ... where all scripts are stringified scripts. - Array tests = read_json("tx_invalid.json"); + Array tests = read_json(std::string(json_tests::tx_invalid, json_tests::tx_invalid + sizeof(json_tests::tx_invalid))); BOOST_FOREACH(Value& tv, tests) { @@ -244,6 +254,7 @@ BOOST_AUTO_TEST_CASE(test_Get) BOOST_AUTO_TEST_CASE(test_IsStandard) { + LOCK(cs_main); CBasicKeyStore keystore; CCoinsView coinsDummy; CCoinsViewCache coins(coinsDummy); @@ -263,14 +274,41 @@ BOOST_AUTO_TEST_CASE(test_IsStandard) string reason; BOOST_CHECK(IsStandardTx(t, reason)); - t.vout[0].nValue = 5011; // dust + t.vout[0].nValue = 501; // dust BOOST_CHECK(!IsStandardTx(t, reason)); - t.vout[0].nValue = 6011; // not dust + t.vout[0].nValue = 601; // not dust BOOST_CHECK(IsStandardTx(t, reason)); t.vout[0].scriptPubKey = CScript() << OP_1; BOOST_CHECK(!IsStandardTx(t, reason)); + + // 40-byte TX_NULL_DATA (standard) + t.vout[0].scriptPubKey = CScript() << OP_RETURN << ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38"); + BOOST_CHECK(IsStandardTx(t, reason)); + + // 41-byte TX_NULL_DATA (non-standard) + t.vout[0].scriptPubKey = CScript() << OP_RETURN << ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef3800"); + BOOST_CHECK(!IsStandardTx(t, reason)); + + // TX_NULL_DATA w/o PUSHDATA + t.vout.resize(1); + t.vout[0].scriptPubKey = CScript() << OP_RETURN; + BOOST_CHECK(IsStandardTx(t, reason)); + + // Only one TX_NULL_DATA permitted in all cases + t.vout.resize(2); + t.vout[0].scriptPubKey = CScript() << OP_RETURN << ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38"); + t.vout[1].scriptPubKey = CScript() << OP_RETURN << ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38"); + BOOST_CHECK(!IsStandardTx(t, reason)); + + t.vout[0].scriptPubKey = CScript() << OP_RETURN << ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38"); + t.vout[1].scriptPubKey = CScript() << OP_RETURN; + BOOST_CHECK(!IsStandardTx(t, reason)); + + t.vout[0].scriptPubKey = CScript() << OP_RETURN; + t.vout[1].scriptPubKey = CScript() << OP_RETURN; + BOOST_CHECK(!IsStandardTx(t, reason)); } BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/uint160_tests.cpp b/src/test/uint160_tests.cpp deleted file mode 100644 index 35cb35b2..00000000 --- a/src/test/uint160_tests.cpp +++ /dev/null @@ -1,18 +0,0 @@ -#include - -#include "uint256.h" - -BOOST_AUTO_TEST_SUITE(uint160_tests) - -BOOST_AUTO_TEST_CASE(uint160_equality) -{ - uint160 num1 = 10; - uint160 num2 = 11; - BOOST_CHECK(num1+1 == num2); - - uint64 num3 = 10; - BOOST_CHECK(num1 == num3); - BOOST_CHECK(num1+num2 == num3+num2); -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/uint256_tests.cpp b/src/test/uint256_tests.cpp index efdc8a6a..815babf1 100644 --- a/src/test/uint256_tests.cpp +++ b/src/test/uint256_tests.cpp @@ -1,18 +1,637 @@ -#include +// Copyright (c) 2011-2013 The Bitcoin Core developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. +#include +#include +#include +#include +#include +#include #include "uint256.h" +#include +#include "version.h" BOOST_AUTO_TEST_SUITE(uint256_tests) + +const unsigned char R1Array[] = + "\x9c\x52\x4a\xdb\xcf\x56\x11\x12\x2b\x29\x12\x5e\x5d\x35\xd2\xd2" + "\x22\x81\xaa\xb5\x33\xf0\x08\x32\xd5\x56\xb1\xf9\xea\xe5\x1d\x7d"; +const char R1ArrayHex[] = "7D1DE5EAF9B156D53208F033B5AA8122D2d2355d5e12292b121156cfdb4a529c"; +const double R1Ldouble = 0.4887374590559308955; // R1L equals roughly R1Ldouble * 2^256 +const double R1Sdouble = 0.7096329412477836074; +const uint256 R1L = uint256(std::vector(R1Array,R1Array+32)); +const uint160 R1S = uint160(std::vector(R1Array,R1Array+20)); +const uint64_t R1LLow64 = 0x121156cfdb4a529cULL; -BOOST_AUTO_TEST_CASE(uint256_equality) +const unsigned char R2Array[] = + "\x70\x32\x1d\x7c\x47\xa5\x6b\x40\x26\x7e\x0a\xc3\xa6\x9c\xb6\xbf" + "\x13\x30\x47\xa3\x19\x2d\xda\x71\x49\x13\x72\xf0\xb4\xca\x81\xd7"; +const uint256 R2L = uint256(std::vector(R2Array,R2Array+32)); +const uint160 R2S = uint160(std::vector(R2Array,R2Array+20)); + +const char R1LplusR2L[] = "549FB09FEA236A1EA3E31D4D58F1B1369288D204211CA751527CFC175767850C"; + +const unsigned char ZeroArray[] = + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"; +const uint256 ZeroL = uint256(std::vector(ZeroArray,ZeroArray+32)); +const uint160 ZeroS = uint160(std::vector(ZeroArray,ZeroArray+20)); + +const unsigned char OneArray[] = + "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"; +const uint256 OneL = uint256(std::vector(OneArray,OneArray+32)); +const uint160 OneS = uint160(std::vector(OneArray,OneArray+20)); + +const unsigned char MaxArray[] = + "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" + "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"; +const uint256 MaxL = uint256(std::vector(MaxArray,MaxArray+32)); +const uint160 MaxS = uint160(std::vector(MaxArray,MaxArray+20)); + +const uint256 HalfL = (OneL << 255); +const uint160 HalfS = (OneS << 159); +std::string ArrayToString(const unsigned char A[], unsigned int width) { - uint256 num1 = 10; - uint256 num2 = 11; - BOOST_CHECK(num1+1 == num2); + std::stringstream Stream; + Stream << std::hex; + for (unsigned int i = 0; i < width; ++i) + { + Stream<): + BOOST_CHECK(R1L.ToString() == ArrayToString(R1Array,32)); + BOOST_CHECK(R1S.ToString() == ArrayToString(R1Array,20)); + BOOST_CHECK(R2L.ToString() == ArrayToString(R2Array,32)); + BOOST_CHECK(R2S.ToString() == ArrayToString(R2Array,20)); + BOOST_CHECK(ZeroL.ToString() == ArrayToString(ZeroArray,32)); + BOOST_CHECK(ZeroS.ToString() == ArrayToString(ZeroArray,20)); + BOOST_CHECK(OneL.ToString() == ArrayToString(OneArray,32)); + BOOST_CHECK(OneS.ToString() == ArrayToString(OneArray,20)); + BOOST_CHECK(MaxL.ToString() == ArrayToString(MaxArray,32)); + BOOST_CHECK(MaxS.ToString() == ArrayToString(MaxArray,20)); + BOOST_CHECK(OneL.ToString() != ArrayToString(ZeroArray,32)); + BOOST_CHECK(OneS.ToString() != ArrayToString(ZeroArray,20)); + + // == and != + BOOST_CHECK(R1L != R2L && R1S != R2S); + BOOST_CHECK(ZeroL != OneL && ZeroS != OneS); + BOOST_CHECK(OneL != ZeroL && OneS != ZeroS); + BOOST_CHECK(MaxL != ZeroL && MaxS != ZeroS); + BOOST_CHECK(~MaxL == ZeroL && ~MaxS == ZeroS); + BOOST_CHECK( ((R1L ^ R2L) ^ R1L) == R2L); + BOOST_CHECK( ((R1S ^ R2S) ^ R1S) == R2S); + + uint64_t Tmp64 = 0xc4dab720d9c7acaaULL; + for (unsigned int i = 0; i < 256; ++i) + { + BOOST_CHECK(ZeroL != (OneL << i)); + BOOST_CHECK((OneL << i) != ZeroL); + BOOST_CHECK(R1L != (R1L ^ (OneL << i))); + BOOST_CHECK(((uint256(Tmp64) ^ (OneL << i) ) != Tmp64 )); + } + BOOST_CHECK(ZeroL == (OneL << 256)); + + for (unsigned int i = 0; i < 160; ++i) + { + BOOST_CHECK(ZeroS != (OneS << i)); + BOOST_CHECK((OneS << i) != ZeroS); + BOOST_CHECK(R1S != (R1S ^ (OneS << i))); + BOOST_CHECK(((uint160(Tmp64) ^ (OneS << i) ) != Tmp64 )); + } + BOOST_CHECK(ZeroS == (OneS << 256)); + + // String Constructor and Copy Constructor + BOOST_CHECK(uint256("0x"+R1L.ToString()) == R1L); + BOOST_CHECK(uint256("0x"+R2L.ToString()) == R2L); + BOOST_CHECK(uint256("0x"+ZeroL.ToString()) == ZeroL); + BOOST_CHECK(uint256("0x"+OneL.ToString()) == OneL); + BOOST_CHECK(uint256("0x"+MaxL.ToString()) == MaxL); + BOOST_CHECK(uint256(R1L.ToString()) == R1L); + BOOST_CHECK(uint256(" 0x"+R1L.ToString()+" ") == R1L); + BOOST_CHECK(uint256("") == ZeroL); + BOOST_CHECK(R1L == uint256(R1ArrayHex)); + BOOST_CHECK(uint256(R1L) == R1L); + BOOST_CHECK((uint256(R1L^R2L)^R2L) == R1L); + BOOST_CHECK(uint256(ZeroL) == ZeroL); + BOOST_CHECK(uint256(OneL) == OneL); + + BOOST_CHECK(uint160("0x"+R1S.ToString()) == R1S); + BOOST_CHECK(uint160("0x"+R2S.ToString()) == R2S); + BOOST_CHECK(uint160("0x"+ZeroS.ToString()) == ZeroS); + BOOST_CHECK(uint160("0x"+OneS.ToString()) == OneS); + BOOST_CHECK(uint160("0x"+MaxS.ToString()) == MaxS); + BOOST_CHECK(uint160(R1S.ToString()) == R1S); + BOOST_CHECK(uint160(" 0x"+R1S.ToString()+" ") == R1S); + BOOST_CHECK(uint160("") == ZeroS); + BOOST_CHECK(R1S == uint160(R1ArrayHex)); + + BOOST_CHECK(uint160(R1S) == R1S); + BOOST_CHECK((uint160(R1S^R2S)^R2S) == R1S); + BOOST_CHECK(uint160(ZeroS) == ZeroS); + BOOST_CHECK(uint160(OneS) == OneS); + + // uint64_t constructor + BOOST_CHECK( (R1L & uint256("0xffffffffffffffff")) == uint256(R1LLow64)); + BOOST_CHECK(ZeroL == uint256(0)); + BOOST_CHECK(OneL == uint256(1)); + BOOST_CHECK(uint256("0xffffffffffffffff") = uint256(0xffffffffffffffffULL)); + BOOST_CHECK( (R1S & uint160("0xffffffffffffffff")) == uint160(R1LLow64)); + BOOST_CHECK(ZeroS == uint160(0)); + BOOST_CHECK(OneS == uint160(1)); + BOOST_CHECK(uint160("0xffffffffffffffff") = uint160(0xffffffffffffffffULL)); + + // Assignment (from base_uint) + uint256 tmpL = ~ZeroL; BOOST_CHECK(tmpL == ~ZeroL); + tmpL = ~OneL; BOOST_CHECK(tmpL == ~OneL); + tmpL = ~R1L; BOOST_CHECK(tmpL == ~R1L); + tmpL = ~R2L; BOOST_CHECK(tmpL == ~R2L); + tmpL = ~MaxL; BOOST_CHECK(tmpL == ~MaxL); + uint160 tmpS = ~ZeroS; BOOST_CHECK(tmpS == ~ZeroS); + tmpS = ~OneS; BOOST_CHECK(tmpS == ~OneS); + tmpS = ~R1S; BOOST_CHECK(tmpS == ~R1S); + tmpS = ~R2S; BOOST_CHECK(tmpS == ~R2S); + tmpS = ~MaxS; BOOST_CHECK(tmpS == ~MaxS); + + // Wrong length must give 0 + BOOST_CHECK(uint256(std::vector(OneArray,OneArray+31)) == 0); + BOOST_CHECK(uint256(std::vector(OneArray,OneArray+20)) == 0); + BOOST_CHECK(uint160(std::vector(OneArray,OneArray+32)) == 0); + BOOST_CHECK(uint160(std::vector(OneArray,OneArray+19)) == 0); +} + +void shiftArrayRight(unsigned char* to, const unsigned char* from, unsigned int arrayLength, unsigned int bitsToShift) +{ + for (unsigned int T=0; T < arrayLength; ++T) + { + unsigned int F = (T+bitsToShift/8); + if (F < arrayLength) + to[T] = from[F] >> (bitsToShift%8); + else + to[T] = 0; + if (F + 1 < arrayLength) + to[T] |= from[(F+1)] << (8-bitsToShift%8); + } +} + +void shiftArrayLeft(unsigned char* to, const unsigned char* from, unsigned int arrayLength, unsigned int bitsToShift) +{ + for (unsigned int T=0; T < arrayLength; ++T) + { + if (T >= bitsToShift/8) + { + unsigned int F = T-bitsToShift/8; + to[T] = from[F] << (bitsToShift%8); + if (T >= bitsToShift/8+1) + to[T] |= from[F-1] >> (8-bitsToShift%8); + } + else { + to[T] = 0; + } + } +} + +BOOST_AUTO_TEST_CASE( shifts ) { // "<<" ">>" "<<=" ">>=" + unsigned char TmpArray[32]; + uint256 TmpL; + for (unsigned int i = 0; i < 256; ++i) + { + shiftArrayLeft(TmpArray, OneArray, 32, i); + BOOST_CHECK(uint256(std::vector(TmpArray,TmpArray+32)) == (OneL << i)); + TmpL = OneL; TmpL <<= i; + BOOST_CHECK(TmpL == (OneL << i)); + BOOST_CHECK((HalfL >> (255-i)) == (OneL << i)); + TmpL = HalfL; TmpL >>= (255-i); + BOOST_CHECK(TmpL == (OneL << i)); + + shiftArrayLeft(TmpArray, R1Array, 32, i); + BOOST_CHECK(uint256(std::vector(TmpArray,TmpArray+32)) == (R1L << i)); + TmpL = R1L; TmpL <<= i; + BOOST_CHECK(TmpL == (R1L << i)); + + shiftArrayRight(TmpArray, R1Array, 32, i); + BOOST_CHECK(uint256(std::vector(TmpArray,TmpArray+32)) == (R1L >> i)); + TmpL = R1L; TmpL >>= i; + BOOST_CHECK(TmpL == (R1L >> i)); + + shiftArrayLeft(TmpArray, MaxArray, 32, i); + BOOST_CHECK(uint256(std::vector(TmpArray,TmpArray+32)) == (MaxL << i)); + TmpL = MaxL; TmpL <<= i; + BOOST_CHECK(TmpL == (MaxL << i)); + + shiftArrayRight(TmpArray, MaxArray, 32, i); + BOOST_CHECK(uint256(std::vector(TmpArray,TmpArray+32)) == (MaxL >> i)); + TmpL = MaxL; TmpL >>= i; + BOOST_CHECK(TmpL == (MaxL >> i)); + } + uint256 c1L = uint256(0x0123456789abcdefULL); + uint256 c2L = c1L << 128; + for (unsigned int i = 0; i < 128; ++i) { + BOOST_CHECK((c1L << i) == (c2L >> (128-i))); + } + for (unsigned int i = 128; i < 256; ++i) { + BOOST_CHECK((c1L << i) == (c2L << (i-128))); + } + + uint160 TmpS; + for (unsigned int i = 0; i < 160; ++i) + { + shiftArrayLeft(TmpArray, OneArray, 20, i); + BOOST_CHECK(uint160(std::vector(TmpArray,TmpArray+20)) == (OneS << i)); + TmpS = OneS; TmpS <<= i; + BOOST_CHECK(TmpS == (OneS << i)); + BOOST_CHECK((HalfS >> (159-i)) == (OneS << i)); + TmpS = HalfS; TmpS >>= (159-i); + BOOST_CHECK(TmpS == (OneS << i)); + + shiftArrayLeft(TmpArray, R1Array, 20, i); + BOOST_CHECK(uint160(std::vector(TmpArray,TmpArray+20)) == (R1S << i)); + TmpS = R1S; TmpS <<= i; + BOOST_CHECK(TmpS == (R1S << i)); + + shiftArrayRight(TmpArray, R1Array, 20, i); + BOOST_CHECK(uint160(std::vector(TmpArray,TmpArray+20)) == (R1S >> i)); + TmpS = R1S; TmpS >>= i; + BOOST_CHECK(TmpS == (R1S >> i)); + + shiftArrayLeft(TmpArray, MaxArray, 20, i); + BOOST_CHECK(uint160(std::vector(TmpArray,TmpArray+20)) == (MaxS << i)); + TmpS = MaxS; TmpS <<= i; + BOOST_CHECK(TmpS == (MaxS << i)); + + shiftArrayRight(TmpArray, MaxArray, 20, i); + BOOST_CHECK(uint160(std::vector(TmpArray,TmpArray+20)) == (MaxS >> i)); + TmpS = MaxS; TmpS >>= i; + BOOST_CHECK(TmpS == (MaxS >> i)); + } + uint160 c1S = uint160(0x0123456789abcdefULL); + uint160 c2S = c1S << 80; + for (unsigned int i = 0; i < 80; ++i) { + BOOST_CHECK((c1S << i) == (c2S >> (80-i))); + } + for (unsigned int i = 80; i < 160; ++i) { + BOOST_CHECK((c1S << i) == (c2S << (i-80))); + } +} + +BOOST_AUTO_TEST_CASE( unaryOperators ) // ! ~ - +{ + BOOST_CHECK(!ZeroL); BOOST_CHECK(!ZeroS); + BOOST_CHECK(!(!OneL));BOOST_CHECK(!(!OneS)); + for (unsigned int i = 0; i < 256; ++i) + BOOST_CHECK(!(!(OneL<(TmpArray,TmpArray+32)) == (~R1L)); + BOOST_CHECK(uint160(std::vector(TmpArray,TmpArray+20)) == (~R1S)); + + BOOST_CHECK(-ZeroL == ZeroL); BOOST_CHECK(-ZeroS == ZeroS); + BOOST_CHECK(-R1L == (~R1L)+1); + BOOST_CHECK(-R1S == (~R1S)+1); + for (unsigned int i = 0; i < 256; ++i) + BOOST_CHECK(-(OneL<(TmpArray,TmpArray+32)) == (_A_##L _OP_ _B_##L)); \ + for (unsigned int i = 0; i < 20; ++i) { TmpArray[i] = _A_##Array[i] _OP_ _B_##Array[i]; } \ + BOOST_CHECK(uint160(std::vector(TmpArray,TmpArray+20)) == (_A_##S _OP_ _B_##S)); + +#define CHECKASSIGNMENTOPERATOR(_A_,_B_,_OP_) \ + TmpL = _A_##L; TmpL _OP_##= _B_##L; BOOST_CHECK(TmpL == (_A_##L _OP_ _B_##L)); \ + TmpS = _A_##S; TmpS _OP_##= _B_##S; BOOST_CHECK(TmpS == (_A_##S _OP_ _B_##S)); + +BOOST_AUTO_TEST_CASE( bitwiseOperators ) +{ + unsigned char TmpArray[32]; + + CHECKBITWISEOPERATOR(R1,R2,|) + CHECKBITWISEOPERATOR(R1,R2,^) + CHECKBITWISEOPERATOR(R1,R2,&) + CHECKBITWISEOPERATOR(R1,Zero,|) + CHECKBITWISEOPERATOR(R1,Zero,^) + CHECKBITWISEOPERATOR(R1,Zero,&) + CHECKBITWISEOPERATOR(R1,Max,|) + CHECKBITWISEOPERATOR(R1,Max,^) + CHECKBITWISEOPERATOR(R1,Max,&) + CHECKBITWISEOPERATOR(Zero,R1,|) + CHECKBITWISEOPERATOR(Zero,R1,^) + CHECKBITWISEOPERATOR(Zero,R1,&) + CHECKBITWISEOPERATOR(Max,R1,|) + CHECKBITWISEOPERATOR(Max,R1,^) + CHECKBITWISEOPERATOR(Max,R1,&) + + uint256 TmpL; + uint160 TmpS; + CHECKASSIGNMENTOPERATOR(R1,R2,|) + CHECKASSIGNMENTOPERATOR(R1,R2,^) + CHECKASSIGNMENTOPERATOR(R1,R2,&) + CHECKASSIGNMENTOPERATOR(R1,Zero,|) + CHECKASSIGNMENTOPERATOR(R1,Zero,^) + CHECKASSIGNMENTOPERATOR(R1,Zero,&) + CHECKASSIGNMENTOPERATOR(R1,Max,|) + CHECKASSIGNMENTOPERATOR(R1,Max,^) + CHECKASSIGNMENTOPERATOR(R1,Max,&) + CHECKASSIGNMENTOPERATOR(Zero,R1,|) + CHECKASSIGNMENTOPERATOR(Zero,R1,^) + CHECKASSIGNMENTOPERATOR(Zero,R1,&) + CHECKASSIGNMENTOPERATOR(Max,R1,|) + CHECKASSIGNMENTOPERATOR(Max,R1,^) + CHECKASSIGNMENTOPERATOR(Max,R1,&) + + uint64_t Tmp64 = 0xe1db685c9a0b47a2ULL; + TmpL = R1L; TmpL |= Tmp64; BOOST_CHECK(TmpL == (R1L | uint256(Tmp64))); + TmpS = R1S; TmpS |= Tmp64; BOOST_CHECK(TmpS == (R1S | uint160(Tmp64))); + TmpL = R1L; TmpL |= 0; BOOST_CHECK(TmpL == R1L); + TmpS = R1S; TmpS |= 0; BOOST_CHECK(TmpS == R1S); + TmpL ^= 0; BOOST_CHECK(TmpL == R1L); + TmpS ^= 0; BOOST_CHECK(TmpS == R1S); + TmpL ^= Tmp64; BOOST_CHECK(TmpL == (R1L ^ uint256(Tmp64))); + TmpS ^= Tmp64; BOOST_CHECK(TmpS == (R1S ^ uint160(Tmp64))); +} + +BOOST_AUTO_TEST_CASE( comparison ) // <= >= < > +{ + uint256 TmpL; + for (unsigned int i = 0; i < 256; ++i) { + TmpL= OneL<< i; + BOOST_CHECK( TmpL >= ZeroL && TmpL > ZeroL && ZeroL < TmpL && ZeroL <= TmpL); + BOOST_CHECK( TmpL >= 0 && TmpL > 0 && 0 < TmpL && 0 <= TmpL); + TmpL |= R1L; + BOOST_CHECK( TmpL >= R1L ); BOOST_CHECK( (TmpL == R1L) != (TmpL > R1L)); BOOST_CHECK( (TmpL == R1L) || !( TmpL <= R1L)); + BOOST_CHECK( R1L <= TmpL ); BOOST_CHECK( (R1L == TmpL) != (R1L < TmpL)); BOOST_CHECK( (TmpL == R1L) || !( R1L >= TmpL)); + BOOST_CHECK(! (TmpL < R1L)); BOOST_CHECK(! (R1L > TmpL)); + } + uint160 TmpS; + for (unsigned int i = 0; i < 160; ++i) { + TmpS= OneS<< i; + BOOST_CHECK( TmpS >= ZeroS && TmpS > ZeroS && ZeroS < TmpS && ZeroS <= TmpS); + BOOST_CHECK( TmpS >= 0 && TmpS > 0 && 0 < TmpS && 0 <= TmpS); + TmpS |= R1S; + BOOST_CHECK( TmpS >= R1S ); BOOST_CHECK( (TmpS == R1S) != (TmpS > R1S)); BOOST_CHECK( (TmpS == R1S) || !( TmpS <= R1S)); + BOOST_CHECK( R1S <= TmpS ); BOOST_CHECK( (R1S == TmpS) != (R1S < TmpS)); BOOST_CHECK( (TmpS == R1S) || !( R1S >= TmpS)); + BOOST_CHECK(! (TmpS < R1S)); BOOST_CHECK(! (R1S > TmpS)); + } +} + +BOOST_AUTO_TEST_CASE( plusMinus ) +{ + uint256 TmpL = 0; + BOOST_CHECK(R1L+R2L == uint256(R1LplusR2L)); + TmpL += R1L; + BOOST_CHECK(TmpL == R1L); + TmpL += R2L; + BOOST_CHECK(TmpL == R1L + R2L); + BOOST_CHECK(OneL+MaxL == ZeroL); + BOOST_CHECK(MaxL+OneL == ZeroL); + for (unsigned int i = 1; i < 256; ++i) { + BOOST_CHECK( (MaxL >> i) + OneL == (HalfL >> (i-1)) ); + BOOST_CHECK( OneL + (MaxL >> i) == (HalfL >> (i-1)) ); + TmpL = (MaxL>>i); TmpL += OneL; + BOOST_CHECK( TmpL == (HalfL >> (i-1)) ); + TmpL = (MaxL>>i); TmpL += 1; + BOOST_CHECK( TmpL == (HalfL >> (i-1)) ); + TmpL = (MaxL>>i); + BOOST_CHECK( TmpL++ == (MaxL>>i) ); + BOOST_CHECK( TmpL == (HalfL >> (i-1))); + } + BOOST_CHECK(uint256(0xbedc77e27940a7ULL) + 0xee8d836fce66fbULL == uint256(0xbedc77e27940a7ULL + 0xee8d836fce66fbULL)); + TmpL = uint256(0xbedc77e27940a7ULL); TmpL += 0xee8d836fce66fbULL; + BOOST_CHECK(TmpL == uint256(0xbedc77e27940a7ULL+0xee8d836fce66fbULL)); + TmpL -= 0xee8d836fce66fbULL; BOOST_CHECK(TmpL == 0xbedc77e27940a7ULL); + TmpL = R1L; + BOOST_CHECK(++TmpL == R1L+1); + + BOOST_CHECK(R1L -(-R2L) == R1L+R2L); + BOOST_CHECK(R1L -(-OneL) == R1L+OneL); + BOOST_CHECK(R1L - OneL == R1L+(-OneL)); + for (unsigned int i = 1; i < 256; ++i) { + BOOST_CHECK((MaxL>>i) - (-OneL) == (HalfL >> (i-1))); + BOOST_CHECK((HalfL >> (i-1)) - OneL == (MaxL>>i)); + TmpL = (HalfL >> (i-1)); + BOOST_CHECK(TmpL-- == (HalfL >> (i-1))); + BOOST_CHECK(TmpL == (MaxL >> i)); + TmpL = (HalfL >> (i-1)); + BOOST_CHECK(--TmpL == (MaxL >> i)); + } + TmpL = R1L; + BOOST_CHECK(--TmpL == R1L-1); + + // 160-bit; copy-pasted + uint160 TmpS = 0; + BOOST_CHECK(R1S+R2S == uint160(R1LplusR2L)); + TmpS += R1S; + BOOST_CHECK(TmpS == R1S); + TmpS += R2S; + BOOST_CHECK(TmpS == R1S + R2S); + BOOST_CHECK(OneS+MaxS == ZeroS); + BOOST_CHECK(MaxS+OneS == ZeroS); + for (unsigned int i = 1; i < 160; ++i) { + BOOST_CHECK( (MaxS >> i) + OneS == (HalfS >> (i-1)) ); + BOOST_CHECK( OneS + (MaxS >> i) == (HalfS >> (i-1)) ); + TmpS = (MaxS>>i); TmpS += OneS; + BOOST_CHECK( TmpS == (HalfS >> (i-1)) ); + TmpS = (MaxS>>i); TmpS += 1; + BOOST_CHECK( TmpS == (HalfS >> (i-1)) ); + TmpS = (MaxS>>i); + BOOST_CHECK( TmpS++ == (MaxS>>i) ); + BOOST_CHECK( TmpS == (HalfS >> (i-1))); + } + BOOST_CHECK(uint160(0xbedc77e27940a7ULL) + 0xee8d836fce66fbULL == uint160(0xbedc77e27940a7ULL + 0xee8d836fce66fbULL)); + TmpS = uint160(0xbedc77e27940a7ULL); TmpS += 0xee8d836fce66fbULL; + BOOST_CHECK(TmpS == uint160(0xbedc77e27940a7ULL+0xee8d836fce66fbULL)); + TmpS -= 0xee8d836fce66fbULL; BOOST_CHECK(TmpS == 0xbedc77e27940a7ULL); + TmpS = R1S; + BOOST_CHECK(++TmpS == R1S+1); + + BOOST_CHECK(R1S -(-R2S) == R1S+R2S); + BOOST_CHECK(R1S -(-OneS) == R1S+OneS); + BOOST_CHECK(R1S - OneS == R1S+(-OneS)); + for (unsigned int i = 1; i < 160; ++i) { + BOOST_CHECK((MaxS>>i) - (-OneS) == (HalfS >> (i-1))); + BOOST_CHECK((HalfS >> (i-1)) - OneS == (MaxS>>i)); + TmpS = (HalfS >> (i-1)); + BOOST_CHECK(TmpS-- == (HalfS >> (i-1))); + BOOST_CHECK(TmpS == (MaxS >> i)); + TmpS = (HalfS >> (i-1)); + BOOST_CHECK(--TmpS == (MaxS >> i)); + } + TmpS = R1S; + BOOST_CHECK(--TmpS == R1S-1); + +} + +bool almostEqual(double d1, double d2) +{ + return fabs(d1-d2) <= 4*fabs(d1)*std::numeric_limits::epsilon(); +} + +BOOST_AUTO_TEST_CASE( methods ) // GetHex SetHex begin() end() size() GetLow64 GetSerializeSize, Serialize, Unserialize +{ + BOOST_CHECK(R1L.GetHex() == R1L.ToString()); + BOOST_CHECK(R2L.GetHex() == R2L.ToString()); + BOOST_CHECK(OneL.GetHex() == OneL.ToString()); + BOOST_CHECK(MaxL.GetHex() == MaxL.ToString()); + uint256 TmpL(R1L); + BOOST_CHECK(TmpL == R1L); + TmpL.SetHex(R2L.ToString()); BOOST_CHECK(TmpL == R2L); + TmpL.SetHex(ZeroL.ToString()); BOOST_CHECK(TmpL == 0); + TmpL.SetHex(HalfL.ToString()); BOOST_CHECK(TmpL == HalfL); + + TmpL.SetHex(R1L.ToString()); + BOOST_CHECK(memcmp(R1L.begin(), R1Array, 32)==0); + BOOST_CHECK(memcmp(TmpL.begin(), R1Array, 32)==0); + BOOST_CHECK(memcmp(R2L.begin(), R2Array, 32)==0); + BOOST_CHECK(memcmp(ZeroL.begin(), ZeroArray, 32)==0); + BOOST_CHECK(memcmp(OneL.begin(), OneArray, 32)==0); + BOOST_CHECK(R1L.size() == 32); + BOOST_CHECK(R2L.size() == 32); + BOOST_CHECK(ZeroL.size() == 32); + BOOST_CHECK(MaxL.size() == 32); + BOOST_CHECK(R1L.begin() + 32 == R1L.end()); + BOOST_CHECK(R2L.begin() + 32 == R2L.end()); + BOOST_CHECK(OneL.begin() + 32 == OneL.end()); + BOOST_CHECK(MaxL.begin() + 32 == MaxL.end()); + BOOST_CHECK(TmpL.begin() + 32 == TmpL.end()); + BOOST_CHECK(R1L.GetLow64() == R1LLow64); + BOOST_CHECK(HalfL.GetLow64() ==0x0000000000000000ULL); + BOOST_CHECK(OneL.GetLow64() ==0x0000000000000001ULL); + BOOST_CHECK(R1L.GetSerializeSize(0,PROTOCOL_VERSION) == 32); + BOOST_CHECK(ZeroL.GetSerializeSize(0,PROTOCOL_VERSION) == 32); + + std::stringstream ss; + R1L.Serialize(ss,0,PROTOCOL_VERSION); + BOOST_CHECK(ss.str() == std::string(R1Array,R1Array+32)); + TmpL.Unserialize(ss,0,PROTOCOL_VERSION); + BOOST_CHECK(R1L == TmpL); + ss.str(""); + ZeroL.Serialize(ss,0,PROTOCOL_VERSION); + BOOST_CHECK(ss.str() == std::string(ZeroArray,ZeroArray+32)); + TmpL.Unserialize(ss,0,PROTOCOL_VERSION); + BOOST_CHECK(ZeroL == TmpL); + ss.str(""); + MaxL.Serialize(ss,0,PROTOCOL_VERSION); + BOOST_CHECK(ss.str() == std::string(MaxArray,MaxArray+32)); + TmpL.Unserialize(ss,0,PROTOCOL_VERSION); + BOOST_CHECK(MaxL == TmpL); + ss.str(""); + + BOOST_CHECK(R1S.GetHex() == R1S.ToString()); + BOOST_CHECK(R2S.GetHex() == R2S.ToString()); + BOOST_CHECK(OneS.GetHex() == OneS.ToString()); + BOOST_CHECK(MaxS.GetHex() == MaxS.ToString()); + uint160 TmpS(R1S); + BOOST_CHECK(TmpS == R1S); + TmpS.SetHex(R2S.ToString()); BOOST_CHECK(TmpS == R2S); + TmpS.SetHex(ZeroS.ToString()); BOOST_CHECK(TmpS == 0); + TmpS.SetHex(HalfS.ToString()); BOOST_CHECK(TmpS == HalfS); + + TmpS.SetHex(R1S.ToString()); + BOOST_CHECK(memcmp(R1S.begin(), R1Array, 20)==0); + BOOST_CHECK(memcmp(TmpS.begin(), R1Array, 20)==0); + BOOST_CHECK(memcmp(R2S.begin(), R2Array, 20)==0); + BOOST_CHECK(memcmp(ZeroS.begin(), ZeroArray, 20)==0); + BOOST_CHECK(memcmp(OneS.begin(), OneArray, 20)==0); + BOOST_CHECK(R1S.size() == 20); + BOOST_CHECK(R2S.size() == 20); + BOOST_CHECK(ZeroS.size() == 20); + BOOST_CHECK(MaxS.size() == 20); + BOOST_CHECK(R1S.begin() + 20 == R1S.end()); + BOOST_CHECK(R2S.begin() + 20 == R2S.end()); + BOOST_CHECK(OneS.begin() + 20 == OneS.end()); + BOOST_CHECK(MaxS.begin() + 20 == MaxS.end()); + BOOST_CHECK(TmpS.begin() + 20 == TmpS.end()); + BOOST_CHECK(R1S.GetLow64() == R1LLow64); + BOOST_CHECK(HalfS.GetLow64() ==0x0000000000000000ULL); + BOOST_CHECK(OneS.GetLow64() ==0x0000000000000001ULL); + BOOST_CHECK(R1S.GetSerializeSize(0,PROTOCOL_VERSION) == 20); + BOOST_CHECK(ZeroS.GetSerializeSize(0,PROTOCOL_VERSION) == 20); + + R1S.Serialize(ss,0,PROTOCOL_VERSION); + BOOST_CHECK(ss.str() == std::string(R1Array,R1Array+20)); + TmpS.Unserialize(ss,0,PROTOCOL_VERSION); + BOOST_CHECK(R1S == TmpS); + ss.str(""); + ZeroS.Serialize(ss,0,PROTOCOL_VERSION); + BOOST_CHECK(ss.str() == std::string(ZeroArray,ZeroArray+20)); + TmpS.Unserialize(ss,0,PROTOCOL_VERSION); + BOOST_CHECK(ZeroS == TmpS); + ss.str(""); + MaxS.Serialize(ss,0,PROTOCOL_VERSION); + BOOST_CHECK(ss.str() == std::string(MaxArray,MaxArray+20)); + TmpS.Unserialize(ss,0,PROTOCOL_VERSION); + BOOST_CHECK(MaxS == TmpS); + ss.str(""); + + for (unsigned int i = 0; i < 255; ++i) + { + BOOST_CHECK((OneL << i).getdouble() == ldexp(1.0,i)); + if (i < 160) BOOST_CHECK((OneS << i).getdouble() == ldexp(1.0,i)); + } + BOOST_CHECK(ZeroL.getdouble() == 0.0); + BOOST_CHECK(ZeroS.getdouble() == 0.0); + for (int i = 256; i > 53; --i) + BOOST_CHECK(almostEqual((R1L>>(256-i)).getdouble(), ldexp(R1Ldouble,i))); + for (int i = 160; i > 53; --i) + BOOST_CHECK(almostEqual((R1S>>(160-i)).getdouble(), ldexp(R1Sdouble,i))); + uint64_t R1L64part = (R1L>>192).GetLow64(); + uint64_t R1S64part = (R1S>>96).GetLow64(); + for (int i = 53; i > 0; --i) // doubles can store all integers in {0,...,2^54-1} exactly + { + BOOST_CHECK((R1L>>(256-i)).getdouble() == (double)(R1L64part >> (64-i))); + BOOST_CHECK((R1S>>(160-i)).getdouble() == (double)(R1S64part >> (64-i))); + } +} + +BOOST_AUTO_TEST_CASE( getmaxcoverage ) // some more tests just to get 100% coverage +{ + // ~R1L give a base_uint<256> + BOOST_CHECK((~~R1L >> 10) == (R1L >> 10)); BOOST_CHECK((~~R1S >> 10) == (R1S >> 10)); + BOOST_CHECK((~~R1L << 10) == (R1L << 10)); BOOST_CHECK((~~R1S << 10) == (R1S << 10)); + BOOST_CHECK(!(~~R1L < R1L)); BOOST_CHECK(!(~~R1S < R1S)); + BOOST_CHECK(~~R1L <= R1L); BOOST_CHECK(~~R1S <= R1S); + BOOST_CHECK(!(~~R1L > R1L)); BOOST_CHECK(!(~~R1S > R1S)); + BOOST_CHECK(~~R1L >= R1L); BOOST_CHECK(~~R1S >= R1S); + BOOST_CHECK(!(R1L < ~~R1L)); BOOST_CHECK(!(R1S < ~~R1S)); + BOOST_CHECK(R1L <= ~~R1L); BOOST_CHECK(R1S <= ~~R1S); + BOOST_CHECK(!(R1L > ~~R1L)); BOOST_CHECK(!(R1S > ~~R1S)); + BOOST_CHECK(R1L >= ~~R1L); BOOST_CHECK(R1S >= ~~R1S); + + BOOST_CHECK(~~R1L + R2L == R1L + ~~R2L); + BOOST_CHECK(~~R1S + R2S == R1S + ~~R2S); + BOOST_CHECK(~~R1L - R2L == R1L - ~~R2L); + BOOST_CHECK(~~R1S - R2S == R1S - ~~R2S); + BOOST_CHECK(~R1L != R1L); BOOST_CHECK(R1L != ~R1L); + BOOST_CHECK(~R1S != R1S); BOOST_CHECK(R1S != ~R1S); + unsigned char TmpArray[32]; + CHECKBITWISEOPERATOR(~R1,R2,|) + CHECKBITWISEOPERATOR(~R1,R2,^) + CHECKBITWISEOPERATOR(~R1,R2,&) + CHECKBITWISEOPERATOR(R1,~R2,|) + CHECKBITWISEOPERATOR(R1,~R2,^) + CHECKBITWISEOPERATOR(R1,~R2,&) } BOOST_AUTO_TEST_SUITE_END() + diff --git a/src/test/util_tests.cpp b/src/test/util_tests.cpp index fd936517..5155e0c3 100644 --- a/src/test/util_tests.cpp +++ b/src/test/util_tests.cpp @@ -1,11 +1,16 @@ -#include -#include -#include +// Copyright (c) 2011-2014 The Bitcoin Core developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include "main.h" -#include "wallet.h" #include "util.h" +#include "sync.h" + +#include +#include + +#include + using namespace std; BOOST_AUTO_TEST_SUITE(util_tests) @@ -103,13 +108,11 @@ BOOST_AUTO_TEST_CASE(util_HexStr) BOOST_AUTO_TEST_CASE(util_DateTimeStrFormat) { -/*These are platform-dependant and thus removed to avoid useless test failures BOOST_CHECK_EQUAL(DateTimeStrFormat("%Y-%m-%d %H:%M:%S", 0), "1970-01-01 00:00:00"); BOOST_CHECK_EQUAL(DateTimeStrFormat("%Y-%m-%d %H:%M:%S", 0x7FFFFFFF), "2038-01-19 03:14:07"); - // Formats used within Bitcoin BOOST_CHECK_EQUAL(DateTimeStrFormat("%Y-%m-%d %H:%M:%S", 1317425777), "2011-09-30 23:36:17"); BOOST_CHECK_EQUAL(DateTimeStrFormat("%Y-%m-%d %H:%M", 1317425777), "2011-09-30 23:36"); -*/ + BOOST_CHECK_EQUAL(DateTimeStrFormat("%a, %d %b %Y %H:%M:%S +0000", 1317425777), "Fri, 30 Sep 2011 23:36:17 +0000"); } BOOST_AUTO_TEST_CASE(util_ParseParameters) @@ -200,7 +203,7 @@ BOOST_AUTO_TEST_CASE(util_FormatMoney) BOOST_AUTO_TEST_CASE(util_ParseMoney) { - int64 ret = 0; + int64_t ret = 0; BOOST_CHECK(ParseMoney("0.0", ret)); BOOST_CHECK_EQUAL(ret, 0); @@ -291,4 +294,50 @@ BOOST_AUTO_TEST_CASE(util_seed_insecure_rand) } } +BOOST_AUTO_TEST_CASE(util_TimingResistantEqual) +{ + BOOST_CHECK(TimingResistantEqual(std::string(""), std::string(""))); + BOOST_CHECK(!TimingResistantEqual(std::string("abc"), std::string(""))); + BOOST_CHECK(!TimingResistantEqual(std::string(""), std::string("abc"))); + BOOST_CHECK(!TimingResistantEqual(std::string("a"), std::string("aa"))); + BOOST_CHECK(!TimingResistantEqual(std::string("aa"), std::string("a"))); + BOOST_CHECK(TimingResistantEqual(std::string("abc"), std::string("abc"))); + BOOST_CHECK(!TimingResistantEqual(std::string("abc"), std::string("aba"))); +} + +/* Test strprintf formatting directives. + * Put a string before and after to ensure sanity of element sizes on stack. */ +#define B "check_prefix" +#define E "check_postfix" +BOOST_AUTO_TEST_CASE(strprintf_numbers) +{ + int64_t s64t = -9223372036854775807LL; /* signed 64 bit test value */ + uint64_t u64t = 18446744073709551615ULL; /* unsigned 64 bit test value */ + BOOST_CHECK(strprintf("%s %d %s", B, s64t, E) == B" -9223372036854775807 "E); + BOOST_CHECK(strprintf("%s %u %s", B, u64t, E) == B" 18446744073709551615 "E); + BOOST_CHECK(strprintf("%s %x %s", B, u64t, E) == B" ffffffffffffffff "E); + + size_t st = 12345678; /* unsigned size_t test value */ + ssize_t sst = -12345678; /* signed size_t test value */ + BOOST_CHECK(strprintf("%s %d %s", B, sst, E) == B" -12345678 "E); + BOOST_CHECK(strprintf("%s %u %s", B, st, E) == B" 12345678 "E); + BOOST_CHECK(strprintf("%s %x %s", B, st, E) == B" bc614e "E); + + ptrdiff_t pt = 87654321; /* positive ptrdiff_t test value */ + ptrdiff_t spt = -87654321; /* negative ptrdiff_t test value */ + BOOST_CHECK(strprintf("%s %d %s", B, spt, E) == B" -87654321 "E); + BOOST_CHECK(strprintf("%s %u %s", B, pt, E) == B" 87654321 "E); + BOOST_CHECK(strprintf("%s %x %s", B, pt, E) == B" 5397fb1 "E); +} +#undef B +#undef E + +/* Check for mingw/wine issue #3494 + * Remove this test before time.ctime(0xffffffff) == 'Sun Feb 7 07:28:15 2106' + */ +BOOST_AUTO_TEST_CASE(gettime) +{ + BOOST_CHECK((GetTime() & ~0xFFFFFFFFLL) == 0); +} + BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/wallet_tests.cpp b/src/test/wallet_tests.cpp index a14f6b2b..19933588 100644 --- a/src/test/wallet_tests.cpp +++ b/src/test/wallet_tests.cpp @@ -1,8 +1,17 @@ -#include +// Copyright (c) 2012-2014 The Bitcoin Core developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include "main.h" #include "wallet.h" +#include +#include +#include +#include + +#include +#include + // how many times to run all the tests to have a chance to catch errors that only show up with particular random shuffles #define RUN_TESTS 100 @@ -19,7 +28,7 @@ BOOST_AUTO_TEST_SUITE(wallet_tests) static CWallet wallet; static vector vCoins; -static void add_coin(int64 nValue, int nAge = 6*24, bool fIsFromMe = false, int nInput=0) +static void add_coin(int64_t nValue, int nAge = 6*24, bool fIsFromMe = false, int nInput=0) { static int nextLockTime = 0; CTransaction tx; @@ -55,7 +64,9 @@ static bool equal_sets(CoinSet a, CoinSet b) BOOST_AUTO_TEST_CASE(coin_selection_tests) { CoinSet setCoinsRet, setCoinsRet2; - int64 nValueRet; + int64_t nValueRet; + + LOCK(wallet.cs_wallet); // test multiple times to allow for differences in the shuffle order for (int i = 0; i < RUN_TESTS; i++) @@ -289,6 +300,7 @@ BOOST_AUTO_TEST_CASE(coin_selection_tests) BOOST_CHECK_NE(fails, RANDOM_REPEATS); } } + empty_wallet(); } BOOST_AUTO_TEST_SUITE_END() diff --git a/src/threadsafety.h b/src/threadsafety.h index 3d3d526f..176060ac 100644 --- a/src/threadsafety.h +++ b/src/threadsafety.h @@ -2,6 +2,7 @@ // Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef BITCOIN_THREADSAFETY_H #define BITCOIN_THREADSAFETY_H diff --git a/src/tinyformat.h b/src/tinyformat.h new file mode 100644 index 00000000..b6113029 --- /dev/null +++ b/src/tinyformat.h @@ -0,0 +1,1010 @@ +// tinyformat.h +// Copyright (C) 2011, Chris Foster [chris42f (at) gmail (d0t) com] +// +// Boost Software License - Version 1.0 +// +// Permission is hereby granted, free of charge, to any person or organization +// obtaining a copy of the software and accompanying documentation covered by +// this license (the "Software") to use, reproduce, display, distribute, +// execute, and transmit the Software, and to prepare derivative works of the +// Software, and to permit third-parties to whom the Software is furnished to +// do so, all subject to the following: +// +// The copyright notices in the Software and this entire statement, including +// the above license grant, this restriction and the following disclaimer, +// must be included in all copies of the Software, in whole or in part, and +// all derivative works of the Software, unless such copies or derivative +// works are solely in the form of machine-executable object code generated by +// a source language processor. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. + +//------------------------------------------------------------------------------ +// Tinyformat: A minimal type safe printf replacement +// +// tinyformat.h is a type safe printf replacement library in a single C++ +// header file. Design goals include: +// +// * Type safety and extensibility for user defined types. +// * C99 printf() compatibility, to the extent possible using std::ostream +// * Simplicity and minimalism. A single header file to include and distribute +// with your projects. +// * Augment rather than replace the standard stream formatting mechanism +// * C++98 support, with optional C++11 niceties +// +// +// Main interface example usage +// ---------------------------- +// +// To print a date to std::cout: +// +// std::string weekday = "Wednesday"; +// const char* month = "July"; +// size_t day = 27; +// long hour = 14; +// int min = 44; +// +// tfm::printf("%s, %s %d, %.2d:%.2d\n", weekday, month, day, hour, min); +// +// The strange types here emphasize the type safety of the interface; it is +// possible to print a std::string using the "%s" conversion, and a +// size_t using the "%d" conversion. A similar result could be achieved +// using either of the tfm::format() functions. One prints on a user provided +// stream: +// +// tfm::format(std::cerr, "%s, %s %d, %.2d:%.2d\n", +// weekday, month, day, hour, min); +// +// The other returns a std::string: +// +// std::string date = tfm::format("%s, %s %d, %.2d:%.2d\n", +// weekday, month, day, hour, min); +// std::cout << date; +// +// These are the three primary interface functions. +// +// +// User defined format functions +// ----------------------------- +// +// Simulating variadic templates in C++98 is pretty painful since it requires +// writing out the same function for each desired number of arguments. To make +// this bearable tinyformat comes with a set of macros which are used +// internally to generate the API, but which may also be used in user code. +// +// The three macros TINYFORMAT_ARGTYPES(n), TINYFORMAT_VARARGS(n) and +// TINYFORMAT_PASSARGS(n) will generate a list of n argument types, +// type/name pairs and argument names respectively when called with an integer +// n between 1 and 16. We can use these to define a macro which generates the +// desired user defined function with n arguments. To generate all 16 user +// defined function bodies, use the macro TINYFORMAT_FOREACH_ARGNUM. For an +// example, see the implementation of printf() at the end of the source file. +// +// +// Additional API information +// -------------------------- +// +// Error handling: Define TINYFORMAT_ERROR to customize the error handling for +// format strings which are unsupported or have the wrong number of format +// specifiers (calls assert() by default). +// +// User defined types: Uses operator<< for user defined types by default. +// Overload formatValue() for more control. + + +#ifndef TINYFORMAT_H_INCLUDED +#define TINYFORMAT_H_INCLUDED + +namespace tinyformat {} +//------------------------------------------------------------------------------ +// Config section. Customize to your liking! + +// Namespace alias to encourage brevity +namespace tfm = tinyformat; + +// Error handling; calls assert() by default. +#define TINYFORMAT_ERROR(reasonString) throw std::runtime_error(reasonString) + +// Define for C++11 variadic templates which make the code shorter & more +// general. If you don't define this, C++11 support is autodetected below. +// #define TINYFORMAT_USE_VARIADIC_TEMPLATES + + +//------------------------------------------------------------------------------ +// Implementation details. +#include +#include +#include + +#ifndef TINYFORMAT_ERROR +# define TINYFORMAT_ERROR(reason) assert(0 && reason) +#endif + +#if !defined(TINYFORMAT_USE_VARIADIC_TEMPLATES) && !defined(TINYFORMAT_NO_VARIADIC_TEMPLATES) +# ifdef __GXX_EXPERIMENTAL_CXX0X__ +# define TINYFORMAT_USE_VARIADIC_TEMPLATES +# endif +#endif + +#ifdef __GNUC__ +# define TINYFORMAT_NOINLINE __attribute__((noinline)) +#elif defined(_MSC_VER) +# define TINYFORMAT_NOINLINE __declspec(noinline) +#else +# define TINYFORMAT_NOINLINE +#endif + +#if defined(__GLIBCXX__) && __GLIBCXX__ < 20080201 +// std::showpos is broken on old libstdc++ as provided with OSX. See +// http://gcc.gnu.org/ml/libstdc++/2007-11/msg00075.html +# define TINYFORMAT_OLD_LIBSTDCPLUSPLUS_WORKAROUND +#endif + +namespace tinyformat { + +//------------------------------------------------------------------------------ +namespace detail { + +// Test whether type T1 is convertible to type T2 +template +struct is_convertible +{ + private: + // two types of different size + struct fail { char dummy[2]; }; + struct succeed { char dummy; }; + // Try to convert a T1 to a T2 by plugging into tryConvert + static fail tryConvert(...); + static succeed tryConvert(const T2&); + static const T1& makeT1(); + public: +# ifdef _MSC_VER + // Disable spurious loss of precision warnings in tryConvert(makeT1()) +# pragma warning(push) +# pragma warning(disable:4244) +# pragma warning(disable:4267) +# endif + // Standard trick: the (...) version of tryConvert will be chosen from + // the overload set only if the version taking a T2 doesn't match. + // Then we compare the sizes of the return types to check which + // function matched. Very neat, in a disgusting kind of way :) + static const bool value = + sizeof(tryConvert(makeT1())) == sizeof(succeed); +# ifdef _MSC_VER +# pragma warning(pop) +# endif +}; + + +// Detect when a type is not a wchar_t string +template struct is_wchar { typedef int tinyformat_wchar_is_not_supported; }; +template<> struct is_wchar {}; +template<> struct is_wchar {}; +template struct is_wchar {}; +template struct is_wchar {}; + + +// Format the value by casting to type fmtT. This default implementation +// should never be called. +template::value> +struct formatValueAsType +{ + static void invoke(std::ostream& /*out*/, const T& /*value*/) { assert(0); } +}; +// Specialized version for types that can actually be converted to fmtT, as +// indicated by the "convertible" template parameter. +template +struct formatValueAsType +{ + static void invoke(std::ostream& out, const T& value) + { out << static_cast(value); } +}; + +#ifdef TINYFORMAT_OLD_LIBSTDCPLUSPLUS_WORKAROUND +template::value> +struct formatZeroIntegerWorkaround +{ + static bool invoke(std::ostream& /**/, const T& /**/) { return false; } +}; +template +struct formatZeroIntegerWorkaround +{ + static bool invoke(std::ostream& out, const T& value) + { + if (static_cast(value) == 0 && out.flags() & std::ios::showpos) + { + out << "+0"; + return true; + } + return false; + } +}; +#endif // TINYFORMAT_OLD_LIBSTDCPLUSPLUS_WORKAROUND + +// Convert an arbitrary type to integer. The version with convertible=false +// throws an error. +template::value> +struct convertToInt +{ + static int invoke(const T& /*value*/) + { + TINYFORMAT_ERROR("tinyformat: Cannot convert from argument type to " + "integer for use as variable width or precision"); + return 0; + } +}; +// Specialization for convertToInt when conversion is possible +template +struct convertToInt +{ + static int invoke(const T& value) { return static_cast(value); } +}; + +} // namespace detail + + +//------------------------------------------------------------------------------ +// Variable formatting functions. May be overridden for user-defined types if +// desired. + + +// Format a value into a stream. Called from format() for all types by default. +// +// Users may override this for their own types. When this function is called, +// the stream flags will have been modified according to the format string. +// The format specification is provided in the range [fmtBegin, fmtEnd). +// +// By default, formatValue() uses the usual stream insertion operator +// operator<< to format the type T, with special cases for the %c and %p +// conversions. +template +inline void formatValue(std::ostream& out, const char* /*fmtBegin*/, + const char* fmtEnd, const T& value) +{ +#ifndef TINYFORMAT_ALLOW_WCHAR_STRINGS + // Since we don't support printing of wchar_t using "%ls", make it fail at + // compile time in preference to printing as a void* at runtime. + typedef typename detail::is_wchar::tinyformat_wchar_is_not_supported DummyType; + (void) DummyType(); // avoid unused type warning with gcc-4.8 +#endif + // The mess here is to support the %c and %p conversions: if these + // conversions are active we try to convert the type to a char or const + // void* respectively and format that instead of the value itself. For the + // %p conversion it's important to avoid dereferencing the pointer, which + // could otherwise lead to a crash when printing a dangling (const char*). + const bool canConvertToChar = detail::is_convertible::value; + const bool canConvertToVoidPtr = detail::is_convertible::value; + if(canConvertToChar && *(fmtEnd-1) == 'c') + detail::formatValueAsType::invoke(out, value); + else if(canConvertToVoidPtr && *(fmtEnd-1) == 'p') + detail::formatValueAsType::invoke(out, value); +#ifdef TINYFORMAT_OLD_LIBSTDCPLUSPLUS_WORKAROUND + else if(detail::formatZeroIntegerWorkaround::invoke(out, value)) /**/; +#endif + else + out << value; +} + + +// Overloaded version for char types to support printing as an integer +#define TINYFORMAT_DEFINE_FORMATVALUE_CHAR(charType) \ +inline void formatValue(std::ostream& out, const char* /*fmtBegin*/, \ + const char* fmtEnd, charType value) \ +{ \ + switch(*(fmtEnd-1)) \ + { \ + case 'u': case 'd': case 'i': case 'o': case 'X': case 'x': \ + out << static_cast(value); break; \ + default: \ + out << value; break; \ + } \ +} +// per 3.9.1: char, signed char and unsigned char are all distinct types +TINYFORMAT_DEFINE_FORMATVALUE_CHAR(char) +TINYFORMAT_DEFINE_FORMATVALUE_CHAR(signed char) +TINYFORMAT_DEFINE_FORMATVALUE_CHAR(unsigned char) +#undef TINYFORMAT_DEFINE_FORMATVALUE_CHAR + + +//------------------------------------------------------------------------------ +// Tools for emulating variadic templates in C++98. The basic idea here is +// stolen from the boost preprocessor metaprogramming library and cut down to +// be just general enough for what we need. + +#define TINYFORMAT_ARGTYPES(n) TINYFORMAT_ARGTYPES_ ## n +#define TINYFORMAT_VARARGS(n) TINYFORMAT_VARARGS_ ## n +#define TINYFORMAT_PASSARGS(n) TINYFORMAT_PASSARGS_ ## n +#define TINYFORMAT_PASSARGS_TAIL(n) TINYFORMAT_PASSARGS_TAIL_ ## n + +// To keep it as transparent as possible, the macros below have been generated +// using python via the excellent cog.py code generation script. This avoids +// the need for a bunch of complex (but more general) preprocessor tricks as +// used in boost.preprocessor. +// +// To rerun the code generation in place, use `cog.py -r tinyformat.h` +// (see http://nedbatchelder.com/code/cog). Alternatively you can just create +// extra versions by hand. + +/*[[[cog +maxParams = 16 + +def makeCommaSepLists(lineTemplate, elemTemplate, startInd=1): + for j in range(startInd,maxParams+1): + list = ', '.join([elemTemplate % {'i':i} for i in range(startInd,j+1)]) + cog.outl(lineTemplate % {'j':j, 'list':list}) + +makeCommaSepLists('#define TINYFORMAT_ARGTYPES_%(j)d %(list)s', + 'class T%(i)d') + +cog.outl() +makeCommaSepLists('#define TINYFORMAT_VARARGS_%(j)d %(list)s', + 'const T%(i)d& v%(i)d') + +cog.outl() +makeCommaSepLists('#define TINYFORMAT_PASSARGS_%(j)d %(list)s', 'v%(i)d') + +cog.outl() +cog.outl('#define TINYFORMAT_PASSARGS_TAIL_1') +makeCommaSepLists('#define TINYFORMAT_PASSARGS_TAIL_%(j)d , %(list)s', + 'v%(i)d', startInd = 2) + +cog.outl() +cog.outl('#define TINYFORMAT_FOREACH_ARGNUM(m) \\\n ' + + ' '.join(['m(%d)' % (j,) for j in range(1,maxParams+1)])) +]]]*/ +#define TINYFORMAT_ARGTYPES_1 class T1 +#define TINYFORMAT_ARGTYPES_2 class T1, class T2 +#define TINYFORMAT_ARGTYPES_3 class T1, class T2, class T3 +#define TINYFORMAT_ARGTYPES_4 class T1, class T2, class T3, class T4 +#define TINYFORMAT_ARGTYPES_5 class T1, class T2, class T3, class T4, class T5 +#define TINYFORMAT_ARGTYPES_6 class T1, class T2, class T3, class T4, class T5, class T6 +#define TINYFORMAT_ARGTYPES_7 class T1, class T2, class T3, class T4, class T5, class T6, class T7 +#define TINYFORMAT_ARGTYPES_8 class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8 +#define TINYFORMAT_ARGTYPES_9 class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9 +#define TINYFORMAT_ARGTYPES_10 class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10 +#define TINYFORMAT_ARGTYPES_11 class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class T11 +#define TINYFORMAT_ARGTYPES_12 class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class T11, class T12 +#define TINYFORMAT_ARGTYPES_13 class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class T11, class T12, class T13 +#define TINYFORMAT_ARGTYPES_14 class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class T11, class T12, class T13, class T14 +#define TINYFORMAT_ARGTYPES_15 class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class T11, class T12, class T13, class T14, class T15 +#define TINYFORMAT_ARGTYPES_16 class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class T11, class T12, class T13, class T14, class T15, class T16 + +#define TINYFORMAT_VARARGS_1 const T1& v1 +#define TINYFORMAT_VARARGS_2 const T1& v1, const T2& v2 +#define TINYFORMAT_VARARGS_3 const T1& v1, const T2& v2, const T3& v3 +#define TINYFORMAT_VARARGS_4 const T1& v1, const T2& v2, const T3& v3, const T4& v4 +#define TINYFORMAT_VARARGS_5 const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5 +#define TINYFORMAT_VARARGS_6 const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5, const T6& v6 +#define TINYFORMAT_VARARGS_7 const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5, const T6& v6, const T7& v7 +#define TINYFORMAT_VARARGS_8 const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5, const T6& v6, const T7& v7, const T8& v8 +#define TINYFORMAT_VARARGS_9 const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5, const T6& v6, const T7& v7, const T8& v8, const T9& v9 +#define TINYFORMAT_VARARGS_10 const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5, const T6& v6, const T7& v7, const T8& v8, const T9& v9, const T10& v10 +#define TINYFORMAT_VARARGS_11 const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5, const T6& v6, const T7& v7, const T8& v8, const T9& v9, const T10& v10, const T11& v11 +#define TINYFORMAT_VARARGS_12 const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5, const T6& v6, const T7& v7, const T8& v8, const T9& v9, const T10& v10, const T11& v11, const T12& v12 +#define TINYFORMAT_VARARGS_13 const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5, const T6& v6, const T7& v7, const T8& v8, const T9& v9, const T10& v10, const T11& v11, const T12& v12, const T13& v13 +#define TINYFORMAT_VARARGS_14 const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5, const T6& v6, const T7& v7, const T8& v8, const T9& v9, const T10& v10, const T11& v11, const T12& v12, const T13& v13, const T14& v14 +#define TINYFORMAT_VARARGS_15 const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5, const T6& v6, const T7& v7, const T8& v8, const T9& v9, const T10& v10, const T11& v11, const T12& v12, const T13& v13, const T14& v14, const T15& v15 +#define TINYFORMAT_VARARGS_16 const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5, const T6& v6, const T7& v7, const T8& v8, const T9& v9, const T10& v10, const T11& v11, const T12& v12, const T13& v13, const T14& v14, const T15& v15, const T16& v16 + +#define TINYFORMAT_PASSARGS_1 v1 +#define TINYFORMAT_PASSARGS_2 v1, v2 +#define TINYFORMAT_PASSARGS_3 v1, v2, v3 +#define TINYFORMAT_PASSARGS_4 v1, v2, v3, v4 +#define TINYFORMAT_PASSARGS_5 v1, v2, v3, v4, v5 +#define TINYFORMAT_PASSARGS_6 v1, v2, v3, v4, v5, v6 +#define TINYFORMAT_PASSARGS_7 v1, v2, v3, v4, v5, v6, v7 +#define TINYFORMAT_PASSARGS_8 v1, v2, v3, v4, v5, v6, v7, v8 +#define TINYFORMAT_PASSARGS_9 v1, v2, v3, v4, v5, v6, v7, v8, v9 +#define TINYFORMAT_PASSARGS_10 v1, v2, v3, v4, v5, v6, v7, v8, v9, v10 +#define TINYFORMAT_PASSARGS_11 v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11 +#define TINYFORMAT_PASSARGS_12 v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12 +#define TINYFORMAT_PASSARGS_13 v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13 +#define TINYFORMAT_PASSARGS_14 v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14 +#define TINYFORMAT_PASSARGS_15 v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15 +#define TINYFORMAT_PASSARGS_16 v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16 + +#define TINYFORMAT_PASSARGS_TAIL_1 +#define TINYFORMAT_PASSARGS_TAIL_2 , v2 +#define TINYFORMAT_PASSARGS_TAIL_3 , v2, v3 +#define TINYFORMAT_PASSARGS_TAIL_4 , v2, v3, v4 +#define TINYFORMAT_PASSARGS_TAIL_5 , v2, v3, v4, v5 +#define TINYFORMAT_PASSARGS_TAIL_6 , v2, v3, v4, v5, v6 +#define TINYFORMAT_PASSARGS_TAIL_7 , v2, v3, v4, v5, v6, v7 +#define TINYFORMAT_PASSARGS_TAIL_8 , v2, v3, v4, v5, v6, v7, v8 +#define TINYFORMAT_PASSARGS_TAIL_9 , v2, v3, v4, v5, v6, v7, v8, v9 +#define TINYFORMAT_PASSARGS_TAIL_10 , v2, v3, v4, v5, v6, v7, v8, v9, v10 +#define TINYFORMAT_PASSARGS_TAIL_11 , v2, v3, v4, v5, v6, v7, v8, v9, v10, v11 +#define TINYFORMAT_PASSARGS_TAIL_12 , v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12 +#define TINYFORMAT_PASSARGS_TAIL_13 , v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13 +#define TINYFORMAT_PASSARGS_TAIL_14 , v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14 +#define TINYFORMAT_PASSARGS_TAIL_15 , v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15 +#define TINYFORMAT_PASSARGS_TAIL_16 , v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16 + +#define TINYFORMAT_FOREACH_ARGNUM(m) \ + m(1) m(2) m(3) m(4) m(5) m(6) m(7) m(8) m(9) m(10) m(11) m(12) m(13) m(14) m(15) m(16) +//[[[end]]] + + + +namespace detail { + +// Class holding current position in format string and an output stream into +// which arguments are formatted. +class FormatIterator +{ + public: + // Flags for features not representable with standard stream state + enum ExtraFormatFlags + { + Flag_None = 0, + Flag_TruncateToPrecision = 1<<0, // truncate length to stream precision() + Flag_SpacePadPositive = 1<<1, // pad positive values with spaces + Flag_VariableWidth = 1<<2, // variable field width in arg list + Flag_VariablePrecision = 1<<3 // variable field precision in arg list + }; + + // out is the output stream, fmt is the full format string + FormatIterator(std::ostream& out, const char* fmt) + : m_out(out), + m_fmt(fmt), + m_extraFlags(Flag_None), + m_wantWidth(false), + m_wantPrecision(false), + m_variableWidth(0), + m_variablePrecision(0), + m_origWidth(out.width()), + m_origPrecision(out.precision()), + m_origFlags(out.flags()), + m_origFill(out.fill()) + { } + + // Print remaining part of format string. + void finish() + { + // It would be nice if we could do this from the destructor, but we + // can't if TINFORMAT_ERROR is used to throw an exception! + m_fmt = printFormatStringLiteral(m_out, m_fmt); + if(*m_fmt != '\0') + TINYFORMAT_ERROR("tinyformat: Too many conversion specifiers in format string"); + } + + ~FormatIterator() + { + // Restore stream state + m_out.width(m_origWidth); + m_out.precision(m_origPrecision); + m_out.flags(m_origFlags); + m_out.fill(m_origFill); + } + + template + void accept(const T& value); + + private: + // Parse and return an integer from the string c, as atoi() + // On return, c is set to one past the end of the integer. + static int parseIntAndAdvance(const char*& c) + { + int i = 0; + for(;*c >= '0' && *c <= '9'; ++c) + i = 10*i + (*c - '0'); + return i; + } + + // Format at most truncLen characters of a C string to the given + // stream. Return true if formatting proceeded (generic version always + // returns false) + template + static bool formatCStringTruncate(std::ostream& /*out*/, const T& /*value*/, + std::streamsize /*truncLen*/) + { + return false; + } +# define TINYFORMAT_DEFINE_FORMAT_C_STRING_TRUNCATE(type) \ + static bool formatCStringTruncate(std::ostream& out, type* value, \ + std::streamsize truncLen) \ + { \ + std::streamsize len = 0; \ + while(len < truncLen && value[len] != 0) \ + ++len; \ + out.write(value, len); \ + return true; \ + } + // Overload for const char* and char*. Could overload for signed & + // unsigned char too, but these are technically unneeded for printf + // compatibility. + TINYFORMAT_DEFINE_FORMAT_C_STRING_TRUNCATE(const char) + TINYFORMAT_DEFINE_FORMAT_C_STRING_TRUNCATE(char) +# undef TINYFORMAT_DEFINE_FORMAT_C_STRING_TRUNCATE + + // Print literal part of format string and return next format spec + // position. + // + // Skips over any occurrences of '%%', printing a literal '%' to the + // output. The position of the first % character of the next + // nontrivial format spec is returned, or the end of string. + static const char* printFormatStringLiteral(std::ostream& out, + const char* fmt) + { + const char* c = fmt; + for(; true; ++c) + { + switch(*c) + { + case '\0': + out.write(fmt, static_cast(c - fmt)); + return c; + case '%': + out.write(fmt, static_cast(c - fmt)); + if(*(c+1) != '%') + return c; + // for "%%", tack trailing % onto next literal section. + fmt = ++c; + break; + } + } + } + + static const char* streamStateFromFormat(std::ostream& out, + unsigned int& extraFlags, + const char* fmtStart, + int variableWidth, + int variablePrecision); + + // Private copy & assign: Kill gcc warnings with -Weffc++ + FormatIterator(const FormatIterator&); + FormatIterator& operator=(const FormatIterator&); + + // Stream, current format string & state + std::ostream& m_out; + const char* m_fmt; + unsigned int m_extraFlags; + // State machine info for handling of variable width & precision + bool m_wantWidth; + bool m_wantPrecision; + int m_variableWidth; + int m_variablePrecision; + // Saved stream state + std::streamsize m_origWidth; + std::streamsize m_origPrecision; + std::ios::fmtflags m_origFlags; + char m_origFill; +}; + + +// Accept a value for formatting into the internal stream. +template +TINYFORMAT_NOINLINE // < greatly reduces bloat in optimized builds +void FormatIterator::accept(const T& value) +{ + // Parse the format string + const char* fmtEnd = 0; + if(m_extraFlags == Flag_None && !m_wantWidth && !m_wantPrecision) + { + m_fmt = printFormatStringLiteral(m_out, m_fmt); + fmtEnd = streamStateFromFormat(m_out, m_extraFlags, m_fmt, 0, 0); + m_wantWidth = (m_extraFlags & Flag_VariableWidth) != 0; + m_wantPrecision = (m_extraFlags & Flag_VariablePrecision) != 0; + } + // Consume value as variable width and precision specifier if necessary + if(m_extraFlags & (Flag_VariableWidth | Flag_VariablePrecision)) + { + if(m_wantWidth || m_wantPrecision) + { + int v = convertToInt::invoke(value); + if(m_wantWidth) + { + m_variableWidth = v; + m_wantWidth = false; + } + else if(m_wantPrecision) + { + m_variablePrecision = v; + m_wantPrecision = false; + } + return; + } + // If we get here, we've set both the variable precision and width as + // required and we need to rerun the stream state setup to insert these. + fmtEnd = streamStateFromFormat(m_out, m_extraFlags, m_fmt, + m_variableWidth, m_variablePrecision); + } + + // Format the value into the stream. + if(!(m_extraFlags & (Flag_SpacePadPositive | Flag_TruncateToPrecision))) + formatValue(m_out, m_fmt, fmtEnd, value); + else + { + // The following are special cases where there's no direct + // correspondence between stream formatting and the printf() behaviour. + // Instead, we simulate the behaviour crudely by formatting into a + // temporary string stream and munging the resulting string. + std::ostringstream tmpStream; + tmpStream.copyfmt(m_out); + if(m_extraFlags & Flag_SpacePadPositive) + tmpStream.setf(std::ios::showpos); + // formatCStringTruncate is required for truncating conversions like + // "%.4s" where at most 4 characters of the c-string should be read. + // If we didn't include this special case, we might read off the end. + if(!( (m_extraFlags & Flag_TruncateToPrecision) && + formatCStringTruncate(tmpStream, value, m_out.precision()) )) + { + // Not a truncated c-string; just format normally. + formatValue(tmpStream, m_fmt, fmtEnd, value); + } + std::string result = tmpStream.str(); // allocates... yuck. + if(m_extraFlags & Flag_SpacePadPositive) + { + for(size_t i = 0, iend = result.size(); i < iend; ++i) + if(result[i] == '+') + result[i] = ' '; + } + if((m_extraFlags & Flag_TruncateToPrecision) && + (int)result.size() > (int)m_out.precision()) + m_out.write(result.c_str(), m_out.precision()); + else + m_out << result; + } + m_extraFlags = Flag_None; + m_fmt = fmtEnd; +} + + +// Parse a format string and set the stream state accordingly. +// +// The format mini-language recognized here is meant to be the one from C99, +// with the form "%[flags][width][.precision][length]type". +// +// Formatting options which can't be natively represented using the ostream +// state are returned in the extraFlags parameter which is a bitwise +// combination of values from the ExtraFormatFlags enum. +inline const char* FormatIterator::streamStateFromFormat(std::ostream& out, + unsigned int& extraFlags, + const char* fmtStart, + int variableWidth, + int variablePrecision) +{ + if(*fmtStart != '%') + { + TINYFORMAT_ERROR("tinyformat: Not enough conversion specifiers in format string"); + return fmtStart; + } + // Reset stream state to defaults. + out.width(0); + out.precision(6); + out.fill(' '); + // Reset most flags; ignore irrelevant unitbuf & skipws. + out.unsetf(std::ios::adjustfield | std::ios::basefield | + std::ios::floatfield | std::ios::showbase | std::ios::boolalpha | + std::ios::showpoint | std::ios::showpos | std::ios::uppercase); + extraFlags = Flag_None; + bool precisionSet = false; + bool widthSet = false; + const char* c = fmtStart + 1; + // 1) Parse flags + for(;; ++c) + { + switch(*c) + { + case '#': + out.setf(std::ios::showpoint | std::ios::showbase); + continue; + case '0': + // overridden by left alignment ('-' flag) + if(!(out.flags() & std::ios::left)) + { + // Use internal padding so that numeric values are + // formatted correctly, eg -00010 rather than 000-10 + out.fill('0'); + out.setf(std::ios::internal, std::ios::adjustfield); + } + continue; + case '-': + out.fill(' '); + out.setf(std::ios::left, std::ios::adjustfield); + continue; + case ' ': + // overridden by show positive sign, '+' flag. + if(!(out.flags() & std::ios::showpos)) + extraFlags |= Flag_SpacePadPositive; + continue; + case '+': + out.setf(std::ios::showpos); + extraFlags &= ~Flag_SpacePadPositive; + continue; + } + break; + } + // 2) Parse width + if(*c >= '0' && *c <= '9') + { + widthSet = true; + out.width(parseIntAndAdvance(c)); + } + if(*c == '*') + { + widthSet = true; + if(variableWidth < 0) + { + // negative widths correspond to '-' flag set + out.fill(' '); + out.setf(std::ios::left, std::ios::adjustfield); + variableWidth = -variableWidth; + } + out.width(variableWidth); + extraFlags |= Flag_VariableWidth; + ++c; + } + // 3) Parse precision + if(*c == '.') + { + ++c; + int precision = 0; + if(*c == '*') + { + ++c; + extraFlags |= Flag_VariablePrecision; + precision = variablePrecision; + } + else + { + if(*c >= '0' && *c <= '9') + precision = parseIntAndAdvance(c); + else if(*c == '-') // negative precisions ignored, treated as zero. + parseIntAndAdvance(++c); + } + out.precision(precision); + precisionSet = true; + } + // 4) Ignore any C99 length modifier + while(*c == 'l' || *c == 'h' || *c == 'L' || + *c == 'j' || *c == 'z' || *c == 't') + ++c; + // 5) We're up to the conversion specifier character. + // Set stream flags based on conversion specifier (thanks to the + // boost::format class for forging the way here). + bool intConversion = false; + switch(*c) + { + case 'u': case 'd': case 'i': + out.setf(std::ios::dec, std::ios::basefield); + intConversion = true; + break; + case 'o': + out.setf(std::ios::oct, std::ios::basefield); + intConversion = true; + break; + case 'X': + out.setf(std::ios::uppercase); + case 'x': case 'p': + out.setf(std::ios::hex, std::ios::basefield); + intConversion = true; + break; + case 'E': + out.setf(std::ios::uppercase); + case 'e': + out.setf(std::ios::scientific, std::ios::floatfield); + out.setf(std::ios::dec, std::ios::basefield); + break; + case 'F': + out.setf(std::ios::uppercase); + case 'f': + out.setf(std::ios::fixed, std::ios::floatfield); + break; + case 'G': + out.setf(std::ios::uppercase); + case 'g': + out.setf(std::ios::dec, std::ios::basefield); + // As in boost::format, let stream decide float format. + out.flags(out.flags() & ~std::ios::floatfield); + break; + case 'a': case 'A': + TINYFORMAT_ERROR("tinyformat: the %a and %A conversion specs " + "are not supported"); + break; + case 'c': + // Handled as special case inside formatValue() + break; + case 's': + if(precisionSet) + extraFlags |= Flag_TruncateToPrecision; + // Make %s print booleans as "true" and "false" + out.setf(std::ios::boolalpha); + break; + case 'n': + // Not supported - will cause problems! + TINYFORMAT_ERROR("tinyformat: %n conversion spec not supported"); + break; + case '\0': + TINYFORMAT_ERROR("tinyformat: Conversion spec incorrectly " + "terminated by end of string"); + return c; + } + if(intConversion && precisionSet && !widthSet) + { + // "precision" for integers gives the minimum number of digits (to be + // padded with zeros on the left). This isn't really supported by the + // iostreams, but we can approximately simulate it with the width if + // the width isn't otherwise used. + out.width(out.precision()); + out.setf(std::ios::internal, std::ios::adjustfield); + out.fill('0'); + } + return c+1; +} + + + +//------------------------------------------------------------------------------ +// Private format function on top of which the public interface is implemented. +// We enforce a mimimum of one value to be formatted to prevent bugs looking like +// +// const char* myStr = "100% broken"; +// printf(myStr); // Parses % as a format specifier +#ifdef TINYFORMAT_USE_VARIADIC_TEMPLATES + +template +void format(FormatIterator& fmtIter, const T1& value1) +{ + fmtIter.accept(value1); + fmtIter.finish(); +} + +// General version for C++11 +template +void format(FormatIterator& fmtIter, const T1& value1, const Args&... args) +{ + fmtIter.accept(value1); + format(fmtIter, args...); +} + +#else + +inline void format(FormatIterator& fmtIter) +{ + fmtIter.finish(); +} + +// General version for C++98 +#define TINYFORMAT_MAKE_FORMAT_DETAIL(n) \ +template \ +void format(detail::FormatIterator& fmtIter, TINYFORMAT_VARARGS(n)) \ +{ \ + fmtIter.accept(v1); \ + format(fmtIter TINYFORMAT_PASSARGS_TAIL(n)); \ +} + +TINYFORMAT_FOREACH_ARGNUM(TINYFORMAT_MAKE_FORMAT_DETAIL) +#undef TINYFORMAT_MAKE_FORMAT_DETAIL + +#endif // End C++98 variadic template emulation for format() + +} // namespace detail + + +//------------------------------------------------------------------------------ +// Implement all the main interface functions here in terms of detail::format() + +#ifdef TINYFORMAT_USE_VARIADIC_TEMPLATES + +// C++11 - the simple case +template +void format(std::ostream& out, const char* fmt, const T1& v1, const Args&... args) +{ + detail::FormatIterator fmtIter(out, fmt); + format(fmtIter, v1, args...); +} + +template +std::string format(const char* fmt, const T1& v1, const Args&... args) +{ + std::ostringstream oss; + format(oss, fmt, v1, args...); + return oss.str(); +} + +template +std::string format(const std::string &fmt, const T1& v1, const Args&... args) +{ + std::ostringstream oss; + format(oss, fmt.c_str(), v1, args...); + return oss.str(); +} + +template +void printf(const char* fmt, const T1& v1, const Args&... args) +{ + format(std::cout, fmt, v1, args...); +} + +#else + +// C++98 - define the interface functions using the wrapping macros +#define TINYFORMAT_MAKE_FORMAT_FUNCS(n) \ + \ +template \ +void format(std::ostream& out, const char* fmt, TINYFORMAT_VARARGS(n)) \ +{ \ + tinyformat::detail::FormatIterator fmtIter(out, fmt); \ + tinyformat::detail::format(fmtIter, TINYFORMAT_PASSARGS(n)); \ +} \ + \ +template \ +std::string format(const char* fmt, TINYFORMAT_VARARGS(n)) \ +{ \ + std::ostringstream oss; \ + tinyformat::format(oss, fmt, TINYFORMAT_PASSARGS(n)); \ + return oss.str(); \ +} \ + \ +template \ +std::string format(const std::string &fmt, TINYFORMAT_VARARGS(n)) \ +{ \ + std::ostringstream oss; \ + tinyformat::format(oss, fmt.c_str(), TINYFORMAT_PASSARGS(n)); \ + return oss.str(); \ +} \ + \ +template \ +void printf(const char* fmt, TINYFORMAT_VARARGS(n)) \ +{ \ + tinyformat::format(std::cout, fmt, TINYFORMAT_PASSARGS(n)); \ +} + +TINYFORMAT_FOREACH_ARGNUM(TINYFORMAT_MAKE_FORMAT_FUNCS) +#undef TINYFORMAT_MAKE_FORMAT_FUNCS +#endif + + +//------------------------------------------------------------------------------ +// Define deprecated wrapping macro for backward compatibility in tinyformat +// 1.x. Will be removed in version 2! +#define TINYFORMAT_WRAP_FORMAT_EXTRA_ARGS +#define TINYFORMAT_WRAP_FORMAT_N(n, returnType, funcName, funcDeclSuffix, \ + bodyPrefix, streamName, bodySuffix) \ +template \ +returnType funcName(TINYFORMAT_WRAP_FORMAT_EXTRA_ARGS const char* fmt, \ + TINYFORMAT_VARARGS(n)) funcDeclSuffix \ +{ \ + bodyPrefix \ + tinyformat::format(streamName, fmt, TINYFORMAT_PASSARGS(n)); \ + bodySuffix \ +} \ + +#define TINYFORMAT_WRAP_FORMAT(returnType, funcName, funcDeclSuffix, \ + bodyPrefix, streamName, bodySuffix) \ +inline \ +returnType funcName(TINYFORMAT_WRAP_FORMAT_EXTRA_ARGS const char* fmt \ + ) funcDeclSuffix \ +{ \ + bodyPrefix \ + tinyformat::detail::FormatIterator(streamName, fmt).finish(); \ + bodySuffix \ +} \ +TINYFORMAT_WRAP_FORMAT_N(1 , returnType, funcName, funcDeclSuffix, bodyPrefix, streamName, bodySuffix) \ +TINYFORMAT_WRAP_FORMAT_N(2 , returnType, funcName, funcDeclSuffix, bodyPrefix, streamName, bodySuffix) \ +TINYFORMAT_WRAP_FORMAT_N(3 , returnType, funcName, funcDeclSuffix, bodyPrefix, streamName, bodySuffix) \ +TINYFORMAT_WRAP_FORMAT_N(4 , returnType, funcName, funcDeclSuffix, bodyPrefix, streamName, bodySuffix) \ +TINYFORMAT_WRAP_FORMAT_N(5 , returnType, funcName, funcDeclSuffix, bodyPrefix, streamName, bodySuffix) \ +TINYFORMAT_WRAP_FORMAT_N(6 , returnType, funcName, funcDeclSuffix, bodyPrefix, streamName, bodySuffix) \ +TINYFORMAT_WRAP_FORMAT_N(7 , returnType, funcName, funcDeclSuffix, bodyPrefix, streamName, bodySuffix) \ +TINYFORMAT_WRAP_FORMAT_N(8 , returnType, funcName, funcDeclSuffix, bodyPrefix, streamName, bodySuffix) \ +TINYFORMAT_WRAP_FORMAT_N(9 , returnType, funcName, funcDeclSuffix, bodyPrefix, streamName, bodySuffix) \ +TINYFORMAT_WRAP_FORMAT_N(10, returnType, funcName, funcDeclSuffix, bodyPrefix, streamName, bodySuffix) \ +TINYFORMAT_WRAP_FORMAT_N(11, returnType, funcName, funcDeclSuffix, bodyPrefix, streamName, bodySuffix) \ +TINYFORMAT_WRAP_FORMAT_N(12, returnType, funcName, funcDeclSuffix, bodyPrefix, streamName, bodySuffix) \ +TINYFORMAT_WRAP_FORMAT_N(13, returnType, funcName, funcDeclSuffix, bodyPrefix, streamName, bodySuffix) \ +TINYFORMAT_WRAP_FORMAT_N(14, returnType, funcName, funcDeclSuffix, bodyPrefix, streamName, bodySuffix) \ +TINYFORMAT_WRAP_FORMAT_N(15, returnType, funcName, funcDeclSuffix, bodyPrefix, streamName, bodySuffix) \ +TINYFORMAT_WRAP_FORMAT_N(16, returnType, funcName, funcDeclSuffix, bodyPrefix, streamName, bodySuffix) \ + + +} // namespace tinyformat + +#endif // TINYFORMAT_H_INCLUDED diff --git a/src/txdb.cpp b/src/txdb.cpp index 34836eaa..cb92922a 100644 --- a/src/txdb.cpp +++ b/src/txdb.cpp @@ -1,12 +1,14 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2014 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "txdb.h" -#include "main.h" -#include "hash.h" -#include "chainparams.h" + +#include "core.h" +#include "uint256.h" + +#include using namespace std; @@ -24,8 +26,8 @@ void static BatchWriteHashBestChain(CLevelDBBatch &batch, const uint256 &hash) { CCoinsViewDB::CCoinsViewDB(size_t nCacheSize, bool fMemory, bool fWipe) : db(GetDataDir() / "chainstate", nCacheSize, fMemory, fWipe) { } -bool CCoinsViewDB::GetCoins(const uint256 &txid, CCoins &coins) { - return db.Read(make_pair('c', txid), coins); +bool CCoinsViewDB::GetCoins(const uint256 &txid, CCoins &coins) { + return db.Read(make_pair('c', txid), coins); } bool CCoinsViewDB::SetCoins(const uint256 &txid, const CCoins &coins) { @@ -35,38 +37,35 @@ bool CCoinsViewDB::SetCoins(const uint256 &txid, const CCoins &coins) { } bool CCoinsViewDB::HaveCoins(const uint256 &txid) { - return db.Exists(make_pair('c', txid)); + return db.Exists(make_pair('c', txid)); } -CBlockIndex *CCoinsViewDB::GetBestBlock() { +uint256 CCoinsViewDB::GetBestBlock() { uint256 hashBestChain; if (!db.Read('B', hashBestChain)) - return NULL; - std::map::iterator it = mapBlockIndex.find(hashBestChain); - if (it == mapBlockIndex.end()) - return NULL; - return it->second; + return uint256(0); + return hashBestChain; } -bool CCoinsViewDB::SetBestBlock(CBlockIndex *pindex) { +bool CCoinsViewDB::SetBestBlock(const uint256 &hashBlock) { CLevelDBBatch batch; - BatchWriteHashBestChain(batch, pindex->GetBlockHash()); + BatchWriteHashBestChain(batch, hashBlock); return db.WriteBatch(batch); } -bool CCoinsViewDB::BatchWrite(const std::map &mapCoins, CBlockIndex *pindex) { - printf("Committing %u changed transactions to coin database...\n", (unsigned int)mapCoins.size()); +bool CCoinsViewDB::BatchWrite(const std::map &mapCoins, const uint256 &hashBlock) { + LogPrint("coindb", "Committing %u changed transactions to coin database...\n", (unsigned int)mapCoins.size()); CLevelDBBatch batch; for (std::map::const_iterator it = mapCoins.begin(); it != mapCoins.end(); it++) BatchWriteCoins(batch, it->first, it->second); - if (pindex) - BatchWriteHashBestChain(batch, pindex->GetBlockHash()); + if (hashBlock != uint256(0)) + BatchWriteHashBestChain(batch, hashBlock); return db.WriteBatch(batch); } -CBlockTreeDB::CBlockTreeDB(size_t nCacheSize, bool fMemory, bool fWipe) : CLevelDB(GetDataDir() / "blocks" / "index", nCacheSize, fMemory, fWipe) { +CBlockTreeDB::CBlockTreeDB(size_t nCacheSize, bool fMemory, bool fWipe) : CLevelDBWrapper(GetDataDir() / "blocks" / "index", nCacheSize, fMemory, fWipe) { } bool CBlockTreeDB::WriteBlockIndex(const CDiskBlockIndex& blockindex) @@ -74,13 +73,9 @@ bool CBlockTreeDB::WriteBlockIndex(const CDiskBlockIndex& blockindex) return Write(make_pair('b', blockindex.GetBlockHash()), blockindex); } -bool CBlockTreeDB::ReadBestInvalidWork(CBigNum& bnBestInvalidWork) -{ - return Read('I', bnBestInvalidWork); -} - bool CBlockTreeDB::WriteBestInvalidWork(const CBigNum& bnBestInvalidWork) { + // Obsolete; only written for backward compatibility. return Write('I', bnBestInvalidWork); } @@ -117,9 +112,9 @@ bool CCoinsViewDB::GetStats(CCoinsStats &stats) { pcursor->SeekToFirst(); CHashWriter ss(SER_GETHASH, PROTOCOL_VERSION); - stats.hashBlock = GetBestBlock()->GetBlockHash(); + stats.hashBlock = GetBestBlock(); ss << stats.hashBlock; - int64 nTotalAmount = 0; + int64_t nTotalAmount = 0; while (pcursor->Valid()) { boost::this_thread::interruption_point(); try { @@ -136,7 +131,7 @@ bool CCoinsViewDB::GetStats(CCoinsStats &stats) { ssKey >> txhash; ss << txhash; ss << VARINT(coins.nVersion); - ss << (coins.fCoinBase ? 'c' : 'n'); + ss << (coins.fCoinBase ? 'c' : 'n'); ss << VARINT(coins.nHeight); stats.nTransactions++; for (unsigned int i=0; iNext(); } catch (std::exception &e) { - return error("%s() : deserialize error", __PRETTY_FUNCTION__); + return error("%s : Deserialize or I/O error - %s", __func__, e.what()); } } delete pcursor; - stats.nHeight = GetBestBlock()->nHeight; + stats.nHeight = mapBlockIndex.find(GetBestBlock())->second->nHeight; stats.hashSerialized = ss.GetHash(); stats.nTotalAmount = nTotalAmount; return true; @@ -223,19 +218,15 @@ bool CBlockTreeDB::LoadBlockIndexGuts() pindexNew->nStatus = diskindex.nStatus; pindexNew->nTx = diskindex.nTx; - // Watch for genesis block - if (pindexGenesisBlock == NULL && diskindex.GetBlockHash() == Params().HashGenesisBlock()) - pindexGenesisBlock = pindexNew; - if (!pindexNew->CheckIndex()) - return error("LoadBlockIndex() : CheckIndex failed: %s", pindexNew->ToString().c_str()); + return error("LoadBlockIndex() : CheckIndex failed: %s", pindexNew->ToString()); pcursor->Next(); } else { break; // if shutdown requested or finished loading block index } } catch (std::exception &e) { - return error("%s() : deserialize error", __PRETTY_FUNCTION__); + return error("%s : Deserialize or I/O error - %s", __func__, e.what()); } } delete pcursor; diff --git a/src/txdb.h b/src/txdb.h index f59fc5da..5eb5731d 100644 --- a/src/txdb.h +++ b/src/txdb.h @@ -1,32 +1,49 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2013 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef BITCOIN_TXDB_LEVELDB_H #define BITCOIN_TXDB_LEVELDB_H +#include "leveldbwrapper.h" #include "main.h" -#include "leveldb.h" + +#include +#include +#include +#include + +class CBigNum; +class CCoins; +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; +// min. -dbcache in (MiB) +static const int64_t nMinDbCache = 4; /** CCoinsView backed by the LevelDB coin database (chainstate/) */ class CCoinsViewDB : public CCoinsView { protected: - CLevelDB db; + CLevelDBWrapper db; public: CCoinsViewDB(size_t nCacheSize, bool fMemory = false, bool fWipe = false); bool GetCoins(const uint256 &txid, CCoins &coins); bool SetCoins(const uint256 &txid, const CCoins &coins); bool HaveCoins(const uint256 &txid); - CBlockIndex *GetBestBlock(); - bool SetBestBlock(CBlockIndex *pindex); - bool BatchWrite(const std::map &mapCoins, CBlockIndex *pindex); + uint256 GetBestBlock(); + bool SetBestBlock(const uint256 &hashBlock); + bool BatchWrite(const std::map &mapCoins, const uint256 &hashBlock); bool GetStats(CCoinsStats &stats); }; /** Access to the block database (blocks/index/) */ -class CBlockTreeDB : public CLevelDB +class CBlockTreeDB : public CLevelDBWrapper { public: CBlockTreeDB(size_t nCacheSize, bool fMemory = false, bool fWipe = false); @@ -35,7 +52,6 @@ private: void operator=(const CBlockTreeDB&); public: bool WriteBlockIndex(const CDiskBlockIndex& blockindex); - bool ReadBestInvalidWork(CBigNum& bnBestInvalidWork); bool WriteBestInvalidWork(const CBigNum& bnBestInvalidWork); bool ReadBlockFileInfo(int nFile, CBlockFileInfo &fileinfo); bool WriteBlockFileInfo(int nFile, const CBlockFileInfo &fileinfo); diff --git a/src/txmempool.cpp b/src/txmempool.cpp new file mode 100644 index 00000000..64c9eac7 --- /dev/null +++ b/src/txmempool.cpp @@ -0,0 +1,214 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Copyright (c) 2009-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "core.h" +#include "txmempool.h" + +using namespace std; + +CTxMemPoolEntry::CTxMemPoolEntry() +{ + nHeight = MEMPOOL_HEIGHT; +} + +CTxMemPoolEntry::CTxMemPoolEntry(const CTransaction& _tx, int64_t _nFee, + int64_t _nTime, double _dPriority, + unsigned int _nHeight): + tx(_tx), nFee(_nFee), nTime(_nTime), dPriority(_dPriority), nHeight(_nHeight) +{ + nTxSize = ::GetSerializeSize(tx, SER_NETWORK, PROTOCOL_VERSION); +} + +CTxMemPoolEntry::CTxMemPoolEntry(const CTxMemPoolEntry& other) +{ + *this = other; +} + +double +CTxMemPoolEntry::GetPriority(unsigned int currentHeight) const +{ + int64_t nValueIn = tx.GetValueOut()+nFee; + double deltaPriority = ((double)(currentHeight-nHeight)*nValueIn)/nTxSize; + double dResult = dPriority + deltaPriority; + return dResult; +} + +CTxMemPool::CTxMemPool() +{ + // Sanity checks off by default for performance, because otherwise + // accepting transactions becomes O(N^2) where N is the number + // of transactions in the pool + fSanityCheck = false; +} + +void CTxMemPool::pruneSpent(const uint256 &hashTx, CCoins &coins) +{ + LOCK(cs); + + std::map::iterator it = mapNextTx.lower_bound(COutPoint(hashTx, 0)); + + // iterate over all COutPoints in mapNextTx whose hash equals the provided hashTx + while (it != mapNextTx.end() && it->first.hash == hashTx) { + coins.Spend(it->first.n); // and remove those outputs from coins + it++; + } +} + +unsigned int CTxMemPool::GetTransactionsUpdated() const +{ + LOCK(cs); + return nTransactionsUpdated; +} + +void CTxMemPool::AddTransactionsUpdated(unsigned int n) +{ + LOCK(cs); + nTransactionsUpdated += n; +} + + +bool CTxMemPool::addUnchecked(const uint256& hash, const CTxMemPoolEntry &entry) +{ + // Add to memory pool without checking anything. + // Used by main.cpp AcceptToMemoryPool(), which DOES do + // all the appropriate checks. + LOCK(cs); + { + mapTx[hash] = entry; + const CTransaction& tx = mapTx[hash].GetTx(); + for (unsigned int i = 0; i < tx.vin.size(); i++) + mapNextTx[tx.vin[i].prevout] = CInPoint(&tx, i); + nTransactionsUpdated++; + } + return true; +} + + +void CTxMemPool::remove(const CTransaction &tx, std::list& removed, bool fRecursive) +{ + // Remove transaction from memory pool + { + LOCK(cs); + uint256 hash = tx.GetHash(); + if (fRecursive) { + for (unsigned int i = 0; i < tx.vout.size(); i++) { + std::map::iterator it = mapNextTx.find(COutPoint(hash, i)); + if (it == mapNextTx.end()) + continue; + remove(*it->second.ptx, removed, true); + } + } + if (mapTx.count(hash)) + { + removed.push_front(tx); + BOOST_FOREACH(const CTxIn& txin, tx.vin) + mapNextTx.erase(txin.prevout); + mapTx.erase(hash); + nTransactionsUpdated++; + } + } +} + +void CTxMemPool::removeConflicts(const CTransaction &tx, std::list& removed) +{ + // Remove transactions which depend on inputs of tx, recursively + list result; + LOCK(cs); + BOOST_FOREACH(const CTxIn &txin, tx.vin) { + std::map::iterator it = mapNextTx.find(txin.prevout); + if (it != mapNextTx.end()) { + const CTransaction &txConflict = *it->second.ptx; + if (txConflict != tx) + { + remove(txConflict, removed, true); + } + } + } +} + +void CTxMemPool::clear() +{ + LOCK(cs); + mapTx.clear(); + mapNextTx.clear(); + ++nTransactionsUpdated; +} + +void CTxMemPool::check(CCoinsViewCache *pcoins) const +{ + if (!fSanityCheck) + return; + + LogPrint("mempool", "Checking mempool with %u transactions and %u inputs\n", (unsigned int)mapTx.size(), (unsigned int)mapNextTx.size()); + + LOCK(cs); + for (std::map::const_iterator it = mapTx.begin(); it != mapTx.end(); it++) { + unsigned int i = 0; + const CTransaction& tx = it->second.GetTx(); + BOOST_FOREACH(const CTxIn &txin, tx.vin) { + // Check that every mempool transaction's inputs refer to available coins, or other mempool tx's. + std::map::const_iterator it2 = mapTx.find(txin.prevout.hash); + if (it2 != mapTx.end()) { + const CTransaction& tx2 = it2->second.GetTx(); + assert(tx2.vout.size() > txin.prevout.n && !tx2.vout[txin.prevout.n].IsNull()); + } else { + CCoins &coins = pcoins->GetCoins(txin.prevout.hash); + assert(coins.IsAvailable(txin.prevout.n)); + } + // Check whether its inputs are marked in mapNextTx. + std::map::const_iterator it3 = mapNextTx.find(txin.prevout); + assert(it3 != mapNextTx.end()); + assert(it3->second.ptx == &tx); + assert(it3->second.n == i); + i++; + } + } + for (std::map::const_iterator it = mapNextTx.begin(); it != mapNextTx.end(); it++) { + uint256 hash = it->second.ptx->GetHash(); + map::const_iterator it2 = mapTx.find(hash); + const CTransaction& tx = it2->second.GetTx(); + assert(it2 != mapTx.end()); + assert(&tx == it->second.ptx); + assert(tx.vin.size() > it->second.n); + assert(it->first == it->second.ptx->vin[it->second.n].prevout); + } +} + +void CTxMemPool::queryHashes(vector& vtxid) +{ + vtxid.clear(); + + LOCK(cs); + vtxid.reserve(mapTx.size()); + for (map::iterator mi = mapTx.begin(); mi != mapTx.end(); ++mi) + vtxid.push_back((*mi).first); +} + +bool CTxMemPool::lookup(uint256 hash, CTransaction& result) const +{ + LOCK(cs); + map::const_iterator i = mapTx.find(hash); + if (i == mapTx.end()) return false; + result = i->second.GetTx(); + return true; +} + +CCoinsViewMemPool::CCoinsViewMemPool(CCoinsView &baseIn, CTxMemPool &mempoolIn) : CCoinsViewBacked(baseIn), mempool(mempoolIn) { } + +bool CCoinsViewMemPool::GetCoins(const uint256 &txid, CCoins &coins) { + if (base->GetCoins(txid, coins)) + return true; + CTransaction tx; + if (mempool.lookup(txid, tx)) { + coins = CCoins(tx, MEMPOOL_HEIGHT); + return true; + } + return false; +} + +bool CCoinsViewMemPool::HaveCoins(const uint256 &txid) { + return mempool.exists(txid) || base->HaveCoins(txid); +} + diff --git a/src/txmempool.h b/src/txmempool.h new file mode 100644 index 00000000..4509e957 --- /dev/null +++ b/src/txmempool.h @@ -0,0 +1,113 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Copyright (c) 2009-2013 The Bitcoin developers +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. +#ifndef BITCOIN_TXMEMPOOL_H +#define BITCOIN_TXMEMPOOL_H + +#include + +#include "coins.h" +#include "core.h" +#include "sync.h" + +/** Fake height value used in CCoins to signify they are only in the memory pool (since 0.8) */ +static const unsigned int MEMPOOL_HEIGHT = 0x7FFFFFFF; + +/* + * CTxMemPool stores these: + */ +class CTxMemPoolEntry +{ +private: + CTransaction tx; + int64_t nFee; // Cached to avoid expensive parent-transaction lookups + size_t nTxSize; // ... and avoid recomputing tx size + int64_t nTime; // Local time when entering the mempool + double dPriority; // Priority when entering the mempool + unsigned int nHeight; // Chain height when entering the mempool + +public: + CTxMemPoolEntry(const CTransaction& _tx, int64_t _nFee, + int64_t _nTime, double _dPriority, unsigned int _nHeight); + CTxMemPoolEntry(); + CTxMemPoolEntry(const CTxMemPoolEntry& other); + + const CTransaction& GetTx() const { return this->tx; } + double GetPriority(unsigned int currentHeight) const; + int64_t GetFee() const { return nFee; } + size_t GetTxSize() const { return nTxSize; } + int64_t GetTime() const { return nTime; } + unsigned int GetHeight() const { return nHeight; } +}; + +/* + * CTxMemPool stores valid-according-to-the-current-best-chain + * transactions that may be included in the next block. + * + * Transactions are added when they are seen on the network + * (or created by the local node), but not all transactions seen + * are added to the pool: if a new transaction double-spends + * an input of a transaction in the pool, it is dropped, + * as are non-standard transactions. + */ +class CTxMemPool +{ +private: + bool fSanityCheck; // Normally false, true if -checkmempool or -regtest + unsigned int nTransactionsUpdated; + +public: + mutable CCriticalSection cs; + std::map mapTx; + std::map mapNextTx; + + CTxMemPool(); + + /* + * If sanity-checking is turned on, check makes sure the pool is + * consistent (does not contain two transactions that spend the same inputs, + * all inputs are in the mapNextTx array). If sanity-checking is turned off, + * check does nothing. + */ + void check(CCoinsViewCache *pcoins) const; + void setSanityCheck(bool _fSanityCheck) { fSanityCheck = _fSanityCheck; } + + bool addUnchecked(const uint256& hash, const CTxMemPoolEntry &entry); + void remove(const CTransaction &tx, std::list& removed, bool fRecursive = false); + void removeConflicts(const CTransaction &tx, std::list& removed); + void clear(); + void queryHashes(std::vector& vtxid); + void pruneSpent(const uint256& hash, CCoins &coins); + unsigned int GetTransactionsUpdated() const; + void AddTransactionsUpdated(unsigned int n); + + unsigned long size() + { + LOCK(cs); + return mapTx.size(); + } + + bool exists(uint256 hash) + { + LOCK(cs); + return (mapTx.count(hash) != 0); + } + + bool lookup(uint256 hash, CTransaction& result) const; +}; + +/** CCoinsView that brings transactions from a memorypool into view. + It does not check for spendings by memory pool transactions. */ +class CCoinsViewMemPool : public CCoinsViewBacked +{ +protected: + CTxMemPool &mempool; + +public: + CCoinsViewMemPool(CCoinsView &baseIn, CTxMemPool &mempoolIn); + bool GetCoins(const uint256 &txid, CCoins &coins); + bool HaveCoins(const uint256 &txid); +}; + +#endif /* BITCOIN_TXMEMPOOL_H */ diff --git a/src/ui_interface.h b/src/ui_interface.h index 5b0555c1..7b655ac9 100644 --- a/src/ui_interface.h +++ b/src/ui_interface.h @@ -2,13 +2,15 @@ // Copyright (c) 2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef BITCOIN_UI_INTERFACE_H #define BITCOIN_UI_INTERFACE_H +#include #include -#include "util.h" // for int64 -#include + #include +#include class CBasicKeyStore; class CWallet; @@ -60,6 +62,8 @@ public: /** Force blocking, modal message box dialog (not just OS notification) */ MODAL = 0x10000000U, + /** Don't bring GUI to foreground. Use for messages during initialization */ + NOSHOWGUI = 0x20000000U, /** Predefined combinations for certain default usage cases */ MSG_INFORMATION = ICON_INFORMATION, @@ -70,12 +74,6 @@ public: /** Show message box. */ boost::signals2::signal > ThreadSafeMessageBox; - /** Ask the user whether they want to pay a fee or not. */ - boost::signals2::signal > ThreadSafeAskFee; - - /** Handle a URL passed at the command line. */ - boost::signals2::signal ThreadSafeHandleURI; - /** Progress message during initialization. */ boost::signals2::signal InitMessage; @@ -93,6 +91,9 @@ public: * @note called with lock cs_mapAlerts held. */ boost::signals2::signal NotifyAlertChanged; + + /** A wallet has been loaded. */ + boost::signals2::signal LoadWallet; }; extern CClientUIInterface uiInterface; diff --git a/src/uint256.h b/src/uint256.h index 443b3ef6..bcbde9e3 100644 --- a/src/uint256.h +++ b/src/uint256.h @@ -1,24 +1,23 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2013 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef BITCOIN_UINT256_H #define BITCOIN_UINT256_H -#include +#include #include -#include -#include #include +#include #include -typedef long long int64; -typedef unsigned long long uint64; - - -inline int Testuint256AdHoc(std::vector vArg); - +extern const signed char p_util_hexdigit[256]; // defined in util.cpp +inline signed char HexDigit(char c) +{ + return p_util_hexdigit[(unsigned char)c]; +} /** Base class without constructors for uint256 and uint160. * This makes the compiler let you use it in a union. @@ -67,7 +66,7 @@ public: return ret; } - base_uint& operator=(uint64 b) + base_uint& operator=(uint64_t b) { pn[0] = (unsigned int)b; pn[1] = (unsigned int)(b >> 32); @@ -97,14 +96,14 @@ public: return *this; } - base_uint& operator^=(uint64 b) + base_uint& operator^=(uint64_t b) { pn[0] ^= (unsigned int)b; pn[1] ^= (unsigned int)(b >> 32); return *this; } - base_uint& operator|=(uint64 b) + base_uint& operator|=(uint64_t b) { pn[0] |= (unsigned int)b; pn[1] |= (unsigned int)(b >> 32); @@ -147,10 +146,10 @@ public: base_uint& operator+=(const base_uint& b) { - uint64 carry = 0; + uint64_t carry = 0; for (int i = 0; i < WIDTH; i++) { - uint64 n = carry + pn[i] + b.pn[i]; + uint64_t n = carry + pn[i] + b.pn[i]; pn[i] = n & 0xffffffff; carry = n >> 32; } @@ -163,7 +162,7 @@ public: return *this; } - base_uint& operator+=(uint64 b64) + base_uint& operator+=(uint64_t b64) { base_uint b; b = b64; @@ -171,7 +170,7 @@ public: return *this; } - base_uint& operator-=(uint64 b64) + base_uint& operator-=(uint64_t b64) { base_uint b; b = b64; @@ -201,7 +200,7 @@ public: { // prefix operator int i = 0; - while (--pn[i] == -1 && i < WIDTH-1) + while (--pn[i] == (uint32_t)-1 && i < WIDTH-1) i++; return *this; } @@ -271,7 +270,7 @@ public: return true; } - friend inline bool operator==(const base_uint& a, uint64 b) + friend inline bool operator==(const base_uint& a, uint64_t b) { if (a.pn[0] != (unsigned int)b) return false; @@ -288,7 +287,7 @@ public: return (!(a == b)); } - friend inline bool operator!=(const base_uint& a, uint64 b) + friend inline bool operator!=(const base_uint& a, uint64_t b) { return (!(a == b)); } @@ -305,8 +304,7 @@ public: void SetHex(const char* psz) { - for (int i = 0; i < WIDTH; i++) - pn[i] = 0; + memset(pn,0,sizeof(pn)); // skip leading spaces while (isspace(*psz)) @@ -317,19 +315,18 @@ public: psz += 2; // hex string to uint - static const unsigned char phexdigit[256] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0, 0,0xa,0xb,0xc,0xd,0xe,0xf,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0xa,0xb,0xc,0xd,0xe,0xf,0,0,0,0,0,0,0,0,0 }; const char* pbegin = psz; - while (phexdigit[(unsigned char)*psz] || *psz == '0') + while (::HexDigit(*psz) != -1) psz++; psz--; unsigned char* p1 = (unsigned char*)pn; unsigned char* pend = p1 + WIDTH * 4; while (psz >= pbegin && p1 < pend) { - *p1 = phexdigit[(unsigned char)*psz--]; + *p1 = ::HexDigit(*psz--); if (psz >= pbegin) { - *p1 |= (phexdigit[(unsigned char)*psz--] << 4); + *p1 |= ((unsigned char)::HexDigit(*psz--) << 4); p1++; } } @@ -370,9 +367,10 @@ public: return sizeof(pn); } - uint64 Get64(int n=0) const + uint64_t GetLow64() const { - return pn[2*n] | (uint64)pn[2*n+1] << 32; + assert(WIDTH >= 2); + return pn[0] | (uint64_t)pn[1] << 32; } // unsigned int GetSerializeSize(int nType=0, int nVersion=PROTOCOL_VERSION) const @@ -399,7 +397,6 @@ public: friend class uint160; friend class uint256; friend class uint512; - friend inline int Testuint256AdHoc(std::vector vArg); }; typedef base_uint<160> base_uint160; @@ -445,7 +442,7 @@ public: return *this; } - uint160(uint64 b) + uint160(uint64_t b) { pn[0] = (unsigned int)b; pn[1] = (unsigned int)(b >> 32); @@ -453,7 +450,7 @@ public: pn[i] = 0; } - uint160& operator=(uint64 b) + uint160& operator=(uint64_t b) { pn[0] = (unsigned int)b; pn[1] = (unsigned int)(b >> 32); @@ -476,8 +473,8 @@ public: } }; -inline bool operator==(const uint160& a, uint64 b) { return (base_uint160)a == b; } -inline bool operator!=(const uint160& a, uint64 b) { return (base_uint160)a != b; } +inline bool operator==(const uint160& a, uint64_t b) { return (base_uint160)a == b; } +inline bool operator!=(const uint160& a, uint64_t b) { return (base_uint160)a != b; } inline const uint160 operator<<(const base_uint160& a, unsigned int shift) { return uint160(a) <<= shift; } inline const uint160 operator>>(const base_uint160& a, unsigned int shift) { return uint160(a) >>= shift; } inline const uint160 operator<<(const uint160& a, unsigned int shift) { return uint160(a) <<= shift; } @@ -489,44 +486,41 @@ inline const uint160 operator|(const base_uint160& a, const base_uint160& b) { r inline const uint160 operator+(const base_uint160& a, const base_uint160& b) { return uint160(a) += b; } inline const uint160 operator-(const base_uint160& a, const base_uint160& b) { return uint160(a) -= b; } -inline bool operator<(const base_uint160& a, const uint160& b) { return (base_uint160)a < (base_uint160)b; } -inline bool operator<=(const base_uint160& a, const uint160& b) { return (base_uint160)a <= (base_uint160)b; } -inline bool operator>(const base_uint160& a, const uint160& b) { return (base_uint160)a > (base_uint160)b; } -inline bool operator>=(const base_uint160& a, const uint160& b) { return (base_uint160)a >= (base_uint160)b; } -inline bool operator==(const base_uint160& a, const uint160& b) { return (base_uint160)a == (base_uint160)b; } -inline bool operator!=(const base_uint160& a, const uint160& b) { return (base_uint160)a != (base_uint160)b; } -inline const uint160 operator^(const base_uint160& a, const uint160& b) { return (base_uint160)a ^ (base_uint160)b; } -inline const uint160 operator&(const base_uint160& a, const uint160& b) { return (base_uint160)a & (base_uint160)b; } -inline const uint160 operator|(const base_uint160& a, const uint160& b) { return (base_uint160)a | (base_uint160)b; } -inline const uint160 operator+(const base_uint160& a, const uint160& b) { return (base_uint160)a + (base_uint160)b; } -inline const uint160 operator-(const base_uint160& a, const uint160& b) { return (base_uint160)a - (base_uint160)b; } - -inline bool operator<(const uint160& a, const base_uint160& b) { return (base_uint160)a < (base_uint160)b; } -inline bool operator<=(const uint160& a, const base_uint160& b) { return (base_uint160)a <= (base_uint160)b; } -inline bool operator>(const uint160& a, const base_uint160& b) { return (base_uint160)a > (base_uint160)b; } -inline bool operator>=(const uint160& a, const base_uint160& b) { return (base_uint160)a >= (base_uint160)b; } -inline bool operator==(const uint160& a, const base_uint160& b) { return (base_uint160)a == (base_uint160)b; } -inline bool operator!=(const uint160& a, const base_uint160& b) { return (base_uint160)a != (base_uint160)b; } -inline const uint160 operator^(const uint160& a, const base_uint160& b) { return (base_uint160)a ^ (base_uint160)b; } -inline const uint160 operator&(const uint160& a, const base_uint160& b) { return (base_uint160)a & (base_uint160)b; } -inline const uint160 operator|(const uint160& a, const base_uint160& b) { return (base_uint160)a | (base_uint160)b; } -inline const uint160 operator+(const uint160& a, const base_uint160& b) { return (base_uint160)a + (base_uint160)b; } -inline const uint160 operator-(const uint160& a, const base_uint160& b) { return (base_uint160)a - (base_uint160)b; } - -inline bool operator<(const uint160& a, const uint160& b) { return (base_uint160)a < (base_uint160)b; } -inline bool operator<=(const uint160& a, const uint160& b) { return (base_uint160)a <= (base_uint160)b; } -inline bool operator>(const uint160& a, const uint160& b) { return (base_uint160)a > (base_uint160)b; } -inline bool operator>=(const uint160& a, const uint160& b) { return (base_uint160)a >= (base_uint160)b; } -inline bool operator==(const uint160& a, const uint160& b) { return (base_uint160)a == (base_uint160)b; } -inline bool operator!=(const uint160& a, const uint160& b) { return (base_uint160)a != (base_uint160)b; } -inline const uint160 operator^(const uint160& a, const uint160& b) { return (base_uint160)a ^ (base_uint160)b; } -inline const uint160 operator&(const uint160& a, const uint160& b) { return (base_uint160)a & (base_uint160)b; } -inline const uint160 operator|(const uint160& a, const uint160& b) { return (base_uint160)a | (base_uint160)b; } -inline const uint160 operator+(const uint160& a, const uint160& b) { return (base_uint160)a + (base_uint160)b; } -inline const uint160 operator-(const uint160& a, const uint160& b) { return (base_uint160)a - (base_uint160)b; } - +inline bool operator<(const base_uint160& a, const uint160& b) { return (base_uint160)a < (base_uint160)b; } +inline bool operator<=(const base_uint160& a, const uint160& b) { return (base_uint160)a <= (base_uint160)b; } +inline bool operator>(const base_uint160& a, const uint160& b) { return (base_uint160)a > (base_uint160)b; } +inline bool operator>=(const base_uint160& a, const uint160& b) { return (base_uint160)a >= (base_uint160)b; } +inline bool operator==(const base_uint160& a, const uint160& b) { return (base_uint160)a == (base_uint160)b; } +inline bool operator!=(const base_uint160& a, const uint160& b) { return (base_uint160)a != (base_uint160)b; } +inline const uint160 operator^(const base_uint160& a, const uint160& b) { return (base_uint160)a ^ (base_uint160)b; } +inline const uint160 operator&(const base_uint160& a, const uint160& b) { return (base_uint160)a & (base_uint160)b; } +inline const uint160 operator|(const base_uint160& a, const uint160& b) { return (base_uint160)a | (base_uint160)b; } +inline const uint160 operator+(const base_uint160& a, const uint160& b) { return (base_uint160)a + (base_uint160)b; } +inline const uint160 operator-(const base_uint160& a, const uint160& b) { return (base_uint160)a - (base_uint160)b; } +inline bool operator<(const uint160& a, const base_uint160& b) { return (base_uint160)a < (base_uint160)b; } +inline bool operator<=(const uint160& a, const base_uint160& b) { return (base_uint160)a <= (base_uint160)b; } +inline bool operator>(const uint160& a, const base_uint160& b) { return (base_uint160)a > (base_uint160)b; } +inline bool operator>=(const uint160& a, const base_uint160& b) { return (base_uint160)a >= (base_uint160)b; } +inline bool operator==(const uint160& a, const base_uint160& b) { return (base_uint160)a == (base_uint160)b; } +inline bool operator!=(const uint160& a, const base_uint160& b) { return (base_uint160)a != (base_uint160)b; } +inline const uint160 operator^(const uint160& a, const base_uint160& b) { return (base_uint160)a ^ (base_uint160)b; } +inline const uint160 operator&(const uint160& a, const base_uint160& b) { return (base_uint160)a & (base_uint160)b; } +inline const uint160 operator|(const uint160& a, const base_uint160& b) { return (base_uint160)a | (base_uint160)b; } +inline const uint160 operator+(const uint160& a, const base_uint160& b) { return (base_uint160)a + (base_uint160)b; } +inline const uint160 operator-(const uint160& a, const base_uint160& b) { return (base_uint160)a - (base_uint160)b; } +inline bool operator<(const uint160& a, const uint160& b) { return (base_uint160)a < (base_uint160)b; } +inline bool operator<=(const uint160& a, const uint160& b) { return (base_uint160)a <= (base_uint160)b; } +inline bool operator>(const uint160& a, const uint160& b) { return (base_uint160)a > (base_uint160)b; } +inline bool operator>=(const uint160& a, const uint160& b) { return (base_uint160)a >= (base_uint160)b; } +inline bool operator==(const uint160& a, const uint160& b) { return (base_uint160)a == (base_uint160)b; } +inline bool operator!=(const uint160& a, const uint160& b) { return (base_uint160)a != (base_uint160)b; } +inline const uint160 operator^(const uint160& a, const uint160& b) { return (base_uint160)a ^ (base_uint160)b; } +inline const uint160 operator&(const uint160& a, const uint160& b) { return (base_uint160)a & (base_uint160)b; } +inline const uint160 operator|(const uint160& a, const uint160& b) { return (base_uint160)a | (base_uint160)b; } +inline const uint160 operator+(const uint160& a, const uint160& b) { return (base_uint160)a + (base_uint160)b; } +inline const uint160 operator-(const uint160& a, const uint160& b) { return (base_uint160)a - (base_uint160)b; } @@ -560,7 +554,7 @@ public: return *this; } - uint256(uint64 b) + uint256(uint64_t b) { pn[0] = (unsigned int)b; pn[1] = (unsigned int)(b >> 32); @@ -568,7 +562,7 @@ public: pn[i] = 0; } - uint256& operator=(uint64 b) + uint256& operator=(uint64_t b) { pn[0] = (unsigned int)b; pn[1] = (unsigned int)(b >> 32); @@ -591,8 +585,8 @@ public: } }; -inline bool operator==(const uint256& a, uint64 b) { return (base_uint256)a == b; } -inline bool operator!=(const uint256& a, uint64 b) { return (base_uint256)a != b; } +inline bool operator==(const uint256& a, uint64_t b) { return (base_uint256)a == b; } +inline bool operator!=(const uint256& a, uint64_t b) { return (base_uint256)a != b; } inline const uint256 operator<<(const base_uint256& a, unsigned int shift) { return uint256(a) <<= shift; } inline const uint256 operator>>(const base_uint256& a, unsigned int shift) { return uint256(a) >>= shift; } inline const uint256 operator<<(const uint256& a, unsigned int shift) { return uint256(a) <<= shift; } @@ -641,9 +635,6 @@ inline const uint256 operator+(const uint256& a, const uint256& b) { return inline const uint256 operator-(const uint256& a, const uint256& b) { return (base_uint256)a - (base_uint256)b; } - - - ////////////////////////////////////////////////////////////////////////////// // // uint512 @@ -674,7 +665,7 @@ public: return *this; } - uint512(uint64 b) + uint512(uint64_t b) { pn[0] = (unsigned int)b; pn[1] = (unsigned int)(b >> 32); @@ -682,7 +673,7 @@ public: pn[i] = 0; } - uint512& operator=(uint64 b) + uint512& operator=(uint64_t b) { pn[0] = (unsigned int)b; pn[1] = (unsigned int)(b >> 32); @@ -703,7 +694,7 @@ public: else *this = 0; } - + uint256 trim256() const { uint256 ret; @@ -711,11 +702,11 @@ public: ret.pn[i] = pn[i]; } return ret; - } + } }; -inline bool operator==(const uint512& a, uint64 b) { return (base_uint512)a == b; } -inline bool operator!=(const uint512& a, uint64 b) { return (base_uint512)a != b; } +inline bool operator==(const uint512& a, uint64_t b) { return (base_uint512)a == b; } +inline bool operator!=(const uint512& a, uint64_t b) { return (base_uint512)a != b; } inline const uint512 operator<<(const base_uint512& a, unsigned int shift) { return uint512(a) <<= shift; } inline const uint512 operator>>(const base_uint512& a, unsigned int shift) { return uint512(a) >>= shift; } inline const uint512 operator<<(const uint512& a, unsigned int shift) { return uint512(a) <<= shift; } @@ -764,141 +755,4 @@ inline const uint512 operator+(const uint512& a, const uint512& b) { return inline const uint512 operator-(const uint512& a, const uint512& b) { return (base_uint512)a - (base_uint512)b; } - - - -#ifdef TEST_UINT256 - -inline int Testuint256AdHoc(std::vector vArg) -{ - uint256 g(0); - - - printf("%s\n", g.ToString().c_str()); - g--; printf("g--\n"); - printf("%s\n", g.ToString().c_str()); - g--; printf("g--\n"); - printf("%s\n", g.ToString().c_str()); - g++; printf("g++\n"); - printf("%s\n", g.ToString().c_str()); - g++; printf("g++\n"); - printf("%s\n", g.ToString().c_str()); - g++; printf("g++\n"); - printf("%s\n", g.ToString().c_str()); - g++; printf("g++\n"); - printf("%s\n", g.ToString().c_str()); - - - - uint256 a(7); - printf("a=7\n"); - printf("%s\n", a.ToString().c_str()); - - uint256 b; - printf("b undefined\n"); - printf("%s\n", b.ToString().c_str()); - int c = 3; - - a = c; - a.pn[3] = 15; - printf("%s\n", a.ToString().c_str()); - uint256 k(c); - - a = 5; - a.pn[3] = 15; - printf("%s\n", a.ToString().c_str()); - b = 1; - b <<= 52; - - a |= b; - - a ^= 0x500; - - printf("a %s\n", a.ToString().c_str()); - - a = a | b | (uint256)0x1000; - - - printf("a %s\n", a.ToString().c_str()); - printf("b %s\n", b.ToString().c_str()); - - a = 0xfffffffe; - a.pn[4] = 9; - - printf("%s\n", a.ToString().c_str()); - a++; - printf("%s\n", a.ToString().c_str()); - a++; - printf("%s\n", a.ToString().c_str()); - a++; - printf("%s\n", a.ToString().c_str()); - a++; - printf("%s\n", a.ToString().c_str()); - - a--; - printf("%s\n", a.ToString().c_str()); - a--; - printf("%s\n", a.ToString().c_str()); - a--; - printf("%s\n", a.ToString().c_str()); - uint256 d = a--; - printf("%s\n", d.ToString().c_str()); - printf("%s\n", a.ToString().c_str()); - a--; - printf("%s\n", a.ToString().c_str()); - a--; - printf("%s\n", a.ToString().c_str()); - - d = a; - - printf("%s\n", d.ToString().c_str()); - for (int i = uint256::WIDTH-1; i >= 0; i--) printf("%08x", d.pn[i]); printf("\n"); - - uint256 neg = d; - neg = ~neg; - printf("%s\n", neg.ToString().c_str()); - - - uint256 e = uint256("0xABCDEF123abcdef12345678909832180000011111111"); - printf("\n"); - printf("%s\n", e.ToString().c_str()); - - - printf("\n"); - uint256 x1 = uint256("0xABCDEF123abcdef12345678909832180000011111111"); - uint256 x2; - printf("%s\n", x1.ToString().c_str()); - for (int i = 0; i < 270; i += 4) - { - x2 = x1 << i; - printf("%s\n", x2.ToString().c_str()); - } - - printf("\n"); - printf("%s\n", x1.ToString().c_str()); - for (int i = 0; i < 270; i += 4) - { - x2 = x1; - x2 >>= i; - printf("%s\n", x2.ToString().c_str()); - } - - - for (int i = 0; i < 100; i++) - { - uint256 k = (~uint256(0) >> i); - printf("%s\n", k.ToString().c_str()); - } - - for (int i = 0; i < 100; i++) - { - uint256 k = (~uint256(0) << i); - printf("%s\n", k.ToString().c_str()); - } - - return (0); -} - -#endif - #endif diff --git a/src/util.cpp b/src/util.cpp index 90746f4a..b69a7b08 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -1,26 +1,77 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2014 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#ifndef WIN32 -// for posix_fallocate -#ifdef __linux__ -#define _POSIX_C_SOURCE 200112L -#endif -#include -#include -#include -#endif +#include "util.h" #include "chainparams.h" -#include "util.h" +#include "netbase.h" #include "sync.h" -#include "version.h" #include "ui_interface.h" -#include +#include "uint256.h" +#include "version.h" + +#include + +#include + +#ifndef WIN32 +// for posix_fallocate +#ifdef __linux_ + +#ifdef _POSIX_C_SOURCE +#undef _POSIX_C_SOURCE +#endif + +#define _POSIX_C_SOURCE 200112L +#include + +#endif + +#include +#include +#include +#include + +#else + +#ifdef _MSC_VER +#pragma warning(disable:4786) +#pragma warning(disable:4804) +#pragma warning(disable:4805) +#pragma warning(disable:4717) +#endif + +#ifdef _WIN32_WINNT +#undef _WIN32_WINNT +#endif +#define _WIN32_WINNT 0x0501 + +#ifdef _WIN32_IE +#undef _WIN32_IE +#endif +#define _WIN32_IE 0x0501 + +#define WIN32_LEAN_AND_MEAN 1 +#ifndef NOMINMAX +#define NOMINMAX +#endif + +#include /* for _commit */ +#include +#endif + #include // for to_lower() +#include #include // for startswith() and endswith() +#include +#include +#include +#include +#include +#include +#include // Work around clang compilation problem in Boost 1.46: // /usr/include/boost/program_options/detail/config_file.hpp:163:17: error: call to function 'to_internal' that is neither visible in the template definition nor found by argument-dependent lookup @@ -32,58 +83,21 @@ namespace boost { } } -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef WIN32 -#ifdef _MSC_VER -#pragma warning(disable:4786) -#pragma warning(disable:4804) -#pragma warning(disable:4805) -#pragma warning(disable:4717) -#endif -#ifdef _WIN32_WINNT -#undef _WIN32_WINNT -#endif -#define _WIN32_WINNT 0x0501 -#ifdef _WIN32_IE -#undef _WIN32_IE -#endif -#define _WIN32_IE 0x0501 -#define WIN32_LEAN_AND_MEAN 1 -#ifndef NOMINMAX -#define NOMINMAX -#endif -#include /* for _commit */ -#include "shlobj.h" -#elif defined(__linux__) -# include -#endif using namespace std; map mapArgs; map > mapMultiArgs; bool fDebug = false; -bool fDebugNet = false; bool fPrintToConsole = false; -bool fPrintToDebugger = false; +bool fPrintToDebugLog = true; bool fDaemon = false; bool fServer = false; -bool fCommandLine = false; string strMiscWarning; bool fNoListen = false; bool fLogTimestamps = false; -CMedianFilter vTimeOffsets(200,0); volatile bool fReopenDebugLog = false; -bool fCachedPath[2] = {false, false}; +CClientUIInterface uiInterface; // Init OpenSSL library multithreading support static CCriticalSection** ppmutexOpenSSL; @@ -96,8 +110,6 @@ void locking_callback(int mode, int i, const char* file, int line) } } -LockedPageManager LockedPageManager::instance; - // Init class CInit { @@ -139,7 +151,7 @@ instance_of_cinit; void RandAddSeed() { // Seed with CPU performance counter - int64 nCounter = GetPerformanceCounter(); + int64_t nCounter = GetPerformanceCounter(); RAND_add(&nCounter, sizeof(nCounter), 1.5); memset(&nCounter, 0, sizeof(nCounter)); } @@ -149,7 +161,7 @@ void RandAddSeedPerfmon() RandAddSeed(); // This can take up to 2 seconds, so only do it every 10 minutes - static int64 nLastPerfmon; + static int64_t nLastPerfmon; if (GetTime() < nLastPerfmon + 10 * 60) return; nLastPerfmon = GetTime(); @@ -166,20 +178,20 @@ void RandAddSeedPerfmon() { RAND_add(pdata, nSize, nSize/100.0); OPENSSL_cleanse(pdata, nSize); - printf("RandAddSeed() %lu bytes\n", nSize); + LogPrint("rand", "RandAddSeed() %lu bytes\n", nSize); } #endif } -uint64 GetRand(uint64 nMax) +uint64_t GetRand(uint64_t nMax) { if (nMax == 0) return 0; // The range of the random source must be a multiple of the modulus // to give every possible output value an equal possibility - uint64 nRange = (std::numeric_limits::max() / nMax) * nMax; - uint64 nRand = 0; + uint64_t nRange = (std::numeric_limits::max() / nMax) * nMax; + uint64_t nRand = 0; do RAND_bytes((unsigned char*)&nRand, sizeof(nRand)); while (nRand >= nRange); @@ -198,15 +210,7 @@ uint256 GetRandHash() return hash; } - - - - - - -// -// OutputDebugStringF (aka printf -- there is a #define that we really -// should get rid of one day) has been broken a couple of times now +// LogPrintf() has been broken a couple of times now // by well-meaning people adding mutexes in the most straightforward way. // It breaks because it may be called by global destructors during shutdown. // Since the order of destruction of static/global objects is undefined, @@ -233,18 +237,43 @@ static void DebugPrintInit() mutexDebugLog = new boost::mutex(); } -int OutputDebugStringF(const char* pszFormat, ...) +bool LogAcceptCategory(const char* category) +{ + if (category != NULL) + { + if (!fDebug) + return false; + + // Give each thread quick access to -debug settings. + // This helps prevent issues debugging global destructors, + // where mapMultiArgs might be deleted before another + // global destructor calls LogPrint() + static boost::thread_specific_ptr > ptrCategory; + if (ptrCategory.get() == NULL) + { + const vector& categories = mapMultiArgs["-debug"]; + ptrCategory.reset(new set(categories.begin(), categories.end())); + // thread_specific_ptr automatically deletes the set when the thread ends. + } + const set& setCategories = *ptrCategory.get(); + + // if not debugging everything and not debugging specific category, LogPrint does nothing. + if (setCategories.count(string("")) == 0 && + setCategories.count(string(category)) == 0) + return false; + } + return true; +} + +int LogPrintStr(const std::string &str) { int ret = 0; // Returns total number of characters written if (fPrintToConsole) { // print to console - va_list arg_ptr; - va_start(arg_ptr, pszFormat); - ret += vprintf(pszFormat, arg_ptr); - va_end(arg_ptr); + ret = fwrite(str.data(), 1, str.size(), stdout); } - else if (!fPrintToDebugger) + else if (fPrintToDebugLog) { static bool fStartedNewLine = true; boost::call_once(&DebugPrintInit, debugPrintInitFlag); @@ -265,134 +294,25 @@ int OutputDebugStringF(const char* pszFormat, ...) // Debug print useful for profiling if (fLogTimestamps && fStartedNewLine) ret += fprintf(fileout, "%s ", DateTimeStrFormat("%Y-%m-%d %H:%M:%S", GetTime()).c_str()); - if (pszFormat[strlen(pszFormat) - 1] == '\n') + if (!str.empty() && str[str.size()-1] == '\n') fStartedNewLine = true; else fStartedNewLine = false; - va_list arg_ptr; - va_start(arg_ptr, pszFormat); - ret += vfprintf(fileout, pszFormat, arg_ptr); - va_end(arg_ptr); + ret = fwrite(str.data(), 1, str.size(), fileout); } -#ifdef WIN32 - if (fPrintToDebugger) - { - static CCriticalSection cs_OutputDebugStringF; - - // accumulate and output a line at a time - { - LOCK(cs_OutputDebugStringF); - static std::string buffer; - - va_list arg_ptr; - va_start(arg_ptr, pszFormat); - buffer += vstrprintf(pszFormat, arg_ptr); - va_end(arg_ptr); - - int line_start = 0, line_end; - while((line_end = buffer.find('\n', line_start)) != -1) - { - OutputDebugStringA(buffer.substr(line_start, line_end - line_start).c_str()); - line_start = line_end + 1; - ret += line_end-line_start; - } - buffer.erase(0, line_start); - } - } -#endif return ret; } -string vstrprintf(const char *format, va_list ap) -{ - char buffer[50000]; - char* p = buffer; - int limit = sizeof(buffer); - int ret; - loop - { - va_list arg_ptr; - va_copy(arg_ptr, ap); -#ifdef WIN32 - ret = _vsnprintf(p, limit, format, arg_ptr); -#else - ret = vsnprintf(p, limit, format, arg_ptr); -#endif - va_end(arg_ptr); - if (ret >= 0 && ret < limit) - break; - if (p != buffer) - delete[] p; - limit *= 2; - p = new char[limit]; - if (p == NULL) - throw std::bad_alloc(); - } - string str(p, p+ret); - if (p != buffer) - delete[] p; - return str; -} - -string real_strprintf(const char *format, int dummy, ...) -{ - va_list arg_ptr; - va_start(arg_ptr, dummy); - string str = vstrprintf(format, arg_ptr); - va_end(arg_ptr); - return str; -} - -string real_strprintf(const std::string &format, int dummy, ...) -{ - va_list arg_ptr; - va_start(arg_ptr, dummy); - string str = vstrprintf(format.c_str(), arg_ptr); - va_end(arg_ptr); - return str; -} - -bool error(const char *format, ...) -{ - va_list arg_ptr; - va_start(arg_ptr, format); - std::string str = vstrprintf(format, arg_ptr); - va_end(arg_ptr); - printf("ERROR: %s\n", str.c_str()); - return false; -} - - -void ParseString(const string& str, char c, vector& v) -{ - if (str.empty()) - return; - string::size_type i1 = 0; - string::size_type i2; - loop - { - i2 = str.find(c, i1); - if (i2 == str.npos) - { - v.push_back(str.substr(i1)); - return; - } - v.push_back(str.substr(i1, i2-i1)); - i1 = i2+1; - } -} - - -string FormatMoney(int64 n, bool fPlus) +string FormatMoney(int64_t n, bool fPlus) { // Note: not using straight sprintf here because we do NOT want // localized number formatting. - int64 n_abs = (n > 0 ? n : -n); - int64 quotient = n_abs/COIN; - int64 remainder = n_abs%COIN; - string str = strprintf("%"PRI64d".%08"PRI64d, quotient, remainder); + int64_t n_abs = (n > 0 ? n : -n); + int64_t quotient = n_abs/COIN; + int64_t remainder = n_abs%COIN; + string str = strprintf("%d.%08d", quotient, remainder); // Right-trim excess zeros before the decimal point: int nTrim = 0; @@ -409,15 +329,15 @@ string FormatMoney(int64 n, bool fPlus) } -bool ParseMoney(const string& str, int64& nRet) +bool ParseMoney(const string& str, int64_t& nRet) { return ParseMoney(str.c_str(), nRet); } -bool ParseMoney(const char* pszIn, int64& nRet) +bool ParseMoney(const char* pszIn, int64_t& nRet) { string strWhole; - int64 nUnits = 0; + int64_t nUnits = 0; const char* p = pszIn; while (isspace(*p)) p++; @@ -426,7 +346,7 @@ bool ParseMoney(const char* pszIn, int64& nRet) if (*p == '.') { p++; - int64 nMult = CENT*10; + int64_t nMult = CENT*10; while (isdigit(*p) && (nMult > 0)) { nUnits += nMult * (*p++ - '0'); @@ -447,15 +367,28 @@ bool ParseMoney(const char* pszIn, int64& nRet) return false; if (nUnits < 0 || nUnits > COIN) return false; - int64 nWhole = atoi64(strWhole); - int64 nValue = nWhole*COIN + nUnits; + int64_t nWhole = atoi64(strWhole); + int64_t nValue = nWhole*COIN + nUnits; nRet = nValue; return true; } +// safeChars chosen to allow simple messages/URLs/email addresses, but avoid anything +// even possibly remotely dangerous like & or > +static string safeChars("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890 .,;_/:?@"); +string SanitizeString(const string& str) +{ + string strResult; + for (std::string::size_type i = 0; i < str.size(); i++) + { + if (safeChars.find(str[i]) != std::string::npos) + strResult.push_back(str[i]); + } + return strResult; +} -static const signed char phexdigit[256] = +const signed char p_util_hexdigit[256] = { -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, @@ -475,9 +408,9 @@ static const signed char phexdigit[256] = bool IsHex(const string& str) { - BOOST_FOREACH(unsigned char c, str) + BOOST_FOREACH(char c, str) { - if (phexdigit[c] < 0) + if (HexDigit(c) < 0) return false; } return (str.size() > 0) && (str.size()%2 == 0); @@ -487,15 +420,15 @@ vector ParseHex(const char* psz) { // convert hex dump to vector vector vch; - loop + while (true) { while (isspace(*psz)) psz++; - signed char c = phexdigit[(unsigned char)*psz++]; + signed char c = HexDigit(*psz++); if (c == (signed char)-1) break; unsigned char n = (c << 4); - c = phexdigit[(unsigned char)*psz++]; + c = HexDigit(*psz++); if (c == (signed char)-1) break; n |= c; @@ -576,7 +509,7 @@ std::string GetArg(const std::string& strArg, const std::string& strDefault) return strDefault; } -int64 GetArg(const std::string& strArg, int64 nDefault) +int64_t GetArg(const std::string& strArg, int64_t nDefault) { if (mapArgs.count(strArg)) return atoi64(mapArgs[strArg]); @@ -941,7 +874,7 @@ string DecodeBase32(const string& str) bool WildcardMatch(const char* psz, const char* mask) { - loop + while (true) { switch (*mask) { @@ -994,22 +927,13 @@ static std::string FormatException(std::exception* pex, const char* pszThread) void LogException(std::exception* pex, const char* pszThread) { std::string message = FormatException(pex, pszThread); - printf("\n%s", message.c_str()); -} - -void PrintException(std::exception* pex, const char* pszThread) -{ - std::string message = FormatException(pex, pszThread); - printf("\n\n************************\n%s\n", message.c_str()); - fprintf(stderr, "\n\n************************\n%s\n", message.c_str()); - strMiscWarning = message; - throw; + LogPrintf("\n%s", message); } void PrintExceptionContinue(std::exception* pex, const char* pszThread) { std::string message = FormatException(pex, pszThread); - printf("\n\n************************\n%s\n", message.c_str()); + LogPrintf("\n\n************************\n%s\n", message); fprintf(stderr, "\n\n************************\n%s\n", message.c_str()); strMiscWarning = message; } @@ -1034,7 +958,7 @@ boost::filesystem::path GetDefaultDataDir() #ifdef MAC_OSX // Mac pathRet /= "Library/Application Support"; - fs::create_directory(pathRet); + TryCreateDirectory(pathRet); return pathRet / "Myriadcoin"; #else // Unix @@ -1043,22 +967,25 @@ boost::filesystem::path GetDefaultDataDir() #endif } +static boost::filesystem::path pathCached[CChainParams::MAX_NETWORK_TYPES+1]; +static CCriticalSection csPathCached; + const boost::filesystem::path &GetDataDir(bool fNetSpecific) { namespace fs = boost::filesystem; - static fs::path pathCached[2]; - static CCriticalSection csPathCached; - - fs::path &path = pathCached[fNetSpecific]; - - // This can be called during exceptions by printf, so we cache the - // value so we don't have to do memory allocations after that. - if (fCachedPath[fNetSpecific]) - return path; - LOCK(csPathCached); + int nNet = CChainParams::MAX_NETWORK_TYPES; + if (fNetSpecific) nNet = Params().NetworkID(); + + fs::path &path = pathCached[nNet]; + + // This can be called during exceptions by LogPrintf(), so we cache the + // value so we don't have to do memory allocations after that. + if (!path.empty()) + return path; + if (mapArgs.count("-datadir")) { path = fs::system_complete(mapArgs["-datadir"]); if (!fs::is_directory(path)) { @@ -1073,10 +1000,15 @@ const boost::filesystem::path &GetDataDir(bool fNetSpecific) fs::create_directories(path); - fCachedPath[fNetSpecific] = true; return path; } +void ClearDatadirCache() +{ + std::fill(&pathCached[0], &pathCached[CChainParams::MAX_NETWORK_TYPES+1], + boost::filesystem::path()); +} + boost::filesystem::path GetConfigFile() { boost::filesystem::path pathConfigFile(GetArg("-conf", "myriadcoin.conf")); @@ -1089,17 +1021,14 @@ void ReadConfigFile(map& mapSettingsRet, { boost::filesystem::ifstream streamConfig(GetConfigFile()); if (!streamConfig.good()) - return; // No myriadcoin.conf file is OK - - // clear path cache after loading config file - fCachedPath[0] = fCachedPath[1] = false; + return; // No bitcoin.conf file is OK set setOptions; setOptions.insert("*"); for (boost::program_options::detail::config_file_iterator it(streamConfig, setOptions), end; it != end; ++it) { - // Don't overwrite existing settings so command line settings override myriadcoin.conf + // Don't overwrite existing settings so command line settings override bitcoin.conf string strKey = string("-") + it->string_key; if (mapSettingsRet.count(strKey) == 0) { @@ -1109,6 +1038,8 @@ void ReadConfigFile(map& mapSettingsRet, } mapMultiSettingsRet[strKey].push_back(it->value[0]); } + // If datadir is changed in .conf file: + ClearDatadirCache(); } boost::filesystem::path GetPidFile() @@ -1118,6 +1049,7 @@ boost::filesystem::path GetPidFile() return pathPidFile; } +#ifndef WIN32 void CreatePidFile(const boost::filesystem::path &path, pid_t pid) { FILE* file = fopen(path.string().c_str(), "w"); @@ -1127,6 +1059,7 @@ void CreatePidFile(const boost::filesystem::path &path, pid_t pid) fclose(file); } } +#endif bool RenameOver(boost::filesystem::path src, boost::filesystem::path dest) { @@ -1139,30 +1072,40 @@ bool RenameOver(boost::filesystem::path src, boost::filesystem::path dest) #endif /* WIN32 */ } + +// Ignores exceptions thrown by boost's create_directory if the requested directory exists. +// Specifically handles case where path p exists, but it wasn't possible for the user to write to the parent directory. +bool TryCreateDirectory(const boost::filesystem::path& p) +{ + try + { + return boost::filesystem::create_directory(p); + } catch (boost::filesystem::filesystem_error) { + if (!boost::filesystem::exists(p) || !boost::filesystem::is_directory(p)) + throw; + } + + // create_directory didn't create the directory, it had to have existed already + return false; +} + void FileCommit(FILE *fileout) { - fflush(fileout); // harmless if redundantly called + fflush(fileout); // harmless if redundantly called #ifdef WIN32 - _commit(_fileno(fileout)); + HANDLE hFile = (HANDLE)_get_osfhandle(_fileno(fileout)); + FlushFileBuffers(hFile); #else #if defined(__linux__) || defined(__NetBSD__) fdatasync(fileno(fileout)); + #elif defined(__APPLE__) && defined(F_FULLFSYNC) + fcntl(fileno(fileout), F_FULLFSYNC, 0); #else fsync(fileno(fileout)); #endif #endif } -int GetFilesize(FILE* file) -{ - int nSavePos = ftell(file); - int nFilesize = -1; - if (fseek(file, 0, SEEK_END) == 0) - nFilesize = ftell(file); - fseek(file, nSavePos, SEEK_SET); - return nFilesize; -} - bool TruncateFile(FILE *file, unsigned int length) { #if defined(WIN32) return _chsize(_fileno(file), length) == 0; @@ -1199,7 +1142,7 @@ void AllocateFileRange(FILE *file, unsigned int offset, unsigned int length) { // Windows-specific version HANDLE hFile = (HANDLE)_get_osfhandle(_fileno(file)); LARGE_INTEGER nFileSize; - int64 nEndPos = (int64)offset + length; + int64_t nEndPos = (int64_t)offset + length; nFileSize.u.LowPart = nEndPos & 0xFFFFFFFF; nFileSize.u.HighPart = nEndPos >> 32; SetFilePointerEx(hFile, nFileSize, 0, FILE_BEGIN); @@ -1241,7 +1184,7 @@ void ShrinkDebugFile() // Scroll debug.log if it's getting too big boost::filesystem::path pathLog = GetDataDir() / "debug.log"; FILE* file = fopen(pathLog.string().c_str(), "r"); - if (file && GetFilesize(file) > 10 * 1000000) + if (file && boost::filesystem::file_size(pathLog) > 10 * 1000000) { // Restart the file with some of the end char pch[200000]; @@ -1260,13 +1203,6 @@ void ShrinkDebugFile() fclose(file); } - - - - - - - // // "Never go to sea with two chronometers; take one or three." // Our three time sources are: @@ -1274,48 +1210,52 @@ void ShrinkDebugFile() // - Median of other nodes clocks // - The user (asking the user to fix the system clock if the first two disagree) // -static int64 nMockTime = 0; // For unit testing +static int64_t nMockTime = 0; // For unit testing -int64 GetTime() +int64_t GetTime() { if (nMockTime) return nMockTime; return time(NULL); } -void SetMockTime(int64 nMockTimeIn) +void SetMockTime(int64_t nMockTimeIn) { nMockTime = nMockTimeIn; } -static int64 nTimeOffset = 0; +static CCriticalSection cs_nTimeOffset; +static int64_t nTimeOffset = 0; -int64 GetTimeOffset() +int64_t GetTimeOffset() { + LOCK(cs_nTimeOffset); return nTimeOffset; } -int64 GetAdjustedTime() +int64_t GetAdjustedTime() { return GetTime() + GetTimeOffset(); } -void AddTimeData(const CNetAddr& ip, int64 nTime) +void AddTimeData(const CNetAddr& ip, int64_t nTime) { - int64 nOffsetSample = nTime - GetTime(); + int64_t nOffsetSample = nTime - GetTime(); + LOCK(cs_nTimeOffset); // Ignore duplicates static set setKnown; if (!setKnown.insert(ip).second) return; // Add data + static CMedianFilter vTimeOffsets(200,0); vTimeOffsets.input(nOffsetSample); - printf("Added time data, samples %d, offset %+"PRI64d" (%+"PRI64d" minutes)\n", vTimeOffsets.size(), nOffsetSample, nOffsetSample/60); + LogPrintf("Added time data, samples %d, offset %+d (%+d minutes)\n", vTimeOffsets.size(), nOffsetSample, nOffsetSample/60); if (vTimeOffsets.size() >= 5 && vTimeOffsets.size() % 2 == 1) { - int64 nMedian = vTimeOffsets.median(); - std::vector vSorted = vTimeOffsets.sorted(); + int64_t nMedian = vTimeOffsets.median(); + std::vector vSorted = vTimeOffsets.sorted(); // Only let other nodes change our time by so much if (abs64(nMedian) < 70 * 60) { @@ -1330,7 +1270,7 @@ void AddTimeData(const CNetAddr& ip, int64 nTime) { // If nobody has a time different than ours but within 5 minutes of ours, give a warning bool fMatch = false; - BOOST_FOREACH(int64 nOffset, vSorted) + BOOST_FOREACH(int64_t nOffset, vSorted) if (nOffset != 0 && abs64(nOffset) < 5 * 60) fMatch = true; @@ -1339,17 +1279,17 @@ void AddTimeData(const CNetAddr& ip, int64 nTime) fDone = true; string strMessage = _("Warning: Please check that your computer's date and time are correct! If your clock is wrong Myriadcoin will not work properly."); strMiscWarning = strMessage; - printf("*** %s\n", strMessage.c_str()); + LogPrintf("*** %s\n", strMessage); uiInterface.ThreadSafeMessageBox(strMessage, "", CClientUIInterface::MSG_WARNING); } } } if (fDebug) { - BOOST_FOREACH(int64 n, vSorted) - printf("%+"PRI64d" ", n); - printf("| "); + BOOST_FOREACH(int64_t n, vSorted) + LogPrintf("%+d ", n); + LogPrintf("| "); } - printf("nTimeOffset = %+"PRI64d" (%+"PRI64d" minutes)\n", nTimeOffset, nTimeOffset/60); + LogPrintf("nTimeOffset = %+d (%+d minutes)\n", nTimeOffset, nTimeOffset/60); } } @@ -1411,7 +1351,7 @@ boost::filesystem::path GetSpecialFolderPath(int nFolder, bool fCreate) return fs::path(pszPath); } - printf("SHGetSpecialFolderPathA() failed, could not obtain requested path.\n"); + LogPrintf("SHGetSpecialFolderPathA() failed, could not obtain requested path.\n"); return fs::path(""); } #endif @@ -1431,7 +1371,7 @@ boost::filesystem::path GetTempPath() { path = boost::filesystem::path("/tmp"); #endif if (path.empty() || !boost::filesystem::is_directory(path)) { - printf("GetTempPath(): failed to find temp path\n"); + LogPrintf("GetTempPath(): failed to find temp path\n"); return boost::filesystem::path(""); } return path; @@ -1442,7 +1382,7 @@ void runCommand(std::string strCommand) { int nErr = ::system(strCommand.c_str()); if (nErr) - printf("runCommand error: system(%s) returned %d\n", strCommand.c_str(), nErr); + LogPrintf("runCommand error: system(%s) returned %d\n", strCommand, nErr); } void RenameThread(const char* name) @@ -1469,14 +1409,29 @@ void RenameThread(const char* name) #endif } -bool NewThread(void(*pfn)(void*), void* parg) +void SetupEnvironment() { + #ifndef WIN32 try { - boost::thread(pfn, parg); // thread detaches when out of scope - } catch(boost::thread_resource_error &e) { - printf("Error creating thread: %s\n", e.what()); - return false; + #if BOOST_FILESYSTEM_VERSION == 3 + boost::filesystem::path::codecvt(); // Raises runtime error if current locale is invalid + #else // boost filesystem v2 + std::locale(); // Raises runtime error if current locale is invalid + #endif + } catch(std::runtime_error &e) + { + setenv("LC_ALL", "C", 1); // Force C locale } - return true; + #endif +} + +std::string DateTimeStrFormat(const char* pszFormat, int64_t nTime) +{ + // std::locale takes ownership of the pointer + std::locale loc(std::locale::classic(), new boost::posix_time::time_facet(pszFormat)); + std::stringstream ss; + ss.imbue(loc); + ss << boost::posix_time::from_time_t(nTime); + return ss.str(); } diff --git a/src/util.h b/src/util.h index 48da12c4..89c60166 100644 --- a/src/util.h +++ b/src/util.h @@ -1,79 +1,49 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2014 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. + #ifndef BITCOIN_UTIL_H #define BITCOIN_UTIL_H -#include "uint256.h" - -#include - -#ifndef WIN32 -#include -#include -#include +#if defined(HAVE_CONFIG_H) +#include "bitcoin-config.h" #endif + +#include "compat.h" +#include "serialize.h" +#include "tinyformat.h" + +#include +#include #include -#include +#include +#include +#include #include #include -#include -#include -#include -#include +#ifndef WIN32 +#include +#include +#include +#endif + #include -#include -#include +#include -#include "netbase.h" // for AddTimeData +class CNetAddr; +class uint256; -typedef long long int64; -typedef unsigned long long uint64; +static const int64_t COIN = 100000000; +static const int64_t CENT = 1000000; -static const int64 COIN = 100000000; -static const int64 CENT = 1000000; - -#define loop for (;;) #define BEGIN(a) ((char*)&(a)) #define END(a) ((char*)&((&(a))[1])) #define UBEGIN(a) ((unsigned char*)&(a)) #define UEND(a) ((unsigned char*)&((&(a))[1])) #define ARRAYLEN(array) (sizeof(array)/sizeof((array)[0])) -#ifndef PRI64d -#if defined(_MSC_VER) || defined(__MSVCRT__) -#define PRI64d "I64d" -#define PRI64u "I64u" -#define PRI64x "I64x" -#else -#define PRI64d "lld" -#define PRI64u "llu" -#define PRI64x "llx" -#endif -#endif - -/* Format characters for (s)size_t and ptrdiff_t */ -#if defined(_MSC_VER) || defined(__MSVCRT__) - /* (s)size_t and ptrdiff_t have the same size specifier in MSVC: - http://msdn.microsoft.com/en-us/library/tcxf1dw6%28v=vs.100%29.aspx - */ - #define PRIszx "Ix" - #define PRIszu "Iu" - #define PRIszd "Id" - #define PRIpdx "Ix" - #define PRIpdu "Iu" - #define PRIpdd "Id" -#else /* C99 standard */ - #define PRIszx "zx" - #define PRIszu "zu" - #define PRIszd "zd" - #define PRIpdx "tx" - #define PRIpdu "tu" - #define PRIpdd "td" -#endif - // This is needed because the foreach macro can't get over the comma in pair #define PAIRTYPE(t1, t2) std::pair @@ -92,7 +62,6 @@ T* alignup(T* p) } #ifdef WIN32 -#define MSG_NOSIGNAL 0 #define MSG_DONTWAIT 0 #ifndef S_IRUSR @@ -102,46 +71,34 @@ T* alignup(T* p) #else #define MAX_PATH 1024 #endif +// As Solaris does not have the MSG_NOSIGNAL flag for send(2) syscall, it is defined as 0 +#if !defined(HAVE_MSG_NOSIGNAL) && !defined(MSG_NOSIGNAL) +#define MSG_NOSIGNAL 0 +#endif -inline void MilliSleep(int64 n) +inline void MilliSleep(int64_t n) { // Boost's sleep_for was uninterruptable when backed by nanosleep from 1.50 // until fixed in 1.52. Use the deprecated sleep method for the broken case. // See: https://svn.boost.org/trac/boost/ticket/7238 - -#if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200) +#if defined(HAVE_WORKING_BOOST_SLEEP_FOR) boost::this_thread::sleep_for(boost::chrono::milliseconds(n)); -#else +#elif defined(HAVE_WORKING_BOOST_SLEEP) boost::this_thread::sleep(boost::posix_time::milliseconds(n)); +#else +//should never get here +#error missing boost sleep implementation #endif } -/* This GNU C extension enables the compiler to check the format string against the parameters provided. - * X is the number of the "format string" parameter, and Y is the number of the first variadic parameter. - * Parameters count from 1. - */ -#ifdef __GNUC__ -#define ATTR_WARN_PRINTF(X,Y) __attribute__((format(printf,X,Y))) -#else -#define ATTR_WARN_PRINTF(X,Y) -#endif - - - - - - extern std::map mapArgs; extern std::map > mapMultiArgs; extern bool fDebug; -extern bool fDebugNet; extern bool fPrintToConsole; -extern bool fPrintToDebugger; -extern bool fDaemon; +extern bool fPrintToDebugLog; extern bool fServer; -extern bool fCommandLine; extern std::string strMiscWarning; extern bool fNoListen; extern bool fLogTimestamps; @@ -149,41 +106,58 @@ extern volatile bool fReopenDebugLog; void RandAddSeed(); void RandAddSeedPerfmon(); -int ATTR_WARN_PRINTF(1,2) OutputDebugStringF(const char* pszFormat, ...); +void SetupEnvironment(); -/* - Rationale for the real_strprintf / strprintf construction: - It is not allowed to use va_start with a pass-by-reference argument. - (C++ standard, 18.7, paragraph 3). Use a dummy argument to work around this, and use a - macro to keep similar semantics. -*/ +/* Return true if log accepts specified category */ +bool LogAcceptCategory(const char* category); +/* Send a string to the log output */ +int LogPrintStr(const std::string &str); -/** Overload strprintf for char*, so that GCC format type warnings can be given */ -std::string ATTR_WARN_PRINTF(1,3) real_strprintf(const char *format, int dummy, ...); -/** Overload strprintf for std::string, to be able to use it with _ (translation). - * This will not support GCC format type warnings (-Wformat) so be careful. +#define strprintf tfm::format +#define LogPrintf(...) LogPrint(NULL, __VA_ARGS__) + +/* When we switch to C++11, this can be switched to variadic templates instead + * of this macro-based construction (see tinyformat.h). */ -std::string real_strprintf(const std::string &format, int dummy, ...); -#define strprintf(format, ...) real_strprintf(format, 0, __VA_ARGS__) -std::string vstrprintf(const char *format, va_list ap); +#define MAKE_ERROR_AND_LOG_FUNC(n) \ + /* Print to debug.log if -debug=category switch is given OR category is NULL. */ \ + template \ + static inline int LogPrint(const char* category, const char* format, TINYFORMAT_VARARGS(n)) \ + { \ + if(!LogAcceptCategory(category)) return 0; \ + return LogPrintStr(tfm::format(format, TINYFORMAT_PASSARGS(n))); \ + } \ + /* Log error and return false */ \ + template \ + static inline bool error(const char* format, TINYFORMAT_VARARGS(n)) \ + { \ + LogPrintStr("ERROR: " + tfm::format(format, TINYFORMAT_PASSARGS(n)) + "\n"); \ + return false; \ + } -bool ATTR_WARN_PRINTF(1,2) error(const char *format, ...); +TINYFORMAT_FOREACH_ARGNUM(MAKE_ERROR_AND_LOG_FUNC) -/* Redefine printf so that it directs output to debug.log - * - * Do this *after* defining the other printf-like functions, because otherwise the - * __attribute__((format(printf,X,Y))) gets expanded to __attribute__((format(OutputDebugStringF,X,Y))) - * which confuses gcc. +/* Zero-arg versions of logging and error, these are not covered by + * TINYFORMAT_FOREACH_ARGNUM */ -#define printf OutputDebugStringF +static inline int LogPrint(const char* category, const char* format) +{ + if(!LogAcceptCategory(category)) return 0; + return LogPrintStr(format); +} +static inline bool error(const char* format) +{ + LogPrintStr(std::string("ERROR: ") + format + "\n"); + return false; +} + void LogException(std::exception* pex, const char* pszThread); -void PrintException(std::exception* pex, const char* pszThread); void PrintExceptionContinue(std::exception* pex, const char* pszThread); -void ParseString(const std::string& str, char c, std::vector& v); -std::string FormatMoney(int64 n, bool fPlus=false); -bool ParseMoney(const std::string& str, int64& nRet); -bool ParseMoney(const char* pszIn, int64& nRet); +std::string FormatMoney(int64_t n, bool fPlus=false); +bool ParseMoney(const std::string& str, int64_t& nRet); +bool ParseMoney(const char* pszIn, int64_t& nRet); +std::string SanitizeString(const std::string& str); std::vector ParseHex(const char* psz); std::vector ParseHex(const std::string& str); bool IsHex(const std::string& str); @@ -199,16 +173,18 @@ void ParseParameters(int argc, const char*const argv[]); bool WildcardMatch(const char* psz, const char* mask); bool WildcardMatch(const std::string& str, const std::string& mask); void FileCommit(FILE *fileout); -int GetFilesize(FILE* file); bool TruncateFile(FILE *file, unsigned int length); int RaiseFileDescriptorLimit(int nMinFD); void AllocateFileRange(FILE *file, unsigned int offset, unsigned int length); bool RenameOver(boost::filesystem::path src, boost::filesystem::path dest); +bool TryCreateDirectory(const boost::filesystem::path& p); boost::filesystem::path GetDefaultDataDir(); const boost::filesystem::path &GetDataDir(bool fNetSpecific = true); boost::filesystem::path GetConfigFile(); boost::filesystem::path GetPidFile(); +#ifndef WIN32 void CreatePidFile(const boost::filesystem::path &path, pid_t pid); +#endif void ReadConfigFile(std::map& mapSettingsRet, std::map >& mapMultiSettingsRet); #ifdef WIN32 boost::filesystem::path GetSpecialFolderPath(int nFolder, bool fCreate = true); @@ -216,15 +192,15 @@ boost::filesystem::path GetSpecialFolderPath(int nFolder, bool fCreate = true); boost::filesystem::path GetTempPath(); void ShrinkDebugFile(); int GetRandInt(int nMax); -uint64 GetRand(uint64 nMax); +uint64_t GetRand(uint64_t nMax); uint256 GetRandHash(); -int64 GetTime(); -void SetMockTime(int64 nMockTimeIn); -int64 GetAdjustedTime(); -int64 GetTimeOffset(); +int64_t GetTime(); +void SetMockTime(int64_t nMockTimeIn); +int64_t GetAdjustedTime(); +int64_t GetTimeOffset(); std::string FormatFullVersion(); std::string FormatSubVersion(const std::string& name, int nClientVersion, const std::vector& comments); -void AddTimeData(const CNetAddr& ip, int64 nTime); +void AddTimeData(const CNetAddr& ip, int64_t nTime); void runCommand(std::string strCommand); @@ -235,9 +211,9 @@ void runCommand(std::string strCommand); -inline std::string i64tostr(int64 n) +inline std::string i64tostr(int64_t n) { - return strprintf("%"PRI64d, n); + return strprintf("%d", n); } inline std::string itostr(int n) @@ -245,7 +221,7 @@ inline std::string itostr(int n) return strprintf("%d", n); } -inline int64 atoi64(const char* psz) +inline int64_t atoi64(const char* psz) { #ifdef _MSC_VER return _atoi64(psz); @@ -254,7 +230,7 @@ inline int64 atoi64(const char* psz) #endif } -inline int64 atoi64(const std::string& str) +inline int64_t atoi64(const std::string& str) { #ifdef _MSC_VER return _atoi64(str.c_str()); @@ -273,12 +249,12 @@ inline int roundint(double d) return (int)(d > 0 ? d + 0.5 : d - 0.5); } -inline int64 roundint64(double d) +inline int64_t roundint64(double d) { - return (int64)(d > 0 ? d + 0.5 : d - 0.5); + return (int64_t)(d > 0 ? d + 0.5 : d - 0.5); } -inline int64 abs64(int64 n) +inline int64_t abs64(int64_t n) { return (n >= 0 ? n : -n); } @@ -311,47 +287,40 @@ inline std::string HexStr(const T& vch, bool fSpaces=false) template void PrintHex(const T pbegin, const T pend, const char* pszFormat="%s", bool fSpaces=true) { - printf(pszFormat, HexStr(pbegin, pend, fSpaces).c_str()); + LogPrintf(pszFormat, HexStr(pbegin, pend, fSpaces).c_str()); } inline void PrintHex(const std::vector& vch, const char* pszFormat="%s", bool fSpaces=true) { - printf(pszFormat, HexStr(vch, fSpaces).c_str()); + LogPrintf(pszFormat, HexStr(vch, fSpaces).c_str()); } -inline int64 GetPerformanceCounter() +inline int64_t GetPerformanceCounter() { - int64 nCounter = 0; + int64_t nCounter = 0; #ifdef WIN32 QueryPerformanceCounter((LARGE_INTEGER*)&nCounter); #else timeval t; gettimeofday(&t, NULL); - nCounter = (int64) t.tv_sec * 1000000 + t.tv_usec; + nCounter = (int64_t) t.tv_sec * 1000000 + t.tv_usec; #endif return nCounter; } -inline int64 GetTimeMillis() +inline int64_t GetTimeMillis() { return (boost::posix_time::ptime(boost::posix_time::microsec_clock::universal_time()) - boost::posix_time::ptime(boost::gregorian::date(1970,1,1))).total_milliseconds(); } -inline int64 GetTimeMicros() +inline int64_t GetTimeMicros() { return (boost::posix_time::ptime(boost::posix_time::microsec_clock::universal_time()) - boost::posix_time::ptime(boost::gregorian::date(1970,1,1))).total_microseconds(); } -inline std::string DateTimeStrFormat(const char* pszFormat, int64 nTime) -{ - time_t n = nTime; - struct tm* ptmTime = gmtime(&n); - char pszTime[200]; - strftime(pszTime, sizeof(pszTime), pszFormat, ptmTime); - return pszTime; -} +std::string DateTimeStrFormat(const char* pszFormat, int64_t nTime); template void skipspaces(T& it) @@ -385,7 +354,7 @@ std::string GetArg(const std::string& strArg, const std::string& strDefault); * @param default (e.g. 1) * @return command-line argument (0 if invalid number) or default value */ -int64 GetArg(const std::string& strArg, int64 nDefault); +int64_t GetArg(const std::string& strArg, int64_t nDefault); /** * Return boolean argument or default value @@ -436,6 +405,21 @@ static inline uint32_t insecure_rand(void) */ void seed_insecure_rand(bool fDeterministic=false); +/** + * Timing-attack-resistant comparison. + * Takes time proportional to length + * of first argument. + */ +template +bool TimingResistantEqual(const T& a, const T& b) +{ + if (b.size() == 0) return a.size() == 0; + size_t accumulator = a.size() ^ b.size(); + for (size_t i = 0; i < a.size(); i++) + accumulator |= a[i] ^ b[i%b.size()]; + return accumulator == 0; +} + /** Median filter over a stream of values. * Returns the median of the last N numbers */ @@ -499,6 +483,10 @@ inline void SetThreadPriority(int nPriority) } #else +// PRIO_MAX is not defined on Solaris +#ifndef PRIO_MAX +#define PRIO_MAX 20 +#endif #define THREAD_PRIORITY_LOWEST PRIO_MAX #define THREAD_PRIORITY_BELOW_NORMAL 2 #define THREAD_PRIORITY_NORMAL 0 @@ -531,11 +519,11 @@ inline uint32_t ByteReverse(uint32_t value) // or maybe: // boost::function f = boost::bind(&FunctionWithArg, argument); // threadGroup.create_thread(boost::bind(&LoopForever >, "nothing", f, milliseconds)); -template void LoopForever(const char* name, Callable func, int64 msecs) +template void LoopForever(const char* name, Callable func, int64_t msecs) { std::string s = strprintf("bitcoin-%s", name); RenameThread(s.c_str()); - printf("%s thread start\n", name); + LogPrintf("%s thread start\n", name); try { while (1) @@ -546,14 +534,16 @@ template void LoopForever(const char* name, Callable func, } catch (boost::thread_interrupted) { - printf("%s thread stop\n", name); + LogPrintf("%s thread stop\n", name); throw; } catch (std::exception& e) { - PrintException(&e, name); + PrintExceptionContinue(&e, name); + throw; } catch (...) { - PrintException(NULL, name); + PrintExceptionContinue(NULL, name); + throw; } } // .. and a wrapper that just calls func once @@ -563,23 +553,23 @@ template void TraceThread(const char* name, Callable func) RenameThread(s.c_str()); try { - printf("%s thread start\n", name); + LogPrintf("%s thread start\n", name); func(); - printf("%s thread exit\n", name); + LogPrintf("%s thread exit\n", name); } catch (boost::thread_interrupted) { - printf("%s thread interrupt\n", name); + LogPrintf("%s thread interrupt\n", name); throw; } catch (std::exception& e) { - PrintException(&e, name); + PrintExceptionContinue(&e, name); + throw; } catch (...) { - PrintException(NULL, name); + PrintExceptionContinue(NULL, name); + throw; } } -bool NewThread(void(*pfn)(void*), void* parg); - #endif diff --git a/src/version.cpp b/src/version.cpp index d9d6724a..433d46dc 100644 --- a/src/version.cpp +++ b/src/version.cpp @@ -1,10 +1,11 @@ // Copyright (c) 2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include #include "version.h" +#include + // Name of client reported in the 'version' message. Report the same name // for both bitcoind and bitcoin-qt, to make it harder for attackers to // target servers or GUI users specifically. @@ -33,12 +34,16 @@ const std::string CLIENT_NAME("Satoshi"); # include "build.h" #endif -// git will put "#define GIT_ARCHIVE 1" on the next line inside archives. $Format:%n#define GIT_ARCHIVE 1$ +// git will put "#define GIT_ARCHIVE 1" on the next line inside archives. +#define GIT_ARCHIVE 1 #ifdef GIT_ARCHIVE -# define GIT_COMMIT_ID "$Format:%h$" -# define GIT_COMMIT_DATE "$Format:%cD$" +# define GIT_COMMIT_ID "354c0f3" +# define GIT_COMMIT_DATE "Thu, 19 Jun 2014 09:51:15 +0200" #endif +#define BUILD_DESC_WITH_SUFFIX(maj,min,rev,build,suffix) \ + "v" DO_STRINGIZE(maj) "." DO_STRINGIZE(min) "." DO_STRINGIZE(rev) "." DO_STRINGIZE(build) "-" DO_STRINGIZE(suffix) + #define BUILD_DESC_FROM_COMMIT(maj,min,rev,build,commit) \ "v" DO_STRINGIZE(maj) "." DO_STRINGIZE(min) "." DO_STRINGIZE(rev) "." DO_STRINGIZE(build) "-g" commit @@ -46,7 +51,9 @@ const std::string CLIENT_NAME("Satoshi"); "v" DO_STRINGIZE(maj) "." DO_STRINGIZE(min) "." DO_STRINGIZE(rev) "." DO_STRINGIZE(build) "-unk" #ifndef BUILD_DESC -# ifdef GIT_COMMIT_ID +# ifdef BUILD_SUFFIX +# define BUILD_DESC BUILD_DESC_WITH_SUFFIX(CLIENT_VERSION_MAJOR, CLIENT_VERSION_MINOR, CLIENT_VERSION_REVISION, CLIENT_VERSION_BUILD, BUILD_SUFFIX) +# elif defined(GIT_COMMIT_ID) # define BUILD_DESC BUILD_DESC_FROM_COMMIT(CLIENT_VERSION_MAJOR, CLIENT_VERSION_MINOR, CLIENT_VERSION_REVISION, CLIENT_VERSION_BUILD, GIT_COMMIT_ID) # else # define BUILD_DESC BUILD_DESC_FROM_UNKNOWN(CLIENT_VERSION_MAJOR, CLIENT_VERSION_MINOR, CLIENT_VERSION_REVISION, CLIENT_VERSION_BUILD) diff --git a/src/version.h b/src/version.h index f1e7c4cd..3d1abacb 100644 --- a/src/version.h +++ b/src/version.h @@ -5,6 +5,7 @@ #define BITCOIN_VERSION_H #include "clientversion.h" + #include // @@ -25,10 +26,13 @@ extern const std::string CLIENT_DATE; // network protocol versioning // -static const int PROTOCOL_VERSION = 70001; +static const int PROTOCOL_VERSION = 70002; -// earlier versions not supported as of Feb 2012, and are disconnected -static const int MIN_PROTO_VERSION = 209; +// intial proto version, to be increased after version/verack negotiation +static const int INIT_PROTO_VERSION = 209; + +// disconnect from peers older than this proto version +static const int MIN_PEER_PROTO_VERSION = 209; // nTime field added to CAddress, starting with this version; // if possible, avoid requesting addresses nodes older than this diff --git a/src/wallet.cpp b/src/wallet.cpp index 488787f9..fa7aecdd 100644 --- a/src/wallet.cpp +++ b/src/wallet.cpp @@ -1,17 +1,23 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2014 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "wallet.h" -#include "walletdb.h" -#include "crypter.h" -#include "ui_interface.h" + #include "base58.h" +#include "checkpoints.h" +#include "coincontrol.h" +#include "net.h" + #include +#include using namespace std; +// Settings +int64_t nTransactionFee = DEFAULT_TRANSACTION_FEE; +bool bSpendZeroConfChange = true; ////////////////////////////////////////////////////////////////////////////// // @@ -20,15 +26,25 @@ using namespace std; struct CompareValueOnly { - bool operator()(const pair >& t1, - const pair >& t2) const + bool operator()(const pair >& t1, + const pair >& t2) const { return t1.first < t2.first; } }; +const CWalletTx* CWallet::GetWalletTx(const uint256& hash) const +{ + LOCK(cs_wallet); + std::map::const_iterator it = mapWallet.find(hash); + if (it == mapWallet.end()) + return NULL; + return &(it->second); +} + CPubKey CWallet::GenerateNewKey() { + AssertLockHeld(cs_wallet); // mapKeyMetadata bool fCompressed = CanSupportFeature(FEATURE_COMPRPUBKEY); // default to compressed public keys if we want 0.6.0 wallets RandAddSeedPerfmon(); @@ -42,7 +58,7 @@ CPubKey CWallet::GenerateNewKey() CPubKey pubkey = secret.GetPubKey(); // Create new metadata - int64 nCreationTime = GetTime(); + int64_t nCreationTime = GetTime(); mapKeyMetadata[pubkey.GetID()] = CKeyMetadata(nCreationTime); if (!nTimeFirstKey || nCreationTime < nTimeFirstKey) nTimeFirstKey = nCreationTime; @@ -54,6 +70,7 @@ CPubKey CWallet::GenerateNewKey() bool CWallet::AddKeyPubKey(const CKey& secret, const CPubKey &pubkey) { + AssertLockHeld(cs_wallet); // mapKeyMetadata if (!CCryptoKeyStore::AddKeyPubKey(secret, pubkey)) return false; if (!fFileBacked) @@ -89,6 +106,7 @@ bool CWallet::AddCryptedKey(const CPubKey &vchPubKey, bool CWallet::LoadKeyMetadata(const CPubKey &pubkey, const CKeyMetadata &meta) { + AssertLockHeld(cs_wallet); // mapKeyMetadata if (meta.nCreateTime && (!nTimeFirstKey || meta.nCreateTime < nTimeFirstKey)) nTimeFirstKey = meta.nCreateTime; @@ -148,7 +166,7 @@ bool CWallet::ChangeWalletPassphrase(const SecureString& strOldWalletPassphrase, return false; if (CCryptoKeyStore::Unlock(vMasterKey)) { - int64 nStartTime = GetTimeMillis(); + int64_t nStartTime = GetTimeMillis(); crypter.SetKeyFromPassphrase(strNewWalletPassphrase, pMasterKey.second.vchSalt, pMasterKey.second.nDeriveIterations, pMasterKey.second.nDerivationMethod); pMasterKey.second.nDeriveIterations = pMasterKey.second.nDeriveIterations * (100 / ((double)(GetTimeMillis() - nStartTime))); @@ -159,7 +177,7 @@ bool CWallet::ChangeWalletPassphrase(const SecureString& strOldWalletPassphrase, if (pMasterKey.second.nDeriveIterations < 25000) pMasterKey.second.nDeriveIterations = 25000; - printf("Wallet passphrase changed to an nDeriveIterations of %i\n", pMasterKey.second.nDeriveIterations); + LogPrintf("Wallet passphrase changed to an nDeriveIterations of %i\n", pMasterKey.second.nDeriveIterations); if (!crypter.SetKeyFromPassphrase(strNewWalletPassphrase, pMasterKey.second.vchSalt, pMasterKey.second.nDeriveIterations, pMasterKey.second.nDerivationMethod)) return false; @@ -182,20 +200,9 @@ void CWallet::SetBestChain(const CBlockLocator& loc) walletdb.WriteBestBlock(loc); } -// This class implements an addrIncoming entry that causes pre-0.4 -// clients to crash on startup if reading a private-key-encrypted wallet. -class CCorruptAddress -{ -public: - IMPLEMENT_SERIALIZE - ( - if (nType & SER_DISK) - READWRITE(nVersion); - ) -}; - bool CWallet::SetMinVersion(enum WalletFeature nVersion, CWalletDB* pwalletdbIn, bool fExplicit) { + LOCK(cs_wallet); // nWalletVersion if (nWalletVersion >= nVersion) return true; @@ -211,13 +218,6 @@ bool CWallet::SetMinVersion(enum WalletFeature nVersion, CWalletDB* pwalletdbIn, if (fFileBacked) { CWalletDB* pwalletdb = pwalletdbIn ? pwalletdbIn : new CWalletDB(strWalletFile); - if (nWalletVersion >= 40000) - { - // Versions prior to 0.4.0 did not support the "minversion" record. - // Use a CCorruptAddress to make them crash instead. - CCorruptAddress corruptAddress; - pwalletdb->WriteSetting("addrIncoming", corruptAddress); - } if (nWalletVersion > 40000) pwalletdb->WriteMinVersion(nWalletVersion); if (!pwalletdbIn) @@ -229,6 +229,7 @@ bool CWallet::SetMinVersion(enum WalletFeature nVersion, CWalletDB* pwalletdbIn, bool CWallet::SetMaxVersion(int nVersion) { + LOCK(cs_wallet); // nWalletVersion, nWalletMaxVersion // cannot downgrade below current version if (nWalletVersion > nVersion) return false; @@ -238,6 +239,104 @@ bool CWallet::SetMaxVersion(int nVersion) return true; } +set CWallet::GetConflicts(const uint256& txid) const +{ + set result; + AssertLockHeld(cs_wallet); + + std::map::const_iterator it = mapWallet.find(txid); + if (it == mapWallet.end()) + return result; + const CWalletTx& wtx = it->second; + + std::pair range; + + BOOST_FOREACH(const CTxIn& txin, wtx.vin) + { + if (mapTxSpends.count(txin.prevout) <= 1) + continue; // No conflict if zero or one spends + range = mapTxSpends.equal_range(txin.prevout); + for (TxSpends::const_iterator it = range.first; it != range.second; ++it) + result.insert(it->second); + } + return result; +} + +void CWallet::SyncMetaData(pair range) +{ + // We want all the wallet transactions in range to have the same metadata as + // the oldest (smallest nOrderPos). + // So: find smallest nOrderPos: + + int nMinOrderPos = std::numeric_limits::max(); + const CWalletTx* copyFrom = NULL; + for (TxSpends::iterator it = range.first; it != range.second; ++it) + { + const uint256& hash = it->second; + int n = mapWallet[hash].nOrderPos; + if (n < nMinOrderPos) + { + nMinOrderPos = n; + copyFrom = &mapWallet[hash]; + } + } + // Now copy data from copyFrom to rest: + for (TxSpends::iterator it = range.first; it != range.second; ++it) + { + const uint256& hash = it->second; + CWalletTx* copyTo = &mapWallet[hash]; + if (copyFrom == copyTo) continue; + copyTo->mapValue = copyFrom->mapValue; + copyTo->vOrderForm = copyFrom->vOrderForm; + // fTimeReceivedIsTxTime not copied on purpose + // nTimeReceived not copied on purpose + copyTo->nTimeSmart = copyFrom->nTimeSmart; + copyTo->fFromMe = copyFrom->fFromMe; + copyTo->strFromAccount = copyFrom->strFromAccount; + // nOrderPos not copied on purpose + // cached members not copied on purpose + } +} + +// Outpoint is spent if any non-conflicted transaction +// spends it: +bool CWallet::IsSpent(const uint256& hash, unsigned int n) const +{ + const COutPoint outpoint(hash, n); + pair range; + range = mapTxSpends.equal_range(outpoint); + + for (TxSpends::const_iterator it = range.first; it != range.second; ++it) + { + const uint256& wtxid = it->second; + std::map::const_iterator mit = mapWallet.find(wtxid); + if (mit != mapWallet.end() && mit->second.GetDepthInMainChain() >= 0) + return true; // Spent + } + return false; +} + +void CWallet::AddToSpends(const COutPoint& outpoint, const uint256& wtxid) +{ + mapTxSpends.insert(make_pair(outpoint, wtxid)); + + pair range; + range = mapTxSpends.equal_range(outpoint); + SyncMetaData(range); +} + + +void CWallet::AddToSpends(const uint256& wtxid) +{ + assert(mapWallet.count(wtxid)); + CWalletTx& thisTx = mapWallet[wtxid]; + if (thisTx.IsCoinBase()) // Coinbases don't spend anything! + return; + + BOOST_FOREACH(const CTxIn& txin, thisTx.vin) + AddToSpends(txin.prevout, wtxid); +} + bool CWallet::EncryptWallet(const SecureString& strWalletPassphrase) { if (IsCrypted()) @@ -256,7 +355,7 @@ bool CWallet::EncryptWallet(const SecureString& strWalletPassphrase) RAND_bytes(&kMasterKey.vchSalt[0], WALLET_CRYPTO_SALT_SIZE); CCrypter crypter; - int64 nStartTime = GetTimeMillis(); + int64_t nStartTime = GetTimeMillis(); crypter.SetKeyFromPassphrase(strWalletPassphrase, kMasterKey.vchSalt, 25000, kMasterKey.nDerivationMethod); kMasterKey.nDeriveIterations = 2500000 / ((double)(GetTimeMillis() - nStartTime)); @@ -267,7 +366,7 @@ bool CWallet::EncryptWallet(const SecureString& strWalletPassphrase) if (kMasterKey.nDeriveIterations < 25000) kMasterKey.nDeriveIterations = 25000; - printf("Encrypting Wallet with an nDeriveIterations of %i\n", kMasterKey.nDeriveIterations); + LogPrintf("Encrypting Wallet with an nDeriveIterations of %i\n", kMasterKey.nDeriveIterations); if (!crypter.SetKeyFromPassphrase(strWalletPassphrase, kMasterKey.vchSalt, kMasterKey.nDeriveIterations, kMasterKey.nDerivationMethod)) return false; @@ -319,9 +418,10 @@ bool CWallet::EncryptWallet(const SecureString& strWalletPassphrase) return true; } -int64 CWallet::IncOrderPosNext(CWalletDB *pwalletdb) +int64_t CWallet::IncOrderPosNext(CWalletDB *pwalletdb) { - int64 nRet = nOrderPosNext++; + AssertLockHeld(cs_wallet); // nOrderPosNext + int64_t nRet = nOrderPosNext++; if (pwalletdb) { pwalletdb->WriteOrderPosNext(nOrderPosNext); } else { @@ -332,6 +432,7 @@ int64 CWallet::IncOrderPosNext(CWalletDB *pwalletdb) CWallet::TxItems CWallet::OrderedTxItems(std::list& acentries, std::string strAccount) { + AssertLockHeld(cs_wallet); // mapWallet CWalletDB walletdb(strWalletFile); // First: get all CWalletTx and CAccountingEntry into a sorted-by-order multimap. @@ -354,33 +455,6 @@ CWallet::TxItems CWallet::OrderedTxItems(std::list& acentries, return txOrdered; } -void CWallet::WalletUpdateSpent(const CTransaction &tx) -{ - // Anytime a signature is successfully verified, it's proof the outpoint is spent. - // Update the wallet spent flag if it doesn't know due to wallet.dat being - // restored from backup or the user making copies of wallet.dat. - { - LOCK(cs_wallet); - BOOST_FOREACH(const CTxIn& txin, tx.vin) - { - map::iterator mi = mapWallet.find(txin.prevout.hash); - if (mi != mapWallet.end()) - { - CWalletTx& wtx = (*mi).second; - if (txin.prevout.n >= wtx.vout.size()) - printf("WalletUpdateSpent: bad wtx %s\n", wtx.GetHash().ToString().c_str()); - else if (!wtx.IsSpent(txin.prevout.n) && IsMine(wtx.vout[txin.prevout.n])) - { - printf("WalletUpdateSpent found spent coin %sbc %s\n", FormatMoney(wtx.GetCredit()).c_str(), wtx.GetHash().ToString().c_str()); - wtx.MarkSpent(txin.prevout.n); - wtx.WriteToDisk(); - NotifyTransactionChanged(this, txin.prevout.hash, CT_UPDATED); - } - } - } - } -} - void CWallet::MarkDirty() { { @@ -390,9 +464,17 @@ void CWallet::MarkDirty() } } -bool CWallet::AddToWallet(const CWalletTx& wtxIn) +bool CWallet::AddToWallet(const CWalletTx& wtxIn, bool fFromLoadWallet) { uint256 hash = wtxIn.GetHash(); + + if (fFromLoadWallet) + { + mapWallet[hash] = wtxIn; + mapWallet[hash].BindWallet(this); + AddToSpends(hash); + } + else { LOCK(cs_wallet); // Inserts only if not already there, returns tx inserted or tx found @@ -414,7 +496,7 @@ bool CWallet::AddToWallet(const CWalletTx& wtxIn) unsigned int latestEntry = 0; { // Tolerate times up to the last timestamp in the wallet not more than 5 minutes into the future - int64 latestTolerated = latestNow + 300; + int64_t latestTolerated = latestNow + 300; std::list acentries; TxItems txOrdered = OrderedTxItems(acentries); for (TxItems::reverse_iterator it = txOrdered.rbegin(); it != txOrdered.rend(); ++it) @@ -423,7 +505,7 @@ bool CWallet::AddToWallet(const CWalletTx& wtxIn) if (pwtx == &wtx) continue; CAccountingEntry *const pacentry = (*it).second.second; - int64 nSmartTime; + int64_t nSmartTime; if (pwtx) { nSmartTime = pwtx->nTimeSmart; @@ -446,10 +528,11 @@ bool CWallet::AddToWallet(const CWalletTx& wtxIn) wtx.nTimeSmart = std::max(latestEntry, std::min(blocktime, latestNow)); } else - printf("AddToWallet() : found %s in block %s not in index\n", - wtxIn.GetHash().ToString().c_str(), - wtxIn.hashBlock.ToString().c_str()); + LogPrintf("AddToWallet() : found %s in block %s not in index\n", + wtxIn.GetHash().ToString(), + wtxIn.hashBlock.ToString()); } + AddToSpends(hash); } bool fUpdated = false; @@ -472,38 +555,18 @@ bool CWallet::AddToWallet(const CWalletTx& wtxIn) wtx.fFromMe = wtxIn.fFromMe; fUpdated = true; } - fUpdated |= wtx.UpdateSpent(wtxIn.vfSpent); } //// debug print - printf("AddToWallet %s %s%s\n", wtxIn.GetHash().ToString().c_str(), (fInsertedNew ? "new" : ""), (fUpdated ? "update" : "")); + LogPrintf("AddToWallet %s %s%s\n", wtxIn.GetHash().ToString(), (fInsertedNew ? "new" : ""), (fUpdated ? "update" : "")); // Write to disk if (fInsertedNew || fUpdated) if (!wtx.WriteToDisk()) return false; - if (!fHaveGUI) { - // If default receiving address gets used, replace it with a new one - if (vchDefaultKey.IsValid()) { - CScript scriptDefaultKey; - scriptDefaultKey.SetDestination(vchDefaultKey.GetID()); - BOOST_FOREACH(const CTxOut& txout, wtx.vout) - { - if (txout.scriptPubKey == scriptDefaultKey) - { - CPubKey newDefaultKey; - if (GetKeyFromPool(newDefaultKey, false)) - { - SetDefaultKey(newDefaultKey); - SetAddressBookName(vchDefaultKey.GetID(), ""); - } - } - } - } - } - // since AddToWallet is called directly for self-originating transactions, check for consumption of own coins - WalletUpdateSpent(wtx); + // Break debit/credit balance caches: + wtx.MarkDirty(); // Notify UI of new or updated transaction NotifyTransactionChanged(this, hash, fInsertedNew ? CT_NEW : CT_UPDATED); @@ -524,10 +587,10 @@ bool CWallet::AddToWallet(const CWalletTx& wtxIn) // Add a transaction to the wallet, or update it. // pblock is optional, but should be provided if the transaction is known to be in a block. // If fUpdate is true, existing transactions will be updated. -bool CWallet::AddToWalletIfInvolvingMe(const uint256 &hash, const CTransaction& tx, const CBlock* pblock, bool fUpdate, bool fFindBlock) +bool CWallet::AddToWalletIfInvolvingMe(const uint256 &hash, const CTransaction& tx, const CBlock* pblock, bool fUpdate) { { - LOCK(cs_wallet); + AssertLockHeld(cs_wallet); bool fExisted = mapWallet.count(hash); if (fExisted && !fUpdate) return false; if (fExisted || IsMine(tx) || IsFromMe(tx)) @@ -538,22 +601,36 @@ bool CWallet::AddToWalletIfInvolvingMe(const uint256 &hash, const CTransaction& wtx.SetMerkleBranch(pblock); return AddToWallet(wtx); } - else - WalletUpdateSpent(tx); } return false; } -bool CWallet::EraseFromWallet(uint256 hash) +void CWallet::SyncTransaction(const uint256 &hash, const CTransaction& tx, const CBlock* pblock) +{ + LOCK2(cs_main, cs_wallet); + if (!AddToWalletIfInvolvingMe(hash, tx, pblock, true)) + return; // Not one of ours + + // If a transaction changes 'conflicted' state, that changes the balance + // available of the outputs it spends. So force those to be + // recomputed, also: + BOOST_FOREACH(const CTxIn& txin, tx.vin) + { + if (mapWallet.count(txin.prevout.hash)) + mapWallet[txin.prevout.hash].MarkDirty(); + } +} + +void CWallet::EraseFromWallet(const uint256 &hash) { if (!fFileBacked) - return false; + return; { LOCK(cs_wallet); if (mapWallet.erase(hash)) CWalletDB(strWalletFile).EraseTx(hash); } - return true; + return; } @@ -573,7 +650,7 @@ bool CWallet::IsMine(const CTxIn &txin) const return false; } -int64 CWallet::GetDebit(const CTxIn &txin) const +int64_t CWallet::GetDebit(const CTxIn &txin) const { { LOCK(cs_wallet); @@ -609,9 +686,9 @@ bool CWallet::IsChange(const CTxOut& txout) const return false; } -int64 CWalletTx::GetTxTime() const +int64_t CWalletTx::GetTxTime() const { - int64 n = nTimeSmart; + int64_t n = nTimeSmart; return n ? n : nTimeReceived; } @@ -654,8 +731,8 @@ int CWalletTx::GetRequestCount() const return nRequests; } -void CWalletTx::GetAmounts(list >& listReceived, - list >& listSent, int64& nFee, string& strSentAccount) const +void CWalletTx::GetAmounts(list >& listReceived, + list >& listSent, int64_t& nFee, string& strSentAccount) const { nFee = 0; listReceived.clear(); @@ -663,62 +740,75 @@ void CWalletTx::GetAmounts(list >& listReceived, strSentAccount = strFromAccount; // Compute fee: - int64 nDebit = GetDebit(); + int64_t nDebit = GetDebit(); if (nDebit > 0) // debit>0 means we signed/sent this transaction { - int64 nValueOut = GetValueOut(*this); + int64_t nValueOut = GetValueOut(); nFee = nDebit - nValueOut; } // Sent/received. BOOST_FOREACH(const CTxOut& txout, vout) { - CTxDestination address; - vector vchPubKey; - if (!ExtractDestination(txout.scriptPubKey, address)) + bool fIsMine; + // Only need to handle txouts if AT LEAST one of these is true: + // 1) they debit from us (sent) + // 2) the output is to us (received) + if (nDebit > 0) { - printf("CWalletTx::GetAmounts: Unknown transaction type found, txid %s\n", - this->GetHash().ToString().c_str()); + // Don't report 'change' txouts + if (pwallet->IsChange(txout)) + continue; + fIsMine = pwallet->IsMine(txout); } - - // Don't report 'change' txouts - if (nDebit > 0 && pwallet->IsChange(txout)) + else if (!(fIsMine = pwallet->IsMine(txout))) continue; + // In either case, we need to get the destination address + CTxDestination address; + if (!ExtractDestination(txout.scriptPubKey, address)) + { + LogPrintf("CWalletTx::GetAmounts: Unknown transaction type found, txid %s\n", + this->GetHash().ToString()); + address = CNoDestination(); + } + + // If we are debited by the transaction, add the output as a "sent" entry if (nDebit > 0) listSent.push_back(make_pair(address, txout.nValue)); - if (pwallet->IsMine(txout)) + // If we are receiving the output, add it as a "received" entry + if (fIsMine) listReceived.push_back(make_pair(address, txout.nValue)); } } -void CWalletTx::GetAccountAmounts(const string& strAccount, int64& nReceived, - int64& nSent, int64& nFee) const +void CWalletTx::GetAccountAmounts(const string& strAccount, int64_t& nReceived, + int64_t& nSent, int64_t& nFee) const { nReceived = nSent = nFee = 0; - int64 allFee; + int64_t allFee; string strSentAccount; - list > listReceived; - list > listSent; + list > listReceived; + list > listSent; GetAmounts(listReceived, listSent, allFee, strSentAccount); if (strAccount == strSentAccount) { - BOOST_FOREACH(const PAIRTYPE(CTxDestination,int64)& s, listSent) + BOOST_FOREACH(const PAIRTYPE(CTxDestination,int64_t)& s, listSent) nSent += s.second; nFee = allFee; } { LOCK(pwallet->cs_wallet); - BOOST_FOREACH(const PAIRTYPE(CTxDestination,int64)& r, listReceived) + BOOST_FOREACH(const PAIRTYPE(CTxDestination,int64_t)& r, listReceived) { if (pwallet->mapAddressBook.count(r.first)) { - map::const_iterator mi = pwallet->mapAddressBook.find(r.first); - if (mi != pwallet->mapAddressBook.end() && (*mi).second == strAccount) + map::const_iterator mi = pwallet->mapAddressBook.find(r.first); + if (mi != pwallet->mapAddressBook.end() && (*mi).second.name == strAccount) nReceived += r.second; } else if (strAccount.empty()) @@ -729,55 +819,6 @@ void CWalletTx::GetAccountAmounts(const string& strAccount, int64& nReceived, } } -void CWalletTx::AddSupportingTransactions() -{ - vtxPrev.clear(); - - const int COPY_DEPTH = 3; - if (SetMerkleBranch() < COPY_DEPTH) - { - vector vWorkQueue; - BOOST_FOREACH(const CTxIn& txin, vin) - vWorkQueue.push_back(txin.prevout.hash); - - { - LOCK(pwallet->cs_wallet); - map mapWalletPrev; - set setAlreadyDone; - for (unsigned int i = 0; i < vWorkQueue.size(); i++) - { - uint256 hash = vWorkQueue[i]; - if (setAlreadyDone.count(hash)) - continue; - setAlreadyDone.insert(hash); - - CMerkleTx tx; - map::const_iterator mi = pwallet->mapWallet.find(hash); - if (mi != pwallet->mapWallet.end()) - { - tx = (*mi).second; - BOOST_FOREACH(const CMerkleTx& txWalletPrev, (*mi).second.vtxPrev) - mapWalletPrev[txWalletPrev.GetHash()] = &txWalletPrev; - } - else if (mapWalletPrev.count(hash)) - { - tx = *mapWalletPrev[hash]; - } - - int nDepth = tx.SetMerkleBranch(); - vtxPrev.push_back(tx); - - if (nDepth < COPY_DEPTH) - { - BOOST_FOREACH(const CTxIn& txin, tx.vin) - vWorkQueue.push_back(txin.prevout.hash); - } - } - } - } - - reverse(vtxPrev.begin(), vtxPrev.end()); -} bool CWalletTx::WriteToDisk() { @@ -790,18 +831,24 @@ bool CWalletTx::WriteToDisk() int CWallet::ScanForWalletTransactions(CBlockIndex* pindexStart, bool fUpdate) { int ret = 0; + int64_t nNow = GetTime(); CBlockIndex* pindex = pindexStart; { - LOCK(cs_wallet); + LOCK2(cs_main, cs_wallet); + + // no need to read and scan block, if block was created before + // our wallet birthday (as adjusted for block time variability) + while (pindex && nTimeFirstKey && (pindex->nTime < (nTimeFirstKey - 7200))) + pindex = chainActive.Next(pindex); + + ShowProgress(_("Rescanning..."), 0); // show rescan progress in GUI as dialog or on splashscreen, if -rescan on startup + double dProgressStart = Checkpoints::GuessVerificationProgress(pindex, false); + double dProgressTip = Checkpoints::GuessVerificationProgress(chainActive.Tip(), false); while (pindex) { - // no need to read and scan block, if block was created before - // our wallet birthday (as adjusted for block time variability) - if (nTimeFirstKey && (pindex->nTime < (nTimeFirstKey - 7200))) { - pindex = pindex->GetNextInMainChain(); - continue; - } + if (pindex->nHeight % 100 == 0 && dProgressTip - dProgressStart > 0.0) + ShowProgress(_("Rescanning..."), std::max(1, std::min(99, (int)((Checkpoints::GuessVerificationProgress(pindex, false) - dProgressStart) / (dProgressTip - dProgressStart) * 100)))); CBlock block; ReadBlockFromDisk(block, pindex); @@ -810,104 +857,79 @@ int CWallet::ScanForWalletTransactions(CBlockIndex* pindexStart, bool fUpdate) if (AddToWalletIfInvolvingMe(tx.GetHash(), tx, &block, fUpdate)) ret++; } - pindex = pindex->GetNextInMainChain(); + pindex = chainActive.Next(pindex); + if (GetTime() >= nNow + 60) { + nNow = GetTime(); + LogPrintf("Still rescanning. At block %d. Progress=%f\n", pindex->nHeight, Checkpoints::GuessVerificationProgress(pindex)); + } } + ShowProgress(_("Rescanning..."), 100); // hide progress dialog in GUI } return ret; } void CWallet::ReacceptWalletTransactions() { - bool fRepeat = true; - while (fRepeat) + LOCK2(cs_main, cs_wallet); + BOOST_FOREACH(PAIRTYPE(const uint256, CWalletTx)& item, mapWallet) { - LOCK(cs_wallet); - fRepeat = false; - bool fMissing = false; - BOOST_FOREACH(PAIRTYPE(const uint256, CWalletTx)& item, mapWallet) - { - CWalletTx& wtx = item.second; - if (wtx.IsCoinBase() && wtx.IsSpent(0)) - continue; + const uint256& wtxid = item.first; + CWalletTx& wtx = item.second; + assert(wtx.GetHash() == wtxid); - CCoins coins; - bool fUpdated = false; - bool fFound = pcoinsTip->GetCoins(wtx.GetHash(), coins); - if (fFound || wtx.GetDepthInMainChain() > 0) - { - // Update fSpent if a tx got spent somewhere else by a copy of wallet.dat - for (unsigned int i = 0; i < wtx.vout.size(); i++) - { - if (wtx.IsSpent(i)) - continue; - if ((i >= coins.vout.size() || coins.vout[i].IsNull()) && IsMine(wtx.vout[i])) - { - wtx.MarkSpent(i); - fUpdated = true; - fMissing = true; - } - } - if (fUpdated) - { - printf("ReacceptWalletTransactions found spent coin %sbc %s\n", FormatMoney(wtx.GetCredit()).c_str(), wtx.GetHash().ToString().c_str()); - wtx.MarkDirty(); - wtx.WriteToDisk(); - } - } - else - { - // Re-accept any txes of ours that aren't already in a block - if (!wtx.IsCoinBase()) - wtx.AcceptWalletTransaction(); - } - } - if (fMissing) + int nDepth = wtx.GetDepthInMainChain(); + + if (!wtx.IsCoinBase() && nDepth < 0) { - // TODO: optimize this to scan just part of the block chain? - if (ScanForWalletTransactions(pindexGenesisBlock)) - fRepeat = true; // Found missing transactions: re-do re-accept. + // Try to add to memory pool + LOCK(mempool.cs); + wtx.AcceptToMemoryPool(false); } } } void CWalletTx::RelayWalletTransaction() { - BOOST_FOREACH(const CMerkleTx& tx, vtxPrev) - { - if (!tx.IsCoinBase()) - if (tx.GetDepthInMainChain() == 0) - RelayTransaction((CTransaction)tx, tx.GetHash()); - } if (!IsCoinBase()) { if (GetDepthInMainChain() == 0) { uint256 hash = GetHash(); - printf("Relaying wtx %s\n", hash.ToString().c_str()); + LogPrintf("Relaying wtx %s\n", hash.ToString()); RelayTransaction((CTransaction)*this, hash); } } } +set CWalletTx::GetConflicts() const +{ + set result; + if (pwallet != NULL) + { + uint256 myHash = GetHash(); + result = pwallet->GetConflicts(myHash); + result.erase(myHash); + } + return result; +} + void CWallet::ResendWalletTransactions() { // Do this infrequently and randomly to avoid giving away // that these are our transactions. - static int64 nNextTime; - if (GetTime() < nNextTime) + if (GetTime() < nNextResend) return; - bool fFirst = (nNextTime == 0); - nNextTime = GetTime() + GetRand(30 * 60); + bool fFirst = (nNextResend == 0); + nNextResend = GetTime() + GetRand(30 * 60); if (fFirst) return; // Only do it if there's been a new block since last time - static int64 nLastTime; - if (nTimeBestReceived < nLastTime) + if (nTimeBestReceived < nLastResend) return; - nLastTime = GetTime(); + nLastResend = GetTime(); // Rebroadcast any of our txes that aren't in a block yet - printf("ResendWalletTransactions()\n"); + LogPrintf("ResendWalletTransactions()\n"); { LOCK(cs_wallet); // Sort them in chronological order @@ -917,7 +939,7 @@ void CWallet::ResendWalletTransactions() CWalletTx& wtx = item.second; // Don't rebroadcast until it's had plenty of time that // it should have gotten in already by now. - if (nTimeBestReceived - (int64)wtx.nTimeReceived > 5 * 60) + if (nTimeBestReceived - (int64_t)wtx.nTimeReceived > 5 * 60) mapSorted.insert(make_pair(wtx.nTimeReceived, &wtx)); } BOOST_FOREACH(PAIRTYPE(const unsigned int, CWalletTx*)& item, mapSorted) @@ -939,15 +961,15 @@ void CWallet::ResendWalletTransactions() // -int64 CWallet::GetBalance() const +int64_t CWallet::GetBalance() const { - int64 nTotal = 0; + int64_t nTotal = 0; { - LOCK(cs_wallet); + LOCK2(cs_main, cs_wallet); for (map::const_iterator it = mapWallet.begin(); it != mapWallet.end(); ++it) { const CWalletTx* pcoin = &(*it).second; - if (pcoin->IsConfirmed()) + if (pcoin->IsTrusted()) nTotal += pcoin->GetAvailableCredit(); } } @@ -955,26 +977,26 @@ int64 CWallet::GetBalance() const return nTotal; } -int64 CWallet::GetUnconfirmedBalance() const +int64_t CWallet::GetUnconfirmedBalance() const { - int64 nTotal = 0; + int64_t nTotal = 0; { - LOCK(cs_wallet); + LOCK2(cs_main, cs_wallet); for (map::const_iterator it = mapWallet.begin(); it != mapWallet.end(); ++it) { const CWalletTx* pcoin = &(*it).second; - if (!IsFinalTx(*pcoin) || !pcoin->IsConfirmed()) + if (!IsFinalTx(*pcoin) || (!pcoin->IsTrusted() && pcoin->GetDepthInMainChain() == 0)) nTotal += pcoin->GetAvailableCredit(); } } return nTotal; } -int64 CWallet::GetImmatureBalance() const +int64_t CWallet::GetImmatureBalance() const { - int64 nTotal = 0; + int64_t nTotal = 0; { - LOCK(cs_wallet); + LOCK2(cs_main, cs_wallet); for (map::const_iterator it = mapWallet.begin(); it != mapWallet.end(); ++it) { const CWalletTx* pcoin = &(*it).second; @@ -985,7 +1007,7 @@ int64 CWallet::GetImmatureBalance() const } // populate vCoins with vector of spendable COutputs -void CWallet::AvailableCoins(vector& vCoins, bool fOnlyConfirmed) const +void CWallet::AvailableCoins(vector& vCoins, bool fOnlyConfirmed, const CCoinControl *coinControl) const { vCoins.clear(); @@ -993,28 +1015,34 @@ void CWallet::AvailableCoins(vector& vCoins, bool fOnlyConfirmed) const LOCK(cs_wallet); for (map::const_iterator it = mapWallet.begin(); it != mapWallet.end(); ++it) { + const uint256& wtxid = it->first; const CWalletTx* pcoin = &(*it).second; if (!IsFinalTx(*pcoin)) continue; - if (fOnlyConfirmed && !pcoin->IsConfirmed()) + if (fOnlyConfirmed && !pcoin->IsTrusted()) continue; if (pcoin->IsCoinBase() && pcoin->GetBlocksToMaturity() > 0) continue; + int nDepth = pcoin->GetDepthInMainChain(); + if (nDepth < 0) + continue; + for (unsigned int i = 0; i < pcoin->vout.size(); i++) { - if (!(pcoin->IsSpent(i)) && IsMine(pcoin->vout[i]) && - !IsLockedCoin((*it).first, i) && pcoin->vout[i].nValue > 0) - vCoins.push_back(COutput(pcoin, i, pcoin->GetDepthInMainChain())); + if (!(IsSpent(wtxid, i)) && IsMine(pcoin->vout[i]) && + !IsLockedCoin((*it).first, i) && pcoin->vout[i].nValue > 0 && + (!coinControl || !coinControl->HasSelected() || coinControl->IsSelected((*it).first, i))) + vCoins.push_back(COutput(pcoin, i, nDepth)); } } } } -static void ApproximateBestSubset(vector > >vValue, int64 nTotalLower, int64 nTargetValue, - vector& vfBest, int64& nBest, int iterations = 1000) +static void ApproximateBestSubset(vector > >vValue, int64_t nTotalLower, int64_t nTargetValue, + vector& vfBest, int64_t& nBest, int iterations = 1000) { vector vfIncluded; @@ -1026,7 +1054,7 @@ static void ApproximateBestSubset(vector vCoins, - set >& setCoinsRet, int64& nValueRet) const +bool CWallet::SelectCoinsMinConf(int64_t nTargetValue, int nConfMine, int nConfTheirs, vector vCoins, + set >& setCoinsRet, int64_t& nValueRet) const { setCoinsRet.clear(); nValueRet = 0; // List of values less than target - pair > coinLowestLarger; - coinLowestLarger.first = std::numeric_limits::max(); + pair > coinLowestLarger; + coinLowestLarger.first = std::numeric_limits::max(); coinLowestLarger.second.first = NULL; - vector > > vValue; - int64 nTotalLower = 0; + vector > > vValue; + int64_t nTotalLower = 0; random_shuffle(vCoins.begin(), vCoins.end(), GetRandInt); @@ -1082,9 +1110,9 @@ bool CWallet::SelectCoinsMinConf(int64 nTargetValue, int nConfMine, int nConfThe continue; int i = output.i; - int64 n = pcoin->vout[i].nValue; + int64_t n = pcoin->vout[i].nValue; - pair > coin = make_pair(n,make_pair(pcoin, i)); + pair > coin = make_pair(n,make_pair(pcoin, i)); if (n == nTargetValue) { @@ -1125,7 +1153,7 @@ bool CWallet::SelectCoinsMinConf(int64 nTargetValue, int nConfMine, int nConfThe // Solve subset sum by stochastic approximation sort(vValue.rbegin(), vValue.rend(), CompareValueOnly()); vector vfBest; - int64 nBest; + int64_t nBest; ApproximateBestSubset(vValue, nTotalLower, nTargetValue, vfBest, nBest, 1000); if (nBest != nTargetValue && nTotalLower >= nTargetValue + CENT) @@ -1147,35 +1175,45 @@ bool CWallet::SelectCoinsMinConf(int64 nTargetValue, int nConfMine, int nConfThe nValueRet += vValue[i].first; } - //// debug print - printf("SelectCoins() best subset: "); + LogPrint("selectcoins", "SelectCoins() best subset: "); for (unsigned int i = 0; i < vValue.size(); i++) if (vfBest[i]) - printf("%s ", FormatMoney(vValue[i].first).c_str()); - printf("total %s\n", FormatMoney(nBest).c_str()); + LogPrint("selectcoins", "%s ", FormatMoney(vValue[i].first)); + LogPrint("selectcoins", "total %s\n", FormatMoney(nBest)); } return true; } -bool CWallet::SelectCoins(int64 nTargetValue, set >& setCoinsRet, int64& nValueRet) const +bool CWallet::SelectCoins(int64_t nTargetValue, set >& setCoinsRet, int64_t& nValueRet, const CCoinControl* coinControl) const { vector vCoins; - AvailableCoins(vCoins); + AvailableCoins(vCoins, true, coinControl); + + // coin control -> return all selected outputs (we want all selected to go into the transaction for sure) + if (coinControl && coinControl->HasSelected()) + { + BOOST_FOREACH(const COutput& out, vCoins) + { + nValueRet += out.tx->vout[out.i].nValue; + setCoinsRet.insert(make_pair(out.tx, out.i)); + } + return (nValueRet >= nTargetValue); + } return (SelectCoinsMinConf(nTargetValue, 1, 6, vCoins, setCoinsRet, nValueRet) || SelectCoinsMinConf(nTargetValue, 1, 1, vCoins, setCoinsRet, nValueRet) || - SelectCoinsMinConf(nTargetValue, 0, 1, vCoins, setCoinsRet, nValueRet)); + (bSpendZeroConfChange && SelectCoinsMinConf(nTargetValue, 0, 1, vCoins, setCoinsRet, nValueRet))); } -bool CWallet::CreateTransaction(const vector >& vecSend, - CWalletTx& wtxNew, CReserveKey& reservekey, int64& nFeeRet, std::string& strFailReason) +bool CWallet::CreateTransaction(const vector >& vecSend, + CWalletTx& wtxNew, CReserveKey& reservekey, int64_t& nFeeRet, std::string& strFailReason, const CCoinControl* coinControl) { - int64 nValue = 0; - BOOST_FOREACH (const PAIRTYPE(CScript, int64)& s, vecSend) + int64_t nValue = 0; + BOOST_FOREACH (const PAIRTYPE(CScript, int64_t)& s, vecSend) { if (nValue < 0) { @@ -1196,16 +1234,16 @@ bool CWallet::CreateTransaction(const vector >& vecSend, LOCK2(cs_main, cs_wallet); { nFeeRet = nTransactionFee; - loop + while (true) { wtxNew.vin.clear(); wtxNew.vout.clear(); wtxNew.fFromMe = true; - int64 nTotalValue = nValue + nFeeRet; + int64_t nTotalValue = nValue + nFeeRet; double dPriority = 0; // vouts to the payees - BOOST_FOREACH (const PAIRTYPE(CScript, int64)& s, vecSend) + BOOST_FOREACH (const PAIRTYPE(CScript, int64_t)& s, vecSend) { CTxOut txout(s.second, s.first); if (txout.IsDust(CTransaction::nMinRelayTxFee)) @@ -1218,50 +1256,62 @@ bool CWallet::CreateTransaction(const vector >& vecSend, // Choose coins to use set > setCoins; - int64 nValueIn = 0; - if (!SelectCoins(nTotalValue, setCoins, nValueIn)) + int64_t nValueIn = 0; + if (!SelectCoins(nTotalValue, setCoins, nValueIn, coinControl)) { strFailReason = _("Insufficient funds"); return false; } BOOST_FOREACH(PAIRTYPE(const CWalletTx*, unsigned int) pcoin, setCoins) { - int64 nCredit = pcoin.first->vout[pcoin.second].nValue; + int64_t nCredit = pcoin.first->vout[pcoin.second].nValue; //The priority after the next block (depth+1) is used instead of the current, //reflecting an assumption the user would accept a bit more delay for //a chance at a free transaction. dPriority += (double)nCredit * (pcoin.first->GetDepthInMainChain()+1); } - int64 nChange = nValueIn - nValue - nFeeRet; - // if sub-cent change is required, the fee must be raised to at least nMinTxFee - // or until nChange becomes zero - // NOTE: this depends on the exact behaviour of GetMinFee + int64_t nChange = nValueIn - nValue - nFeeRet; + // The following if statement should be removed once enough miners + // have upgraded to the 0.9 GetMinFee() rules. Until then, this avoids + // creating free transactions that have change outputs less than + // CENT bitcoins. if (nFeeRet < CTransaction::nMinTxFee && nChange > 0 && nChange < CENT) { - int64 nMoveToFee = min(nChange, CTransaction::nMinTxFee - nFeeRet); + int64_t nMoveToFee = min(nChange, CTransaction::nMinTxFee - nFeeRet); nChange -= nMoveToFee; nFeeRet += nMoveToFee; } if (nChange > 0) { - // Note: We use a new key here to keep it from being obvious which side is the change. - // The drawback is that by not reusing a previous key, the change may be lost if a - // backup is restored, if the backup doesn't have the new private key for the change. - // If we reused the old key, it would be possible to add code to look for and - // rediscover unknown transactions that were written with keys of ours to recover - // post-backup change. - - // Reserve a new key pair from key pool - CPubKey vchPubKey; - assert(reservekey.GetReservedKey(vchPubKey)); // should never fail, as we just unlocked - // Fill a vout to ourself // TODO: pass in scriptChange instead of reservekey so // change transaction isn't always pay-to-bitcoin-address CScript scriptChange; - scriptChange.SetDestination(vchPubKey.GetID()); + + // coin control: send change to custom address + if (coinControl && !boost::get(&coinControl->destChange)) + scriptChange.SetDestination(coinControl->destChange); + + // no coin control: send change to newly generated address + else + { + // Note: We use a new key here to keep it from being obvious which side is the change. + // The drawback is that by not reusing a previous key, the change may be lost if a + // backup is restored, if the backup doesn't have the new private key for the change. + // If we reused the old key, it would be possible to add code to look for and + // rediscover unknown transactions that were written with keys of ours to recover + // post-backup change. + + // Reserve a new key pair from key pool + CPubKey vchPubKey; + bool ret; + ret = reservekey.GetReservedKey(vchPubKey); + assert(ret); // should never fail, as we just unlocked + + scriptChange.SetDestination(vchPubKey.GetID()); + } CTxOut newTxOut(nChange, scriptChange); @@ -1302,20 +1352,18 @@ bool CWallet::CreateTransaction(const vector >& vecSend, strFailReason = _("Transaction too large"); return false; } - dPriority /= nBytes; + dPriority = wtxNew.ComputePriority(dPriority, nBytes); // Check that enough fee is included - int64 nPayFee = nTransactionFee * (1 + (int64)nBytes / 1000); + int64_t nPayFee = nTransactionFee * (1 + (int64_t)nBytes / 1000); bool fAllowFree = AllowFree(dPriority); - int64 nMinFee = GetMinFee(wtxNew, fAllowFree, GMF_SEND); + int64_t nMinFee = GetMinFee(wtxNew, nBytes, fAllowFree, GMF_SEND); if (nFeeRet < max(nPayFee, nMinFee)) { nFeeRet = max(nPayFee, nMinFee); continue; } - // Fill vtxPrev by copying from previous transactions vtxPrev - wtxNew.AddSupportingTransactions(); wtxNew.fTimeReceivedIsTxTime = true; break; @@ -1325,12 +1373,12 @@ bool CWallet::CreateTransaction(const vector >& vecSend, return true; } -bool CWallet::CreateTransaction(CScript scriptPubKey, int64 nValue, - CWalletTx& wtxNew, CReserveKey& reservekey, int64& nFeeRet, std::string& strFailReason) +bool CWallet::CreateTransaction(CScript scriptPubKey, int64_t nValue, + CWalletTx& wtxNew, CReserveKey& reservekey, int64_t& nFeeRet, std::string& strFailReason, const CCoinControl* coinControl) { - vector< pair > vecSend; + vector< pair > vecSend; vecSend.push_back(make_pair(scriptPubKey, nValue)); - return CreateTransaction(vecSend, wtxNew, reservekey, nFeeRet, strFailReason); + return CreateTransaction(vecSend, wtxNew, reservekey, nFeeRet, strFailReason, coinControl); } // Call after CreateTransaction unless you want to abort @@ -1338,7 +1386,7 @@ bool CWallet::CommitTransaction(CWalletTx& wtxNew, CReserveKey& reservekey) { { LOCK2(cs_main, cs_wallet); - printf("CommitTransaction:\n%s", wtxNew.ToString().c_str()); + LogPrintf("CommitTransaction:\n%s", wtxNew.ToString()); { // This is only to keep the database open to defeat the auto-flush for the // duration of this scope. This is the only place where this optimization @@ -1352,14 +1400,12 @@ bool CWallet::CommitTransaction(CWalletTx& wtxNew, CReserveKey& reservekey) // otherwise just for transaction history. AddToWallet(wtxNew); - // Mark old coins as spent + // Notify that old coins are spent set setCoins; BOOST_FOREACH(const CTxIn& txin, wtxNew.vin) { CWalletTx &coin = mapWallet[txin.prevout.hash]; coin.BindWallet(this); - coin.MarkSpent(txin.prevout.n); - coin.WriteToDisk(); NotifyTransactionChanged(this, coin.GetHash(), CT_UPDATED); } @@ -1374,7 +1420,7 @@ bool CWallet::CommitTransaction(CWalletTx& wtxNew, CReserveKey& reservekey) if (!wtxNew.AcceptToMemoryPool(false)) { // This must not fail. The transaction has already been signed and recorded. - printf("CommitTransaction() : Error: Transaction not valid"); + LogPrintf("CommitTransaction() : Error: Transaction not valid"); return false; } wtxNew.RelayWalletTransaction(); @@ -1385,29 +1431,26 @@ bool CWallet::CommitTransaction(CWalletTx& wtxNew, CReserveKey& reservekey) -string CWallet::SendMoney(CScript scriptPubKey, int64 nValue, CWalletTx& wtxNew, bool fAskFee) +string CWallet::SendMoney(CScript scriptPubKey, int64_t nValue, CWalletTx& wtxNew) { CReserveKey reservekey(this); - int64 nFeeRequired; + int64_t nFeeRequired; if (IsLocked()) { string strError = _("Error: Wallet locked, unable to create transaction!"); - printf("SendMoney() : %s", strError.c_str()); + LogPrintf("SendMoney() : %s", strError); return strError; } string strError; if (!CreateTransaction(scriptPubKey, nValue, wtxNew, reservekey, nFeeRequired, strError)) { if (nValue + nFeeRequired > GetBalance()) - strError = strprintf(_("Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds!"), FormatMoney(nFeeRequired).c_str()); - printf("SendMoney() : %s\n", strError.c_str()); + strError = strprintf(_("Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds!"), FormatMoney(nFeeRequired)); + LogPrintf("SendMoney() : %s\n", strError); return strError; } - if (fAskFee && !uiInterface.ThreadSafeAskFee(nFeeRequired)) - return "ABORTED"; - if (!CommitTransaction(wtxNew, reservekey)) return _("Error: The transaction was rejected! This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here."); @@ -1416,7 +1459,7 @@ string CWallet::SendMoney(CScript scriptPubKey, int64 nValue, CWalletTx& wtxNew, -string CWallet::SendMoneyToDestination(const CTxDestination& address, int64 nValue, CWalletTx& wtxNew, bool fAskFee) +string CWallet::SendMoneyToDestination(const CTxDestination& address, int64_t nValue, CWalletTx& wtxNew) { // Check amount if (nValue <= 0) @@ -1428,7 +1471,7 @@ string CWallet::SendMoneyToDestination(const CTxDestination& address, int64 nVal CScript scriptPubKey; scriptPubKey.SetDestination(address); - return SendMoney(scriptPubKey, nValue, wtxNew, fAskFee); + return SendMoney(scriptPubKey, nValue, wtxNew); } @@ -1444,6 +1487,7 @@ DBErrors CWallet::LoadWallet(bool& fFirstRunRet) { if (CDB::Rewrite(strWalletFile, "\x04pool")) { + LOCK(cs_wallet); setKeyPool.clear(); // Note: can't top-up keypool here, because wallet is locked. // User will be prompted to unlock wallet the next operation @@ -1455,57 +1499,81 @@ DBErrors CWallet::LoadWallet(bool& fFirstRunRet) return nLoadWalletRet; fFirstRunRet = !vchDefaultKey.IsValid(); + uiInterface.LoadWallet(this); + return DB_LOAD_OK; } -bool CWallet::SetAddressBookName(const CTxDestination& address, const string& strName) +DBErrors CWallet::ZapWalletTx() { - std::map::iterator mi = mapAddressBook.find(address); - mapAddressBook[address] = strName; - NotifyAddressBookChanged(this, address, strName, ::IsMine(*this, address), (mi == mapAddressBook.end()) ? CT_NEW : CT_UPDATED); if (!fFileBacked) + return DB_LOAD_OK; + DBErrors nZapWalletTxRet = CWalletDB(strWalletFile,"cr+").ZapWalletTx(this); + if (nZapWalletTxRet == DB_NEED_REWRITE) + { + if (CDB::Rewrite(strWalletFile, "\x04pool")) + { + LOCK(cs_wallet); + setKeyPool.clear(); + // Note: can't top-up keypool here, because wallet is locked. + // User will be prompted to unlock wallet the next operation + // the requires a new key. + } + } + + if (nZapWalletTxRet != DB_LOAD_OK) + return nZapWalletTxRet; + + return DB_LOAD_OK; +} + + +bool CWallet::SetAddressBook(const CTxDestination& address, const string& strName, const string& strPurpose) +{ + bool fUpdated = false; + { + LOCK(cs_wallet); // mapAddressBook + std::map::iterator mi = mapAddressBook.find(address); + fUpdated = mi != mapAddressBook.end(); + mapAddressBook[address].name = strName; + if (!strPurpose.empty()) /* update purpose only if requested */ + mapAddressBook[address].purpose = strPurpose; + } + NotifyAddressBookChanged(this, address, strName, ::IsMine(*this, address), + strPurpose, (fUpdated ? CT_UPDATED : CT_NEW) ); + if (!fFileBacked) + return false; + if (!strPurpose.empty() && !CWalletDB(strWalletFile).WritePurpose(CBitcoinAddress(address).ToString(), strPurpose)) return false; return CWalletDB(strWalletFile).WriteName(CBitcoinAddress(address).ToString(), strName); } -bool CWallet::DelAddressBookName(const CTxDestination& address) +bool CWallet::DelAddressBook(const CTxDestination& address) { - mapAddressBook.erase(address); - NotifyAddressBookChanged(this, address, "", ::IsMine(*this, address), CT_DELETED); + { + LOCK(cs_wallet); // mapAddressBook + + if(fFileBacked) + { + // Delete destdata tuples associated with address + std::string strAddress = CBitcoinAddress(address).ToString(); + BOOST_FOREACH(const PAIRTYPE(string, string) &item, mapAddressBook[address].destdata) + { + CWalletDB(strWalletFile).EraseDestData(strAddress, item.first); + } + } + mapAddressBook.erase(address); + } + + NotifyAddressBookChanged(this, address, "", ::IsMine(*this, address), "", CT_DELETED); + if (!fFileBacked) return false; + CWalletDB(strWalletFile).ErasePurpose(CBitcoinAddress(address).ToString()); return CWalletDB(strWalletFile).EraseName(CBitcoinAddress(address).ToString()); } - -void CWallet::PrintWallet(const CBlock& block) -{ - { - LOCK(cs_wallet); - if (mapWallet.count(block.vtx[0].GetHash())) - { - CWalletTx& wtx = mapWallet[block.vtx[0].GetHash()]; - printf(" mine: %d %d %"PRI64d"", wtx.GetDepthInMainChain(), wtx.GetBlocksToMaturity(), wtx.GetCredit()); - } - } - printf("\n"); -} - -bool CWallet::GetTransaction(const uint256 &hashTx, CWalletTx& wtx) -{ - { - LOCK(cs_wallet); - map::iterator mi = mapWallet.find(hashTx); - if (mi != mapWallet.end()) - { - wtx = (*mi).second; - return true; - } - } - return false; -} - bool CWallet::SetDefaultKey(const CPubKey &vchPubKey) { if (fFileBacked) @@ -1517,14 +1585,6 @@ bool CWallet::SetDefaultKey(const CPubKey &vchPubKey) return true; } -bool GetWalletFile(CWallet* pwallet, string &strWalletFileOut) -{ - if (!pwallet->fFileBacked) - return false; - strWalletFileOut = pwallet->strWalletFile; - return true; -} - // // Mark old keypool keys as used, // and generate all new keys @@ -1534,26 +1594,26 @@ bool CWallet::NewKeyPool() { LOCK(cs_wallet); CWalletDB walletdb(strWalletFile); - BOOST_FOREACH(int64 nIndex, setKeyPool) + BOOST_FOREACH(int64_t nIndex, setKeyPool) walletdb.ErasePool(nIndex); setKeyPool.clear(); if (IsLocked()) return false; - int64 nKeys = max(GetArg("-keypool", 100), (int64)0); + int64_t nKeys = max(GetArg("-keypool", 100), (int64_t)0); for (int i = 0; i < nKeys; i++) { - int64 nIndex = i+1; + int64_t nIndex = i+1; walletdb.WritePool(nIndex, CKeyPool(GenerateNewKey())); setKeyPool.insert(nIndex); } - printf("CWallet::NewKeyPool wrote %"PRI64d" new keys\n", nKeys); + LogPrintf("CWallet::NewKeyPool wrote %d new keys\n", nKeys); } return true; } -bool CWallet::TopUpKeyPool() +bool CWallet::TopUpKeyPool(unsigned int kpSize) { { LOCK(cs_wallet); @@ -1564,22 +1624,27 @@ bool CWallet::TopUpKeyPool() CWalletDB walletdb(strWalletFile); // Top up key pool - unsigned int nTargetSize = max(GetArg("-keypool", 100), 0LL); + unsigned int nTargetSize; + if (kpSize > 0) + nTargetSize = kpSize; + else + nTargetSize = max(GetArg("-keypool", 100), (int64_t) 0); + while (setKeyPool.size() < (nTargetSize + 1)) { - int64 nEnd = 1; + int64_t nEnd = 1; if (!setKeyPool.empty()) nEnd = *(--setKeyPool.end()) + 1; if (!walletdb.WritePool(nEnd, CKeyPool(GenerateNewKey()))) throw runtime_error("TopUpKeyPool() : writing generated key failed"); setKeyPool.insert(nEnd); - printf("keypool added key %"PRI64d", size=%"PRIszu"\n", nEnd, setKeyPool.size()); + LogPrintf("keypool added key %d, size=%u\n", nEnd, setKeyPool.size()); } } return true; } -void CWallet::ReserveKeyFromKeyPool(int64& nIndex, CKeyPool& keypool) +void CWallet::ReserveKeyFromKeyPool(int64_t& nIndex, CKeyPool& keypool) { nIndex = -1; keypool.vchPubKey = CPubKey(); @@ -1602,17 +1667,17 @@ void CWallet::ReserveKeyFromKeyPool(int64& nIndex, CKeyPool& keypool) if (!HaveKey(keypool.vchPubKey.GetID())) throw runtime_error("ReserveKeyFromKeyPool() : unknown key in key pool"); assert(keypool.vchPubKey.IsValid()); - printf("keypool reserve %"PRI64d"\n", nIndex); + LogPrintf("keypool reserve %d\n", nIndex); } } -int64 CWallet::AddReserveKey(const CKeyPool& keypool) +int64_t CWallet::AddReserveKey(const CKeyPool& keypool) { { LOCK2(cs_main, cs_wallet); CWalletDB walletdb(strWalletFile); - int64 nIndex = 1 + *(--setKeyPool.end()); + int64_t nIndex = 1 + *(--setKeyPool.end()); if (!walletdb.WritePool(nIndex, keypool)) throw runtime_error("AddReserveKey() : writing added key failed"); setKeyPool.insert(nIndex); @@ -1621,7 +1686,7 @@ int64 CWallet::AddReserveKey(const CKeyPool& keypool) return -1; } -void CWallet::KeepKey(int64 nIndex) +void CWallet::KeepKey(int64_t nIndex) { // Remove from key pool if (fFileBacked) @@ -1629,33 +1694,28 @@ void CWallet::KeepKey(int64 nIndex) CWalletDB walletdb(strWalletFile); walletdb.ErasePool(nIndex); } - printf("keypool keep %"PRI64d"\n", nIndex); + LogPrintf("keypool keep %d\n", nIndex); } -void CWallet::ReturnKey(int64 nIndex) +void CWallet::ReturnKey(int64_t nIndex) { // Return to key pool { LOCK(cs_wallet); setKeyPool.insert(nIndex); } - printf("keypool return %"PRI64d"\n", nIndex); + LogPrintf("keypool return %d\n", nIndex); } -bool CWallet::GetKeyFromPool(CPubKey& result, bool fAllowReuse) +bool CWallet::GetKeyFromPool(CPubKey& result) { - int64 nIndex = 0; + int64_t nIndex = 0; CKeyPool keypool; { LOCK(cs_wallet); ReserveKeyFromKeyPool(nIndex, keypool); if (nIndex == -1) { - if (fAllowReuse && vchDefaultKey.IsValid()) - { - result = vchDefaultKey; - return true; - } if (IsLocked()) return false; result = GenerateNewKey(); return true; @@ -1666,9 +1726,9 @@ bool CWallet::GetKeyFromPool(CPubKey& result, bool fAllowReuse) return true; } -int64 CWallet::GetOldestKeyPoolTime() +int64_t CWallet::GetOldestKeyPoolTime() { - int64 nIndex = 0; + int64_t nIndex = 0; CKeyPool keypool; ReserveKeyFromKeyPool(nIndex, keypool); if (nIndex == -1) @@ -1677,9 +1737,9 @@ int64 CWallet::GetOldestKeyPoolTime() return keypool.nTime; } -std::map CWallet::GetAddressBalances() +std::map CWallet::GetAddressBalances() { - map balances; + map balances; { LOCK(cs_wallet); @@ -1687,7 +1747,7 @@ std::map CWallet::GetAddressBalances() { CWalletTx *pcoin = &walletEntry.second; - if (!IsFinalTx(*pcoin) || !pcoin->IsConfirmed()) + if (!IsFinalTx(*pcoin) || !pcoin->IsTrusted()) continue; if (pcoin->IsCoinBase() && pcoin->GetBlocksToMaturity() > 0) @@ -1705,7 +1765,7 @@ std::map CWallet::GetAddressBalances() if(!ExtractDestination(pcoin->vout[i].scriptPubKey, addr)) continue; - int64 n = pcoin->IsSpent(i) ? 0 : pcoin->vout[i].nValue; + int64_t n = IsSpent(walletEntry.first, i) ? 0 : pcoin->vout[i].nValue; if (!balances.count(addr)) balances[addr] = 0; @@ -1719,6 +1779,7 @@ std::map CWallet::GetAddressBalances() set< set > CWallet::GetAddressGroupings() { + AssertLockHeld(cs_wallet); // mapWallet set< set > groupings; set grouping; @@ -1809,6 +1870,20 @@ set< set > CWallet::GetAddressGroupings() return ret; } +set CWallet::GetAccountAddresses(string strAccount) const +{ + AssertLockHeld(cs_wallet); // mapWallet + set result; + BOOST_FOREACH(const PAIRTYPE(CTxDestination, CAddressBookData)& item, mapAddressBook) + { + const CTxDestination& address = item.first; + const string& strName = item.second.name; + if (strName == strAccount) + result.insert(address); + } + return result; +} + bool CReserveKey::GetReservedKey(CPubKey& pubkey) { if (nIndex == -1) @@ -1819,7 +1894,7 @@ bool CReserveKey::GetReservedKey(CPubKey& pubkey) vchPubKey = keypool.vchPubKey; else { if (pwallet->vchDefaultKey.IsValid()) { - printf("CReserveKey::GetReservedKey(): Warning: Using default key instead of a new key, top up your keypool!"); + LogPrintf("CReserveKey::GetReservedKey(): Warning: Using default key instead of a new key, top up your keypool!"); vchPubKey = pwallet->vchDefaultKey; } else return false; @@ -1853,7 +1928,7 @@ void CWallet::GetAllReserveKeys(set& setAddress) const CWalletDB walletdb(strWalletFile); LOCK2(cs_main, cs_wallet); - BOOST_FOREACH(const int64& id, setKeyPool) + BOOST_FOREACH(const int64_t& id, setKeyPool) { CKeyPool keypool; if (!walletdb.ReadPool(id, keypool)) @@ -1879,21 +1954,25 @@ void CWallet::UpdatedTransaction(const uint256 &hashTx) void CWallet::LockCoin(COutPoint& output) { + AssertLockHeld(cs_wallet); // setLockedCoins setLockedCoins.insert(output); } void CWallet::UnlockCoin(COutPoint& output) { + AssertLockHeld(cs_wallet); // setLockedCoins setLockedCoins.erase(output); } void CWallet::UnlockAllCoins() { + AssertLockHeld(cs_wallet); // setLockedCoins setLockedCoins.clear(); } bool CWallet::IsLockedCoin(uint256 hash, unsigned int n) const { + AssertLockHeld(cs_wallet); // setLockedCoins COutPoint outpt(hash, n); return (setLockedCoins.count(outpt) > 0); @@ -1901,6 +1980,7 @@ bool CWallet::IsLockedCoin(uint256 hash, unsigned int n) const void CWallet::ListLockedCoins(std::vector& vOutpts) { + AssertLockHeld(cs_wallet); // setLockedCoins for (std::set::iterator it = setLockedCoins.begin(); it != setLockedCoins.end(); it++) { COutPoint outpt = (*it); @@ -1908,7 +1988,8 @@ void CWallet::ListLockedCoins(std::vector& vOutpts) } } -void CWallet::GetKeyBirthTimes(std::map &mapKeyBirth) const { +void CWallet::GetKeyBirthTimes(std::map &mapKeyBirth) const { + AssertLockHeld(cs_wallet); // mapKeyMetadata mapKeyBirth.clear(); // get birth times for keys with metadata @@ -1917,7 +1998,7 @@ void CWallet::GetKeyBirthTimes(std::map &mapKeyBirth) const { mapKeyBirth[it->first] = it->second.nCreateTime; // map in which we'll infer heights of other keys - CBlockIndex *pindexMax = FindBlockByHeight(std::max(0, nBestHeight - 144)); // the tip can be reorganised; use a 144-block safety margin + CBlockIndex *pindexMax = chainActive[std::max(0, chainActive.Height() - 144)]; // the tip can be reorganised; use a 144-block safety margin std::map mapKeyFirstBlock; std::set setKeys; GetKeys(setKeys); @@ -1937,7 +2018,7 @@ void CWallet::GetKeyBirthTimes(std::map &mapKeyBirth) const { // iterate over all wallet transactions... const CWalletTx &wtx = (*it).second; std::map::const_iterator blit = mapBlockIndex.find(wtx.hashBlock); - if (blit != mapBlockIndex.end() && blit->second->IsInMainChain()) { + if (blit != mapBlockIndex.end() && chainActive.Contains(blit->second)) { // ... which are already in a block int nHeight = blit->second->nHeight; BOOST_FOREACH(const CTxOut &txout, wtx.vout) { @@ -1958,3 +2039,45 @@ void CWallet::GetKeyBirthTimes(std::map &mapKeyBirth) const { for (std::map::const_iterator it = mapKeyFirstBlock.begin(); it != mapKeyFirstBlock.end(); it++) mapKeyBirth[it->first] = it->second->nTime - 7200; // block times can be 2h off } + +bool CWallet::AddDestData(const CTxDestination &dest, const std::string &key, const std::string &value) +{ + if (boost::get(&dest)) + return false; + + mapAddressBook[dest].destdata.insert(std::make_pair(key, value)); + if (!fFileBacked) + return true; + return CWalletDB(strWalletFile).WriteDestData(CBitcoinAddress(dest).ToString(), key, value); +} + +bool CWallet::EraseDestData(const CTxDestination &dest, const std::string &key) +{ + if (!mapAddressBook[dest].destdata.erase(key)) + return false; + if (!fFileBacked) + return true; + return CWalletDB(strWalletFile).EraseDestData(CBitcoinAddress(dest).ToString(), key); +} + +bool CWallet::LoadDestData(const CTxDestination &dest, const std::string &key, const std::string &value) +{ + mapAddressBook[dest].destdata.insert(std::make_pair(key, value)); + return true; +} + +bool CWallet::GetDestData(const CTxDestination &dest, const std::string &key, std::string *value) const +{ + std::map::const_iterator i = mapAddressBook.find(dest); + if(i != mapAddressBook.end()) + { + CAddressBookData::StringMap::const_iterator j = i->second.destdata.find(key); + if(j != i->second.destdata.end()) + { + if(value) + *value = j->second; + return true; + } + } + return false; +} diff --git a/src/wallet.h b/src/wallet.h index 36b3608f..88ee8719 100644 --- a/src/wallet.h +++ b/src/wallet.h @@ -1,29 +1,43 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2013 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #ifndef BITCOIN_WALLET_H #define BITCOIN_WALLET_H -#include "walletdb.h" - -#include -#include - -#include - -#include "main.h" +#include "core.h" +#include "crypter.h" #include "key.h" #include "keystore.h" -#include "script.h" +#include "main.h" #include "ui_interface.h" #include "util.h" +#include "walletdb.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +// Settings +extern int64_t nTransactionFee; +extern bool bSpendZeroConfChange; + +// -paytxfee default +static const int64_t DEFAULT_TRANSACTION_FEE = 0; +// -paytxfee will warn if called with a higher fee than this amount (in satoshis) per KB +static const int nHighTransactionFeeWarning = 0.01 * COIN; class CAccountingEntry; -class CWalletTx; -class CReserveKey; +class CCoinControl; class COutput; -class CWalletDB; +class CReserveKey; +class CScript; +class CWalletTx; /** (client) version numbers for particular wallet features */ enum WalletFeature @@ -41,7 +55,7 @@ enum WalletFeature class CKeyPool { public: - int64 nTime; + int64_t nTime; CPubKey vchPubKey; CKeyPool() @@ -64,13 +78,29 @@ public: ) }; +/** Address book data */ +class CAddressBookData +{ +public: + std::string name; + std::string purpose; + + CAddressBookData() + { + purpose = "unknown"; + } + + typedef std::map StringMap; + StringMap destdata; +}; + /** A CWallet is an extension of a keystore, which also maintains a set of transactions and balances, * and provides the ability to create new transactions. */ -class CWallet : public CCryptoKeyStore +class CWallet : public CCryptoKeyStore, public CWalletInterface { private: - bool SelectCoins(int64 nTargetValue, std::set >& setCoinsRet, int64& nValueRet) const; + bool SelectCoins(int64_t nTargetValue, std::set >& setCoinsRet, int64_t& nValueRet, const CCoinControl *coinControl = NULL) const; CWalletDB *pwalletdbEncryption; @@ -80,13 +110,31 @@ private: // the maximum wallet format version: memory-only variable that specifies to what version this wallet may be upgraded int nWalletMaxVersion; + int64_t nNextResend; + int64_t nLastResend; + + // Used to keep track of spent outpoints, and + // detect and report conflicts (double-spends or + // mutated transactions where the mutant gets mined). + typedef std::multimap TxSpends; + TxSpends mapTxSpends; + void AddToSpends(const COutPoint& outpoint, const uint256& wtxid); + void AddToSpends(const uint256& wtxid); + + void SyncMetaData(std::pair); + public: + /// Main wallet lock. + /// This lock protects all the fields added by CWallet + /// except for: + /// fFileBacked (immutable after instantiation) + /// strWalletFile (immutable after instantiation) mutable CCriticalSection cs_wallet; bool fFileBacked; std::string strWalletFile; - std::set setKeyPool; + std::set setKeyPool; std::map mapKeyMetadata; typedef std::map MasterKeyMap; @@ -94,6 +142,17 @@ public: unsigned int nMasterKeyMaxID; CWallet() + { + SetNull(); + } + CWallet(std::string strWalletFileIn) + { + SetNull(); + + strWalletFile = strWalletFileIn; + fFileBacked = true; + } + void SetNull() { nWalletVersion = FEATURE_BASE; nWalletMaxVersion = FEATURE_BASE; @@ -101,35 +160,34 @@ public: nMasterKeyMaxID = 0; pwalletdbEncryption = NULL; nOrderPosNext = 0; - } - CWallet(std::string strWalletFileIn) - { - nWalletVersion = FEATURE_BASE; - nWalletMaxVersion = FEATURE_BASE; - strWalletFile = strWalletFileIn; - fFileBacked = true; - nMasterKeyMaxID = 0; - pwalletdbEncryption = NULL; - nOrderPosNext = 0; + nNextResend = 0; + nLastResend = 0; + nTimeFirstKey = 0; } std::map mapWallet; - int64 nOrderPosNext; + + int64_t nOrderPosNext; std::map mapRequestCount; - std::map mapAddressBook; + std::map mapAddressBook; CPubKey vchDefaultKey; std::set setLockedCoins; - int64 nTimeFirstKey; + int64_t nTimeFirstKey; + + const CWalletTx* GetWalletTx(const uint256& hash) const; // check whether we are allowed to upgrade (or already support) to the named feature - bool CanSupportFeature(enum WalletFeature wf) { return nWalletMaxVersion >= wf; } + bool CanSupportFeature(enum WalletFeature wf) { AssertLockHeld(cs_wallet); return nWalletMaxVersion >= wf; } + + void AvailableCoins(std::vector& vCoins, bool fOnlyConfirmed=true, const CCoinControl *coinControl = NULL) const; + bool SelectCoinsMinConf(int64_t nTargetValue, int nConfMine, int nConfTheirs, std::vector vCoins, std::set >& setCoinsRet, int64_t& nValueRet) const; + + bool IsSpent(const uint256& hash, unsigned int n) const; - void AvailableCoins(std::vector& vCoins, bool fOnlyConfirmed=true) const; - bool SelectCoinsMinConf(int64 nTargetValue, int nConfMine, int nConfTheirs, std::vector vCoins, std::set >& setCoinsRet, int64& nValueRet) const; bool IsLockedCoin(uint256 hash, unsigned int n) const; void LockCoin(COutPoint& output); void UnlockCoin(COutPoint& output); @@ -146,7 +204,7 @@ public: // Load metadata (used by LoadWallet) bool LoadKeyMetadata(const CPubKey &pubkey, const CKeyMetadata &metadata); - bool LoadMinVersion(int nVersion) { nWalletVersion = nVersion; nWalletMaxVersion = std::max(nWalletMaxVersion, nVersion); return true; } + bool LoadMinVersion(int nVersion) { AssertLockHeld(cs_wallet); nWalletVersion = nVersion; nWalletMaxVersion = std::max(nWalletMaxVersion, nVersion); return true; } // Adds an encrypted key to the store, and saves it to disk. bool AddCryptedKey(const CPubKey &vchPubKey, const std::vector &vchCryptedSecret); @@ -155,19 +213,28 @@ public: bool AddCScript(const CScript& redeemScript); bool LoadCScript(const CScript& redeemScript) { return CCryptoKeyStore::AddCScript(redeemScript); } + /// Adds a destination data tuple to the store, and saves it to disk + bool AddDestData(const CTxDestination &dest, const std::string &key, const std::string &value); + /// Erases a destination data tuple in the store and on disk + bool EraseDestData(const CTxDestination &dest, const std::string &key); + /// Adds a destination data tuple to the store, without saving it to disk + bool LoadDestData(const CTxDestination &dest, const std::string &key, const std::string &value); + /// Look up a destination data tuple in the store, return true if found false otherwise + bool GetDestData(const CTxDestination &dest, const std::string &key, std::string *value) const; + bool Unlock(const SecureString& strWalletPassphrase); bool ChangeWalletPassphrase(const SecureString& strOldWalletPassphrase, const SecureString& strNewWalletPassphrase); bool EncryptWallet(const SecureString& strWalletPassphrase); - void GetKeyBirthTimes(std::map &mapKeyBirth) const; + void GetKeyBirthTimes(std::map &mapKeyBirth) const; /** Increment the next transaction order id @return next transaction order id */ - int64 IncOrderPosNext(CWalletDB *pwalletdb = NULL); + int64_t IncOrderPosNext(CWalletDB *pwalletdb = NULL); typedef std::pair TxPair; - typedef std::multimap TxItems; + typedef std::multimap TxItems; /** Get the wallet's activity log @return multimap of ordered transactions and accounting entries @@ -176,51 +243,53 @@ public: TxItems OrderedTxItems(std::list& acentries, std::string strAccount = ""); void MarkDirty(); - bool AddToWallet(const CWalletTx& wtxIn); - bool AddToWalletIfInvolvingMe(const uint256 &hash, const CTransaction& tx, const CBlock* pblock, bool fUpdate = false, bool fFindBlock = false); - bool EraseFromWallet(uint256 hash); - void WalletUpdateSpent(const CTransaction& prevout); + bool AddToWallet(const CWalletTx& wtxIn, bool fFromLoadWallet=false); + void SyncTransaction(const uint256 &hash, const CTransaction& tx, const CBlock* pblock); + bool AddToWalletIfInvolvingMe(const uint256 &hash, const CTransaction& tx, const CBlock* pblock, bool fUpdate); + void EraseFromWallet(const uint256 &hash); int ScanForWalletTransactions(CBlockIndex* pindexStart, bool fUpdate = false); void ReacceptWalletTransactions(); void ResendWalletTransactions(); - int64 GetBalance() const; - int64 GetUnconfirmedBalance() const; - int64 GetImmatureBalance() const; - bool CreateTransaction(const std::vector >& vecSend, - CWalletTx& wtxNew, CReserveKey& reservekey, int64& nFeeRet, std::string& strFailReason); - bool CreateTransaction(CScript scriptPubKey, int64 nValue, - CWalletTx& wtxNew, CReserveKey& reservekey, int64& nFeeRet, std::string& strFailReason); + int64_t GetBalance() const; + int64_t GetUnconfirmedBalance() const; + int64_t GetImmatureBalance() const; + bool CreateTransaction(const std::vector >& vecSend, + CWalletTx& wtxNew, CReserveKey& reservekey, int64_t& nFeeRet, std::string& strFailReason, const CCoinControl *coinControl = NULL); + bool CreateTransaction(CScript scriptPubKey, int64_t nValue, + CWalletTx& wtxNew, CReserveKey& reservekey, int64_t& nFeeRet, std::string& strFailReason, const CCoinControl *coinControl = NULL); bool CommitTransaction(CWalletTx& wtxNew, CReserveKey& reservekey); - std::string SendMoney(CScript scriptPubKey, int64 nValue, CWalletTx& wtxNew, bool fAskFee=false); - std::string SendMoneyToDestination(const CTxDestination &address, int64 nValue, CWalletTx& wtxNew, bool fAskFee=false); + std::string SendMoney(CScript scriptPubKey, int64_t nValue, CWalletTx& wtxNew); + std::string SendMoneyToDestination(const CTxDestination &address, int64_t nValue, CWalletTx& wtxNew); bool NewKeyPool(); - bool TopUpKeyPool(); - int64 AddReserveKey(const CKeyPool& keypool); - void ReserveKeyFromKeyPool(int64& nIndex, CKeyPool& keypool); - void KeepKey(int64 nIndex); - void ReturnKey(int64 nIndex); - bool GetKeyFromPool(CPubKey &key, bool fAllowReuse=true); - int64 GetOldestKeyPoolTime(); + bool TopUpKeyPool(unsigned int kpSize = 0); + int64_t AddReserveKey(const CKeyPool& keypool); + void ReserveKeyFromKeyPool(int64_t& nIndex, CKeyPool& keypool); + void KeepKey(int64_t nIndex); + void ReturnKey(int64_t nIndex); + bool GetKeyFromPool(CPubKey &key); + int64_t GetOldestKeyPoolTime(); void GetAllReserveKeys(std::set& setAddress) const; std::set< std::set > GetAddressGroupings(); - std::map GetAddressBalances(); + std::map GetAddressBalances(); + + std::set GetAccountAddresses(std::string strAccount) const; bool IsMine(const CTxIn& txin) const; - int64 GetDebit(const CTxIn& txin) const; + int64_t GetDebit(const CTxIn& txin) const; bool IsMine(const CTxOut& txout) const { return ::IsMine(*this, txout.scriptPubKey); } - int64 GetCredit(const CTxOut& txout) const + int64_t GetCredit(const CTxOut& txout) const { if (!MoneyRange(txout.nValue)) throw std::runtime_error("CWallet::GetCredit() : value out of range"); return (IsMine(txout) ? txout.nValue : 0); } bool IsChange(const CTxOut& txout) const; - int64 GetChange(const CTxOut& txout) const + int64_t GetChange(const CTxOut& txout) const { if (!MoneyRange(txout.nValue)) throw std::runtime_error("CWallet::GetChange() : value out of range"); @@ -237,9 +306,9 @@ public: { return (GetDebit(tx) > 0); } - int64 GetDebit(const CTransaction& tx) const + int64_t GetDebit(const CTransaction& tx) const { - int64 nDebit = 0; + int64_t nDebit = 0; BOOST_FOREACH(const CTxIn& txin, tx.vin) { nDebit += GetDebit(txin); @@ -248,9 +317,9 @@ public: } return nDebit; } - int64 GetCredit(const CTransaction& tx) const + int64_t GetCredit(const CTransaction& tx) const { - int64 nCredit = 0; + int64_t nCredit = 0; BOOST_FOREACH(const CTxOut& txout, tx.vout) { nCredit += GetCredit(txout); @@ -259,9 +328,9 @@ public: } return nCredit; } - int64 GetChange(const CTransaction& tx) const + int64_t GetChange(const CTransaction& tx) const { - int64 nChange = 0; + int64_t nChange = 0; BOOST_FOREACH(const CTxOut& txout, tx.vout) { nChange += GetChange(txout); @@ -273,15 +342,14 @@ public: void SetBestChain(const CBlockLocator& loc); DBErrors LoadWallet(bool& fFirstRunRet); + DBErrors ZapWalletTx(); - bool SetAddressBookName(const CTxDestination& address, const std::string& strName); + bool SetAddressBook(const CTxDestination& address, const std::string& strName, const std::string& purpose); - bool DelAddressBookName(const CTxDestination& address); + bool DelAddressBook(const CTxDestination& address); void UpdatedTransaction(const uint256 &hashTx); - void PrintWallet(const CBlock& block); - void Inventory(const uint256 &hash) { { @@ -292,13 +360,12 @@ public: } } - int GetKeyPoolSize() + unsigned int GetKeyPoolSize() { + AssertLockHeld(cs_wallet); // setKeyPool return setKeyPool.size(); } - bool GetTransaction(const uint256 &hashTx, CWalletTx& wtx); - bool SetDefaultKey(const CPubKey &vchPubKey); // signify that a particular wallet feature is now used. this may change nWalletVersion and nWalletMaxVersion if those are lower @@ -308,17 +375,27 @@ public: bool SetMaxVersion(int nVersion); // get the current wallet format (the oldest client version guaranteed to understand this wallet) - int GetVersion() { return nWalletVersion; } + int GetVersion() { LOCK(cs_wallet); return nWalletVersion; } + + // Get wallet transactions that conflict with given transaction (spend same outputs) + std::set GetConflicts(const uint256& txid) const; /** Address book entry changed. * @note called with lock cs_wallet held. */ - boost::signals2::signal NotifyAddressBookChanged; + boost::signals2::signal NotifyAddressBookChanged; /** Wallet transaction added, removed or updated. * @note called with lock cs_wallet held. */ - boost::signals2::signal NotifyTransactionChanged; + boost::signals2::signal NotifyTransactionChanged; + + /** Show progress e.g. for rescan */ + boost::signals2::signal ShowProgress; }; /** A key allocated from the key pool. */ @@ -326,7 +403,7 @@ class CReserveKey { protected: CWallet* pwallet; - int64 nIndex; + int64_t nIndex; CPubKey vchPubKey; public: CReserveKey(CWallet* pwalletIn) @@ -349,7 +426,7 @@ public: typedef std::map mapValue_t; -static void ReadOrderPos(int64& nOrderPos, mapValue_t& mapValue) +static void ReadOrderPos(int64_t& nOrderPos, mapValue_t& mapValue) { if (!mapValue.count("n")) { @@ -360,7 +437,7 @@ static void ReadOrderPos(int64& nOrderPos, mapValue_t& mapValue) } -static void WriteOrderPos(const int64& nOrderPos, mapValue_t& mapValue) +static void WriteOrderPos(const int64_t& nOrderPos, mapValue_t& mapValue) { if (nOrderPos == -1) return; @@ -377,7 +454,6 @@ private: const CWallet* pwallet; public: - std::vector vtxPrev; mapValue_t mapValue; std::vector > vOrderForm; unsigned int fTimeReceivedIsTxTime; @@ -385,8 +461,7 @@ public: unsigned int nTimeSmart; char fFromMe; std::string strFromAccount; - std::vector vfSpent; // which outputs are already spent - int64 nOrderPos; // position in ordered transaction list + int64_t nOrderPos; // position in ordered transaction list // memory only mutable bool fDebitCached; @@ -394,11 +469,11 @@ public: mutable bool fImmatureCreditCached; mutable bool fAvailableCreditCached; mutable bool fChangeCached; - mutable int64 nDebitCached; - mutable int64 nCreditCached; - mutable int64 nImmatureCreditCached; - mutable int64 nAvailableCreditCached; - mutable int64 nChangeCached; + mutable int64_t nDebitCached; + mutable int64_t nCreditCached; + mutable int64_t nImmatureCreditCached; + mutable int64_t nAvailableCreditCached; + mutable int64_t nChangeCached; CWalletTx() { @@ -423,7 +498,6 @@ public: void Init(const CWallet* pwalletIn) { pwallet = pwalletIn; - vtxPrev.clear(); mapValue.clear(); vOrderForm.clear(); fTimeReceivedIsTxTime = false; @@ -431,7 +505,6 @@ public: nTimeSmart = 0; fFromMe = false; strFromAccount.clear(); - vfSpent.clear(); fDebitCached = false; fCreditCached = false; fImmatureCreditCached = false; @@ -456,15 +529,6 @@ public: { pthis->mapValue["fromaccount"] = pthis->strFromAccount; - std::string str; - BOOST_FOREACH(char f, vfSpent) - { - str += (f ? '1' : '0'); - if (f) - fSpent = true; - } - pthis->mapValue["spent"] = str; - WriteOrderPos(pthis->nOrderPos, pthis->mapValue); if (nTimeSmart) @@ -472,7 +536,8 @@ public: } nSerSize += SerReadWrite(s, *(CMerkleTx*)this, nType, nVersion,ser_action); - READWRITE(vtxPrev); + std::vector vUnused; // Used to be vtxPrev + READWRITE(vUnused); READWRITE(mapValue); READWRITE(vOrderForm); READWRITE(fTimeReceivedIsTxTime); @@ -484,12 +549,6 @@ public: { pthis->strFromAccount = pthis->mapValue["fromaccount"]; - if (mapValue.count("spent")) - BOOST_FOREACH(char c, pthis->mapValue["spent"]) - pthis->vfSpent.push_back(c != '0'); - else - pthis->vfSpent.assign(vout.size(), fSpent); - ReadOrderPos(pthis->nOrderPos, pthis->mapValue); pthis->nTimeSmart = mapValue.count("timesmart") ? (unsigned int)atoi64(pthis->mapValue["timesmart"]) : 0; @@ -502,26 +561,6 @@ public: pthis->mapValue.erase("timesmart"); ) - // marks certain txout's as spent - // returns true if any update took place - bool UpdateSpent(const std::vector& vfNewSpent) - { - bool fReturn = false; - for (unsigned int i = 0; i < vfNewSpent.size(); i++) - { - if (i == vfSpent.size()) - break; - - if (vfNewSpent[i] && !vfSpent[i]) - { - vfSpent[i] = true; - fReturn = true; - fAvailableCreditCached = false; - } - } - return fReturn; - } - // make sure balances are recalculated void MarkDirty() { @@ -537,28 +576,7 @@ public: MarkDirty(); } - void MarkSpent(unsigned int nOut) - { - if (nOut >= vout.size()) - throw std::runtime_error("CWalletTx::MarkSpent() : nOut out of range"); - vfSpent.resize(vout.size()); - if (!vfSpent[nOut]) - { - vfSpent[nOut] = true; - fAvailableCreditCached = false; - } - } - - bool IsSpent(unsigned int nOut) const - { - if (nOut >= vout.size()) - throw std::runtime_error("CWalletTx::IsSpent() : nOut out of range"); - if (nOut >= vfSpent.size()) - return false; - return (!!vfSpent[nOut]); - } - - int64 GetDebit() const + int64_t GetDebit() const { if (vin.empty()) return 0; @@ -569,7 +587,7 @@ public: return nDebitCached; } - int64 GetCredit(bool fUseCache=true) const + int64_t GetCredit(bool fUseCache=true) const { // Must wait until coinbase is safely deep enough in the chain before valuing it if (IsCoinBase() && GetBlocksToMaturity() > 0) @@ -583,7 +601,7 @@ public: return nCreditCached; } - int64 GetImmatureCredit(bool fUseCache=true) const + int64_t GetImmatureCredit(bool fUseCache=true) const { if (IsCoinBase() && GetBlocksToMaturity() > 0 && IsInMainChain()) { @@ -597,8 +615,11 @@ public: return 0; } - int64 GetAvailableCredit(bool fUseCache=true) const + int64_t GetAvailableCredit(bool fUseCache=true) const { + if (pwallet == 0) + return 0; + // Must wait until coinbase is safely deep enough in the chain before valuing it if (IsCoinBase() && GetBlocksToMaturity() > 0) return 0; @@ -606,10 +627,11 @@ public: if (fUseCache && fAvailableCreditCached) return nAvailableCreditCached; - int64 nCredit = 0; + int64_t nCredit = 0; + uint256 hashTx = GetHash(); for (unsigned int i = 0; i < vout.size(); i++) { - if (!IsSpent(i)) + if (!pwallet->IsSpent(hashTx, i)) { const CTxOut &txout = vout[i]; nCredit += pwallet->GetCredit(txout); @@ -624,7 +646,7 @@ public: } - int64 GetChange() const + int64_t GetChange() const { if (fChangeCached) return nChangeCached; @@ -633,68 +655,52 @@ public: return nChangeCached; } - void GetAmounts(std::list >& listReceived, - std::list >& listSent, int64& nFee, std::string& strSentAccount) const; + void GetAmounts(std::list >& listReceived, + std::list >& listSent, int64_t& nFee, std::string& strSentAccount) const; - void GetAccountAmounts(const std::string& strAccount, int64& nReceived, - int64& nSent, int64& nFee) const; + void GetAccountAmounts(const std::string& strAccount, int64_t& nReceived, + int64_t& nSent, int64_t& nFee) const; bool IsFromMe() const { return (GetDebit() > 0); } - bool IsConfirmed() const + bool IsTrusted() const { // Quick answer in most cases if (!IsFinalTx(*this)) return false; - if (GetDepthInMainChain() >= 1) + int nDepth = GetDepthInMainChain(); + if (nDepth >= 1) return true; - if (!IsFromMe()) // using wtx's cached debit + if (nDepth < 0) + return false; + if (!bSpendZeroConfChange || !IsFromMe()) // using wtx's cached debit return false; - // If no confirmations but it's from us, we can still - // consider it confirmed if all dependencies are confirmed - std::map mapPrev; - std::vector vWorkQueue; - vWorkQueue.reserve(vtxPrev.size()+1); - vWorkQueue.push_back(this); - for (unsigned int i = 0; i < vWorkQueue.size(); i++) + // Trusted if all inputs are from us and are in the mempool: + BOOST_FOREACH(const CTxIn& txin, vin) { - const CMerkleTx* ptx = vWorkQueue[i]; - - if (!IsFinalTx(*ptx)) + // Transactions not sent by us: not trusted + const CWalletTx* parent = pwallet->GetWalletTx(txin.prevout.hash); + if (parent == NULL) return false; - if (ptx->GetDepthInMainChain() >= 1) - continue; - if (!pwallet->IsFromMe(*ptx)) + const CTxOut& parentOut = parent->vout[txin.prevout.n]; + if (!pwallet->IsMine(parentOut)) return false; - - if (mapPrev.empty()) - { - BOOST_FOREACH(const CMerkleTx& tx, vtxPrev) - mapPrev[tx.GetHash()] = &tx; - } - - BOOST_FOREACH(const CTxIn& txin, ptx->vin) - { - if (!mapPrev.count(txin.prevout.hash)) - return false; - vWorkQueue.push_back(mapPrev[txin.prevout.hash]); - } } return true; } bool WriteToDisk(); - int64 GetTxTime() const; + int64_t GetTxTime() const; int GetRequestCount() const; - void AddSupportingTransactions(); - bool AcceptWalletTransaction(); void RelayWalletTransaction(); + + std::set GetConflicts() const; }; @@ -719,7 +725,7 @@ public: void print() const { - printf("%s\n", ToString().c_str()); + LogPrintf("%s\n", ToString().c_str()); } }; @@ -731,13 +737,13 @@ class CWalletKey { public: CPrivKey vchPrivKey; - int64 nTimeCreated; - int64 nTimeExpires; + int64_t nTimeCreated; + int64_t nTimeExpires; std::string strComment; //// todo: add something to note what created it (user, getnewaddress, change) //// maybe should have a map property map - CWalletKey(int64 nExpires=0) + CWalletKey(int64_t nExpires=0) { nTimeCreated = (nExpires ? GetTime() : 0); nTimeExpires = nExpires; @@ -794,13 +800,13 @@ class CAccountingEntry { public: std::string strAccount; - int64 nCreditDebit; - int64 nTime; + int64_t nCreditDebit; + int64_t nTime; std::string strOtherAccount; std::string strComment; mapValue_t mapValue; - int64 nOrderPos; // position in ordered transaction list - uint64 nEntryNo; + int64_t nOrderPos; // position in ordered transaction list + uint64_t nEntryNo; CAccountingEntry() { @@ -865,6 +871,4 @@ private: std::vector _ssExtra; }; -bool GetWalletFile(CWallet* pwallet, std::string &strWalletFileOut); - #endif diff --git a/src/walletdb.cpp b/src/walletdb.cpp index 7aad7797..80e9dded 100644 --- a/src/walletdb.cpp +++ b/src/walletdb.cpp @@ -1,18 +1,24 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2014 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "walletdb.h" + +#include "base58.h" +#include "protocol.h" +#include "serialize.h" +#include "sync.h" #include "wallet.h" -#include + #include +#include using namespace std; using namespace boost; -static uint64 nAccountingEntryNumber = 0; +static uint64_t nAccountingEntryNumber = 0; // // CWalletDB @@ -32,6 +38,125 @@ bool CWalletDB::EraseName(const string& strAddress) return Erase(make_pair(string("name"), strAddress)); } +bool CWalletDB::WritePurpose(const string& strAddress, const string& strPurpose) +{ + nWalletDBUpdated++; + return Write(make_pair(string("purpose"), strAddress), strPurpose); +} + +bool CWalletDB::ErasePurpose(const string& strPurpose) +{ + nWalletDBUpdated++; + return Erase(make_pair(string("purpose"), strPurpose)); +} + +bool CWalletDB::WriteTx(uint256 hash, const CWalletTx& wtx) +{ + nWalletDBUpdated++; + return Write(std::make_pair(std::string("tx"), hash), wtx); +} + +bool CWalletDB::EraseTx(uint256 hash) +{ + nWalletDBUpdated++; + return Erase(std::make_pair(std::string("tx"), hash)); +} + +bool CWalletDB::WriteKey(const CPubKey& vchPubKey, const CPrivKey& vchPrivKey, const CKeyMetadata& keyMeta) +{ + nWalletDBUpdated++; + + if (!Write(std::make_pair(std::string("keymeta"), vchPubKey), + keyMeta, false)) + return false; + + // hash pubkey/privkey to accelerate wallet load + std::vector vchKey; + vchKey.reserve(vchPubKey.size() + vchPrivKey.size()); + vchKey.insert(vchKey.end(), vchPubKey.begin(), vchPubKey.end()); + vchKey.insert(vchKey.end(), vchPrivKey.begin(), vchPrivKey.end()); + + return Write(std::make_pair(std::string("key"), vchPubKey), std::make_pair(vchPrivKey, Hash(vchKey.begin(), vchKey.end())), false); +} + +bool CWalletDB::WriteCryptedKey(const CPubKey& vchPubKey, + const std::vector& vchCryptedSecret, + const CKeyMetadata &keyMeta) +{ + const bool fEraseUnencryptedKey = true; + nWalletDBUpdated++; + + if (!Write(std::make_pair(std::string("keymeta"), vchPubKey), + keyMeta)) + return false; + + if (!Write(std::make_pair(std::string("ckey"), vchPubKey), vchCryptedSecret, false)) + return false; + if (fEraseUnencryptedKey) + { + Erase(std::make_pair(std::string("key"), vchPubKey)); + Erase(std::make_pair(std::string("wkey"), vchPubKey)); + } + return true; +} + +bool CWalletDB::WriteMasterKey(unsigned int nID, const CMasterKey& kMasterKey) +{ + nWalletDBUpdated++; + return Write(std::make_pair(std::string("mkey"), nID), kMasterKey, true); +} + +bool CWalletDB::WriteCScript(const uint160& hash, const CScript& redeemScript) +{ + nWalletDBUpdated++; + return Write(std::make_pair(std::string("cscript"), hash), redeemScript, false); +} + +bool CWalletDB::WriteBestBlock(const CBlockLocator& locator) +{ + nWalletDBUpdated++; + return Write(std::string("bestblock"), locator); +} + +bool CWalletDB::ReadBestBlock(CBlockLocator& locator) +{ + return Read(std::string("bestblock"), locator); +} + +bool CWalletDB::WriteOrderPosNext(int64_t nOrderPosNext) +{ + nWalletDBUpdated++; + return Write(std::string("orderposnext"), nOrderPosNext); +} + +bool CWalletDB::WriteDefaultKey(const CPubKey& vchPubKey) +{ + nWalletDBUpdated++; + return Write(std::string("defaultkey"), vchPubKey); +} + +bool CWalletDB::ReadPool(int64_t nPool, CKeyPool& keypool) +{ + return Read(std::make_pair(std::string("pool"), nPool), keypool); +} + +bool CWalletDB::WritePool(int64_t nPool, const CKeyPool& keypool) +{ + nWalletDBUpdated++; + return Write(std::make_pair(std::string("pool"), nPool), keypool); +} + +bool CWalletDB::ErasePool(int64_t nPool) +{ + nWalletDBUpdated++; + return Erase(std::make_pair(std::string("pool"), nPool)); +} + +bool CWalletDB::WriteMinVersion(int nVersion) +{ + return Write(std::string("minversion"), nVersion); +} + bool CWalletDB::ReadAccount(const string& strAccount, CAccount& account) { account.SetNull(); @@ -43,7 +168,7 @@ bool CWalletDB::WriteAccount(const string& strAccount, const CAccount& account) return Write(make_pair(string("acc"), strAccount), account); } -bool CWalletDB::WriteAccountingEntry(const uint64 nAccEntryNum, const CAccountingEntry& acentry) +bool CWalletDB::WriteAccountingEntry(const uint64_t nAccEntryNum, const CAccountingEntry& acentry) { return Write(boost::make_tuple(string("acentry"), acentry.strAccount, nAccEntryNum), acentry); } @@ -53,12 +178,12 @@ bool CWalletDB::WriteAccountingEntry(const CAccountingEntry& acentry) return WriteAccountingEntry(++nAccountingEntryNumber, acentry); } -int64 CWalletDB::GetAccountCreditDebit(const string& strAccount) +int64_t CWalletDB::GetAccountCreditDebit(const string& strAccount) { list entries; ListAccountCreditDebit(strAccount, entries); - int64 nCreditDebit = 0; + int64_t nCreditDebit = 0; BOOST_FOREACH (const CAccountingEntry& entry, entries) nCreditDebit += entry.nCreditDebit; @@ -73,12 +198,12 @@ void CWalletDB::ListAccountCreditDebit(const string& strAccount, list TxPair; - typedef multimap TxItems; + typedef multimap TxItems; TxItems txByTime; for (map::iterator it = pwallet->mapWallet.begin(); it != pwallet->mapWallet.end(); ++it) @@ -133,14 +258,14 @@ CWalletDB::ReorderTransactions(CWallet* pwallet) txByTime.insert(make_pair(entry.nTime, TxPair((CWalletTx*)0, &entry))); } - int64& nOrderPosNext = pwallet->nOrderPosNext; + int64_t& nOrderPosNext = pwallet->nOrderPosNext; nOrderPosNext = 0; - std::vector nOrderPosOffsets; + std::vector nOrderPosOffsets; for (TxItems::iterator it = txByTime.begin(); it != txByTime.end(); ++it) { CWalletTx *const pwtx = (*it).second.first; CAccountingEntry *const pacentry = (*it).second.second; - int64& nOrderPos = (pwtx != 0) ? pwtx->nOrderPos : pacentry->nOrderPos; + int64_t& nOrderPos = (pwtx != 0) ? pwtx->nOrderPos : pacentry->nOrderPos; if (nOrderPos == -1) { @@ -154,8 +279,8 @@ CWalletDB::ReorderTransactions(CWallet* pwallet) } else { - int64 nOrderPosOff = 0; - BOOST_FOREACH(const int64& nOffsetStart, nOrderPosOffsets) + int64_t nOrderPosOff = 0; + BOOST_FOREACH(const int64_t& nOffsetStart, nOrderPosOffsets) { if (nOrderPos >= nOffsetStart) ++nOrderPosOff; @@ -212,22 +337,23 @@ ReadKeyValue(CWallet* pwallet, CDataStream& ssKey, CDataStream& ssValue, { string strAddress; ssKey >> strAddress; - ssValue >> pwallet->mapAddressBook[CBitcoinAddress(strAddress).Get()]; + ssValue >> pwallet->mapAddressBook[CBitcoinAddress(strAddress).Get()].name; + } + else if (strType == "purpose") + { + string strAddress; + ssKey >> strAddress; + ssValue >> pwallet->mapAddressBook[CBitcoinAddress(strAddress).Get()].purpose; } else if (strType == "tx") { uint256 hash; ssKey >> hash; - CWalletTx& wtx = pwallet->mapWallet[hash]; + CWalletTx wtx; ssValue >> wtx; CValidationState state; - if (CheckTransaction(wtx, state) && (wtx.GetHash() == hash) && state.IsValid()) - wtx.BindWallet(pwallet); - else - { - pwallet->mapWallet.erase(hash); + if (!(CheckTransaction(wtx, state) && (wtx.GetHash() == hash) && state.IsValid())) return false; - } // Undo serialize changes in 31600 if (31404 <= wtx.fTimeReceivedIsTxTime && wtx.fTimeReceivedIsTxTime <= 31703) @@ -238,12 +364,12 @@ ReadKeyValue(CWallet* pwallet, CDataStream& ssKey, CDataStream& ssValue, char fUnused; ssValue >> fTmp >> fUnused >> wtx.strFromAccount; strErr = strprintf("LoadWallet() upgrading tx ver=%d %d '%s' %s", - wtx.fTimeReceivedIsTxTime, fTmp, wtx.strFromAccount.c_str(), hash.ToString().c_str()); + wtx.fTimeReceivedIsTxTime, fTmp, wtx.strFromAccount, hash.ToString()); wtx.fTimeReceivedIsTxTime = fTmp; } else { - strErr = strprintf("LoadWallet() repairing tx ver=%d %s", wtx.fTimeReceivedIsTxTime, hash.ToString().c_str()); + strErr = strprintf("LoadWallet() repairing tx ver=%d %s", wtx.fTimeReceivedIsTxTime, hash.ToString()); wtx.fTimeReceivedIsTxTime = 0; } wss.vWalletUpgrade.push_back(hash); @@ -252,19 +378,20 @@ ReadKeyValue(CWallet* pwallet, CDataStream& ssKey, CDataStream& ssValue, if (wtx.nOrderPos == -1) wss.fAnyUnordered = true; + pwallet->AddToWallet(wtx, true); //// debug print - //printf("LoadWallet %s\n", wtx.GetHash().ToString().c_str()); - //printf(" %12"PRI64d" %s %s %s\n", + //LogPrintf("LoadWallet %s\n", wtx.GetHash().ToString()); + //LogPrintf(" %12d %s %s %s\n", // wtx.vout[0].nValue, - // DateTimeStrFormat("%Y-%m-%d %H:%M:%S", wtx.GetBlockTime()).c_str(), - // wtx.hashBlock.ToString().c_str(), - // wtx.mapValue["message"].c_str()); + // DateTimeStrFormat("%Y-%m-%d %H:%M:%S", wtx.GetBlockTime()), + // wtx.hashBlock.ToString(), + // wtx.mapValue["message"]); } else if (strType == "acentry") { string strAccount; ssKey >> strAccount; - uint64 nNumber; + uint64_t nNumber; ssKey >> nNumber; if (nNumber > nAccountingEntryNumber) nAccountingEntryNumber = nNumber; @@ -288,6 +415,8 @@ ReadKeyValue(CWallet* pwallet, CDataStream& ssKey, CDataStream& ssValue, } CKey key; CPrivKey pkey; + uint256 hash = 0; + if (strType == "key") { wss.nKeys++; @@ -297,16 +426,42 @@ ReadKeyValue(CWallet* pwallet, CDataStream& ssKey, CDataStream& ssValue, ssValue >> wkey; pkey = wkey.vchPrivKey; } - if (!key.SetPrivKey(pkey, vchPubKey.IsCompressed())) + + // Old wallets store keys as "key" [pubkey] => [privkey] + // ... which was slow for wallets with lots of keys, because the public key is re-derived from the private key + // using EC operations as a checksum. + // Newer wallets store keys as "key"[pubkey] => [privkey][hash(pubkey,privkey)], which is much faster while + // remaining backwards-compatible. + try + { + ssValue >> hash; + } + catch(...){} + + bool fSkipCheck = false; + + if (hash != 0) + { + // hash pubkey/privkey to accelerate wallet load + std::vector vchKey; + vchKey.reserve(vchPubKey.size() + pkey.size()); + vchKey.insert(vchKey.end(), vchPubKey.begin(), vchPubKey.end()); + vchKey.insert(vchKey.end(), pkey.begin(), pkey.end()); + + if (Hash(vchKey.begin(), vchKey.end()) != hash) + { + strErr = "Error reading wallet database: CPubKey/CPrivKey corrupt"; + return false; + } + + fSkipCheck = true; + } + + if (!key.Load(pkey, vchPubKey, fSkipCheck)) { strErr = "Error reading wallet database: CPrivKey corrupt"; return false; } - if (key.GetPubKey() != vchPubKey) - { - strErr = "Error reading wallet database: CPrivKey pubkey inconsistency"; - return false; - } if (!pwallet->LoadKey(key, vchPubKey)) { strErr = "Error reading wallet database: LoadKey failed"; @@ -364,7 +519,7 @@ ReadKeyValue(CWallet* pwallet, CDataStream& ssKey, CDataStream& ssValue, } else if (strType == "pool") { - int64 nIndex; + int64_t nIndex; ssKey >> nIndex; CKeyPool keypool; ssValue >> keypool; @@ -399,6 +554,18 @@ ReadKeyValue(CWallet* pwallet, CDataStream& ssKey, CDataStream& ssValue, { ssValue >> pwallet->nOrderPosNext; } + else if (strType == "destdata") + { + std::string strAddress, strKey, strValue; + ssKey >> strAddress; + ssKey >> strKey; + ssValue >> strValue; + if (!pwallet->LoadDestData(CBitcoinAddress(strAddress).Get(), strKey, strValue)) + { + strErr = "Error reading wallet database: LoadDestData failed"; + return false; + } + } } catch (...) { return false; @@ -433,11 +600,11 @@ DBErrors CWalletDB::LoadWallet(CWallet* pwallet) Dbc* pcursor = GetCursor(); if (!pcursor) { - printf("Error getting wallet database cursor\n"); + LogPrintf("Error getting wallet database cursor\n"); return DB_CORRUPT; } - loop + while (true) { // Read next record CDataStream ssKey(SER_DISK, CLIENT_VERSION); @@ -447,7 +614,7 @@ DBErrors CWalletDB::LoadWallet(CWallet* pwallet) break; else if (ret != 0) { - printf("Error reading next record from wallet database\n"); + LogPrintf("Error reading next record from wallet database\n"); return DB_CORRUPT; } @@ -469,7 +636,7 @@ DBErrors CWalletDB::LoadWallet(CWallet* pwallet) } } if (!strErr.empty()) - printf("%s\n", strErr.c_str()); + LogPrintf("%s\n", strErr); } pcursor->close(); } @@ -488,9 +655,9 @@ DBErrors CWalletDB::LoadWallet(CWallet* pwallet) if (result != DB_LOAD_OK) return result; - printf("nFileVersion = %d\n", wss.nFileVersion); + LogPrintf("nFileVersion = %d\n", wss.nFileVersion); - printf("Keys: %u plaintext, %u encrypted, %u w/ metadata, %u total\n", + LogPrintf("Keys: %u plaintext, %u encrypted, %u w/ metadata, %u total\n", wss.nKeys, wss.nCKeys, wss.nKeyMeta, wss.nKeys + wss.nCKeys); // nTimeFirstKey is only reliable if all keys have metadata @@ -513,6 +680,86 @@ DBErrors CWalletDB::LoadWallet(CWallet* pwallet) return result; } +DBErrors CWalletDB::FindWalletTx(CWallet* pwallet, vector& vTxHash) +{ + pwallet->vchDefaultKey = CPubKey(); + CWalletScanState wss; + bool fNoncriticalErrors = false; + DBErrors result = DB_LOAD_OK; + + try { + LOCK(pwallet->cs_wallet); + int nMinVersion = 0; + if (Read((string)"minversion", nMinVersion)) + { + if (nMinVersion > CLIENT_VERSION) + return DB_TOO_NEW; + pwallet->LoadMinVersion(nMinVersion); + } + + // Get cursor + Dbc* pcursor = GetCursor(); + if (!pcursor) + { + LogPrintf("Error getting wallet database cursor\n"); + return DB_CORRUPT; + } + + while (true) + { + // Read next record + CDataStream ssKey(SER_DISK, CLIENT_VERSION); + CDataStream ssValue(SER_DISK, CLIENT_VERSION); + int ret = ReadAtCursor(pcursor, ssKey, ssValue); + if (ret == DB_NOTFOUND) + break; + else if (ret != 0) + { + LogPrintf("Error reading next record from wallet database\n"); + return DB_CORRUPT; + } + + string strType; + ssKey >> strType; + if (strType == "tx") { + uint256 hash; + ssKey >> hash; + + vTxHash.push_back(hash); + } + } + pcursor->close(); + } + catch (boost::thread_interrupted) { + throw; + } + catch (...) { + result = DB_CORRUPT; + } + + if (fNoncriticalErrors && result == DB_LOAD_OK) + result = DB_NONCRITICAL_ERROR; + + return result; +} + +DBErrors CWalletDB::ZapWalletTx(CWallet* pwallet) +{ + // build list of wallet TXs + vector vTxHash; + DBErrors err = FindWalletTx(pwallet, vTxHash); + if (err != DB_LOAD_OK) + return err; + + // erase each wallet TX + BOOST_FOREACH (uint256& hash, vTxHash) { + if (!EraseTx(hash)) + return DB_CORRUPT; + } + + return DB_LOAD_OK; +} + void ThreadFlushWalletDB(const string& strFile) { // Make this thread recognisable as the wallet flushing thread @@ -527,7 +774,7 @@ void ThreadFlushWalletDB(const string& strFile) unsigned int nLastSeen = nWalletDBUpdated; unsigned int nLastFlushed = nWalletDBUpdated; - int64 nLastWalletUpdate = GetTime(); + int64_t nLastWalletUpdate = GetTime(); while (true) { MilliSleep(500); @@ -558,16 +805,16 @@ void ThreadFlushWalletDB(const string& strFile) map::iterator mi = bitdb.mapFileUseCount.find(strFile); if (mi != bitdb.mapFileUseCount.end()) { - printf("Flushing wallet.dat\n"); + LogPrint("db", "Flushing wallet.dat\n"); nLastFlushed = nWalletDBUpdated; - int64 nStart = GetTimeMillis(); + int64_t nStart = GetTimeMillis(); // Flush wallet.dat so it's self contained bitdb.CloseDb(strFile); bitdb.CheckpointLSN(strFile); bitdb.mapFileUseCount.erase(mi++); - printf("Flushed wallet.dat %"PRI64d"ms\n", GetTimeMillis() - nStart); + LogPrint("db", "Flushed wallet.dat %dms\n", GetTimeMillis() - nStart); } } } @@ -602,10 +849,10 @@ bool BackupWallet(const CWallet& wallet, const string& strDest) #else filesystem::copy_file(pathSrc, pathDest); #endif - printf("copied wallet.dat to %s\n", pathDest.string().c_str()); + LogPrintf("copied wallet.dat to %s\n", pathDest.string()); return true; } catch(const filesystem::filesystem_error &e) { - printf("error copying wallet.dat to %s - %s\n", pathDest.string().c_str(), e.what()); + LogPrintf("error copying wallet.dat to %s - %s\n", pathDest.string(), e.what()); return false; } } @@ -627,16 +874,16 @@ bool CWalletDB::Recover(CDBEnv& dbenv, std::string filename, bool fOnlyKeys) // Rewrite salvaged data to wallet.dat // Set -rescan so any missing transactions will be // found. - int64 now = GetTime(); - std::string newFilename = strprintf("wallet.%"PRI64d".bak", now); + int64_t now = GetTime(); + std::string newFilename = strprintf("wallet.%d.bak", now); int result = dbenv.dbenv.dbrename(NULL, filename.c_str(), NULL, newFilename.c_str(), DB_AUTO_COMMIT); if (result == 0) - printf("Renamed %s to %s\n", filename.c_str(), newFilename.c_str()); + LogPrintf("Renamed %s to %s\n", filename, newFilename); else { - printf("Failed to rename %s to %s\n", filename.c_str(), newFilename.c_str()); + LogPrintf("Failed to rename %s to %s\n", filename, newFilename); return false; } @@ -644,10 +891,10 @@ bool CWalletDB::Recover(CDBEnv& dbenv, std::string filename, bool fOnlyKeys) bool allOK = dbenv.Salvage(newFilename, true, salvagedData); if (salvagedData.empty()) { - printf("Salvage(aggressive) found no records in %s.\n", newFilename.c_str()); + LogPrintf("Salvage(aggressive) found no records in %s.\n", newFilename); return false; } - printf("Salvage(aggressive) found %"PRIszu" records\n", salvagedData.size()); + LogPrintf("Salvage(aggressive) found %u records\n", salvagedData.size()); bool fSuccess = allOK; Db* pdbCopy = new Db(&dbenv.dbenv, 0); @@ -659,7 +906,7 @@ bool CWalletDB::Recover(CDBEnv& dbenv, std::string filename, bool fOnlyKeys) 0); if (ret > 0) { - printf("Cannot create database file %s\n", filename.c_str()); + LogPrintf("Cannot create database file %s\n", filename); return false; } CWallet dummyWallet; @@ -679,7 +926,7 @@ bool CWalletDB::Recover(CDBEnv& dbenv, std::string filename, bool fOnlyKeys) continue; if (!fReadOK) { - printf("WARNING: CWalletDB::Recover skipping %s: %s\n", strType.c_str(), strErr.c_str()); + LogPrintf("WARNING: CWalletDB::Recover skipping %s: %s\n", strType, strErr); continue; } } @@ -700,3 +947,15 @@ bool CWalletDB::Recover(CDBEnv& dbenv, std::string filename) { return CWalletDB::Recover(dbenv, filename, false); } + +bool CWalletDB::WriteDestData(const std::string &address, const std::string &key, const std::string &value) +{ + nWalletDBUpdated++; + return Write(boost::make_tuple(std::string("destdata"), address, key), value); +} + +bool CWalletDB::EraseDestData(const std::string &address, const std::string &key) +{ + nWalletDBUpdated++; + return Erase(boost::make_tuple(string("destdata"), address, key)); +} diff --git a/src/walletdb.h b/src/walletdb.h index 4dfa35d8..3bfb4360 100644 --- a/src/walletdb.h +++ b/src/walletdb.h @@ -1,18 +1,29 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2009-2013 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #ifndef BITCOIN_WALLETDB_H #define BITCOIN_WALLETDB_H #include "db.h" -#include "base58.h" +#include "key.h" + +#include +#include +#include +#include +#include -class CKeyPool; class CAccount; class CAccountingEntry; +struct CBlockLocator; +class CKeyPool; +class CMasterKey; +class CScript; class CWallet; class CWalletTx; +class uint160; +class uint256; /** Error statuses for the wallet database */ enum DBErrors @@ -30,13 +41,13 @@ class CKeyMetadata public: static const int CURRENT_VERSION=1; int nVersion; - int64 nCreateTime; // 0 means unknown + int64_t nCreateTime; // 0 means unknown CKeyMetadata() { SetNull(); } - CKeyMetadata(int64 nCreateTime_) + CKeyMetadata(int64_t nCreateTime_) { nVersion = CKeyMetadata::CURRENT_VERSION; nCreateTime = nCreateTime_; @@ -68,141 +79,51 @@ private: void operator=(const CWalletDB&); public: bool WriteName(const std::string& strAddress, const std::string& strName); - bool EraseName(const std::string& strAddress); - bool WriteTx(uint256 hash, const CWalletTx& wtx) - { - nWalletDBUpdated++; - return Write(std::make_pair(std::string("tx"), hash), wtx); - } + bool WritePurpose(const std::string& strAddress, const std::string& purpose); + bool ErasePurpose(const std::string& strAddress); - bool EraseTx(uint256 hash) - { - nWalletDBUpdated++; - return Erase(std::make_pair(std::string("tx"), hash)); - } + bool WriteTx(uint256 hash, const CWalletTx& wtx); + bool EraseTx(uint256 hash); - bool WriteKey(const CPubKey& vchPubKey, const CPrivKey& vchPrivKey, - const CKeyMetadata &keyMeta) - { - nWalletDBUpdated++; + bool WriteKey(const CPubKey& vchPubKey, const CPrivKey& vchPrivKey, const CKeyMetadata &keyMeta); + bool WriteCryptedKey(const CPubKey& vchPubKey, const std::vector& vchCryptedSecret, const CKeyMetadata &keyMeta); + bool WriteMasterKey(unsigned int nID, const CMasterKey& kMasterKey); - if (!Write(std::make_pair(std::string("keymeta"), vchPubKey), - keyMeta)) - return false; + bool WriteCScript(const uint160& hash, const CScript& redeemScript); - return Write(std::make_pair(std::string("key"), vchPubKey), vchPrivKey, false); - } + bool WriteBestBlock(const CBlockLocator& locator); + bool ReadBestBlock(CBlockLocator& locator); - bool WriteCryptedKey(const CPubKey& vchPubKey, - const std::vector& vchCryptedSecret, - const CKeyMetadata &keyMeta) - { - const bool fEraseUnencryptedKey = true; - nWalletDBUpdated++; + bool WriteOrderPosNext(int64_t nOrderPosNext); - if (!Write(std::make_pair(std::string("keymeta"), vchPubKey), - keyMeta)) - return false; + bool WriteDefaultKey(const CPubKey& vchPubKey); - if (!Write(std::make_pair(std::string("ckey"), vchPubKey), vchCryptedSecret, false)) - return false; - if (fEraseUnencryptedKey) - { - Erase(std::make_pair(std::string("key"), vchPubKey)); - Erase(std::make_pair(std::string("wkey"), vchPubKey)); - } - return true; - } + bool ReadPool(int64_t nPool, CKeyPool& keypool); + bool WritePool(int64_t nPool, const CKeyPool& keypool); + bool ErasePool(int64_t nPool); - bool WriteMasterKey(unsigned int nID, const CMasterKey& kMasterKey) - { - nWalletDBUpdated++; - return Write(std::make_pair(std::string("mkey"), nID), kMasterKey, true); - } - - bool WriteCScript(const uint160& hash, const CScript& redeemScript) - { - nWalletDBUpdated++; - return Write(std::make_pair(std::string("cscript"), hash), redeemScript, false); - } - - bool WriteBestBlock(const CBlockLocator& locator) - { - nWalletDBUpdated++; - return Write(std::string("bestblock"), locator); - } - - bool ReadBestBlock(CBlockLocator& locator) - { - return Read(std::string("bestblock"), locator); - } - - bool WriteOrderPosNext(int64 nOrderPosNext) - { - nWalletDBUpdated++; - return Write(std::string("orderposnext"), nOrderPosNext); - } - - bool WriteDefaultKey(const CPubKey& vchPubKey) - { - nWalletDBUpdated++; - return Write(std::string("defaultkey"), vchPubKey); - } - - bool ReadPool(int64 nPool, CKeyPool& keypool) - { - return Read(std::make_pair(std::string("pool"), nPool), keypool); - } - - bool WritePool(int64 nPool, const CKeyPool& keypool) - { - nWalletDBUpdated++; - return Write(std::make_pair(std::string("pool"), nPool), keypool); - } - - bool ErasePool(int64 nPool) - { - nWalletDBUpdated++; - return Erase(std::make_pair(std::string("pool"), nPool)); - } - - // Settings are no longer stored in wallet.dat; these are - // used only for backwards compatibility: - template - bool ReadSetting(const std::string& strKey, T& value) - { - return Read(std::make_pair(std::string("setting"), strKey), value); - } - template - bool WriteSetting(const std::string& strKey, const T& value) - { - nWalletDBUpdated++; - return Write(std::make_pair(std::string("setting"), strKey), value); - } - bool EraseSetting(const std::string& strKey) - { - nWalletDBUpdated++; - return Erase(std::make_pair(std::string("setting"), strKey)); - } - - bool WriteMinVersion(int nVersion) - { - return Write(std::string("minversion"), nVersion); - } + bool WriteMinVersion(int nVersion); bool ReadAccount(const std::string& strAccount, CAccount& account); bool WriteAccount(const std::string& strAccount, const CAccount& account); + + /// Write destination data key,value tuple to database + bool WriteDestData(const std::string &address, const std::string &key, const std::string &value); + /// Erase destination data tuple from wallet database + bool EraseDestData(const std::string &address, const std::string &key); private: - bool WriteAccountingEntry(const uint64 nAccEntryNum, const CAccountingEntry& acentry); + bool WriteAccountingEntry(const uint64_t nAccEntryNum, const CAccountingEntry& acentry); public: bool WriteAccountingEntry(const CAccountingEntry& acentry); - int64 GetAccountCreditDebit(const std::string& strAccount); + int64_t GetAccountCreditDebit(const std::string& strAccount); void ListAccountCreditDebit(const std::string& strAccount, std::list& acentries); DBErrors ReorderTransactions(CWallet*); DBErrors LoadWallet(CWallet* pwallet); + DBErrors FindWalletTx(CWallet* pwallet, std::vector& vTxHash); + DBErrors ZapWalletTx(CWallet* pwallet); static bool Recover(CDBEnv& dbenv, std::string filename, bool fOnlyKeys); static bool Recover(CDBEnv& dbenv, std::string filename); };